Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/moses-smt/mosesdecoder.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbhaddow <bhaddow@staffmail.ed.ac.uk>2011-08-22 17:52:02 +0400
committerbhaddow <bhaddow@staffmail.ed.ac.uk>2011-08-22 17:52:02 +0400
commit1f3c11b441653ff205e2407caddcd36ab369b2c3 (patch)
treeb223d70b650ac939a9dee78308ce374c3ae57cd4
parent898d67af8242284706bde1c232917e6898ebbdfd (diff)
parent96417949c2f3d85b535e81c1d1358752b93c00be (diff)
Merge branch 'master' into miramerge
Passes all regression except for the score tests, as I still have to merge in the missing files for these tests. Conflicts: .gitignore Makefile.am configure.in moses-chart/moses-chart.xcodeproj/project.pbxproj moses/src/ChartHypothesis.cpp moses/src/ChartTranslationOptionCollection.cpp moses/src/ChartTrellisPath.cpp moses/src/DotChart.cpp moses/src/LMList.h moses/src/LanguageModel.cpp moses/src/LanguageModel.h moses/src/LanguageModelFactory.cpp moses/src/LanguageModelRemote.h moses/src/LexicalReordering.h moses/src/Makefile.am moses/src/Manager.cpp moses/src/Parameter.cpp moses/src/RuleCubeQueue.h moses/src/ScoreIndexManager.cpp moses/src/StaticData.cpp moses/src/StaticData.h moses/src/TargetPhrase.cpp moses/src/TargetPhrase.h moses/src/TranslationOptionCollection.cpp
-rw-r--r--.gitignore14
-rw-r--r--BUILD-INSTRUCTIONS.txt11
-rw-r--r--CreateOnDisk/CreateOnDisk.vcproj199
-rw-r--r--CreateOnDisk/CreateOnDisk.vcxproj106
-rw-r--r--CreateOnDisk/CreateOnDisk.xcodeproj/project.pbxproj19
-rw-r--r--CreateOnDisk/src/Main.cpp2
-rw-r--r--Makefile.am2
-rw-r--r--OnDiskPt/OnDiskPt.vcproj231
-rw-r--r--OnDiskPt/OnDiskPt.vcxproj94
-rw-r--r--OnDiskPt/src/OnDiskWrapper.cpp2
-rw-r--r--OnDiskPt/src/TargetPhrase.cpp6
-rw-r--r--OnDiskPt/src/TargetPhraseCollection.cpp4
-rw-r--r--OnDiskPt/src/Word.h4
-rw-r--r--config.h.in12
-rw-r--r--configure.in78
-rw-r--r--kenlm/Makefile.am8
-rw-r--r--kenlm/README9
-rwxr-xr-xkenlm/clean.sh2
-rwxr-xr-xkenlm/compile.sh14
-rw-r--r--kenlm/kenlm.xcodeproj/project.pbxproj20
-rw-r--r--kenlm/lm/bhiksha.cc93
-rw-r--r--kenlm/lm/bhiksha.hh108
-rw-r--r--kenlm/lm/binary_format.cc65
-rw-r--r--kenlm/lm/binary_format.hh34
-rw-r--r--kenlm/lm/blank.hh4
-rw-r--r--kenlm/lm/build_binary.cc134
-rw-r--r--kenlm/lm/config.cc7
-rw-r--r--kenlm/lm/config.hh21
-rw-r--r--kenlm/lm/lm_exception.cc4
-rw-r--r--kenlm/lm/lm_exception.hh4
-rw-r--r--kenlm/lm/model.cc98
-rw-r--r--kenlm/lm/model.hh60
-rw-r--r--kenlm/lm/model_test.cc82
-rw-r--r--kenlm/lm/ngram_query.cc9
-rw-r--r--kenlm/lm/quantize.cc85
-rw-r--r--kenlm/lm/quantize.hh207
-rw-r--r--kenlm/lm/read_arpa.cc25
-rw-r--r--kenlm/lm/read_arpa.hh33
-rw-r--r--kenlm/lm/search_hashed.cc49
-rw-r--r--kenlm/lm/search_hashed.hh125
-rw-r--r--kenlm/lm/search_trie.cc176
-rw-r--r--kenlm/lm/search_trie.hh134
-rw-r--r--kenlm/lm/sri.cc18
-rw-r--r--kenlm/lm/test_nounk.arpa120
-rw-r--r--kenlm/lm/trie.cc146
-rw-r--r--kenlm/lm/trie.hh47
-rw-r--r--kenlm/lm/virtual_interface.cc2
-rw-r--r--kenlm/lm/virtual_interface.hh26
-rw-r--r--kenlm/lm/vocab.cc48
-rw-r--r--kenlm/lm/vocab.hh49
-rwxr-xr-xkenlm/test.sh8
-rw-r--r--kenlm/util/bit_packing.cc4
-rw-r--r--kenlm/util/bit_packing.hh57
-rw-r--r--kenlm/util/bit_packing_test.cc25
-rw-r--r--kenlm/util/exception.cc42
-rw-r--r--kenlm/util/exception.hh92
-rw-r--r--kenlm/util/file_piece.cc49
-rw-r--r--kenlm/util/file_piece.hh34
-rw-r--r--kenlm/util/mmap.cc5
-rw-r--r--kenlm/util/probing_hash_table.hh2
-rw-r--r--kenlm/util/sorted_uniform.hh127
-rw-r--r--kenlm/util/string_piece.hh20
-rw-r--r--mert/Data.cpp106
-rw-r--r--mert/Data.h3
-rw-r--r--mert/Makefile.am41
-rw-r--r--mert/Optimizer.cpp67
-rw-r--r--mert/Optimizer.h30
-rw-r--r--mert/Point.cpp29
-rw-r--r--mert/Point.h10
-rw-r--r--mert/ScorerFactory.h4
-rw-r--r--mert/TERsrc/alignmentStruct.cpp115
-rw-r--r--mert/TERsrc/alignmentStruct.h46
-rw-r--r--mert/TERsrc/bestShiftStruct.h50
-rw-r--r--mert/TERsrc/documentStructure.cpp181
-rw-r--r--mert/TERsrc/documentStructure.h60
-rw-r--r--mert/TERsrc/hashMap.cpp153
-rw-r--r--mert/TERsrc/hashMap.h44
-rw-r--r--mert/TERsrc/hashMapInfos.cpp162
-rw-r--r--mert/TERsrc/hashMapInfos.h44
-rw-r--r--mert/TERsrc/hashMapStringInfos.cpp167
-rw-r--r--mert/TERsrc/hashMapStringInfos.h44
-rw-r--r--mert/TERsrc/infosHasher.cpp35
-rw-r--r--mert/TERsrc/infosHasher.h31
-rw-r--r--mert/TERsrc/multiEvaluation.cpp332
-rw-r--r--mert/TERsrc/multiEvaluation.h44
-rw-r--r--mert/TERsrc/multiTxtDocument.cpp347
-rw-r--r--mert/TERsrc/multiTxtDocument.h81
-rw-r--r--mert/TERsrc/segmentStructure.cpp82
-rw-r--r--mert/TERsrc/segmentStructure.h73
-rwxr-xr-xmert/TERsrc/sgmlDocument.cpp149
-rwxr-xr-xmert/TERsrc/sgmlDocument.h69
-rw-r--r--mert/TERsrc/stringHasher.cpp35
-rw-r--r--mert/TERsrc/stringHasher.h30
-rw-r--r--mert/TERsrc/stringInfosHasher.cpp35
-rw-r--r--mert/TERsrc/stringInfosHasher.h30
-rw-r--r--mert/TERsrc/terAlignment.cpp131
-rw-r--r--mert/TERsrc/terAlignment.h51
-rw-r--r--mert/TERsrc/terEvaluation.h40
-rw-r--r--mert/TERsrc/terShift.cpp100
-rw-r--r--mert/TERsrc/terShift.h45
-rw-r--r--mert/TERsrc/tercalc.cpp1035
-rw-r--r--mert/TERsrc/tercalc.h82
-rw-r--r--mert/TERsrc/tinystr.cpp111
-rw-r--r--mert/TERsrc/tinystr.h337
-rw-r--r--mert/TERsrc/tinyxml.cpp1778
-rw-r--r--mert/TERsrc/tinyxml.h2043
-rw-r--r--mert/TERsrc/tinyxmlerror.cpp52
-rw-r--r--mert/TERsrc/tinyxmlparser.cpp1457
-rw-r--r--mert/TERsrc/tools.cpp543
-rw-r--r--mert/TERsrc/tools.h66
-rw-r--r--mert/TERsrc/xmlStructure.cpp332
-rw-r--r--mert/TERsrc/xmlStructure.h40
-rw-r--r--mert/TODO6
-rw-r--r--mert/TerScorer.cpp107
-rw-r--r--mert/TerScorer.h67
-rw-r--r--mert/example/README2
-rw-r--r--mert/example/init.opt2
-rwxr-xr-xmert/mert.cpp137
-rw-r--r--misc/processLexicalTable.cpp3
-rw-r--r--misc/processLexicalTable.vcproj354
-rw-r--r--misc/processLexicalTable.vcxproj184
-rw-r--r--misc/processPhraseTable.vcproj354
-rw-r--r--misc/processPhraseTable.vcxproj184
-rw-r--r--misc/queryLexicalTable.cpp2
-rw-r--r--moses-chart-cmd/moses-chart-cmd.vcproj228
-rw-r--r--moses-chart-cmd/moses-chart-cmd.vcxproj117
-rw-r--r--moses-chart-cmd/moses-chart-cmd.xcodeproj/project.pbxproj53
-rw-r--r--moses-chart-cmd/src/IOWrapper.cpp63
-rw-r--r--moses-chart-cmd/src/IOWrapper.h18
-rw-r--r--moses-chart-cmd/src/Main.cpp18
-rw-r--r--moses-chart-cmd/src/Makefile.am4
-rw-r--r--moses-chart-cmd/src/TranslationAnalysis.cpp2
-rw-r--r--moses-chart-cmd/src/TranslationAnalysis.h2
-rw-r--r--moses-chart/moses-chart.vcproj262
-rw-r--r--moses-chart/moses-chart.xcodeproj/project.pbxproj300
-rw-r--r--moses-chart/src/ChartHypothesis.h168
-rw-r--r--moses-chart/src/Cube.h102
-rw-r--r--moses-chart/src/Makefile.am20
-rw-r--r--moses-chart/src/QueueEntry.cpp145
-rw-r--r--moses-chart/src/QueueEntry.h133
-rw-r--r--moses-cmd/moses-cmd.vcproj224
-rw-r--r--moses-cmd/moses-cmd.vcxproj119
-rw-r--r--moses-cmd/src/LatticeMBR.cpp8
-rw-r--r--moses-cmd/src/Main.cpp112
-rw-r--r--moses-cmd/src/TranslationAnalysis.cpp9
-rw-r--r--moses.sln122
-rwxr-xr-xmoses/moses.vcproj1166
-rw-r--r--moses/moses.vcxproj408
-rw-r--r--moses/moses.xcodeproj/project.pbxproj285
-rw-r--r--moses/src/AlignmentInfo.cpp42
-rw-r--r--moses/src/AlignmentInfo.h66
-rw-r--r--moses/src/AlignmentInfoCollection.cpp46
-rw-r--r--moses/src/AlignmentInfoCollection.h55
-rw-r--r--moses/src/BilingualDynSuffixArray.cpp909
-rw-r--r--moses/src/BilingualDynSuffixArray.h208
-rw-r--r--moses/src/BleuScoreFeature.cpp4
-rw-r--r--moses/src/BleuScoreFeature.h7
-rw-r--r--moses/src/CellCollection.h1
-rw-r--r--moses/src/ChartCell.cpp (renamed from moses-chart/src/ChartCell.cpp)137
-rw-r--r--moses/src/ChartCell.h (renamed from moses-chart/src/ChartCell.h)53
-rw-r--r--moses/src/ChartCellCollection.cpp (renamed from moses-chart/src/ChartCellCollection.cpp)10
-rw-r--r--moses/src/ChartCellCollection.h (renamed from moses-chart/src/ChartCellCollection.h)23
-rw-r--r--moses/src/ChartCellLabel.h65
-rw-r--r--moses/src/ChartCellLabelSet.h75
-rw-r--r--moses/src/ChartHypothesis.cpp (renamed from moses-chart/src/ChartHypothesis.cpp)321
-rw-r--r--moses/src/ChartHypothesis.h177
-rw-r--r--moses/src/ChartHypothesisCollection.cpp (renamed from moses-chart/src/ChartHypothesisCollection.cpp)80
-rw-r--r--moses/src/ChartHypothesisCollection.h (renamed from moses-chart/src/ChartHypothesisCollection.h)49
-rw-r--r--moses/src/ChartManager.cpp (renamed from moses-chart/src/ChartManager.cpp)76
-rw-r--r--moses/src/ChartManager.h (renamed from moses-chart/src/ChartManager.h)49
-rw-r--r--moses/src/ChartRuleLookupManager.cpp18
-rw-r--r--moses/src/ChartRuleLookupManager.h8
-rw-r--r--moses/src/ChartRuleLookupManagerMemory.cpp217
-rw-r--r--moses/src/ChartRuleLookupManagerMemory.h25
-rw-r--r--moses/src/ChartRuleLookupManagerOnDisk.cpp117
-rw-r--r--moses/src/ChartRuleLookupManagerOnDisk.h5
-rw-r--r--moses/src/ChartTranslationOption.cpp47
-rw-r--r--moses/src/ChartTranslationOption.h86
-rw-r--r--moses/src/ChartTranslationOptionCollection.cpp (renamed from moses-chart/src/ChartTranslationOptionCollection.cpp)121
-rw-r--r--moses/src/ChartTranslationOptionCollection.h (renamed from moses-chart/src/ChartTranslationOptionCollection.h)54
-rw-r--r--moses/src/ChartTranslationOptionList.cpp120
-rw-r--r--moses/src/ChartTranslationOptionList.h11
-rw-r--r--moses/src/ChartTrellisNode.cpp (renamed from moses-chart/src/ChartTrellisNode.cpp)66
-rw-r--r--moses/src/ChartTrellisNode.h (renamed from moses-chart/src/ChartTrellisNode.h)39
-rw-r--r--moses/src/ChartTrellisPath.cpp (renamed from moses-chart/src/ChartTrellisPath.cpp)56
-rw-r--r--moses/src/ChartTrellisPath.h (renamed from moses-chart/src/ChartTrellisPath.h)44
-rw-r--r--moses/src/ChartTrellisPathCollection.cpp (renamed from moses-chart/src/ChartTrellisPathCollection.cpp)12
-rw-r--r--moses/src/ChartTrellisPathCollection.h (renamed from moses-chart/src/ChartTrellisPathCollection.h)20
-rw-r--r--moses/src/ChartTrellisPathList.cpp (renamed from moses-chart/src/ChartTrellisPathList.cpp)8
-rw-r--r--moses/src/ChartTrellisPathList.h (renamed from moses-chart/src/ChartTrellisPathList.h)14
-rw-r--r--moses/src/ConfusionNet.cpp2
-rw-r--r--moses/src/DotChart.cpp39
-rw-r--r--moses/src/DotChart.h118
-rw-r--r--moses/src/DotChartInMemory.cpp (renamed from moses/src/WordConsumed.cpp)37
-rw-r--r--moses/src/DotChartInMemory.h118
-rw-r--r--moses/src/DotChartOnDisk.cpp24
-rw-r--r--moses/src/DotChartOnDisk.h121
-rw-r--r--moses/src/DummyScoreProducers.h8
-rwxr-xr-xmoses/src/DynSAInclude/RandLMCache.h197
-rwxr-xr-xmoses/src/DynSAInclude/RandLMFilter.h410
-rw-r--r--moses/src/DynSAInclude/file.cpp2
-rwxr-xr-xmoses/src/DynSAInclude/hash.h327
-rwxr-xr-xmoses/src/DynSAInclude/onlineRLM.h493
-rwxr-xr-xmoses/src/DynSAInclude/params.cpp223
-rwxr-xr-xmoses/src/DynSAInclude/params.h62
-rwxr-xr-xmoses/src/DynSAInclude/perfectHash.h407
-rwxr-xr-xmoses/src/DynSAInclude/quantizer.h98
-rw-r--r--moses/src/DynSAInclude/types.h4
-rw-r--r--moses/src/DynSAInclude/vocab.cpp6
-rw-r--r--moses/src/DynSAInclude/vocab.h17
-rw-r--r--moses/src/DynSuffixArray.cpp17
-rw-r--r--moses/src/Factor.cpp4
-rw-r--r--moses/src/FeatureFunction.cpp4
-rw-r--r--moses/src/FeatureFunction.h6
-rw-r--r--moses/src/File.h1
-rw-r--r--moses/src/FloydWarshall.cpp2
-rw-r--r--moses/src/Hypothesis.cpp4
-rw-r--r--moses/src/LMList.cpp29
-rw-r--r--moses/src/LMList.h1
-rw-r--r--moses/src/LanguageModel.cpp208
-rw-r--r--moses/src/LanguageModel.h16
-rw-r--r--moses/src/LanguageModelChartState.h89
-rw-r--r--moses/src/LanguageModelDMapLM.cpp135
-rw-r--r--moses/src/LanguageModelDMapLM.h57
-rw-r--r--moses/src/LanguageModelFactory.cpp16
-rw-r--r--moses/src/LanguageModelIRST.cpp11
-rw-r--r--moses/src/LanguageModelIRST.h2
-rw-r--r--moses/src/LanguageModelImplementation.cpp2
-rw-r--r--moses/src/LanguageModelImplementation.h11
-rw-r--r--moses/src/LanguageModelInternal.cpp60
-rw-r--r--moses/src/LanguageModelInternal.h8
-rw-r--r--moses/src/LanguageModelJoint.h9
-rw-r--r--moses/src/LanguageModelKen.cpp35
-rwxr-xr-xmoses/src/LanguageModelORLM.cpp103
-rwxr-xr-xmoses/src/LanguageModelORLM.h49
-rw-r--r--moses/src/LanguageModelParallelBackoff.cpp13
-rw-r--r--moses/src/LanguageModelParallelBackoff.h2
-rw-r--r--moses/src/LanguageModelRandLM.cpp9
-rw-r--r--moses/src/LanguageModelRandLM.h7
-rw-r--r--moses/src/LanguageModelRemote.cpp13
-rw-r--r--moses/src/LanguageModelRemote.h2
-rw-r--r--moses/src/LanguageModelSRI.cpp17
-rw-r--r--moses/src/LanguageModelSRI.h4
-rw-r--r--moses/src/LanguageModelSingleFactor.cpp2
-rw-r--r--moses/src/LanguageModelSingleFactor.h4
-rw-r--r--moses/src/LanguageModelSkip.h18
-rw-r--r--moses/src/LexicalReordering.cpp2
-rw-r--r--moses/src/LexicalReordering.h7
-rw-r--r--moses/src/LexicalReorderingState.cpp2
-rw-r--r--moses/src/LexicalReorderingTable.cpp4
-rw-r--r--moses/src/Makefile.am62
-rw-r--r--moses/src/Manager.cpp86
-rw-r--r--moses/src/NGramCollection.cpp2
-rw-r--r--moses/src/NonTerminal.cpp3
-rw-r--r--moses/src/PDTAimp.h22
-rw-r--r--moses/src/Parameter.cpp41
-rw-r--r--moses/src/Phrase.cpp14
-rw-r--r--moses/src/Phrase.h2
-rw-r--r--moses/src/PhraseBoundaryFeature.cpp2
-rw-r--r--moses/src/PhraseBoundaryFeature.h10
-rw-r--r--moses/src/PhraseDictionary.h4
-rw-r--r--moses/src/PhraseDictionaryDynSuffixArray.cpp7
-rw-r--r--moses/src/PhraseDictionaryDynSuffixArray.h2
-rw-r--r--moses/src/PhraseDictionaryMemory.cpp2
-rw-r--r--moses/src/PhraseDictionaryMemory.h2
-rw-r--r--moses/src/PhraseDictionaryNodeSCFG.cpp16
-rw-r--r--moses/src/PhraseDictionaryNodeSCFG.h1
-rw-r--r--moses/src/PhraseDictionaryOnDisk.cpp10
-rw-r--r--moses/src/PhraseDictionaryOnDisk.h5
-rw-r--r--moses/src/PhraseDictionarySCFG.cpp28
-rw-r--r--moses/src/PhraseDictionarySCFG.h8
-rw-r--r--moses/src/PhraseDictionaryTree.cpp3
-rw-r--r--moses/src/PhraseDictionaryTreeAdaptor.h2
-rw-r--r--moses/src/PrefixTree.h4
-rw-r--r--moses/src/RuleCube.cpp104
-rw-r--r--moses/src/RuleCube.h139
-rw-r--r--moses/src/RuleCubeItem.cpp139
-rw-r--r--moses/src/RuleCubeItem.h148
-rw-r--r--moses/src/RuleCubeQueue.cpp68
-rw-r--r--moses/src/RuleCubeQueue.h (renamed from moses-chart/src/Cube.cpp)59
-rw-r--r--moses/src/Sentence.cpp2
-rw-r--r--moses/src/StaticData.cpp97
-rw-r--r--moses/src/StaticData.h54
-rwxr-xr-xmoses/src/SyntacticLanguageModel.cpp123
-rwxr-xr-xmoses/src/SyntacticLanguageModel.h52
-rwxr-xr-xmoses/src/SyntacticLanguageModelFiles.h95
-rwxr-xr-xmoses/src/SyntacticLanguageModelState.h303
-rw-r--r--moses/src/TargetBigramFeature.h8
-rw-r--r--moses/src/TargetPhrase.cpp39
-rw-r--r--moses/src/TargetPhrase.h30
-rw-r--r--moses/src/TargetPhraseCollection.cpp19
-rw-r--r--moses/src/TargetPhraseCollection.h3
-rw-r--r--moses/src/ThreadPool.cpp14
-rw-r--r--moses/src/TranslationOption.cpp4
-rw-r--r--moses/src/TranslationOptionCollection.cpp7
-rw-r--r--moses/src/TreeInput.cpp6
-rw-r--r--moses/src/TrellisPath.cpp4
-rw-r--r--moses/src/TypeDef.h10
-rw-r--r--moses/src/WordConsumed.h74
-rw-r--r--moses/src/gzfilebuf.h8
-rwxr-xr-xregenerate-makefiles.sh4
-rw-r--r--regression-testing/MosesRegressionTesting.pm2
-rwxr-xr-xregression-testing/compare-results.perl (renamed from regression-testing/compare-results.pl)0
-rwxr-xr-xregression-testing/run-single-test.perl (renamed from regression-testing/run-single-test.pl)2
-rwxr-xr-xregression-testing/run-test-detokenizer.perl308
-rwxr-xr-xregression-testing/run-test-scorer.perl81
-rwxr-xr-xregression-testing/run-test-suite.perl (renamed from regression-testing/run-test-suite.pl)30
-rwxr-xr-xregression-testing/tests/chart.hierarchical-withsrilm/filter-stderr.pl22
-rwxr-xr-xregression-testing/tests/chart.hierarchical-withsrilm/filter-stdout.pl7
-rw-r--r--regression-testing/tests/chart.hierarchical-withsrilm/moses.ini69
-rw-r--r--regression-testing/tests/chart.hierarchical-withsrilm/to-translate.txt5
-rw-r--r--regression-testing/tests/chart.hierarchical-withsrilm/truth/results.txt15
-rw-r--r--regression-testing/tests/chart.hierarchical.ondisk/moses.ini5
-rw-r--r--regression-testing/tests/chart.hierarchical.ondisk/truth/results.txt26
-rw-r--r--regression-testing/tests/chart.hierarchical/moses.ini5
-rw-r--r--regression-testing/tests/chart.hierarchical/truth/results.txt28
-rw-r--r--regression-testing/tests/chart.show-weights.target-syntax/moses.ini5
-rw-r--r--regression-testing/tests/chart.target-syntax.ondisk/moses.ini5
-rw-r--r--regression-testing/tests/chart.target-syntax.ondisk/truth/results.txt26
-rw-r--r--regression-testing/tests/chart.target-syntax/moses.ini5
-rw-r--r--regression-testing/tests/chart.target-syntax/truth/results.txt28
-rwxr-xr-xregression-testing/tests/phrase.basic-surface-only-withirstlm-binlm/filter-stderr.pl22
-rwxr-xr-xregression-testing/tests/phrase.basic-surface-only-withirstlm-binlm/filter-stdout.pl7
-rw-r--r--regression-testing/tests/phrase.basic-surface-only-withirstlm-binlm/moses.ini49
-rw-r--r--regression-testing/tests/phrase.basic-surface-only-withirstlm-binlm/to-translate.txt5
-rw-r--r--regression-testing/tests/phrase.basic-surface-only-withirstlm-binlm/truth/results.txt14
-rwxr-xr-xregression-testing/tests/phrase.basic-surface-only-withirstlm/filter-stderr.pl22
-rwxr-xr-xregression-testing/tests/phrase.basic-surface-only-withirstlm/filter-stdout.pl7
-rw-r--r--regression-testing/tests/phrase.basic-surface-only-withirstlm/moses.ini49
-rw-r--r--regression-testing/tests/phrase.basic-surface-only-withirstlm/to-translate.txt5
-rw-r--r--regression-testing/tests/phrase.basic-surface-only-withirstlm/truth/results.txt14
-rw-r--r--regression-testing/tests/phrase.confusionNet-multi-factor/moses.ini3
-rw-r--r--regression-testing/tests/phrase.ptable-filtering/moses.ini7
-rw-r--r--regression-testing/tests/score.hierarchical-inv/truth/results.txt9603
-rw-r--r--regression-testing/tests/score.hierarchical/truth/results.txt10000
-rw-r--r--regression-testing/tests/score.phrase-based-inv/args.txt1
-rwxr-xr-xregression-testing/tests/score.phrase-based-inv/run-test-scorer.perl65
-rw-r--r--regression-testing/tests/score.phrase-based-inv/truth/results.txt913
-rw-r--r--regression-testing/tests/score.phrase-based-with-alignment-inv/args.txt1
-rwxr-xr-xregression-testing/tests/score.phrase-based-with-alignment-inv/run-test-scorer.perl65
-rw-r--r--regression-testing/tests/score.phrase-based-with-alignment-inv/truth/results.txt913
-rw-r--r--regression-testing/tests/score.phrase-based-with-alignment/truth/results.txt1739
-rw-r--r--regression-testing/tests/score.phrase-based/args.txt1
-rw-r--r--regression-testing/tests/score.phrase-based/truth/results.txt1739
-rw-r--r--scripts/Makefile16
-rwxr-xr-xscripts/analysis/weight-scan-summarize.sh75
-rwxr-xr-xscripts/analysis/weight-scan.pl259
-rw-r--r--scripts/ems/biconcor/Alignment.h16
-rw-r--r--scripts/ems/biconcor/Makefile4
-rw-r--r--scripts/ems/biconcor/Mismatch.cpp246
-rw-r--r--scripts/ems/biconcor/Mismatch.h70
-rw-r--r--scripts/ems/biconcor/PhrasePair.cpp73
-rw-r--r--scripts/ems/biconcor/PhrasePairCollection.cpp101
-rw-r--r--scripts/ems/biconcor/PhrasePairCollection.h2
-rw-r--r--scripts/ems/biconcor/TargetCorpus.cpp3
-rw-r--r--scripts/ems/biconcor/base64.cpp123
-rw-r--r--scripts/ems/biconcor/base64.h4
-rw-r--r--scripts/ems/biconcor/biconcor.cpp7
-rw-r--r--scripts/ems/example/config.basic53
-rw-r--r--scripts/ems/example/config.factored47
-rw-r--r--scripts/ems/example/config.hierarchical47
-rw-r--r--scripts/ems/example/config.syntax47
-rw-r--r--scripts/ems/example/config.toy47
-rw-r--r--scripts/ems/experiment.meta44
-rwxr-xr-xscripts/ems/experiment.perl170
-rwxr-xr-xscripts/ems/support/analysis.perl33
-rwxr-xr-xscripts/ems/support/report-experiment-scores.perl2
-rw-r--r--scripts/ems/web/analysis.php788
-rw-r--r--scripts/ems/web/analysis_diff.php377
-rw-r--r--scripts/ems/web/bilingual-concordance.css50
-rw-r--r--scripts/ems/web/close.gifbin0 -> 117 bytes
-rw-r--r--scripts/ems/web/diff.php29
-rw-r--r--scripts/ems/web/general.css5
-rw-r--r--scripts/ems/web/index.php10
-rw-r--r--scripts/ems/web/lib.php142
-rw-r--r--scripts/ems/web/overview.php15
-rw-r--r--scripts/ems/web/spinner.gifbin0 -> 7358 bytes
-rwxr-xr-xscripts/generic/extract-parallel.perl147
-rwxr-xr-xscripts/generic/giza-parallel.perl124
-rwxr-xr-xscripts/generic/moses-parallel.pl28
-rwxr-xr-xscripts/tokenizer/detokenizer.perl95
-rwxr-xr-xscripts/training/absolutize_moses_model.pl37
-rwxr-xr-xscripts/training/clone_moses_model.pl41
-rw-r--r--scripts/training/eppex/ISS.h236
-rw-r--r--scripts/training/eppex/IndexedPhrasesPair.h316
-rw-r--r--scripts/training/eppex/LossyCounter.h388
-rw-r--r--scripts/training/eppex/Makefile.am28
-rw-r--r--scripts/training/eppex/Makefile.in762
-rw-r--r--scripts/training/eppex/SafeGetline.h38
-rw-r--r--scripts/training/eppex/aclocal.m4952
-rw-r--r--scripts/training/eppex/config.h.in76
-rwxr-xr-xscripts/training/eppex/configure6342
-rw-r--r--scripts/training/eppex/configure.ac33
-rw-r--r--scripts/training/eppex/counter.cpp81
-rwxr-xr-xscripts/training/eppex/depcomp530
-rw-r--r--scripts/training/eppex/eppex.cpp217
-rwxr-xr-xscripts/training/eppex/install-sh323
-rw-r--r--scripts/training/eppex/m4/ax_boost_base.m4223
-rwxr-xr-xscripts/training/eppex/missing360
-rw-r--r--scripts/training/eppex/phrase-extract.cpp805
-rw-r--r--scripts/training/eppex/phrase-extract.h133
-rw-r--r--scripts/training/eppex/shared.cpp194
-rw-r--r--scripts/training/eppex/shared.h22
-rw-r--r--scripts/training/eppex/typedefs.h24
-rwxr-xr-xscripts/training/filter-model-given-input.pl10
-rwxr-xr-xscripts/training/filter-rule-table.py50
-rw-r--r--scripts/training/mbr/mbr.cpp1
-rwxr-xr-xscripts/training/mert-moses.pl827
-rw-r--r--scripts/training/phrase-extract/Makefile16
-rw-r--r--scripts/training/phrase-extract/PhraseAlignment.cpp33
-rw-r--r--scripts/training/phrase-extract/PhraseAlignment.h6
-rw-r--r--scripts/training/phrase-extract/consolidate-direct.cpp38
-rw-r--r--scripts/training/phrase-extract/consolidate-direct.vcproj207
-rw-r--r--scripts/training/phrase-extract/consolidate-direct.vcxproj98
-rw-r--r--scripts/training/phrase-extract/consolidate-reverse.cpp245
-rw-r--r--scripts/training/phrase-extract/consolidate.cpp39
-rw-r--r--scripts/training/phrase-extract/consolidate.vcproj197
-rw-r--r--scripts/training/phrase-extract/consolidate.vcxproj100
-rw-r--r--scripts/training/phrase-extract/extract-lex.cpp209
-rw-r--r--scripts/training/phrase-extract/extract-lex.h117
-rw-r--r--scripts/training/phrase-extract/extract-lex.vcxproj85
-rw-r--r--scripts/training/phrase-extract/extract-rules.cpp58
-rw-r--r--scripts/training/phrase-extract/extract-rules.vcproj245
-rw-r--r--scripts/training/phrase-extract/extract-rules.vcxproj106
-rw-r--r--scripts/training/phrase-extract/extract.vcproj212
-rw-r--r--scripts/training/phrase-extract/extract.vcxproj100
-rw-r--r--scripts/training/phrase-extract/extract.xcodeproj/project.pbxproj6
-rw-r--r--scripts/training/phrase-extract/phrase-extract.sln22
-rw-r--r--scripts/training/phrase-extract/score.cpp121
-rw-r--r--scripts/training/phrase-extract/score.h49
-rw-r--r--scripts/training/phrase-extract/score.vcproj230
-rw-r--r--scripts/training/phrase-extract/score.vcxproj106
-rwxr-xr-xscripts/training/train-model.perl56
-rwxr-xr-xserver/client.perl5
-rw-r--r--server/mosesserver.cpp82
-rw-r--r--sigtest-filter/Makefile2
-rw-r--r--sigtest-filter/filter-pt.cpp1
-rw-r--r--synlm/hhmm/LICENSE695
-rw-r--r--synlm/hhmm/rvtl/include/nl-archetypeset.h180
-rw-r--r--synlm/hhmm/rvtl/include/nl-array.h163
-rw-r--r--synlm/hhmm/rvtl/include/nl-beam.h164
-rw-r--r--synlm/hhmm/rvtl/include/nl-const.h125
-rw-r--r--synlm/hhmm/rvtl/include/nl-cpt.h1332
-rw-r--r--synlm/hhmm/rvtl/include/nl-crf.h359
-rw-r--r--synlm/hhmm/rvtl/include/nl-denot.h500
-rw-r--r--synlm/hhmm/rvtl/include/nl-dtree-cont.h479
-rw-r--r--synlm/hhmm/rvtl/include/nl-dtree.h530
-rw-r--r--synlm/hhmm/rvtl/include/nl-fixedmatrix.h242
-rw-r--r--synlm/hhmm/rvtl/include/nl-gauss.h287
-rw-r--r--synlm/hhmm/rvtl/include/nl-hash.h105
-rw-r--r--synlm/hhmm/rvtl/include/nl-heap.h181
-rw-r--r--synlm/hhmm/rvtl/include/nl-hmm.h1007
-rw-r--r--synlm/hhmm/rvtl/include/nl-hmm2.h911
-rw-r--r--synlm/hhmm/rvtl/include/nl-hmmloop.h397
-rw-r--r--synlm/hhmm/rvtl/include/nl-iomacros.h63
-rw-r--r--synlm/hhmm/rvtl/include/nl-linsep.h301
-rw-r--r--synlm/hhmm/rvtl/include/nl-list.h481
-rw-r--r--synlm/hhmm/rvtl/include/nl-matrix.h177
-rw-r--r--synlm/hhmm/rvtl/include/nl-mixture.h268
-rw-r--r--synlm/hhmm/rvtl/include/nl-modelfile.h126
-rw-r--r--synlm/hhmm/rvtl/include/nl-oblidtree.h239
-rw-r--r--synlm/hhmm/rvtl/include/nl-prob.h136
-rw-r--r--synlm/hhmm/rvtl/include/nl-probmodel.h422
-rw-r--r--synlm/hhmm/rvtl/include/nl-racpt.h332
-rw-r--r--synlm/hhmm/rvtl/include/nl-randvar.h593
-rw-r--r--synlm/hhmm/rvtl/include/nl-refrv.h74
-rw-r--r--synlm/hhmm/rvtl/include/nl-safeids.h503
-rw-r--r--synlm/hhmm/rvtl/include/nl-stream.h240
-rw-r--r--synlm/hhmm/rvtl/include/nl-string.h213
-rw-r--r--synlm/hhmm/rvtl/include/nl-stringindex.h61
-rw-r--r--synlm/hhmm/rvtl/include/nl-tetrahex.h56
-rw-r--r--synlm/hhmm/rvtl/include/nl-timer.h52
-rw-r--r--synlm/hhmm/rvtl/include/nl-tree.h43
-rw-r--r--synlm/hhmm/wsjparse/include/HHMMLangModel-gf.h405
-rw-r--r--synlm/hhmm/wsjparse/include/TextObsModel.h173
-rw-r--r--synlm/hhmm/wsjparse/include/TextObsVars.h110
476 files changed, 77447 insertions, 9302 deletions
diff --git a/.gitignore b/.gitignore
index c36d75680..0b9d41416 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,9 @@
.deps
*.orig
*.la
+*.Po
+*~
+CreateOnDisk/src/CreateOnDiskPt
Makefile
Makefile.in
aclocal.m4
@@ -11,6 +14,11 @@ config.h
config.log
config.status
configure
+kenlm/.deps/
+kenlm/.libs/
+kenlm/build_binary
+kenlm/query
+libtool
mert/.deps/
kenlm/build_binary
mert/Makefile
@@ -24,11 +32,17 @@ misc/processLexicalTable
misc/processPhraseTable
misc/queryLexicalTable
mira/mira
+misc/queryPhraseTable
+moses-chart/src/.deps/
+moses-chart-cmd/src/moses_chart
moses-cmd/src/.deps/
moses-cmd/src/Makefile
moses-cmd/src/Makefile.in
+moses-cmd/src/checkplf
+moses-cmd/src/lmbrgrid
moses-cmd/src/moses
moses/src/.deps/
+moses/src/.libs/
moses/src/Makefile
moses/src/Makefile.in
scripts/training/cmert-0.5/mert
diff --git a/BUILD-INSTRUCTIONS.txt b/BUILD-INSTRUCTIONS.txt
index c87da00ad..bd0aa281d 100644
--- a/BUILD-INSTRUCTIONS.txt
+++ b/BUILD-INSTRUCTIONS.txt
@@ -76,17 +76,6 @@ If you don't want Ken's LM, ./configure --without-kenlm
ALTERNATIVE WAYS TO BUILD ON UNIX AND OTHER PLATFORMS
-Using Eclipse
--------------
-Tested on 32-bit Linux on x86 machines.
-Please refer to the earlier instruction manual by Hieu Hoang which can be downloaded from
- http://homepages.inf.ed.ac.uk/s0565741/papers/developers-manual.pdf
-Most of the manual is out of date, but the step-by-step instructions, with diagrams, for
-building using Eclipse is still generally correct.
-
-Eclipse 3.2 with SVN and CDT plugins are required. Get them yourself, or download the binaries from
- http://www.statmt.org/moses/sample-data/library/eclipse.tgz
-
Microsoft Windows
-----------------
Tested on 32-bit Windows XP and Vista using Visual Studio 2005.
diff --git a/CreateOnDisk/CreateOnDisk.vcproj b/CreateOnDisk/CreateOnDisk.vcproj
deleted file mode 100644
index 2f27ff89f..000000000
--- a/CreateOnDisk/CreateOnDisk.vcproj
+++ /dev/null
@@ -1,199 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="CreateOnDisk"
- ProjectGUID="{88AE90C9-72D2-42ED-8389-770ACDCD4308}"
- RootNamespace="CreateOnDisk"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="zlib.lib &quot;$(OutDir)\moses.lib&quot; &quot;$(OutDir)\OnDiskPt.lib&quot; $(NOINHERIT)"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="zlib.lib &quot;$(OutDir)\moses.lib&quot; &quot;$(OutDir)\OnDiskPt.lib&quot; $(NOINHERIT)"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\src\Main.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath=".\src\Main.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/CreateOnDisk/CreateOnDisk.vcxproj b/CreateOnDisk/CreateOnDisk.vcxproj
new file mode 100644
index 000000000..545f4efc6
--- /dev/null
+++ b/CreateOnDisk/CreateOnDisk.vcxproj
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{88AE90C9-72D2-42ED-8389-770ACDCD4308}</ProjectGuid>
+ <RootNamespace>CreateOnDisk</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>zlib.lib;$(OutDir)moses.lib;$(OutDir)OnDiskPt.lib</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>zlib.lib;$(OutDir)moses.lib;$(OutDir)OnDiskPt.lib</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="src\Main.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="src\Main.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\moses\moses.vcxproj">
+ <Project>{8122157a-0de5-44ff-8e5b-024ed6ace7af}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ <ProjectReference Include="..\OnDiskPt\OnDiskPt.vcxproj">
+ <Project>{8b07671b-cbaf-4514-affd-ce238cd427e9}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/CreateOnDisk/CreateOnDisk.xcodeproj/project.pbxproj b/CreateOnDisk/CreateOnDisk.xcodeproj/project.pbxproj
index 053a6320a..d86b94fdf 100644
--- a/CreateOnDisk/CreateOnDisk.xcodeproj/project.pbxproj
+++ b/CreateOnDisk/CreateOnDisk.xcodeproj/project.pbxproj
@@ -158,7 +158,14 @@
isa = PBXProject;
buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "CreateOnDisk" */;
compatibilityVersion = "Xcode 3.1";
+ developmentRegion = English;
hasScannedForEncodings = 1;
+ knownRegions = (
+ English,
+ Japanese,
+ French,
+ German,
+ );
mainGroup = 08FB7794FE84155DC02AAC07 /* CreateOnDisk */;
projectDirPath = "";
projectReferences = (
@@ -231,10 +238,10 @@
GCC_OPTIMIZATION_LEVEL = 0;
INSTALL_PATH = /usr/local/bin;
LIBRARY_SEARCH_PATHS = (
- ../irstlm/lib/i386,
+ ../irstlm/lib,
../srilm/lib/macosx,
../randlm/lib,
- ../kenlm/lm,
+ ../kenlm,
);
OTHER_LDFLAGS = (
"-lz",
@@ -259,10 +266,10 @@
GCC_MODEL_TUNING = G5;
INSTALL_PATH = /usr/local/bin;
LIBRARY_SEARCH_PATHS = (
- ../irstlm/lib/i386,
+ ../irstlm/lib,
../srilm/lib/macosx,
../randlm/lib,
- ../kenlm/lm,
+ ../kenlm,
);
OTHER_LDFLAGS = (
"-lz",
@@ -287,6 +294,8 @@
GCC_OPTIMIZATION_LEVEL = 0;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = ../../irstlm/include;
+ LIBRARY_SEARCH_PATHS = "";
ONLY_ACTIVE_ARCH = YES;
PREBINDING = NO;
SDKROOT = macosx10.6;
@@ -300,6 +309,8 @@
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = ../../irstlm/include;
+ LIBRARY_SEARCH_PATHS = "";
ONLY_ACTIVE_ARCH = YES;
PREBINDING = NO;
SDKROOT = macosx10.6;
diff --git a/CreateOnDisk/src/Main.cpp b/CreateOnDisk/src/Main.cpp
index fab147581..74af77f46 100644
--- a/CreateOnDisk/src/Main.cpp
+++ b/CreateOnDisk/src/Main.cpp
@@ -50,6 +50,8 @@ int main (int argc, char * const argv[])
, numScores = Moses::Scan<int>(argv[3])
, tableLimit = Moses::Scan<int>(argv[4]);
TargetPhraseCollection::s_sortScoreInd = Moses::Scan<int>(argv[5]);
+ assert(TargetPhraseCollection::s_sortScoreInd < numScores);
+
const string filePath = argv[6]
,destPath = argv[7];
diff --git a/Makefile.am b/Makefile.am
index 336ebb38e..ed34bb9d7 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -14,4 +14,4 @@ endif
if WITH_UNITTEST
UNITTEST = unittest
endif
-SUBDIRS = kenlm moses/src moses-chart/src OnDiskPt/src moses-cmd/src misc moses-chart-cmd/src CreateOnDisk/src mira $(MERT) $(SERVER) $(UNITTEST)
+SUBDIRS = kenlm moses/src OnDiskPt/src moses-cmd/src misc moses-chart-cmd/src CreateOnDisk/src mira $(MERT) $(SERVER) $(UNITTEST)
diff --git a/OnDiskPt/OnDiskPt.vcproj b/OnDiskPt/OnDiskPt.vcproj
deleted file mode 100644
index 4faf7cc54..000000000
--- a/OnDiskPt/OnDiskPt.vcproj
+++ /dev/null
@@ -1,231 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="OnDiskPt"
- ProjectGUID="{8B07671B-CBAF-4514-AFFD-CE238CD427E9}"
- RootNamespace="OnDiskPt"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="4"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="4"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\src\OnDiskWrapper.cpp"
- >
- </File>
- <File
- RelativePath=".\src\Phrase.cpp"
- >
- </File>
- <File
- RelativePath=".\src\PhraseNode.cpp"
- >
- </File>
- <File
- RelativePath=".\src\SourcePhrase.cpp"
- >
- </File>
- <File
- RelativePath=".\src\TargetPhrase.cpp"
- >
- </File>
- <File
- RelativePath=".\src\TargetPhraseCollection.cpp"
- >
- </File>
- <File
- RelativePath=".\src\Vocab.cpp"
- >
- </File>
- <File
- RelativePath=".\src\Word.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath=".\src\OnDiskWrapper.h"
- >
- </File>
- <File
- RelativePath=".\src\Phrase.h"
- >
- </File>
- <File
- RelativePath=".\src\PhraseNode.h"
- >
- </File>
- <File
- RelativePath=".\src\SourcePhrase.h"
- >
- </File>
- <File
- RelativePath=".\src\TargetPhrase.h"
- >
- </File>
- <File
- RelativePath=".\src\TargetPhraseCollection.h"
- >
- </File>
- <File
- RelativePath=".\src\Vocab.h"
- >
- </File>
- <File
- RelativePath=".\src\Word.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/OnDiskPt/OnDiskPt.vcxproj b/OnDiskPt/OnDiskPt.vcxproj
new file mode 100644
index 000000000..98cbddf9e
--- /dev/null
+++ b/OnDiskPt/OnDiskPt.vcxproj
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{8B07671B-CBAF-4514-AFFD-CE238CD427E9}</ProjectGuid>
+ <RootNamespace>OnDiskPt</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="src\OnDiskWrapper.cpp" />
+ <ClCompile Include="src\Phrase.cpp" />
+ <ClCompile Include="src\PhraseNode.cpp" />
+ <ClCompile Include="src\SourcePhrase.cpp" />
+ <ClCompile Include="src\TargetPhrase.cpp" />
+ <ClCompile Include="src\TargetPhraseCollection.cpp" />
+ <ClCompile Include="src\Vocab.cpp" />
+ <ClCompile Include="src\Word.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="src\OnDiskWrapper.h" />
+ <ClInclude Include="src\Phrase.h" />
+ <ClInclude Include="src\PhraseNode.h" />
+ <ClInclude Include="src\SourcePhrase.h" />
+ <ClInclude Include="src\TargetPhrase.h" />
+ <ClInclude Include="src\TargetPhraseCollection.h" />
+ <ClInclude Include="src\Vocab.h" />
+ <ClInclude Include="src\Word.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/OnDiskPt/src/OnDiskWrapper.cpp b/OnDiskPt/src/OnDiskWrapper.cpp
index 4b59e9207..276f41024 100644
--- a/OnDiskPt/src/OnDiskWrapper.cpp
+++ b/OnDiskPt/src/OnDiskWrapper.cpp
@@ -194,7 +194,7 @@ PhraseNode &OnDiskWrapper::GetRootSourceNode()
return *m_rootSourceNode;
}
-Word *OnDiskWrapper::ConvertFromMoses(Moses::FactorDirection direction
+Word *OnDiskWrapper::ConvertFromMoses(Moses::FactorDirection /* direction */
, const std::vector<Moses::FactorType> &factorsVec
, const Moses::Word &origWord) const
{
diff --git a/OnDiskPt/src/TargetPhrase.cpp b/OnDiskPt/src/TargetPhrase.cpp
index 955b0e992..2b62255e4 100644
--- a/OnDiskPt/src/TargetPhrase.cpp
+++ b/OnDiskPt/src/TargetPhrase.cpp
@@ -191,7 +191,7 @@ size_t TargetPhrase::WriteScoresToMemory(char *mem) const
}
-Moses::TargetPhrase *TargetPhrase::ConvertToMoses(const std::vector<Moses::FactorType> &inputFactors
+Moses::TargetPhrase *TargetPhrase::ConvertToMoses(const std::vector<Moses::FactorType> & /*inputFactors */
, const std::vector<Moses::FactorType> &outputFactors
, const Vocab &vocab
, const Moses::PhraseDictionary &phraseDict
@@ -216,10 +216,10 @@ Moses::TargetPhrase *TargetPhrase::ConvertToMoses(const std::vector<Moses::Facto
ret->SetScoreChart(phraseDict.GetFeature(), m_scores, weightT, lmList, wpProducer);
// alignments
- std::list<std::pair<size_t, size_t> > alignmentInfo;
+ std::set<std::pair<size_t, size_t> > alignmentInfo;
for (size_t ind = 0; ind < m_align.size(); ++ind) {
const std::pair<size_t, size_t> &entry = m_align[ind];
- alignmentInfo.push_back(entry);
+ alignmentInfo.insert(entry);
}
ret->SetAlignmentInfo(alignmentInfo);
diff --git a/OnDiskPt/src/TargetPhraseCollection.cpp b/OnDiskPt/src/TargetPhraseCollection.cpp
index f1c8c97e0..910af9ea9 100644
--- a/OnDiskPt/src/TargetPhraseCollection.cpp
+++ b/OnDiskPt/src/TargetPhraseCollection.cpp
@@ -119,7 +119,7 @@ Moses::TargetPhraseCollection *TargetPhraseCollection::ConvertToMoses(const std:
, const std::vector<float> &weightT
, const Moses::WordPenaltyProducer* wpProducer
, const Moses::LMList &lmList
- , const std::string &filePath
+ , const std::string & /* filePath */
, Vocab &vocab) const
{
Moses::TargetPhraseCollection *ret = new Moses::TargetPhraseCollection();
@@ -144,7 +144,7 @@ Moses::TargetPhraseCollection *TargetPhraseCollection::ConvertToMoses(const std:
ret->Add(mosesPhrase);
}
- ret->Prune(true, phraseDict.GetTableLimit());
+ ret->Sort(true, phraseDict.GetTableLimit());
return ret;
diff --git a/OnDiskPt/src/Word.h b/OnDiskPt/src/Word.h
index bb6a946c4..0c0b55a09 100644
--- a/OnDiskPt/src/Word.h
+++ b/OnDiskPt/src/Word.h
@@ -45,8 +45,8 @@ public:
{}
explicit Word(size_t numFactors, bool isNonTerminal)
- :m_factors(numFactors)
- ,m_isNonTerminal(isNonTerminal)
+ :m_isNonTerminal(isNonTerminal)
+ ,m_factors(numFactors)
{}
Word(const Word &copy);
diff --git a/config.h.in b/config.h.in
index 8b2f3709c..be4b273ec 100644
--- a/config.h.in
+++ b/config.h.in
@@ -18,6 +18,9 @@
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
+/* flag for DMapLM */
+#undef HAVE_DMAPLM
+
/* Define to 1 if you have the <getopt.h> header file. */
#undef HAVE_GETOPT_H
@@ -39,6 +42,12 @@
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
+/* Define to 1 if you have the <nl-cpt.h> header file. */
+#undef HAVE_NL_CPT_H
+
+/* flag for ORLM */
+#undef HAVE_ORLM
+
/* flag for protobuf */
#undef HAVE_PROTOBUF
@@ -60,6 +69,9 @@
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
+/* flag for Syntactic Parser */
+#undef HAVE_SYNLM
+
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
diff --git a/configure.in b/configure.in
index 27b5960d7..355bda155 100644
--- a/configure.in
+++ b/configure.in
@@ -56,6 +56,13 @@ AC_ARG_WITH(srilm-dynamic,
[with_srilm_dynamic=no]
)
+AC_ARG_WITH(srilm-arch,
+ [AC_HELP_STRING([--with-srilm-arch=ARCH], [(optional) architecture for which SRILM was built])],
+ [with_srilm_arch=$withval],
+ [with_srilm_arch=no]
+ )
+
+
AC_ARG_WITH(irstlm,
[AC_HELP_STRING([--with-irstlm=PATH], [(optional) path to IRST's LM toolkit])],
[with_irstlm=$withval],
@@ -73,6 +80,22 @@ AC_ARG_WITH(randlm,
[with_randlm=$withval],
[with_randlm=no]
)
+AC_ARG_WITH(orlm,
+ [AC_HELP_STRING([--with-orlm=PATH], [(optional) path to ORLM])],
+ [with_orlm=$withval],
+ [with_orlm=no]
+ )
+AC_ARG_WITH(dmaplm,
+ [AC_HELP_STRING([--with-dmaplm=PATH], [(optional) path to DMapLM])],
+ [with_dmaplm=$withval],
+ [with_dmaplm=no]
+ )
+
+AC_ARG_WITH(synlm,
+ [AC_HELP_STRING([--with-synlm], [(optional) Include syntactic language model parser; default is no])],
+ [with_synlm=$withval],
+ [with_synlm=no]
+ )
AC_ARG_WITH(notrace,
[AC_HELP_STRING([--notrace], [disable trace])],
@@ -138,6 +161,9 @@ AM_CONDITIONAL([SRI_LM], false)
AM_CONDITIONAL([IRST_LM], false)
AM_CONDITIONAL([KEN_LM], false)
AM_CONDITIONAL([RAND_LM], false)
+AM_CONDITIONAL([ORLM_LM], false)
+AM_CONDITIONAL([DMAP_LM], false)
+AM_CONDITIONAL([SYN_LM], false)
AM_CONDITIONAL([PROTOBUF], false)
AM_CONDITIONAL([am__fastdepCC], false)
AM_CONDITIONAL([WITH_THREADS],false)
@@ -207,7 +233,12 @@ then
# ROOT/lib/i686-m64/liboolm.a
# ROOT/lib/i686-m64/libdstruct.a
# ROOT/lib/i686-m64/libmisc.a
- MY_ARCH=`${with_srilm}/sbin/machine-type`
+ if test "x$with_srilm_arch" != 'xno'
+ then
+ MY_ARCH=${with_srilm_arch}
+ else
+ MY_ARCH=`${with_srilm}/sbin/machine-type`
+ fi
LDFLAGS="$LDFLAGS -L${with_srilm}/lib/${MY_ARCH} -L${with_srilm}/flm/obj/${MY_ARCH}"
LIBS="$LIBS $LIB_SRILM"
FMTLIBS="$FMTLIBS liboolm.a libdstruct.a libmisc.a"
@@ -282,11 +313,40 @@ then
AM_CONDITIONAL([RAND_LM], true)
fi
+if test "x$with_dmaplm" != 'xno'
+then
+ SAVE_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -I${with_dmaplm}/src/DMap"
+
+ AC_CHECK_HEADER(StructLanguageModel.h,
+ [AC_DEFINE([HAVE_DMAPLM], [], [flag for DMapLM])],
+ [AC_MSG_ERROR([Cannot find DMapLM!])])
+
+ LDFLAGS="$LDFLAGS -L${with_dmaplm}/src/DMap"
+ LIBS="$LIBS -lDMap"
+ FMTLIBS="FMTLIBS libdmap.la"
+ AM_CONDITIONAL([DMAP_LM], true)
+fi
+
+if test "x$with_orlm" != 'xno'
+then
+ SAVE_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -I${with_orlm}/"
+
+ AC_CHECK_HEADER(onlineRLM.h,
+#AC_CHECK_HEADER(multiOnlineRLM.h,
+ [AC_DEFINE([HAVE_ORLM], [], [flag for ORLM])],
+ [AC_MSG_ERROR([Cannot find ORLM!])])
+
+ MY_ARCH=`uname -m`
+ AM_CONDITIONAL([ORLM_LM], true)
+fi
if test "x$with_tcmalloc" != 'xno'
then
AC_CHECK_LIB([tcmalloc], [malloc], [], [AC_MSG_ERROR([Cannot find tcmalloc])])
fi
+
if test "x$enable_boost_pool" != 'xno'
then
AC_CHECK_HEADER(boost/pool/object_pool.hpp,
@@ -295,6 +355,20 @@ then
)
fi
+if test "x$with_synlm" != 'xno'
+then
+ SAVE_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -I${PWD}/synlm/hhmm/rvtl/include -I${PWD}/synlm/hhmm/wsjparse/include -lm"
+
+ AC_CHECK_HEADERS(nl-cpt.h,
+ [AC_DEFINE([HAVE_SYNLM], [], [flag for Syntactic Parser])],
+ [AC_MSG_ERROR([Cannot find SYNLM in ${PWD}/synlm/hhmm])])
+
+ AM_CONDITIONAL([SYN_LM], true)
+
+fi
+
+
AM_CONDITIONAL([WITH_MERT],false)
AC_CHECK_HEADERS([getopt.h],
[AM_CONDITIONAL([WITH_MERT],true)],
@@ -316,6 +390,6 @@ fi
LIBS="$LIBS -lz"
-AC_CONFIG_FILES(Makefile OnDiskPt/src/Makefile moses/src/Makefile moses-chart/src/Makefile moses-cmd/src/Makefile moses-chart-cmd/src/Makefile misc/Makefile mert/Makefile server/Makefile CreateOnDisk/src/Makefile mira/Makefile kenlm/Makefile unittest/Makefile)
+AC_CONFIG_FILES(Makefile OnDiskPt/src/Makefile moses/src/Makefile moses-cmd/src/Makefile moses-chart-cmd/src/Makefile misc/Makefile mert/Makefile server/Makefile CreateOnDisk/src/Makefile mira/Makefile kenlm/Makefile unittest/Makefile)
AC_OUTPUT()
diff --git a/kenlm/Makefile.am b/kenlm/Makefile.am
index cd329e3fa..2d9d71003 100644
--- a/kenlm/Makefile.am
+++ b/kenlm/Makefile.am
@@ -3,14 +3,16 @@ bin_PROGRAMS = query build_binary
AM_CPPFLAGS = -W -Wall -ffor-scope -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES $(BOOST_CPPFLAGS)
libkenlm_la_SOURCES = \
- lm/lm_exception.cc \
+ lm/bhiksha.cc \
+ lm/binary_format.cc \
lm/config.cc \
+ lm/lm_exception.cc \
lm/model.cc \
lm/search_hashed.cc \
lm/search_trie.cc \
- lm/trie.cc \
- lm/binary_format.cc \
+ lm/quantize.cc \
lm/read_arpa.cc \
+ lm/trie.cc \
lm/virtual_interface.cc \
lm/vocab.cc \
util/scoped.cc \
diff --git a/kenlm/README b/kenlm/README
index bb7dc06e2..d9307ed05 100644
--- a/kenlm/README
+++ b/kenlm/README
@@ -1,7 +1,12 @@
Language model inference code by Kenneth Heafield <infer at kheafield.com>
-The official website is http://kheafield.com/code/mt/infer.html . If you're a decoder developer, please download the latest version from there instead of copying from Moses.
+The official website is http://kheafield.com/code/kenlm/ . If you're a decoder developer, please download the latest version from there instead of copying from Moses.
-This documentation is directed at decoder developers.
+While the primary means of building kenlm for use in Moses is the Moses build system, you can also compile independently using:
+./compile.sh to compile the code
+./test.sh to compile and run tests; requires Boost
+./clean.sh to clean
+
+The rest of the documentation is directed at decoder developers.
Binary format via mmap is supported. Run ./build_binary to make one then pass the binary file name instead.
diff --git a/kenlm/clean.sh b/kenlm/clean.sh
new file mode 100755
index 000000000..e8c6dbde8
--- /dev/null
+++ b/kenlm/clean.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+rm -rf */*.o query build_binary */*_test lm/test.binary* lm/test.arpa?????? util/file_piece.cc.gz
diff --git a/kenlm/compile.sh b/kenlm/compile.sh
new file mode 100755
index 000000000..0786df130
--- /dev/null
+++ b/kenlm/compile.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+#This is just an example compilation. You should integrate these files into your build system. I can provide boost jam if you want.
+#If your code uses ICU, edit util/string_piece.hh and uncomment #define USE_ICU
+#I use zlib by default. If you don't want to depend on zlib, remove #define USE_ZLIB from util/file_piece.hh
+
+#don't need to use if compiling with moses Makefiles already
+
+set -e
+
+for i in util/{bit_packing,ersatz_progress,exception,file_piece,murmur_hash,scoped,mmap} lm/{bhiksha,binary_format,config,lm_exception,model,quantize,read_arpa,search_hashed,search_trie,trie,virtual_interface,vocab}; do
+ g++ -I. -O3 -DNDEBUG $CXXFLAGS -c $i.cc -o $i.o
+done
+g++ -I. -O3 -DNDEBUG $CXXFLAGS lm/build_binary.cc {lm,util}/*.o -lz -o build_binary
+g++ -I. -O3 -DNDEBUG $CXXFLAGS lm/ngram_query.cc {lm,util}/*.o -lz -o query
diff --git a/kenlm/kenlm.xcodeproj/project.pbxproj b/kenlm/kenlm.xcodeproj/project.pbxproj
index acbb6c3f6..ee9899890 100644
--- a/kenlm/kenlm.xcodeproj/project.pbxproj
+++ b/kenlm/kenlm.xcodeproj/project.pbxproj
@@ -11,6 +11,9 @@
1E2B85C512555DB1000770D6 /* lm_exception.hh in Headers */ = {isa = PBXBuildFile; fileRef = 1E2B85C212555DB1000770D6 /* lm_exception.hh */; };
1E37EBC712496AB400C1C73A /* virtual_interface.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1E37EBC512496AB400C1C73A /* virtual_interface.cc */; };
1E37EBC812496AB400C1C73A /* virtual_interface.hh in Headers */ = {isa = PBXBuildFile; fileRef = 1E37EBC612496AB400C1C73A /* virtual_interface.hh */; };
+ 1E46B59E13BA5BE10084F898 /* blank.hh in Headers */ = {isa = PBXBuildFile; fileRef = 1E46B59D13BA5BE10084F898 /* blank.hh */; };
+ 1E46B5A213BA5C050084F898 /* quantize.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1E46B5A013BA5C050084F898 /* quantize.cc */; };
+ 1E46B5A313BA5C050084F898 /* quantize.hh in Headers */ = {isa = PBXBuildFile; fileRef = 1E46B5A113BA5C050084F898 /* quantize.hh */; };
1E8A94FE1288BD570022C4EB /* build_binary.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1E8A94F41288BD570022C4EB /* build_binary.cc */; };
1E8A94FF1288BD570022C4EB /* config.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1E8A94F51288BD570022C4EB /* config.cc */; };
1E8A95001288BD570022C4EB /* config.hh in Headers */ = {isa = PBXBuildFile; fileRef = 1E8A94F61288BD570022C4EB /* config.hh */; };
@@ -27,6 +30,8 @@
1E8BF79D1278A443009F10C1 /* trie.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1E8BF7951278A443009F10C1 /* trie.cc */; };
1E8BF79E1278A443009F10C1 /* trie.hh in Headers */ = {isa = PBXBuildFile; fileRef = 1E8BF7961278A443009F10C1 /* trie.hh */; };
1E8BF7D51278A600009F10C1 /* bit_packing.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1E8BF7D41278A600009F10C1 /* bit_packing.cc */; };
+ 1E91441413D065490005055B /* bhiksha.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1E91441213D065490005055B /* bhiksha.cc */; };
+ 1E91441513D065490005055B /* bhiksha.hh in Headers */ = {isa = PBXBuildFile; fileRef = 1E91441313D065490005055B /* bhiksha.hh */; };
1EBB16D7126C158600AE6102 /* ersatz_progress.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1EBB16BF126C158600AE6102 /* ersatz_progress.cc */; };
1EBB16D8126C158600AE6102 /* ersatz_progress.hh in Headers */ = {isa = PBXBuildFile; fileRef = 1EBB16C0126C158600AE6102 /* ersatz_progress.hh */; };
1EBB16D9126C158600AE6102 /* exception.cc in Sources */ = {isa = PBXBuildFile; fileRef = 1EBB16C1126C158600AE6102 /* exception.cc */; };
@@ -68,6 +73,9 @@
1E2B85C212555DB1000770D6 /* lm_exception.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = lm_exception.hh; path = lm/lm_exception.hh; sourceTree = "<group>"; };
1E37EBC512496AB400C1C73A /* virtual_interface.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = virtual_interface.cc; path = lm/virtual_interface.cc; sourceTree = "<group>"; };
1E37EBC612496AB400C1C73A /* virtual_interface.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = virtual_interface.hh; path = lm/virtual_interface.hh; sourceTree = "<group>"; };
+ 1E46B59D13BA5BE10084F898 /* blank.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = blank.hh; path = lm/blank.hh; sourceTree = "<group>"; };
+ 1E46B5A013BA5C050084F898 /* quantize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = quantize.cc; path = lm/quantize.cc; sourceTree = "<group>"; };
+ 1E46B5A113BA5C050084F898 /* quantize.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = quantize.hh; path = lm/quantize.hh; sourceTree = "<group>"; };
1E8A94F41288BD570022C4EB /* build_binary.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = build_binary.cc; path = lm/build_binary.cc; sourceTree = "<group>"; };
1E8A94F51288BD570022C4EB /* config.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = config.cc; path = lm/config.cc; sourceTree = "<group>"; };
1E8A94F61288BD570022C4EB /* config.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = config.hh; path = lm/config.hh; sourceTree = "<group>"; };
@@ -84,6 +92,8 @@
1E8BF7951278A443009F10C1 /* trie.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = trie.cc; path = lm/trie.cc; sourceTree = "<group>"; };
1E8BF7961278A443009F10C1 /* trie.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = trie.hh; path = lm/trie.hh; sourceTree = "<group>"; };
1E8BF7D41278A600009F10C1 /* bit_packing.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bit_packing.cc; path = util/bit_packing.cc; sourceTree = "<group>"; };
+ 1E91441213D065490005055B /* bhiksha.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bhiksha.cc; path = lm/bhiksha.cc; sourceTree = "<group>"; };
+ 1E91441313D065490005055B /* bhiksha.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = bhiksha.hh; path = lm/bhiksha.hh; sourceTree = "<group>"; };
1EBB16BF126C158600AE6102 /* ersatz_progress.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ersatz_progress.cc; path = util/ersatz_progress.cc; sourceTree = "<group>"; };
1EBB16C0126C158600AE6102 /* ersatz_progress.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ersatz_progress.hh; path = util/ersatz_progress.hh; sourceTree = "<group>"; };
1EBB16C1126C158600AE6102 /* exception.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = exception.cc; path = util/exception.cc; sourceTree = "<group>"; };
@@ -146,6 +156,11 @@
08FB7795FE84155DC02AAC07 /* Source */ = {
isa = PBXGroup;
children = (
+ 1E91441213D065490005055B /* bhiksha.cc */,
+ 1E91441313D065490005055B /* bhiksha.hh */,
+ 1E46B5A013BA5C050084F898 /* quantize.cc */,
+ 1E46B5A113BA5C050084F898 /* quantize.hh */,
+ 1E46B59D13BA5BE10084F898 /* blank.hh */,
1E8A94F41288BD570022C4EB /* build_binary.cc */,
1E8A94F51288BD570022C4EB /* config.cc */,
1E8A94F61288BD570022C4EB /* config.hh */,
@@ -254,6 +269,9 @@
1E8A95031288BD570022C4EB /* model.hh in Headers */,
1E8A95051288BD570022C4EB /* search_hashed.hh in Headers */,
1E8A95071288BD570022C4EB /* search_trie.hh in Headers */,
+ 1E46B59E13BA5BE10084F898 /* blank.hh in Headers */,
+ 1E46B5A313BA5C050084F898 /* quantize.hh in Headers */,
+ 1E91441513D065490005055B /* bhiksha.hh in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -333,6 +351,8 @@
1E8A95021288BD570022C4EB /* model.cc in Sources */,
1E8A95041288BD570022C4EB /* search_hashed.cc in Sources */,
1E8A95061288BD570022C4EB /* search_trie.cc in Sources */,
+ 1E46B5A213BA5C050084F898 /* quantize.cc in Sources */,
+ 1E91441413D065490005055B /* bhiksha.cc in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/kenlm/lm/bhiksha.cc b/kenlm/lm/bhiksha.cc
new file mode 100644
index 000000000..bf86fd4be
--- /dev/null
+++ b/kenlm/lm/bhiksha.cc
@@ -0,0 +1,93 @@
+#include "lm/bhiksha.hh"
+#include "lm/config.hh"
+
+#include <limits>
+
+namespace lm {
+namespace ngram {
+namespace trie {
+
+DontBhiksha::DontBhiksha(const void * /*base*/, uint64_t /*max_offset*/, uint64_t max_next, const Config &/*config*/) :
+ next_(util::BitsMask::ByMax(max_next)) {}
+
+const uint8_t kArrayBhikshaVersion = 0;
+
+void ArrayBhiksha::UpdateConfigFromBinary(int fd, Config &config) {
+ uint8_t version;
+ uint8_t configured_bits;
+ if (read(fd, &version, 1) != 1 || read(fd, &configured_bits, 1) != 1) {
+ UTIL_THROW(util::ErrnoException, "Could not read from binary file");
+ }
+ if (version != kArrayBhikshaVersion) UTIL_THROW(FormatLoadException, "This file has sorted array compression version " << (unsigned) version << " but the code expects version " << (unsigned)kArrayBhikshaVersion);
+ config.pointer_bhiksha_bits = configured_bits;
+}
+
+namespace {
+
+// Find argmin_{chopped \in [0, RequiredBits(max_next)]} ChoppedDelta(max_offset)
+uint8_t ChopBits(uint64_t max_offset, uint64_t max_next, const Config &config) {
+ uint8_t required = util::RequiredBits(max_next);
+ uint8_t best_chop = 0;
+ int64_t lowest_change = std::numeric_limits<int64_t>::max();
+ // There are probably faster ways but I don't care because this is only done once per order at construction time.
+ for (uint8_t chop = 0; chop <= std::min(required, config.pointer_bhiksha_bits); ++chop) {
+ int64_t change = (max_next >> (required - chop)) * 64 /* table cost in bits */
+ - max_offset * static_cast<int64_t>(chop); /* savings in bits*/
+ if (change < lowest_change) {
+ lowest_change = change;
+ best_chop = chop;
+ }
+ }
+ return best_chop;
+}
+
+std::size_t ArrayCount(uint64_t max_offset, uint64_t max_next, const Config &config) {
+ uint8_t required = util::RequiredBits(max_next);
+ uint8_t chopping = ChopBits(max_offset, max_next, config);
+ return (max_next >> (required - chopping)) + 1 /* we store 0 too */;
+}
+} // namespace
+
+std::size_t ArrayBhiksha::Size(uint64_t max_offset, uint64_t max_next, const Config &config) {
+ return sizeof(uint64_t) * (1 /* header */ + ArrayCount(max_offset, max_next, config)) + 7 /* 8-byte alignment */;
+}
+
+uint8_t ArrayBhiksha::InlineBits(uint64_t max_offset, uint64_t max_next, const Config &config) {
+ return util::RequiredBits(max_next) - ChopBits(max_offset, max_next, config);
+}
+
+namespace {
+
+void *AlignTo8(void *from) {
+ uint8_t *val = reinterpret_cast<uint8_t*>(from);
+ std::size_t remainder = reinterpret_cast<std::size_t>(val) & 7;
+ if (!remainder) return val;
+ return val + 8 - remainder;
+}
+
+} // namespace
+
+ArrayBhiksha::ArrayBhiksha(void *base, uint64_t max_offset, uint64_t max_next, const Config &config)
+ : next_inline_(util::BitsMask::ByBits(InlineBits(max_offset, max_next, config))),
+ offset_begin_(reinterpret_cast<const uint64_t*>(AlignTo8(base)) + 1 /* 8-byte header */),
+ offset_end_(offset_begin_ + ArrayCount(max_offset, max_next, config)),
+ write_to_(reinterpret_cast<uint64_t*>(AlignTo8(base)) + 1 /* 8-byte header */ + 1 /* first entry is 0 */),
+ original_base_(base) {}
+
+void ArrayBhiksha::FinishedLoading(const Config &config) {
+ // *offset_begin_ = 0 but without a const_cast.
+ *(write_to_ - (write_to_ - offset_begin_)) = 0;
+
+ if (write_to_ != offset_end_) UTIL_THROW(util::Exception, "Did not get all the array entries that were expected.");
+
+ uint8_t *head_write = reinterpret_cast<uint8_t*>(original_base_);
+ *(head_write++) = kArrayBhikshaVersion;
+ *(head_write++) = config.pointer_bhiksha_bits;
+}
+
+void ArrayBhiksha::LoadedBinary() {
+}
+
+} // namespace trie
+} // namespace ngram
+} // namespace lm
diff --git a/kenlm/lm/bhiksha.hh b/kenlm/lm/bhiksha.hh
new file mode 100644
index 000000000..cfb2b053f
--- /dev/null
+++ b/kenlm/lm/bhiksha.hh
@@ -0,0 +1,108 @@
+/* Simple implementation of
+ * @inproceedings{bhikshacompression,
+ * author={Bhiksha Raj and Ed Whittaker},
+ * year={2003},
+ * title={Lossless Compression of Language Model Structure and Word Identifiers},
+ * booktitle={Proceedings of IEEE International Conference on Acoustics, Speech and Signal Processing},
+ * pages={388--391},
+ * }
+ *
+ * Currently only used for next pointers.
+ */
+
+#include <inttypes.h>
+
+#include "lm/binary_format.hh"
+#include "lm/trie.hh"
+#include "util/bit_packing.hh"
+#include "util/sorted_uniform.hh"
+
+namespace lm {
+namespace ngram {
+class Config;
+
+namespace trie {
+
+class DontBhiksha {
+ public:
+ static const ModelType kModelTypeAdd = static_cast<ModelType>(0);
+
+ static void UpdateConfigFromBinary(int /*fd*/, Config &/*config*/) {}
+
+ static std::size_t Size(uint64_t /*max_offset*/, uint64_t /*max_next*/, const Config &/*config*/) { return 0; }
+
+ static uint8_t InlineBits(uint64_t /*max_offset*/, uint64_t max_next, const Config &/*config*/) {
+ return util::RequiredBits(max_next);
+ }
+
+ DontBhiksha(const void *base, uint64_t max_offset, uint64_t max_next, const Config &config);
+
+ void ReadNext(const void *base, uint64_t bit_offset, uint64_t /*index*/, uint8_t total_bits, NodeRange &out) const {
+ out.begin = util::ReadInt57(base, bit_offset, next_.bits, next_.mask);
+ out.end = util::ReadInt57(base, bit_offset + total_bits, next_.bits, next_.mask);
+ //assert(out.end >= out.begin);
+ }
+
+ void WriteNext(void *base, uint64_t bit_offset, uint64_t /*index*/, uint64_t value) {
+ util::WriteInt57(base, bit_offset, next_.bits, value);
+ }
+
+ void FinishedLoading(const Config &/*config*/) {}
+
+ void LoadedBinary() {}
+
+ uint8_t InlineBits() const { return next_.bits; }
+
+ private:
+ util::BitsMask next_;
+};
+
+class ArrayBhiksha {
+ public:
+ static const ModelType kModelTypeAdd = kArrayAdd;
+
+ static void UpdateConfigFromBinary(int fd, Config &config);
+
+ static std::size_t Size(uint64_t max_offset, uint64_t max_next, const Config &config);
+
+ static uint8_t InlineBits(uint64_t max_offset, uint64_t max_next, const Config &config);
+
+ ArrayBhiksha(void *base, uint64_t max_offset, uint64_t max_value, const Config &config);
+
+ void ReadNext(const void *base, uint64_t bit_offset, uint64_t index, uint8_t total_bits, NodeRange &out) const {
+ const uint64_t *begin_it = util::BinaryBelow(util::IdentityAccessor<uint64_t>(), offset_begin_, offset_end_, index);
+ const uint64_t *end_it;
+ for (end_it = begin_it; (end_it < offset_end_) && (*end_it <= index + 1); ++end_it) {}
+ --end_it;
+ out.begin = ((begin_it - offset_begin_) << next_inline_.bits) |
+ util::ReadInt57(base, bit_offset, next_inline_.bits, next_inline_.mask);
+ out.end = ((end_it - offset_begin_) << next_inline_.bits) |
+ util::ReadInt57(base, bit_offset + total_bits, next_inline_.bits, next_inline_.mask);
+ }
+
+ void WriteNext(void *base, uint64_t bit_offset, uint64_t index, uint64_t value) {
+ uint64_t encode = value >> next_inline_.bits;
+ for (; write_to_ <= offset_begin_ + encode; ++write_to_) *write_to_ = index;
+ util::WriteInt57(base, bit_offset, next_inline_.bits, value & next_inline_.mask);
+ }
+
+ void FinishedLoading(const Config &config);
+
+ void LoadedBinary();
+
+ uint8_t InlineBits() const { return next_inline_.bits; }
+
+ private:
+ const util::BitsMask next_inline_;
+
+ const uint64_t *const offset_begin_;
+ const uint64_t *const offset_end_;
+
+ uint64_t *write_to_;
+
+ void *original_base_;
+};
+
+} // namespace trie
+} // namespace ngram
+} // namespace lm
diff --git a/kenlm/lm/binary_format.cc b/kenlm/lm/binary_format.cc
index 2a6aff344..e02e621a1 100644
--- a/kenlm/lm/binary_format.cc
+++ b/kenlm/lm/binary_format.cc
@@ -9,6 +9,7 @@
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
+#include <string.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
@@ -19,6 +20,8 @@ namespace ngram {
namespace {
const char kMagicBeforeVersion[] = "mmap lm http://kheafield.com/code format version";
const char kMagicBytes[] = "mmap lm http://kheafield.com/code format version 4\n\0";
+// This must be shorter than kMagicBytes and indicates an incomplete binary file (i.e. build failed).
+const char kMagicIncomplete[] = "mmap lm http://kheafield.com/code incomplete\n";
const long int kMagicVersion = 4;
// Test values.
@@ -37,7 +40,7 @@ struct Sanity {
}
};
-const char *kModelNames[3] = {"hashed n-grams with probing", "hashed n-grams with sorted uniform find", "bit packed trie"};
+const char *kModelNames[6] = {"hashed n-grams with probing", "hashed n-grams with sorted uniform find", "trie", "trie with quantization", "trie with array-compressed pointers", "trie with quantization and array-compressed pointers"};
std::size_t Align8(std::size_t in) {
std::size_t off = in % 8;
@@ -77,10 +80,19 @@ void WriteHeader(void *to, const Parameters &params) {
} // namespace
+void SeekOrThrow(int fd, off_t off) {
+ if ((off_t)-1 == lseek(fd, off, SEEK_SET)) UTIL_THROW(util::ErrnoException, "Seek failed");
+}
+
+void AdvanceOrThrow(int fd, off_t off) {
+ if ((off_t)-1 == lseek(fd, off, SEEK_CUR)) UTIL_THROW(util::ErrnoException, "Seek failed");
+}
+
uint8_t *SetupJustVocab(const Config &config, uint8_t order, std::size_t memory_size, Backing &backing) {
if (config.write_mmap) {
std::size_t total = TotalHeaderSize(order) + memory_size;
backing.vocab.reset(util::MapZeroedWrite(config.write_mmap, total, backing.file), total, util::scoped_memory::MMAP_ALLOCATED);
+ strncpy(reinterpret_cast<char*>(backing.vocab.get()), kMagicIncomplete, TotalHeaderSize(order));
return reinterpret_cast<uint8_t*>(backing.vocab.get()) + TotalHeaderSize(order);
} else {
backing.vocab.reset(util::MapAnonymous(memory_size), memory_size, util::scoped_memory::MMAP_ALLOCATED);
@@ -88,25 +100,17 @@ uint8_t *SetupJustVocab(const Config &config, uint8_t order, std::size_t memory_
}
}
-uint8_t *GrowForSearch(const Config &config, ModelType model_type, const std::vector<uint64_t> &counts, std::size_t memory_size, Backing &backing) {
+uint8_t *GrowForSearch(const Config &config, std::size_t vocab_pad, std::size_t memory_size, Backing &backing) {
+ std::size_t adjusted_vocab = backing.vocab.size() + vocab_pad;
if (config.write_mmap) {
- // header and vocab share the same mmap. The header is written here because we know the counts.
- Parameters params;
- params.counts = counts;
- params.fixed.order = counts.size();
- params.fixed.probing_multiplier = config.probing_multiplier;
- params.fixed.model_type = model_type;
- params.fixed.has_vocabulary = config.include_vocab;
- WriteHeader(backing.vocab.get(), params);
-
// Grow the file to accomodate the search, using zeros.
- if (-1 == ftruncate(backing.file.get(), backing.vocab.size() + memory_size))
- UTIL_THROW(util::ErrnoException, "ftruncate on " << config.write_mmap << " to " << (backing.vocab.size() + memory_size) << " failed");
+ if (-1 == ftruncate(backing.file.get(), adjusted_vocab + memory_size))
+ UTIL_THROW(util::ErrnoException, "ftruncate on " << config.write_mmap << " to " << (adjusted_vocab + memory_size) << " failed");
// We're skipping over the header and vocab for the search space mmap. mmap likes page aligned offsets, so some arithmetic to round the offset down.
off_t page_size = sysconf(_SC_PAGE_SIZE);
- off_t alignment_cruft = backing.vocab.size() % page_size;
- backing.search.reset(util::MapOrThrow(alignment_cruft + memory_size, true, util::kFileFlags, false, backing.file.get(), backing.vocab.size() - alignment_cruft), alignment_cruft + memory_size, util::scoped_memory::MMAP_ALLOCATED);
+ off_t alignment_cruft = adjusted_vocab % page_size;
+ backing.search.reset(util::MapOrThrow(alignment_cruft + memory_size, true, util::kFileFlags, false, backing.file.get(), adjusted_vocab - alignment_cruft), alignment_cruft + memory_size, util::scoped_memory::MMAP_ALLOCATED);
return reinterpret_cast<uint8_t*>(backing.search.get()) + alignment_cruft;
} else {
@@ -115,6 +119,21 @@ uint8_t *GrowForSearch(const Config &config, ModelType model_type, const std::ve
}
}
+void FinishFile(const Config &config, ModelType model_type, const std::vector<uint64_t> &counts, Backing &backing) {
+ if (config.write_mmap) {
+ if (msync(backing.search.get(), backing.search.size(), MS_SYNC) || msync(backing.vocab.get(), backing.vocab.size(), MS_SYNC))
+ UTIL_THROW(util::ErrnoException, "msync failed for " << config.write_mmap);
+ // header and vocab share the same mmap. The header is written here because we know the counts.
+ Parameters params;
+ params.counts = counts;
+ params.fixed.order = counts.size();
+ params.fixed.probing_multiplier = config.probing_multiplier;
+ params.fixed.model_type = model_type;
+ params.fixed.has_vocabulary = config.include_vocab;
+ WriteHeader(backing.vocab.get(), params);
+ }
+}
+
namespace detail {
bool IsBinaryFormat(int fd) {
@@ -130,20 +149,23 @@ bool IsBinaryFormat(int fd) {
Sanity reference_header = Sanity();
reference_header.SetToReference();
if (!memcmp(memory.get(), &reference_header, sizeof(Sanity))) return true;
+ if (!memcmp(memory.get(), kMagicIncomplete, strlen(kMagicIncomplete))) {
+ UTIL_THROW(FormatLoadException, "This binary file did not finish building");
+ }
if (!memcmp(memory.get(), kMagicBeforeVersion, strlen(kMagicBeforeVersion))) {
char *end_ptr;
const char *begin_version = static_cast<const char*>(memory.get()) + strlen(kMagicBeforeVersion);
long int version = strtol(begin_version, &end_ptr, 10);
if ((end_ptr != begin_version) && version != kMagicVersion) {
- UTIL_THROW(FormatLoadException, "Binary file has version " << version << " but this implementation expects version " << kMagicVersion << " so you'll have to rebuild your binary LM from the ARPA. Sorry.");
+ UTIL_THROW(FormatLoadException, "Binary file has version " << version << " but this implementation expects version " << kMagicVersion << " so you'll have to use the ARPA to rebuild your binary");
}
- UTIL_THROW(FormatLoadException, "File looks like it should be loaded with mmap, but the test values don't match. Try rebuilding the binary format LM using the same code revision, compiler, and architecture.");
+ UTIL_THROW(FormatLoadException, "File looks like it should be loaded with mmap, but the test values don't match. Try rebuilding the binary format LM using the same code revision, compiler, and architecture");
}
return false;
}
void ReadHeader(int fd, Parameters &out) {
- if ((off_t)-1 == lseek(fd, sizeof(Sanity), SEEK_SET)) UTIL_THROW(util::ErrnoException, "Seek failed in binary file");
+ SeekOrThrow(fd, sizeof(Sanity));
ReadLoop(fd, &out.fixed, sizeof(out.fixed));
if (out.fixed.probing_multiplier < 1.0)
UTIL_THROW(FormatLoadException, "Binary format claims to have a probing multiplier of " << out.fixed.probing_multiplier << " which is < 1.0.");
@@ -160,6 +182,10 @@ void MatchCheck(ModelType model_type, const Parameters &params) {
}
}
+void SeekPastHeader(int fd, const Parameters &params) {
+ SeekOrThrow(fd, TotalHeaderSize(params.counts.size()));
+}
+
uint8_t *SetupBinary(const Config &config, const Parameters &params, std::size_t memory_size, Backing &backing) {
const off_t file_size = util::SizeFile(backing.file.get());
// The header is smaller than a page, so we have to map the whole header as well.
@@ -173,8 +199,7 @@ uint8_t *SetupBinary(const Config &config, const Parameters &params, std::size_t
UTIL_THROW(FormatLoadException, "The decoder requested all the vocabulary strings, but this binary file does not have them. You may need to rebuild the binary file with an updated version of build_binary.");
if (config.enumerate_vocab) {
- if ((off_t)-1 == lseek(backing.file.get(), total_map, SEEK_SET))
- UTIL_THROW(util::ErrnoException, "Failed to seek in binary file to vocab words");
+ SeekOrThrow(backing.file.get(), total_map);
}
return reinterpret_cast<uint8_t*>(backing.search.get()) + TotalHeaderSize(params.counts.size());
}
diff --git a/kenlm/lm/binary_format.hh b/kenlm/lm/binary_format.hh
index 2d66f8135..d28cb6c52 100644
--- a/kenlm/lm/binary_format.hh
+++ b/kenlm/lm/binary_format.hh
@@ -16,7 +16,18 @@
namespace lm {
namespace ngram {
-typedef enum {HASH_PROBING=0, HASH_SORTED=1, TRIE_SORTED=2} ModelType;
+/* Not the best numbering system, but it grew this way for historical reasons
+ * and I want to preserve existing binary files. */
+typedef enum {HASH_PROBING=0, HASH_SORTED=1, TRIE_SORTED=2, QUANT_TRIE_SORTED=3, ARRAY_TRIE_SORTED=4, QUANT_ARRAY_TRIE_SORTED=5} ModelType;
+
+const static ModelType kQuantAdd = static_cast<ModelType>(QUANT_TRIE_SORTED - TRIE_SORTED);
+const static ModelType kArrayAdd = static_cast<ModelType>(ARRAY_TRIE_SORTED - TRIE_SORTED);
+
+/*Inspect a file to determine if it is a binary lm. If not, return false.
+ * If so, return true and set recognized to the type. This is the only API in
+ * this header designed for use by decoder authors.
+ */
+bool RecognizeBinary(const char *file, ModelType &recognized);
struct FixedWidthParameters {
unsigned char order;
@@ -27,6 +38,7 @@ struct FixedWidthParameters {
bool has_vocabulary;
};
+// Parameters stored in the header of a binary file.
struct Parameters {
FixedWidthParameters fixed;
std::vector<uint64_t> counts;
@@ -41,9 +53,18 @@ struct Backing {
util::scoped_memory search;
};
+void SeekOrThrow(int fd, off_t off);
+// Seek forward
+void AdvanceOrThrow(int fd, off_t off);
+
+// Create just enough of a binary file to write vocabulary to it.
uint8_t *SetupJustVocab(const Config &config, uint8_t order, std::size_t memory_size, Backing &backing);
// Grow the binary file for the search data structure and set backing.search, returning the memory address where the search data structure should begin.
-uint8_t *GrowForSearch(const Config &config, ModelType model_type, const std::vector<uint64_t> &counts, std::size_t memory_size, Backing &backing);
+uint8_t *GrowForSearch(const Config &config, std::size_t vocab_pad, std::size_t memory_size, Backing &backing);
+
+// Write header to binary file. This is done last to prevent incomplete files
+// from loading.
+void FinishFile(const Config &config, ModelType model_type, const std::vector<uint64_t> &counts, Backing &backing);
namespace detail {
@@ -53,14 +74,14 @@ void ReadHeader(int fd, Parameters &params);
void MatchCheck(ModelType model_type, const Parameters &params);
+void SeekPastHeader(int fd, const Parameters &params);
+
uint8_t *SetupBinary(const Config &config, const Parameters &params, std::size_t memory_size, Backing &backing);
void ComplainAboutARPA(const Config &config, ModelType model_type);
} // namespace detail
-bool RecognizeBinary(const char *file, ModelType &recognized);
-
template <class To> void LoadLM(const char *file, const Config &config, To &to) {
Backing &backing = to.MutableBacking();
backing.file.reset(util::OpenReadOrThrow(file));
@@ -73,6 +94,8 @@ template <class To> void LoadLM(const char *file, const Config &config, To &to)
// Replace the run-time configured probing_multiplier with the one in the file.
Config new_config(config);
new_config.probing_multiplier = params.fixed.probing_multiplier;
+ detail::SeekPastHeader(backing.file.get(), params);
+ To::UpdateConfigFromBinary(backing.file.get(), params.counts, new_config);
std::size_t memory_size = To::Size(params.counts, new_config);
uint8_t *start = detail::SetupBinary(new_config, params, memory_size, backing);
to.InitializeFromBinary(start, params, new_config, backing.file.get());
@@ -81,10 +104,9 @@ template <class To> void LoadLM(const char *file, const Config &config, To &to)
to.InitializeFromARPA(file, config);
}
} catch (util::Exception &e) {
- e << " in file " << file;
+ e << " File: " << file;
throw;
}
-
}
} // namespace ngram
diff --git a/kenlm/lm/blank.hh b/kenlm/lm/blank.hh
index 4615a09e5..162411a92 100644
--- a/kenlm/lm/blank.hh
+++ b/kenlm/lm/blank.hh
@@ -22,6 +22,8 @@ namespace ngram {
*/
const float kNoExtensionBackoff = -0.0;
const float kExtensionBackoff = 0.0;
+const uint64_t kNoExtensionQuant = 0;
+const uint64_t kExtensionQuant = 1;
inline void SetExtension(float &backoff) {
if (backoff == kNoExtensionBackoff) backoff = kExtensionBackoff;
@@ -47,6 +49,8 @@ inline bool HasExtension(const float &backoff) {
*/
const float kBlankProb = -std::numeric_limits<float>::infinity();
const float kBlankBackoff = kNoExtensionBackoff;
+const uint32_t kBlankProbQuant = 0;
+const uint32_t kBlankBackoffQuant = 0;
} // namespace ngram
} // namespace lm
diff --git a/kenlm/lm/build_binary.cc b/kenlm/lm/build_binary.cc
index 756060c53..b7aee4de2 100644
--- a/kenlm/lm/build_binary.cc
+++ b/kenlm/lm/build_binary.cc
@@ -1,6 +1,8 @@
#include "lm/model.hh"
#include "util/file_piece.hh"
+#include <cstdlib>
+#include <exception>
#include <iostream>
#include <iomanip>
@@ -13,21 +15,25 @@ namespace ngram {
namespace {
void Usage(const char *name) {
- std::cerr << "Usage: " << name << " [-u unknown_probability] [-p probing_multiplier] [-t trie_temporary] [-m trie_building_megabytes] [type] input.arpa output.mmap\n\n"
-"Where type is one of probing, trie, or sorted:\n\n"
+ std::cerr << "Usage: " << name << " [-u log10_unknown_probability] [-s] [-i] [-p probing_multiplier] [-t trie_temporary] [-m trie_building_megabytes] [-q bits] [-b bits] [-c bits] [type] input.arpa [output.mmap]\n\n"
+"-u sets the log10 probability for <unk> if the ARPA file does not have one.\n"
+" Default is -100. The ARPA file will always take precedence.\n"
+"-s allows models to be built even if they do not have <s> and </s>.\n"
+"-i allows buggy models from IRSTLM by mapping positive log probability to 0.\n\n"
+"type is either probing or trie. Default is probing.\n\n"
"probing uses a probing hash table. It is the fastest but uses the most memory.\n"
"-p sets the space multiplier and must be >1.0. The default is 1.5.\n\n"
"trie is a straightforward trie with bit-level packing. It uses the least\n"
"memory and is still faster than SRI or IRST. Building the trie format uses an\n"
"on-disk sort to save memory.\n"
"-t is the temporary directory prefix. Default is the output file name.\n"
-"-m limits memory use for sorting. Measured in MB. Default is 1024MB.\n\n"
-/*"sorted is like probing but uses a sorted uniform map instead of a hash table.\n"
-"It uses more memory than trie and is also slower, so there's no real reason to\n"
-"use it.\n\n"*/
-"See http://kheafield.com/code/kenlm/benchmark/ for data structure benchmarks.\n"
-"Passing only an input file will print memory usage of each data structure.\n"
-"If the ARPA file does not have <unk>, -u sets <unk>'s probability; default 0.0.\n";
+"-m limits memory use for sorting. Measured in MB. Default is 1024MB.\n"
+"-q turns quantization on and sets the number of bits (e.g. -q 8).\n"
+"-b sets backoff quantization bits. Requires -q and defaults to that value.\n"
+"-a compresses pointers using an array of offsets. The parameter is the\n"
+" maximum number of bits encoded by the array. Memory is minimized subject\n"
+" to the maximum, so pick 255 to minimize memory.\n\n"
+"Get a memory estimate by passing an ARPA file without an output file name.\n";
exit(1);
}
@@ -45,20 +51,57 @@ unsigned long int ParseUInt(const char *from) {
return ret;
}
+uint8_t ParseBitCount(const char *from) {
+ unsigned long val = ParseUInt(from);
+ if (val > 25) {
+ util::ParseNumberException e(from);
+ e << " bit counts are limited to 256.";
+ }
+ return val;
+}
+
void ShowSizes(const char *file, const lm::ngram::Config &config) {
std::vector<uint64_t> counts;
util::FilePiece f(file);
lm::ReadARPACounts(f, counts);
- std::size_t probing_size = ProbingModel::Size(counts, config);
- // probing is always largest so use it to determine number of columns.
- long int length = std::max<long int>(5, lrint(ceil(log10(probing_size))));
+ std::size_t sizes[5];
+ sizes[0] = ProbingModel::Size(counts, config);
+ sizes[1] = TrieModel::Size(counts, config);
+ sizes[2] = QuantTrieModel::Size(counts, config);
+ sizes[3] = ArrayTrieModel::Size(counts, config);
+ sizes[4] = QuantArrayTrieModel::Size(counts, config);
+ std::size_t max_length = *std::max_element(sizes, sizes + sizeof(sizes) / sizeof(size_t));
+ std::size_t min_length = *std::min_element(sizes, sizes + sizeof(sizes) / sizeof(size_t));
+ std::size_t divide;
+ char prefix;
+ if (min_length < (1 << 10) * 10) {
+ prefix = ' ';
+ divide = 1;
+ } else if (min_length < (1 << 20) * 10) {
+ prefix = 'k';
+ divide = 1 << 10;
+ } else if (min_length < (1ULL << 30) * 10) {
+ prefix = 'M';
+ divide = 1 << 20;
+ } else {
+ prefix = 'G';
+ divide = 1 << 30;
+ }
+ long int length = std::max<long int>(2, lrint(ceil(log10(max_length / divide))));
std::cout << "Memory estimate:\ntype ";
// right align bytes.
- for (long int i = 0; i < length - 5; ++i) std::cout << ' ';
- std::cout << "bytes\n"
- "probing " << std::setw(length) << probing_size << " assuming -p " << config.probing_multiplier << "\n"
- "trie " << std::setw(length) << TrieModel::Size(counts, config) << "\n";
-/* "sorted " << std::setw(length) << SortedModel::Size(counts, config) << "\n";*/
+ for (long int i = 0; i < length - 2; ++i) std::cout << ' ';
+ std::cout << prefix << "B\n"
+ "probing " << std::setw(length) << (sizes[0] / divide) << " assuming -p " << config.probing_multiplier << "\n"
+ "trie " << std::setw(length) << (sizes[1] / divide) << " without quantization\n"
+ "trie " << std::setw(length) << (sizes[2] / divide) << " assuming -q " << (unsigned)config.prob_bits << " -b " << (unsigned)config.backoff_bits << " quantization \n"
+ "trie " << std::setw(length) << (sizes[3] / divide) << " assuming -a " << (unsigned)config.pointer_bhiksha_bits << " array pointer compression\n"
+ "trie " << std::setw(length) << (sizes[4] / divide) << " assuming -a " << (unsigned)config.pointer_bhiksha_bits << " -q " << (unsigned)config.prob_bits << " -b " << (unsigned)config.backoff_bits<< " array pointer compression and quantization\n";
+}
+
+void ProbingQuantizationUnsupported() {
+ std::cerr << "Quantization is only implemented in the trie data structure." << std::endl;
+ exit(1);
}
} // namespace ngram
@@ -66,15 +109,28 @@ void ShowSizes(const char *file, const lm::ngram::Config &config) {
} // namespace
int main(int argc, char *argv[]) {
- try {
- using namespace lm::ngram;
+ using namespace lm::ngram;
+ try {
+ bool quantize = false, set_backoff_bits = false, bhiksha = false;
lm::ngram::Config config;
int opt;
- while ((opt = getopt(argc, argv, "u:p:t:m:")) != -1) {
+ while ((opt = getopt(argc, argv, "siu:p:t:m:q:b:a:")) != -1) {
switch(opt) {
+ case 'q':
+ config.prob_bits = ParseBitCount(optarg);
+ if (!set_backoff_bits) config.backoff_bits = config.prob_bits;
+ quantize = true;
+ break;
+ case 'b':
+ config.backoff_bits = ParseBitCount(optarg);
+ set_backoff_bits = true;
+ break;
+ case 'a':
+ config.pointer_bhiksha_bits = ParseBitCount(optarg);
+ bhiksha = true;
case 'u':
- config.unknown_missing_prob = ParseFloat(optarg);
+ config.unknown_missing_logprob = ParseFloat(optarg);
break;
case 'p':
config.probing_multiplier = ParseFloat(optarg);
@@ -85,37 +141,57 @@ int main(int argc, char *argv[]) {
case 'm':
config.building_memory = ParseUInt(optarg) * 1048576;
break;
+ case 's':
+ config.sentence_marker_missing = lm::SILENT;
+ break;
+ case 'i':
+ config.positive_log_probability = lm::SILENT;
+ break;
default:
Usage(argv[0]);
}
}
+ if (!quantize && set_backoff_bits) {
+ std::cerr << "You specified backoff quantization (-b) but not probability quantization (-q)" << std::endl;
+ abort();
+ }
if (optind + 1 == argc) {
ShowSizes(argv[optind], config);
} else if (optind + 2 == argc) {
config.write_mmap = argv[optind + 1];
+ if (quantize || set_backoff_bits) ProbingQuantizationUnsupported();
ProbingModel(argv[optind], config);
} else if (optind + 3 == argc) {
const char *model_type = argv[optind];
const char *from_file = argv[optind + 1];
config.write_mmap = argv[optind + 2];
if (!strcmp(model_type, "probing")) {
+ if (quantize || set_backoff_bits) ProbingQuantizationUnsupported();
ProbingModel(from_file, config);
- } else if (!strcmp(model_type, "sorted")) {
- SortedModel(from_file, config);
} else if (!strcmp(model_type, "trie")) {
- TrieModel(from_file, config);
+ if (quantize) {
+ if (bhiksha) {
+ QuantArrayTrieModel(from_file, config);
+ } else {
+ QuantTrieModel(from_file, config);
+ }
+ } else {
+ if (bhiksha) {
+ ArrayTrieModel(from_file, config);
+ } else {
+ TrieModel(from_file, config);
+ }
+ }
} else {
Usage(argv[0]);
}
} else {
Usage(argv[0]);
}
- return 0;
- } catch (const std::exception &e) {
+ }
+ catch (const std::exception &e) {
std::cerr << e.what() << std::endl;
return 1;
- } catch (...) {
- std::cerr << "An exception occurred." << std::endl;
- return 1;
}
+ return 0;
}
diff --git a/kenlm/lm/config.cc b/kenlm/lm/config.cc
index 2831d578b..297589a47 100644
--- a/kenlm/lm/config.cc
+++ b/kenlm/lm/config.cc
@@ -9,13 +9,18 @@ Config::Config() :
messages(&std::cerr),
enumerate_vocab(NULL),
unknown_missing(COMPLAIN),
- unknown_missing_prob(0.0),
+ sentence_marker_missing(THROW_UP),
+ positive_log_probability(THROW_UP),
+ unknown_missing_logprob(-100.0),
probing_multiplier(1.5),
building_memory(1073741824ULL), // 1 GB
temporary_directory_prefix(NULL),
arpa_complain(ALL),
write_mmap(NULL),
include_vocab(true),
+ prob_bits(8),
+ backoff_bits(8),
+ pointer_bhiksha_bits(22),
load_method(util::POPULATE_OR_READ) {}
} // namespace ngram
diff --git a/kenlm/lm/config.hh b/kenlm/lm/config.hh
index 767fa5f9b..227b85120 100644
--- a/kenlm/lm/config.hh
+++ b/kenlm/lm/config.hh
@@ -3,6 +3,7 @@
#include <iosfwd>
+#include "lm/lm_exception.hh"
#include "util/mmap.hh"
/* Configuration for ngram model. Separate header to reduce pollution. */
@@ -28,12 +29,18 @@ struct Config {
// ONLY EFFECTIVE WHEN READING ARPA
// What to do when <unk> isn't in the provided model.
- typedef enum {THROW_UP, COMPLAIN, SILENT} UnknownMissing;
- UnknownMissing unknown_missing;
+ WarningAction unknown_missing;
+ // What to do when <s> or </s> is missing from the model.
+ // If THROW_UP, the exception will be of type util::SpecialWordMissingException.
+ WarningAction sentence_marker_missing;
+
+ // What to do with a positive log probability. For COMPLAIN and SILENT, map
+ // to 0.
+ WarningAction positive_log_probability;
// The probability to substitute for <unk> if it's missing from the model.
// No effect if the model has <unk> or unknown_missing == THROW_UP.
- float unknown_missing_prob;
+ float unknown_missing_logprob;
// Size multiplier for probing hash table. Must be > 1. Space is linear in
// this. Time is probing_multiplier / (probing_multiplier - 1). No effect
@@ -64,6 +71,14 @@ struct Config {
// Include the vocab in the binary file? Only effective if write_mmap != NULL.
bool include_vocab;
+ // Quantization options. Only effective for QuantTrieModel. One value is
+ // reserved for each of prob and backoff, so 2^bits - 1 buckets will be used
+ // to quantize (and one of the remaining backoffs will be 0).
+ uint8_t prob_bits, backoff_bits;
+
+ // Bhiksha compression (simple form). Only works with trie.
+ uint8_t pointer_bhiksha_bits;
+
// ONLY EFFECTIVE WHEN READING BINARY
diff --git a/kenlm/lm/lm_exception.cc b/kenlm/lm/lm_exception.cc
index 473849d11..0b572e984 100644
--- a/kenlm/lm/lm_exception.cc
+++ b/kenlm/lm/lm_exception.cc
@@ -17,9 +17,7 @@ FormatLoadException::~FormatLoadException() throw() {}
VocabLoadException::VocabLoadException() throw() {}
VocabLoadException::~VocabLoadException() throw() {}
-SpecialWordMissingException::SpecialWordMissingException(StringPiece which) throw() {
- *this << "Missing special word " << which;
-}
+SpecialWordMissingException::SpecialWordMissingException() throw() {}
SpecialWordMissingException::~SpecialWordMissingException() throw() {}
} // namespace lm
diff --git a/kenlm/lm/lm_exception.hh b/kenlm/lm/lm_exception.hh
index 3773c5726..f607ced16 100644
--- a/kenlm/lm/lm_exception.hh
+++ b/kenlm/lm/lm_exception.hh
@@ -11,6 +11,8 @@
namespace lm {
+typedef enum {THROW_UP, COMPLAIN, SILENT} WarningAction;
+
class ConfigException : public util::Exception {
public:
ConfigException() throw();
@@ -39,7 +41,7 @@ class VocabLoadException : public LoadException {
class SpecialWordMissingException : public VocabLoadException {
public:
- explicit SpecialWordMissingException(StringPiece which) throw();
+ explicit SpecialWordMissingException() throw();
~SpecialWordMissingException() throw();
};
diff --git a/kenlm/lm/model.cc b/kenlm/lm/model.cc
index 146fe07bc..27e24b1c3 100644
--- a/kenlm/lm/model.cc
+++ b/kenlm/lm/model.cc
@@ -21,6 +21,8 @@ size_t hash_value(const State &state) {
namespace detail {
+template <class Search, class VocabularyT> const ModelType GenericModel<Search, VocabularyT>::kModelType = Search::kModelType;
+
template <class Search, class VocabularyT> size_t GenericModel<Search, VocabularyT>::Size(const std::vector<uint64_t> &counts, const Config &config) {
return VocabularyT::Size(counts[0], config) + Search::Size(counts, config);
}
@@ -44,62 +46,51 @@ template <class Search, class VocabularyT> GenericModel<Search, VocabularyT>::Ge
begin_sentence.backoff_[0] = search_.unigram.Lookup(begin_sentence.history_[0]).backoff;
State null_context = State();
null_context.valid_length_ = 0;
- P::Init(begin_sentence, null_context, vocab_, search_.middle.size() + 2);
+ P::Init(begin_sentence, null_context, vocab_, search_.MiddleEnd() - search_.MiddleBegin() + 2);
}
template <class Search, class VocabularyT> void GenericModel<Search, VocabularyT>::InitializeFromBinary(void *start, const Parameters &params, const Config &config, int fd) {
SetupMemory(start, params.counts, config);
vocab_.LoadedBinary(fd, config.enumerate_vocab);
- search_.unigram.LoadedBinary();
- for (typename std::vector<Middle>::iterator i = search_.middle.begin(); i != search_.middle.end(); ++i) {
- i->LoadedBinary();
- }
- search_.longest.LoadedBinary();
+ search_.LoadedBinary();
}
template <class Search, class VocabularyT> void GenericModel<Search, VocabularyT>::InitializeFromARPA(const char *file, const Config &config) {
// Backing file is the ARPA. Steal it so we can make the backing file the mmap output if any.
util::FilePiece f(backing_.file.release(), file, config.messages);
- std::vector<uint64_t> counts;
- // File counts do not include pruned trigrams that extend to quadgrams etc. These will be fixed by search_.
- ReadARPACounts(f, counts);
-
- if (counts.size() > kMaxOrder) UTIL_THROW(FormatLoadException, "This model has order " << counts.size() << ". Edit lm/max_order.hh, set kMaxOrder to at least this value, and recompile.");
- if (counts.size() < 2) UTIL_THROW(FormatLoadException, "This ngram implementation assumes at least a bigram model.");
- if (config.probing_multiplier <= 1.0) UTIL_THROW(ConfigException, "probing multiplier must be > 1.0");
-
- std::size_t vocab_size = VocabularyT::Size(counts[0], config);
- // Setup the binary file for writing the vocab lookup table. The search_ is responsible for growing the binary file to its needs.
- vocab_.SetupMemory(SetupJustVocab(config, counts.size(), vocab_size, backing_), vocab_size, counts[0], config);
-
- if (config.write_mmap) {
- WriteWordsWrapper wrap(config.enumerate_vocab);
- vocab_.ConfigureEnumerate(&wrap, counts[0]);
- search_.InitializeFromARPA(file, f, counts, config, vocab_, backing_);
- wrap.Write(backing_.file.get());
- } else {
- vocab_.ConfigureEnumerate(config.enumerate_vocab, counts[0]);
- search_.InitializeFromARPA(file, f, counts, config, vocab_, backing_);
- }
+ try {
+ std::vector<uint64_t> counts;
+ // File counts do not include pruned trigrams that extend to quadgrams etc. These will be fixed by search_.
+ ReadARPACounts(f, counts);
+
+ if (counts.size() > kMaxOrder) UTIL_THROW(FormatLoadException, "This model has order " << counts.size() << ". Edit lm/max_order.hh, set kMaxOrder to at least this value, and recompile.");
+ if (counts.size() < 2) UTIL_THROW(FormatLoadException, "This ngram implementation assumes at least a bigram model.");
+ if (config.probing_multiplier <= 1.0) UTIL_THROW(ConfigException, "probing multiplier must be > 1.0");
+
+ std::size_t vocab_size = VocabularyT::Size(counts[0], config);
+ // Setup the binary file for writing the vocab lookup table. The search_ is responsible for growing the binary file to its needs.
+ vocab_.SetupMemory(SetupJustVocab(config, counts.size(), vocab_size, backing_), vocab_size, counts[0], config);
+
+ if (config.write_mmap) {
+ WriteWordsWrapper wrap(config.enumerate_vocab);
+ vocab_.ConfigureEnumerate(&wrap, counts[0]);
+ search_.InitializeFromARPA(file, f, counts, config, vocab_, backing_);
+ wrap.Write(backing_.file.get());
+ } else {
+ vocab_.ConfigureEnumerate(config.enumerate_vocab, counts[0]);
+ search_.InitializeFromARPA(file, f, counts, config, vocab_, backing_);
+ }
- // TODO: fail faster?
- if (!vocab_.SawUnk()) {
- switch(config.unknown_missing) {
- case Config::THROW_UP:
- {
- SpecialWordMissingException e("<unk>");
- e << " and configuration was set to throw if unknown is missing";
- throw e;
- }
- case Config::COMPLAIN:
- if (config.messages) *config.messages << "Language model is missing <unk>. Substituting probability " << config.unknown_missing_prob << "." << std::endl;
- // There's no break;. This is by design.
- case Config::SILENT:
- // Default probabilities for unknown.
- search_.unigram.Unknown().backoff = 0.0;
- search_.unigram.Unknown().prob = config.unknown_missing_prob;
- break;
+ if (!vocab_.SawUnk()) {
+ assert(config.unknown_missing != THROW_UP);
+ // Default probabilities for unknown.
+ search_.unigram.Unknown().backoff = 0.0;
+ search_.unigram.Unknown().prob = config.unknown_missing_logprob;
}
+ FinishFile(config, kModelType, counts, backing_);
+ } catch (util::Exception &e) {
+ e << " Byte: " << f.Offset();
+ throw;
}
}
@@ -128,8 +119,9 @@ template <class Search, class VocabularyT> FullScoreReturn GenericModel<Search,
}
float backoff;
// i is the order of the backoff we're looking for.
- for (const WordIndex *i = context_rbegin + start - 1; i < context_rend; ++i) {
- if (!search_.LookupMiddleNoProb(search_.middle[i - context_rbegin - 1], *i, backoff, node)) break;
+ const Middle *mid_iter = search_.MiddleBegin() + start - 2;
+ for (const WordIndex *i = context_rbegin + start - 1; i < context_rend; ++i, ++mid_iter) {
+ if (!search_.LookupMiddleNoProb(*mid_iter, *i, backoff, node)) break;
ret.prob += backoff;
}
return ret;
@@ -147,7 +139,7 @@ template <class Search, class VocabularyT> void GenericModel<Search, VocabularyT
search_.LookupUnigram(*context_rbegin, ignored_prob, out_state.backoff_[0], node);
out_state.valid_length_ = HasExtension(out_state.backoff_[0]) ? 1 : 0;
float *backoff_out = out_state.backoff_ + 1;
- const typename Search::Middle *mid = &*search_.middle.begin();
+ const typename Search::Middle *mid = search_.MiddleBegin();
for (const WordIndex *i = context_rbegin + 1; i < context_rend; ++i, ++backoff_out, ++mid) {
if (!search_.LookupMiddleNoProb(*mid, *i, *backoff_out, node)) {
std::copy(context_rbegin, context_rbegin + out_state.valid_length_, out_state.history_);
@@ -195,7 +187,7 @@ template <class Search, class VocabularyT> FullScoreReturn GenericModel<Search,
// Ok now we now that the bigram contains known words. Start by looking it up.
const WordIndex *hist_iter = context_rbegin;
- typename std::vector<Middle>::const_iterator mid_iter = search_.middle.begin();
+ const typename Search::Middle *mid_iter = search_.MiddleBegin();
for (; ; ++mid_iter, ++hist_iter, ++backoff_out) {
if (hist_iter == context_rend) {
// Ran out of history. Typically no backoff, but this could be a blank.
@@ -204,7 +196,7 @@ template <class Search, class VocabularyT> FullScoreReturn GenericModel<Search,
return ret;
}
- if (mid_iter == search_.middle.end()) break;
+ if (mid_iter == search_.MiddleEnd()) break;
float revert = ret.prob;
if (!search_.LookupMiddle(*mid_iter, *hist_iter, ret.prob, *backoff_out, node)) {
@@ -239,9 +231,11 @@ template <class Search, class VocabularyT> FullScoreReturn GenericModel<Search,
return ret;
}
-template class GenericModel<ProbingHashedSearch, ProbingVocabulary>;
-template class GenericModel<SortedHashedSearch, SortedVocabulary>;
-template class GenericModel<trie::TrieSearch, SortedVocabulary>;
+template class GenericModel<ProbingHashedSearch, ProbingVocabulary>; // HASH_PROBING
+template class GenericModel<trie::TrieSearch<DontQuantize, trie::DontBhiksha>, SortedVocabulary>; // TRIE_SORTED
+template class GenericModel<trie::TrieSearch<DontQuantize, trie::ArrayBhiksha>, SortedVocabulary>;
+template class GenericModel<trie::TrieSearch<SeparatelyQuantize, trie::DontBhiksha>, SortedVocabulary>; // TRIE_SORTED_QUANT
+template class GenericModel<trie::TrieSearch<SeparatelyQuantize, trie::ArrayBhiksha>, SortedVocabulary>;
} // namespace detail
} // namespace ngram
diff --git a/kenlm/lm/model.hh b/kenlm/lm/model.hh
index fd9640c33..215953219 100644
--- a/kenlm/lm/model.hh
+++ b/kenlm/lm/model.hh
@@ -1,10 +1,12 @@
#ifndef LM_MODEL__
#define LM_MODEL__
+#include "lm/bhiksha.hh"
#include "lm/binary_format.hh"
#include "lm/config.hh"
#include "lm/facade.hh"
#include "lm/max_order.hh"
+#include "lm/quantize.hh"
#include "lm/search_hashed.hh"
#include "lm/search_trie.hh"
#include "lm/vocab.hh"
@@ -65,38 +67,61 @@ size_t hash_value(const State &state);
namespace detail {
// Should return the same results as SRI.
-// Why VocabularyT instead of just Vocabulary? ModelFacade defines Vocabulary.
+// ModelFacade typedefs Vocabulary so we use VocabularyT to avoid naming conflicts.
template <class Search, class VocabularyT> class GenericModel : public base::ModelFacade<GenericModel<Search, VocabularyT>, State, VocabularyT> {
private:
typedef base::ModelFacade<GenericModel<Search, VocabularyT>, State, VocabularyT> P;
public:
- // Get the size of memory that will be mapped given ngram counts. This
- // does not include small non-mapped control structures, such as this class
- // itself.
+ // This is the model type returned by RecognizeBinary.
+ static const ModelType kModelType;
+
+ /* Get the size of memory that will be mapped given ngram counts. This
+ * does not include small non-mapped control structures, such as this class
+ * itself.
+ */
static size_t Size(const std::vector<uint64_t> &counts, const Config &config = Config());
+ /* Load the model from a file. It may be an ARPA or binary file. Binary
+ * files must have the format expected by this class or you'll get an
+ * exception. So TrieModel can only load ARPA or binary created by
+ * TrieModel. To classify binary files, call RecognizeBinary in
+ * lm/binary_format.hh.
+ */
GenericModel(const char *file, const Config &config = Config());
+ /* Score p(new_word | in_state) and incorporate new_word into out_state.
+ * Note that in_state and out_state must be different references:
+ * &in_state != &out_state.
+ */
FullScoreReturn FullScore(const State &in_state, const WordIndex new_word, State &out_state) const;
- /* Slower call without in_state. Don't use this if you can avoid it. This
- * is mostly a hack for Hieu to integrate it into Moses which sometimes
- * forgets LM state (i.e. it doesn't store it with the phrase). Sigh.
- * The context indices should be in an array.
- * If context_rbegin != context_rend then *context_rbegin is the word
- * before new_word.
+ /* Slower call without in_state. Try to remember state, but sometimes it
+ * would cost too much memory or your decoder isn't setup properly.
+ * To use this function, make an array of WordIndex containing the context
+ * vocabulary ids in reverse order. Then, pass the bounds of the array:
+ * [context_rbegin, context_rend). The new_word is not part of the context
+ * array unless you intend to repeat words.
*/
FullScoreReturn FullScoreForgotState(const WordIndex *context_rbegin, const WordIndex *context_rend, const WordIndex new_word, State &out_state) const;
/* Get the state for a context. Don't use this if you can avoid it. Use
* BeginSentenceState or EmptyContextState and extend from those. If
* you're only going to use this state to call FullScore once, use
- * FullScoreForgotState. */
+ * FullScoreForgotState.
+ * To use this function, make an array of WordIndex containing the context
+ * vocabulary ids in reverse order. Then, pass the bounds of the array:
+ * [context_rbegin, context_rend).
+ */
void GetState(const WordIndex *context_rbegin, const WordIndex *context_rend, State &out_state) const;
private:
friend void LoadLM<>(const char *file, const Config &config, GenericModel<Search, VocabularyT> &to);
+ static void UpdateConfigFromBinary(int fd, const std::vector<uint64_t> &counts, Config &config) {
+ AdvanceOrThrow(fd, VocabularyT::Size(counts[0], config));
+ Search::UpdateConfigFromBinary(fd, counts, config);
+ }
+
float SlowBackoffLookup(const WordIndex *const context_rbegin, const WordIndex *const context_rend, unsigned char start) const;
FullScoreReturn ScoreExceptBackoff(const WordIndex *context_rbegin, const WordIndex *context_rend, const WordIndex new_word, State &out_state) const;
@@ -110,15 +135,11 @@ template <class Search, class VocabularyT> class GenericModel : public base::Mod
Backing &MutableBacking() { return backing_; }
- static const ModelType kModelType = Search::kModelType;
-
Backing backing_;
VocabularyT vocab_;
- typedef typename Search::Unigram Unigram;
typedef typename Search::Middle Middle;
- typedef typename Search::Longest Longest;
Search search_;
};
@@ -127,14 +148,17 @@ template <class Search, class VocabularyT> class GenericModel : public base::Mod
// These must also be instantiated in the cc file.
typedef ::lm::ngram::ProbingVocabulary Vocabulary;
-typedef detail::GenericModel<detail::ProbingHashedSearch, Vocabulary> ProbingModel;
+typedef detail::GenericModel<detail::ProbingHashedSearch, Vocabulary> ProbingModel; // HASH_PROBING
// Default implementation. No real reason for it to be the default.
typedef ProbingModel Model;
+// Smaller implementation.
typedef ::lm::ngram::SortedVocabulary SortedVocabulary;
-typedef detail::GenericModel<detail::SortedHashedSearch, SortedVocabulary> SortedModel;
+typedef detail::GenericModel<trie::TrieSearch<DontQuantize, trie::DontBhiksha>, SortedVocabulary> TrieModel; // TRIE_SORTED
+typedef detail::GenericModel<trie::TrieSearch<DontQuantize, trie::ArrayBhiksha>, SortedVocabulary> ArrayTrieModel;
-typedef detail::GenericModel<trie::TrieSearch, SortedVocabulary> TrieModel;
+typedef detail::GenericModel<trie::TrieSearch<SeparatelyQuantize, trie::DontBhiksha>, SortedVocabulary> QuantTrieModel; // QUANT_TRIE_SORTED
+typedef detail::GenericModel<trie::TrieSearch<SeparatelyQuantize, trie::ArrayBhiksha>, SortedVocabulary> QuantArrayTrieModel;
} // namespace ngram
} // namespace lm
diff --git a/kenlm/lm/model_test.cc b/kenlm/lm/model_test.cc
index 548c098d0..598605772 100644
--- a/kenlm/lm/model_test.cc
+++ b/kenlm/lm/model_test.cc
@@ -193,6 +193,14 @@ template <class M> void Stateless(const M &model) {
BOOST_CHECK_EQUAL(static_cast<WordIndex>(0), state.history_[0]);
}
+template <class M> void NoUnkCheck(const M &model) {
+ WordIndex unk_index = 0;
+ State state;
+
+ FullScoreReturn ret = model.FullScoreForgotState(&unk_index, &unk_index + 1, unk_index, state);
+ BOOST_CHECK_CLOSE(-100.0, ret.prob, 0.001);
+}
+
template <class M> void Everything(const M &m) {
Starters(m);
Continuation(m);
@@ -231,24 +239,38 @@ template <class ModelT> void LoadingTest() {
Config config;
config.arpa_complain = Config::NONE;
config.messages = NULL;
- ExpectEnumerateVocab enumerate;
- config.enumerate_vocab = &enumerate;
config.probing_multiplier = 2.0;
- ModelT m("test.arpa", config);
- enumerate.Check(m.GetVocabulary());
- Everything(m);
+ {
+ ExpectEnumerateVocab enumerate;
+ config.enumerate_vocab = &enumerate;
+ ModelT m("test.arpa", config);
+ enumerate.Check(m.GetVocabulary());
+ Everything(m);
+ }
+ {
+ ExpectEnumerateVocab enumerate;
+ config.enumerate_vocab = &enumerate;
+ ModelT m("test_nounk.arpa", config);
+ enumerate.Check(m.GetVocabulary());
+ NoUnkCheck(m);
+ }
}
BOOST_AUTO_TEST_CASE(probing) {
LoadingTest<Model>();
}
-
-/*BOOST_AUTO_TEST_CASE(sorted) {
- LoadingTest<SortedModel>();
-}*/
BOOST_AUTO_TEST_CASE(trie) {
LoadingTest<TrieModel>();
}
+BOOST_AUTO_TEST_CASE(quant_trie) {
+ LoadingTest<QuantTrieModel>();
+}
+BOOST_AUTO_TEST_CASE(bhiksha_trie) {
+ LoadingTest<ArrayTrieModel>();
+}
+BOOST_AUTO_TEST_CASE(quant_bhiksha_trie) {
+ LoadingTest<QuantArrayTrieModel>();
+}
template <class ModelT> void BinaryTest() {
Config config;
@@ -266,21 +288,51 @@ template <class ModelT> void BinaryTest() {
config.write_mmap = NULL;
- ModelT binary("test.binary", config);
- enumerate.Check(binary.GetVocabulary());
- Everything(binary);
+ ModelType type;
+ BOOST_REQUIRE(RecognizeBinary("test.binary", type));
+ BOOST_CHECK_EQUAL(ModelT::kModelType, type);
+
+ {
+ ModelT binary("test.binary", config);
+ enumerate.Check(binary.GetVocabulary());
+ Everything(binary);
+ }
+ unlink("test.binary");
+
+ // Now test without <unk>.
+ config.write_mmap = "test_nounk.binary";
+ config.messages = NULL;
+ enumerate.Clear();
+ {
+ ModelT copy_model("test_nounk.arpa", config);
+ enumerate.Check(copy_model.GetVocabulary());
+ enumerate.Clear();
+ NoUnkCheck(copy_model);
+ }
+ config.write_mmap = NULL;
+ {
+ ModelT binary("test_nounk.binary", config);
+ enumerate.Check(binary.GetVocabulary());
+ NoUnkCheck(binary);
+ }
unlink("test.binary");
}
BOOST_AUTO_TEST_CASE(write_and_read_probing) {
BinaryTest<Model>();
}
-/*BOOST_AUTO_TEST_CASE(write_and_read_sorted) {
- BinaryTest<SortedModel>();
-}*/
BOOST_AUTO_TEST_CASE(write_and_read_trie) {
BinaryTest<TrieModel>();
}
+BOOST_AUTO_TEST_CASE(write_and_read_quant_trie) {
+ BinaryTest<QuantTrieModel>();
+}
+BOOST_AUTO_TEST_CASE(write_and_read_array_trie) {
+ BinaryTest<ArrayTrieModel>();
+}
+BOOST_AUTO_TEST_CASE(write_and_read_quant_array_trie) {
+ BinaryTest<QuantArrayTrieModel>();
+}
} // namespace
} // namespace ngram
diff --git a/kenlm/lm/ngram_query.cc b/kenlm/lm/ngram_query.cc
index 9454a6d1d..d9db4aa23 100644
--- a/kenlm/lm/ngram_query.cc
+++ b/kenlm/lm/ngram_query.cc
@@ -99,6 +99,15 @@ int main(int argc, char *argv[]) {
case lm::ngram::TRIE_SORTED:
Query<lm::ngram::TrieModel>(argv[1], sentence_context);
break;
+ case lm::ngram::QUANT_TRIE_SORTED:
+ Query<lm::ngram::QuantTrieModel>(argv[1], sentence_context);
+ break;
+ case lm::ngram::ARRAY_TRIE_SORTED:
+ Query<lm::ngram::ArrayTrieModel>(argv[1], sentence_context);
+ break;
+ case lm::ngram::QUANT_ARRAY_TRIE_SORTED:
+ Query<lm::ngram::QuantArrayTrieModel>(argv[1], sentence_context);
+ break;
case lm::ngram::HASH_SORTED:
default:
std::cerr << "Unrecognized kenlm model type " << model_type << std::endl;
diff --git a/kenlm/lm/quantize.cc b/kenlm/lm/quantize.cc
new file mode 100644
index 000000000..fd371cc83
--- /dev/null
+++ b/kenlm/lm/quantize.cc
@@ -0,0 +1,85 @@
+#include "lm/quantize.hh"
+
+#include "lm/lm_exception.hh"
+
+#include <algorithm>
+#include <numeric>
+
+#include <unistd.h>
+
+namespace lm {
+namespace ngram {
+
+/* Quantize into bins of equal size as described in
+ * M. Federico and N. Bertoldi. 2006. How many bits are needed
+ * to store probabilities for phrase-based translation? In Proc.
+ * of the Workshop on Statistical Machine Translation, pages
+ * 94–101, New York City, June. Association for Computa-
+ * tional Linguistics.
+ */
+
+namespace {
+
+void MakeBins(float *values, float *values_end, float *centers, uint32_t bins) {
+ std::sort(values, values_end);
+ const float *start = values, *finish;
+ for (uint32_t i = 0; i < bins; ++i, ++centers, start = finish) {
+ finish = values + (((values_end - values) * static_cast<uint64_t>(i + 1)) / bins);
+ if (finish == start) {
+ // zero length bucket.
+ *centers = i ? *(centers - 1) : -std::numeric_limits<float>::infinity();
+ } else {
+ *centers = std::accumulate(start, finish, 0.0) / static_cast<float>(finish - start);
+ }
+ }
+}
+
+const char kSeparatelyQuantizeVersion = 2;
+
+} // namespace
+
+void SeparatelyQuantize::UpdateConfigFromBinary(int fd, const std::vector<uint64_t> &/*counts*/, Config &config) {
+ char version;
+ if (read(fd, &version, 1) != 1 || read(fd, &config.prob_bits, 1) != 1 || read(fd, &config.backoff_bits, 1) != 1)
+ UTIL_THROW(util::ErrnoException, "Failed to read header for quantization.");
+ if (version != kSeparatelyQuantizeVersion) UTIL_THROW(FormatLoadException, "This file has quantization version " << (unsigned)version << " but the code expects version " << (unsigned)kSeparatelyQuantizeVersion);
+ AdvanceOrThrow(fd, -3);
+}
+
+void SeparatelyQuantize::SetupMemory(void *start, const Config &config) {
+ // Reserve 8 byte header for bit counts.
+ start_ = reinterpret_cast<float*>(static_cast<uint8_t*>(start) + 8);
+ prob_bits_ = config.prob_bits;
+ backoff_bits_ = config.backoff_bits;
+ // We need the reserved values.
+ if (config.prob_bits == 0) UTIL_THROW(ConfigException, "You can't quantize probability to zero");
+ if (config.backoff_bits == 0) UTIL_THROW(ConfigException, "You can't quantize backoff to zero");
+ if (config.prob_bits > 25) UTIL_THROW(ConfigException, "For efficiency reasons, quantizing probability supports at most 25 bits. Currently you have requested " << static_cast<unsigned>(config.prob_bits) << " bits.");
+ if (config.backoff_bits > 25) UTIL_THROW(ConfigException, "For efficiency reasons, quantizing backoff supports at most 25 bits. Currently you have requested " << static_cast<unsigned>(config.backoff_bits) << " bits.");
+}
+
+void SeparatelyQuantize::Train(uint8_t order, std::vector<float> &prob, std::vector<float> &backoff) {
+ TrainProb(order, prob);
+
+ // Backoff
+ float *centers = start_ + TableStart(order) + ProbTableLength();
+ *(centers++) = kNoExtensionBackoff;
+ *(centers++) = kExtensionBackoff;
+ MakeBins(&*backoff.begin(), &*backoff.end(), centers, (1ULL << backoff_bits_) - 2);
+}
+
+void SeparatelyQuantize::TrainProb(uint8_t order, std::vector<float> &prob) {
+ float *centers = start_ + TableStart(order);
+ *(centers++) = kBlankProb;
+ MakeBins(&*prob.begin(), &*prob.end(), centers, (1ULL << prob_bits_) - 1);
+}
+
+void SeparatelyQuantize::FinishedLoading(const Config &config) {
+ uint8_t *actual_base = reinterpret_cast<uint8_t*>(start_) - 8;
+ *(actual_base++) = kSeparatelyQuantizeVersion; // version
+ *(actual_base++) = config.prob_bits;
+ *(actual_base++) = config.backoff_bits;
+}
+
+} // namespace ngram
+} // namespace lm
diff --git a/kenlm/lm/quantize.hh b/kenlm/lm/quantize.hh
new file mode 100644
index 000000000..0b71d14a3
--- /dev/null
+++ b/kenlm/lm/quantize.hh
@@ -0,0 +1,207 @@
+#ifndef LM_QUANTIZE_H__
+#define LM_QUANTIZE_H__
+
+#include "lm/binary_format.hh" // for ModelType
+#include "lm/blank.hh"
+#include "lm/config.hh"
+#include "util/bit_packing.hh"
+
+#include <algorithm>
+#include <vector>
+
+#include <inttypes.h>
+
+#include <iostream>
+
+namespace lm {
+namespace ngram {
+
+class Config;
+
+/* Store values directly and don't quantize. */
+class DontQuantize {
+ public:
+ static const ModelType kModelTypeAdd = static_cast<ModelType>(0);
+ static void UpdateConfigFromBinary(int, const std::vector<uint64_t> &, Config &) {}
+ static std::size_t Size(uint8_t /*order*/, const Config &/*config*/) { return 0; }
+ static uint8_t MiddleBits(const Config &/*config*/) { return 63; }
+ static uint8_t LongestBits(const Config &/*config*/) { return 31; }
+
+ struct Middle {
+ void Write(void *base, uint64_t bit_offset, float prob, float backoff) const {
+ util::WriteNonPositiveFloat31(base, bit_offset, prob);
+ util::WriteFloat32(base, bit_offset + 31, backoff);
+ }
+ void Read(const void *base, uint64_t bit_offset, float &prob, float &backoff) const {
+ prob = util::ReadNonPositiveFloat31(base, bit_offset);
+ backoff = util::ReadFloat32(base, bit_offset + 31);
+ }
+ void ReadBackoff(const void *base, uint64_t bit_offset, float &backoff) const {
+ backoff = util::ReadFloat32(base, bit_offset + 31);
+ }
+ uint8_t TotalBits() const { return 63; }
+ };
+
+ struct Longest {
+ void Write(void *base, uint64_t bit_offset, float prob) const {
+ util::WriteNonPositiveFloat31(base, bit_offset, prob);
+ }
+ void Read(const void *base, uint64_t bit_offset, float &prob) const {
+ prob = util::ReadNonPositiveFloat31(base, bit_offset);
+ }
+ uint8_t TotalBits() const { return 31; }
+ };
+
+ DontQuantize() {}
+
+ void SetupMemory(void * /*start*/, const Config & /*config*/) {}
+
+ static const bool kTrain = false;
+ // These should never be called because kTrain is false.
+ void Train(uint8_t /*order*/, std::vector<float> &/*prob*/, std::vector<float> &/*backoff*/) {}
+ void TrainProb(uint8_t, std::vector<float> &/*prob*/) {}
+
+ void FinishedLoading(const Config &) {}
+
+ Middle Mid(uint8_t /*order*/) const { return Middle(); }
+ Longest Long(uint8_t /*order*/) const { return Longest(); }
+};
+
+class SeparatelyQuantize {
+ private:
+ class Bins {
+ public:
+ // Sigh C++ default constructor
+ Bins() {}
+
+ Bins(uint8_t bits, const float *const begin) : begin_(begin), end_(begin_ + (1ULL << bits)), bits_(bits), mask_((1ULL << bits) - 1) {}
+
+ uint64_t EncodeProb(float value) const {
+ return(value == kBlankProb ? kBlankProbQuant : Encode(value, 1));
+ }
+
+ uint64_t EncodeBackoff(float value) const {
+ if (value == 0.0) {
+ return HasExtension(value) ? kExtensionQuant : kNoExtensionQuant;
+ }
+ return Encode(value, 2);
+ }
+
+ float Decode(std::size_t off) const { return begin_[off]; }
+
+ uint8_t Bits() const { return bits_; }
+
+ uint64_t Mask() const { return mask_; }
+
+ private:
+ uint64_t Encode(float value, size_t reserved) const {
+ const float *above = std::lower_bound(begin_ + reserved, end_, value);
+ if (above == begin_ + reserved) return reserved;
+ if (above == end_) return end_ - begin_ - 1;
+ return above - begin_ - (value - *(above - 1) < *above - value);
+ }
+
+ const float *begin_;
+ const float *end_;
+ uint8_t bits_;
+ uint64_t mask_;
+ };
+
+ public:
+ static const ModelType kModelTypeAdd = kQuantAdd;
+
+ static void UpdateConfigFromBinary(int fd, const std::vector<uint64_t> &counts, Config &config);
+
+ static std::size_t Size(uint8_t order, const Config &config) {
+ size_t longest_table = (static_cast<size_t>(1) << static_cast<size_t>(config.prob_bits)) * sizeof(float);
+ size_t middle_table = (static_cast<size_t>(1) << static_cast<size_t>(config.backoff_bits)) * sizeof(float) + longest_table;
+ // unigrams are currently not quantized so no need for a table.
+ return (order - 2) * middle_table + longest_table + /* for the bit counts and alignment padding) */ 8;
+ }
+
+ static uint8_t MiddleBits(const Config &config) { return config.prob_bits + config.backoff_bits; }
+ static uint8_t LongestBits(const Config &config) { return config.prob_bits; }
+
+ class Middle {
+ public:
+ Middle(uint8_t prob_bits, const float *prob_begin, uint8_t backoff_bits, const float *backoff_begin) :
+ total_bits_(prob_bits + backoff_bits), total_mask_((1ULL << total_bits_) - 1), prob_(prob_bits, prob_begin), backoff_(backoff_bits, backoff_begin) {}
+
+ void Write(void *base, uint64_t bit_offset, float prob, float backoff) const {
+ util::WriteInt57(base, bit_offset, total_bits_,
+ (prob_.EncodeProb(prob) << backoff_.Bits()) | backoff_.EncodeBackoff(backoff));
+ }
+
+ void Read(const void *base, uint64_t bit_offset, float &prob, float &backoff) const {
+ uint64_t both = util::ReadInt57(base, bit_offset, total_bits_, total_mask_);
+ prob = prob_.Decode(both >> backoff_.Bits());
+ backoff = backoff_.Decode(both & backoff_.Mask());
+ }
+
+ void ReadBackoff(const void *base, uint64_t bit_offset, float &backoff) const {
+ backoff = backoff_.Decode(util::ReadInt25(base, bit_offset, backoff_.Bits(), backoff_.Mask()));
+ }
+
+ uint8_t TotalBits() const {
+ return total_bits_;
+ }
+
+ private:
+ const uint8_t total_bits_;
+ const uint64_t total_mask_;
+ const Bins prob_;
+ const Bins backoff_;
+ };
+
+ class Longest {
+ public:
+ // Sigh C++ default constructor
+ Longest() {}
+
+ Longest(uint8_t prob_bits, const float *prob_begin) : prob_(prob_bits, prob_begin) {}
+
+ void Write(void *base, uint64_t bit_offset, float prob) const {
+ util::WriteInt25(base, bit_offset, prob_.Bits(), prob_.EncodeProb(prob));
+ }
+
+ void Read(const void *base, uint64_t bit_offset, float &prob) const {
+ prob = prob_.Decode(util::ReadInt25(base, bit_offset, prob_.Bits(), prob_.Mask()));
+ }
+
+ uint8_t TotalBits() const { return prob_.Bits(); }
+
+ private:
+ Bins prob_;
+ };
+
+ SeparatelyQuantize() {}
+
+ void SetupMemory(void *start, const Config &config);
+
+ static const bool kTrain = true;
+ // Assumes kBlankProb is removed from prob and 0.0 is removed from backoff.
+ void Train(uint8_t order, std::vector<float> &prob, std::vector<float> &backoff);
+ // Train just probabilities (for longest order).
+ void TrainProb(uint8_t order, std::vector<float> &prob);
+
+ void FinishedLoading(const Config &config);
+
+ Middle Mid(uint8_t order) const {
+ const float *table = start_ + TableStart(order);
+ return Middle(prob_bits_, table, backoff_bits_, table + ProbTableLength());
+ }
+
+ Longest Long(uint8_t order) const { return Longest(prob_bits_, start_ + TableStart(order)); }
+
+ private:
+ size_t TableStart(uint8_t order) const { return ((1ULL << prob_bits_) + (1ULL << backoff_bits_)) * static_cast<uint64_t>(order - 2); }
+ size_t ProbTableLength() const { return (1ULL << prob_bits_); }
+
+ float *start_;
+ uint8_t prob_bits_, backoff_bits_;
+};
+
+} // namespace ngram
+} // namespace lm
+
+#endif // LM_QUANTIZE_H__
diff --git a/kenlm/lm/read_arpa.cc b/kenlm/lm/read_arpa.cc
index 7035d2053..455bc4ba8 100644
--- a/kenlm/lm/read_arpa.cc
+++ b/kenlm/lm/read_arpa.cc
@@ -3,9 +3,11 @@
#include "lm/blank.hh"
#include <cstdlib>
+#include <iostream>
#include <vector>
#include <ctype.h>
+#include <string.h>
#include <inttypes.h>
namespace lm {
@@ -22,18 +24,22 @@ bool IsEntirelyWhiteSpace(const StringPiece &line) {
return true;
}
+const char kBinaryMagic[] = "mmap lm http://kheafield.com/code";
+
} // namespace
void ReadARPACounts(util::FilePiece &in, std::vector<uint64_t> &number) {
number.clear();
StringPiece line;
- if (!IsEntirelyWhiteSpace(line = in.ReadLine())) {
+ while (IsEntirelyWhiteSpace(line = in.ReadLine())) {}
+ if (line != "\\data\\") {
if ((line.size() >= 2) && (line.data()[0] == 0x1f) && (static_cast<unsigned char>(line.data()[1]) == 0x8b)) {
UTIL_THROW(FormatLoadException, "Looks like a gzip file. If this is an ARPA file, pipe " << in.FileName() << " through zcat. If this already in binary format, you need to decompress it because mmap doesn't work on top of gzip.");
}
- UTIL_THROW(FormatLoadException, "First line was \"" << static_cast<int>(line.data()[1]) << "\" not blank");
+ if (static_cast<size_t>(line.size()) >= strlen(kBinaryMagic) && StringPiece(line.data(), strlen(kBinaryMagic)) == kBinaryMagic)
+ UTIL_THROW(FormatLoadException, "This looks like a binary file but got sent to the ARPA parser. Did you compress the binary file or pass a binary file where only ARPA files are accepted?");
+ UTIL_THROW(FormatLoadException, "first non-empty line was \"" << line << "\" not \\data\\.");
}
- if ((line = in.ReadLine()) != "\\data\\") UTIL_THROW(FormatLoadException, "second line was \"" << line << "\" not \\data\\.");
while (!IsEntirelyWhiteSpace(line = in.ReadLine())) {
if (line.size() < 6 || strncmp(line.data(), "ngram ", 6)) UTIL_THROW(FormatLoadException, "count line \"" << line << "\"doesn't begin with \"ngram \"");
// So strtol doesn't go off the end of line.
@@ -110,4 +116,17 @@ void ReadEnd(util::FilePiece &in) {
} catch (const util::EndOfFileException &e) {}
}
+void PositiveProbWarn::Warn(float prob) {
+ switch (action_) {
+ case THROW_UP:
+ UTIL_THROW(FormatLoadException, "Positive log probability " << prob << " in the model. This is a bug in IRSTLM; you can set config.positive_log_probability = SILENT or pass -i to build_binary to substitute 0.0 for the log probability. Error");
+ case COMPLAIN:
+ std::cerr << "There's a positive log probability " << prob << " in the APRA file, probably because of a bug in IRSTLM. This and subsequent entires will be mapepd to 0 log probability." << std::endl;
+ action_ = SILENT;
+ break;
+ case SILENT:
+ break;
+ }
+}
+
} // namespace lm
diff --git a/kenlm/lm/read_arpa.hh b/kenlm/lm/read_arpa.hh
index 4953d40ef..ab996bde7 100644
--- a/kenlm/lm/read_arpa.hh
+++ b/kenlm/lm/read_arpa.hh
@@ -22,10 +22,26 @@ void ReadEnd(util::FilePiece &in);
extern const bool kARPASpaces[256];
-template <class Voc> void Read1Gram(util::FilePiece &f, Voc &vocab, ProbBackoff *unigrams) {
+// Positive log probability warning.
+class PositiveProbWarn {
+ public:
+ PositiveProbWarn() : action_(THROW_UP) {}
+
+ explicit PositiveProbWarn(WarningAction action) : action_(action) {}
+
+ void Warn(float prob);
+
+ private:
+ WarningAction action_;
+};
+
+template <class Voc> void Read1Gram(util::FilePiece &f, Voc &vocab, ProbBackoff *unigrams, PositiveProbWarn &warn) {
try {
float prob = f.ReadFloat();
- if (prob > 0) UTIL_THROW(FormatLoadException, "Positive probability " << prob);
+ if (prob > 0.0) {
+ warn.Warn(prob);
+ prob = 0.0;
+ }
if (f.get() != '\t') UTIL_THROW(FormatLoadException, "Expected tab after probability");
ProbBackoff &value = unigrams[vocab.Insert(f.ReadDelimited(kARPASpaces))];
value.prob = prob;
@@ -36,18 +52,23 @@ template <class Voc> void Read1Gram(util::FilePiece &f, Voc &vocab, ProbBackoff
}
}
-template <class Voc> void Read1Grams(util::FilePiece &f, std::size_t count, Voc &vocab, ProbBackoff *unigrams) {
+// Return true if a positive log probability came out.
+template <class Voc> void Read1Grams(util::FilePiece &f, std::size_t count, Voc &vocab, ProbBackoff *unigrams, PositiveProbWarn &warn) {
ReadNGramHeader(f, 1);
for (std::size_t i = 0; i < count; ++i) {
- Read1Gram(f, vocab, unigrams);
+ Read1Gram(f, vocab, unigrams, warn);
}
vocab.FinishedLoading(unigrams);
}
-template <class Voc, class Weights> void ReadNGram(util::FilePiece &f, const unsigned char n, const Voc &vocab, WordIndex *const reverse_indices, Weights &weights) {
+// Return true if a positive log probability came out.
+template <class Voc, class Weights> void ReadNGram(util::FilePiece &f, const unsigned char n, const Voc &vocab, WordIndex *const reverse_indices, Weights &weights, PositiveProbWarn &warn) {
try {
weights.prob = f.ReadFloat();
- if (weights.prob > 0) UTIL_THROW(FormatLoadException, "Positive probability " << weights.prob);
+ if (weights.prob > 0.0) {
+ warn.Warn(weights.prob);
+ weights.prob = 0.0;
+ }
for (WordIndex *vocab_out = reverse_indices + n - 1; vocab_out >= reverse_indices; --vocab_out) {
*vocab_out = vocab.Index(f.ReadDelimited(kARPASpaces));
}
diff --git a/kenlm/lm/search_hashed.cc b/kenlm/lm/search_hashed.cc
index f97ec7904..82c53ec87 100644
--- a/kenlm/lm/search_hashed.cc
+++ b/kenlm/lm/search_hashed.cc
@@ -48,7 +48,7 @@ class ActivateUnigram {
ProbBackoff *modify_;
};
-template <class Voc, class Store, class Middle, class Activate> void ReadNGrams(util::FilePiece &f, const unsigned int n, const size_t count, const Voc &vocab, std::vector<Middle> &middle, Activate activate, Store &store) {
+template <class Voc, class Store, class Middle, class Activate> void ReadNGrams(util::FilePiece &f, const unsigned int n, const size_t count, const Voc &vocab, std::vector<Middle> &middle, Activate activate, Store &store, PositiveProbWarn &warn) {
ReadNGramHeader(f, n);
ProbBackoff blank;
@@ -61,7 +61,7 @@ template <class Voc, class Store, class Middle, class Activate> void ReadNGrams(
typename Store::Packing::Value value;
typename Middle::ConstIterator found;
for (size_t i = 0; i < count; ++i) {
- ReadNGram(f, n, vocab, vocab_ids, value);
+ ReadNGram(f, n, vocab, vocab_ids, value, warn);
keys[0] = detail::CombineWordHash(static_cast<uint64_t>(*vocab_ids), vocab_ids[1]);
for (unsigned int h = 1; h < n - 1; ++h) {
keys[h] = detail::CombineWordHash(keys[h-1], vocab_ids[h+1]);
@@ -80,24 +80,42 @@ template <class Voc, class Store, class Middle, class Activate> void ReadNGrams(
} // namespace
namespace detail {
+
+template <class MiddleT, class LongestT> uint8_t *TemplateHashedSearch<MiddleT, LongestT>::SetupMemory(uint8_t *start, const std::vector<uint64_t> &counts, const Config &config) {
+ std::size_t allocated = Unigram::Size(counts[0]);
+ unigram = Unigram(start, allocated);
+ start += allocated;
+ for (unsigned int n = 2; n < counts.size(); ++n) {
+ allocated = Middle::Size(counts[n - 1], config.probing_multiplier);
+ middle_.push_back(Middle(start, allocated));
+ start += allocated;
+ }
+ allocated = Longest::Size(counts.back(), config.probing_multiplier);
+ longest = Longest(start, allocated);
+ start += allocated;
+ return start;
+}
template <class MiddleT, class LongestT> template <class Voc> void TemplateHashedSearch<MiddleT, LongestT>::InitializeFromARPA(const char * /*file*/, util::FilePiece &f, const std::vector<uint64_t> &counts, const Config &config, Voc &vocab, Backing &backing) {
// TODO: fix sorted.
- SetupMemory(GrowForSearch(config, HASH_PROBING, counts, Size(counts, config), backing), counts, config);
+ SetupMemory(GrowForSearch(config, 0, Size(counts, config), backing), counts, config);
- Read1Grams(f, counts[0], vocab, unigram.Raw());
+ PositiveProbWarn warn(config.positive_log_probability);
+
+ Read1Grams(f, counts[0], vocab, unigram.Raw(), warn);
+ CheckSpecials(config, vocab);
try {
if (counts.size() > 2) {
- ReadNGrams(f, 2, counts[1], vocab, middle, ActivateUnigram(unigram.Raw()), middle[0]);
+ ReadNGrams(f, 2, counts[1], vocab, middle_, ActivateUnigram(unigram.Raw()), middle_[0], warn);
}
for (unsigned int n = 3; n < counts.size(); ++n) {
- ReadNGrams(f, n, counts[n-1], vocab, middle, ActivateLowerMiddle<Middle>(middle[n-3]), middle[n-2]);
+ ReadNGrams(f, n, counts[n-1], vocab, middle_, ActivateLowerMiddle<Middle>(middle_[n-3]), middle_[n-2], warn);
}
if (counts.size() > 2) {
- ReadNGrams(f, counts.size(), counts[counts.size() - 1], vocab, middle, ActivateLowerMiddle<Middle>(middle.back()), longest);
+ ReadNGrams(f, counts.size(), counts[counts.size() - 1], vocab, middle_, ActivateLowerMiddle<Middle>(middle_.back()), longest, warn);
} else {
- ReadNGrams(f, counts.size(), counts[counts.size() - 1], vocab, middle, ActivateUnigram(unigram.Raw()), longest);
+ ReadNGrams(f, counts.size(), counts[counts.size() - 1], vocab, middle_, ActivateUnigram(unigram.Raw()), longest, warn);
}
} catch (util::ProbingSizeException &e) {
UTIL_THROW(util::ProbingSizeException, "Avoid pruning n-grams like \"bar baz quux\" when \"foo bar baz quux\" is still in the model. KenLM will work when this pruning happens, but the probing model assumes these events are rare enough that using blank space in the probing hash table will cover all of them. Increase probing_multiplier (-p to build_binary) to add more blank spaces.\n");
@@ -105,13 +123,18 @@ template <class MiddleT, class LongestT> template <class Voc> void TemplateHashe
ReadEnd(f);
}
-template void TemplateHashedSearch<ProbingHashedSearch::Middle, ProbingHashedSearch::Longest>::InitializeFromARPA(const char *, util::FilePiece &f, const std::vector<uint64_t> &counts, const Config &, ProbingVocabulary &vocab, Backing &backing);
-template void TemplateHashedSearch<SortedHashedSearch::Middle, SortedHashedSearch::Longest>::InitializeFromARPA(const char *, util::FilePiece &f, const std::vector<uint64_t> &counts, const Config &, SortedVocabulary &vocab, Backing &backing);
-
-SortedHashedSearch::SortedHashedSearch() {
- UTIL_THROW(util::Exception, "Sorted is broken at the moment, sorry");
+template <class MiddleT, class LongestT> void TemplateHashedSearch<MiddleT, LongestT>::LoadedBinary() {
+ unigram.LoadedBinary();
+ for (typename std::vector<Middle>::iterator i = middle_.begin(); i != middle_.end(); ++i) {
+ i->LoadedBinary();
+ }
+ longest.LoadedBinary();
}
+template class TemplateHashedSearch<ProbingHashedSearch::Middle, ProbingHashedSearch::Longest>;
+
+template void TemplateHashedSearch<ProbingHashedSearch::Middle, ProbingHashedSearch::Longest>::InitializeFromARPA(const char *, util::FilePiece &f, const std::vector<uint64_t> &counts, const Config &, ProbingVocabulary &vocab, Backing &backing);
+
} // namespace detail
} // namespace ngram
} // namespace lm
diff --git a/kenlm/lm/search_hashed.hh b/kenlm/lm/search_hashed.hh
index 6dc11fb32..c62985e4b 100644
--- a/kenlm/lm/search_hashed.hh
+++ b/kenlm/lm/search_hashed.hh
@@ -8,7 +8,6 @@
#include "util/key_value_packing.hh"
#include "util/probing_hash_table.hh"
-#include "util/sorted_uniform.hh"
#include <algorithm>
#include <vector>
@@ -53,82 +52,79 @@ struct HashedSearch {
Unigram unigram;
- bool LookupUnigram(WordIndex word, float &prob, float &backoff, Node &next) const {
+ void LookupUnigram(WordIndex word, float &prob, float &backoff, Node &next) const {
const ProbBackoff &entry = unigram.Lookup(word);
prob = entry.prob;
backoff = entry.backoff;
next = static_cast<Node>(word);
- return true;
}
};
-template <class MiddleT, class LongestT> struct TemplateHashedSearch : public HashedSearch {
- typedef MiddleT Middle;
- std::vector<Middle> middle;
+template <class MiddleT, class LongestT> class TemplateHashedSearch : public HashedSearch {
+ public:
+ typedef MiddleT Middle;
- typedef LongestT Longest;
- Longest longest;
+ typedef LongestT Longest;
+ Longest longest;
- static std::size_t Size(const std::vector<uint64_t> &counts, const Config &config) {
- std::size_t ret = Unigram::Size(counts[0]);
- for (unsigned char n = 1; n < counts.size() - 1; ++n) {
- ret += Middle::Size(counts[n], config.probing_multiplier);
- }
- return ret + Longest::Size(counts.back(), config.probing_multiplier);
- }
+ // TODO: move probing_multiplier here with next binary file format update.
+ static void UpdateConfigFromBinary(int, const std::vector<uint64_t> &, Config &) {}
- uint8_t *SetupMemory(uint8_t *start, const std::vector<uint64_t> &counts, const Config &config) {
- std::size_t allocated = Unigram::Size(counts[0]);
- unigram = Unigram(start, allocated);
- start += allocated;
- for (unsigned int n = 2; n < counts.size(); ++n) {
- allocated = Middle::Size(counts[n - 1], config.probing_multiplier);
- middle.push_back(Middle(start, allocated));
- start += allocated;
+ static std::size_t Size(const std::vector<uint64_t> &counts, const Config &config) {
+ std::size_t ret = Unigram::Size(counts[0]);
+ for (unsigned char n = 1; n < counts.size() - 1; ++n) {
+ ret += Middle::Size(counts[n], config.probing_multiplier);
+ }
+ return ret + Longest::Size(counts.back(), config.probing_multiplier);
}
- allocated = Longest::Size(counts.back(), config.probing_multiplier);
- longest = Longest(start, allocated);
- start += allocated;
- return start;
- }
- template <class Voc> void InitializeFromARPA(const char *file, util::FilePiece &f, const std::vector<uint64_t> &counts, const Config &config, Voc &vocab, Backing &backing);
+ uint8_t *SetupMemory(uint8_t *start, const std::vector<uint64_t> &counts, const Config &config);
- bool LookupMiddle(const Middle &middle, WordIndex word, float &prob, float &backoff, Node &node) const {
- node = CombineWordHash(node, word);
- typename Middle::ConstIterator found;
- if (!middle.Find(node, found)) return false;
- prob = found->GetValue().prob;
- backoff = found->GetValue().backoff;
- return true;
- }
+ template <class Voc> void InitializeFromARPA(const char *file, util::FilePiece &f, const std::vector<uint64_t> &counts, const Config &config, Voc &vocab, Backing &backing);
- bool LookupMiddleNoProb(const Middle &middle, WordIndex word, float &backoff, Node &node) const {
- node = CombineWordHash(node, word);
- typename Middle::ConstIterator found;
- if (!middle.Find(node, found)) return false;
- backoff = found->GetValue().backoff;
- return true;
- }
+ const Middle *MiddleBegin() const { return &*middle_.begin(); }
+ const Middle *MiddleEnd() const { return &*middle_.end(); }
- bool LookupLongest(WordIndex word, float &prob, Node &node) const {
- node = CombineWordHash(node, word);
- typename Longest::ConstIterator found;
- if (!longest.Find(node, found)) return false;
- prob = found->GetValue().prob;
- return true;
- }
+ bool LookupMiddle(const Middle &middle, WordIndex word, float &prob, float &backoff, Node &node) const {
+ node = CombineWordHash(node, word);
+ typename Middle::ConstIterator found;
+ if (!middle.Find(node, found)) return false;
+ prob = found->GetValue().prob;
+ backoff = found->GetValue().backoff;
+ return true;
+ }
- // Geenrate a node without necessarily checking that it actually exists.
- // Optionally return false if it's know to not exist.
- bool FastMakeNode(const WordIndex *begin, const WordIndex *end, Node &node) const {
- assert(begin != end);
- node = static_cast<Node>(*begin);
- for (const WordIndex *i = begin + 1; i < end; ++i) {
- node = CombineWordHash(node, *i);
+ void LoadedBinary();
+
+ bool LookupMiddleNoProb(const Middle &middle, WordIndex word, float &backoff, Node &node) const {
+ node = CombineWordHash(node, word);
+ typename Middle::ConstIterator found;
+ if (!middle.Find(node, found)) return false;
+ backoff = found->GetValue().backoff;
+ return true;
}
- return true;
- }
+
+ bool LookupLongest(WordIndex word, float &prob, Node &node) const {
+ node = CombineWordHash(node, word);
+ typename Longest::ConstIterator found;
+ if (!longest.Find(node, found)) return false;
+ prob = found->GetValue().prob;
+ return true;
+ }
+
+ // Geenrate a node without necessarily checking that it actually exists.
+ // Optionally return false if it's know to not exist.
+ bool FastMakeNode(const WordIndex *begin, const WordIndex *end, Node &node) const {
+ assert(begin != end);
+ node = static_cast<Node>(*begin);
+ for (const WordIndex *i = begin + 1; i < end; ++i) {
+ node = CombineWordHash(node, *i);
+ }
+ return true;
+ }
+
+ private:
+ std::vector<Middle> middle_;
};
// std::identity is an SGI extension :-(
@@ -143,15 +139,6 @@ struct ProbingHashedSearch : public TemplateHashedSearch<
static const ModelType kModelType = HASH_PROBING;
};
-struct SortedHashedSearch : public TemplateHashedSearch<
- util::SortedUniformMap<util::ByteAlignedPacking<uint64_t, ProbBackoff> >,
- util::SortedUniformMap<util::ByteAlignedPacking<uint64_t, Prob> > > {
-
- SortedHashedSearch();
-
- static const ModelType kModelType = HASH_SORTED;
-};
-
} // namespace detail
} // namespace ngram
} // namespace lm
diff --git a/kenlm/lm/search_trie.cc b/kenlm/lm/search_trie.cc
index 0d255c333..05059ffbe 100644
--- a/kenlm/lm/search_trie.cc
+++ b/kenlm/lm/search_trie.cc
@@ -1,9 +1,11 @@
/* This is where the trie is built. It's on-disk. */
#include "lm/search_trie.hh"
+#include "lm/bhiksha.hh"
#include "lm/blank.hh"
#include "lm/lm_exception.hh"
#include "lm/max_order.hh"
+#include "lm/quantize.hh"
#include "lm/read_arpa.hh"
#include "lm/trie.hh"
#include "lm/vocab.hh"
@@ -21,6 +23,7 @@
#include <cstdio>
#include <deque>
#include <limits>
+#include <numeric>
#include <vector>
#include <sys/mman.h>
@@ -293,7 +296,7 @@ class SortedFileReader {
ReadOrThrow(file_.get(), &weights, sizeof(Weights));
}
- bool Ended() {
+ bool Ended() const {
return ended_;
}
@@ -480,7 +483,7 @@ void MergeContextFiles(const std::string &first_base, const std::string &second_
CopyRestOrThrow(remaining.GetFile(), out.get());
}
-void ConvertToSorted(util::FilePiece &f, const SortedVocabulary &vocab, const std::vector<uint64_t> &counts, util::scoped_memory &mem, const std::string &file_prefix, unsigned char order) {
+void ConvertToSorted(util::FilePiece &f, const SortedVocabulary &vocab, const std::vector<uint64_t> &counts, util::scoped_memory &mem, const std::string &file_prefix, unsigned char order, PositiveProbWarn &warn) {
ReadNGramHeader(f, order);
const size_t count = counts[order - 1];
// Size of weights. Does it include backoff?
@@ -495,11 +498,11 @@ void ConvertToSorted(util::FilePiece &f, const SortedVocabulary &vocab, const st
uint8_t *out_end = out + std::min(count - done, batch_size) * entry_size;
if (order == counts.size()) {
for (; out != out_end; out += entry_size) {
- ReadNGram(f, order, vocab, reinterpret_cast<WordIndex*>(out), *reinterpret_cast<Prob*>(out + words_size));
+ ReadNGram(f, order, vocab, reinterpret_cast<WordIndex*>(out), *reinterpret_cast<Prob*>(out + words_size), warn);
}
} else {
for (; out != out_end; out += entry_size) {
- ReadNGram(f, order, vocab, reinterpret_cast<WordIndex*>(out), *reinterpret_cast<ProbBackoff*>(out + words_size));
+ ReadNGram(f, order, vocab, reinterpret_cast<WordIndex*>(out), *reinterpret_cast<ProbBackoff*>(out + words_size), warn);
}
}
// Sort full records by full n-gram.
@@ -535,12 +538,17 @@ void ConvertToSorted(util::FilePiece &f, const SortedVocabulary &vocab, const st
}
}
-void ARPAToSortedFiles(util::FilePiece &f, const std::vector<uint64_t> &counts, size_t buffer, const std::string &file_prefix, SortedVocabulary &vocab) {
+void ARPAToSortedFiles(const Config &config, util::FilePiece &f, std::vector<uint64_t> &counts, size_t buffer, const std::string &file_prefix, SortedVocabulary &vocab) {
+ PositiveProbWarn warn(config.positive_log_probability);
{
std::string unigram_name = file_prefix + "unigrams";
util::scoped_fd unigram_file;
- util::scoped_mmap unigram_mmap(util::MapZeroedWrite(unigram_name.c_str(), counts[0] * sizeof(ProbBackoff), unigram_file), counts[0] * sizeof(ProbBackoff));
- Read1Grams(f, counts[0], vocab, reinterpret_cast<ProbBackoff*>(unigram_mmap.get()));
+ // In case <unk> appears.
+ size_t file_out = (counts[0] + 1) * sizeof(ProbBackoff);
+ util::scoped_mmap unigram_mmap(util::MapZeroedWrite(unigram_name.c_str(), file_out, unigram_file), file_out);
+ Read1Grams(f, counts[0], vocab, reinterpret_cast<ProbBackoff*>(unigram_mmap.get()), warn);
+ CheckSpecials(config, vocab);
+ if (!vocab.SawUnk()) ++counts[0];
}
// Only use as much buffer as we need.
@@ -556,7 +564,7 @@ void ARPAToSortedFiles(util::FilePiece &f, const std::vector<uint64_t> &counts,
if (!mem.get()) UTIL_THROW(util::ErrnoException, "malloc failed for sort buffer size " << buffer);
for (unsigned char order = 2; order <= counts.size(); ++order) {
- ConvertToSorted(f, vocab, counts, mem, file_prefix, order);
+ ConvertToSorted(f, vocab, counts, mem, file_prefix, order, warn);
}
ReadEnd(f);
}
@@ -571,10 +579,10 @@ bool HeadMatch(const WordIndex *words, const WordIndex *const words_end, const W
return true;
}
-// Counting phrase
+// Phase to count n-grams, including blanks inserted because they were pruned but have extensions
class JustCount {
public:
- JustCount(ContextReader * /*contexts*/, UnigramValue * /*unigrams*/, BitPackedMiddle * /*middle*/, BitPackedLongest &/*longest*/, uint64_t *counts, unsigned char order)
+ template <class Middle, class Longest> JustCount(ContextReader * /*contexts*/, UnigramValue * /*unigrams*/, Middle * /*middle*/, Longest &/*longest*/, uint64_t *counts, unsigned char order)
: counts_(counts), longest_counts_(counts + order - 1) {}
void Unigrams(WordIndex begin, WordIndex end) {
@@ -602,9 +610,10 @@ class JustCount {
uint64_t *const counts_, *const longest_counts_;
};
-class WriteEntries {
+// Phase to actually write n-grams to the trie.
+template <class Quant, class Bhiksha> class WriteEntries {
public:
- WriteEntries(ContextReader *contexts, UnigramValue *unigrams, BitPackedMiddle *middle, BitPackedLongest &longest, const uint64_t * /*counts*/, unsigned char order) :
+ WriteEntries(ContextReader *contexts, UnigramValue *unigrams, BitPackedMiddle<typename Quant::Middle, Bhiksha> *middle, BitPackedLongest<typename Quant::Longest> &longest, const uint64_t * /*counts*/, unsigned char order) :
contexts_(contexts),
unigrams_(unigrams),
middle_(middle),
@@ -641,14 +650,14 @@ class WriteEntries {
private:
ContextReader *contexts_;
UnigramValue *const unigrams_;
- BitPackedMiddle *const middle_;
- BitPackedLongest &longest_;
+ BitPackedMiddle<typename Quant::Middle, Bhiksha> *const middle_;
+ BitPackedLongest<typename Quant::Longest> &longest_;
BitPacked &bigram_pack_;
};
template <class Doing> class RecursiveInsert {
public:
- RecursiveInsert(SortedFileReader *inputs, ContextReader *contexts, UnigramValue *unigrams, BitPackedMiddle *middle, BitPackedLongest &longest, uint64_t *counts, unsigned char order) :
+ template <class MiddleT, class LongestT> RecursiveInsert(SortedFileReader *inputs, ContextReader *contexts, UnigramValue *unigrams, MiddleT *middle, LongestT &longest, uint64_t *counts, unsigned char order) :
doing_(contexts, unigrams, middle, longest, counts, order), inputs_(inputs), inputs_end_(inputs + order - 1), order_minus_2_(order - 2) {
}
@@ -763,15 +772,59 @@ template <class Doing> class RecursiveInsert {
void SanityCheckCounts(const std::vector<uint64_t> &initial, const std::vector<uint64_t> &fixed) {
if (fixed[0] != initial[0]) UTIL_THROW(util::Exception, "Unigram count should be constant but initial is " << initial[0] << " and recounted is " << fixed[0]);
- if (fixed.back() != initial.back()) UTIL_THROW(util::Exception, "Longest count should be constant");
+ if (fixed.back() != initial.back()) UTIL_THROW(util::Exception, "Longest count should be constant but it changed from " << initial.back() << " to " << fixed.back());
for (unsigned char i = 0; i < initial.size(); ++i) {
if (fixed[i] < initial[i]) UTIL_THROW(util::Exception, "Counts came out lower than expected. This shouldn't happen");
}
}
-void BuildTrie(const std::string &file_prefix, const std::vector<uint64_t> &counts, const Config &config, TrieSearch &out, Backing &backing) {
- SortedFileReader inputs[counts.size() - 1];
- ContextReader contexts[counts.size() - 1];
+bool IsDirectory(const char *path) {
+ struct stat info;
+ if (0 != stat(path, &info)) return false;
+ return S_ISDIR(info.st_mode);
+}
+
+template <class Quant> void TrainQuantizer(uint8_t order, uint64_t count, SortedFileReader &reader, util::ErsatzProgress &progress, Quant &quant) {
+ ProbBackoff weights;
+ std::vector<float> probs, backoffs;
+ probs.reserve(count);
+ backoffs.reserve(count);
+ for (reader.Rewind(); !reader.Ended(); reader.NextHeader()) {
+ uint64_t entries = reader.ReadCount();
+ for (uint64_t c = 0; c < entries; ++c) {
+ reader.ReadWord();
+ reader.ReadWeights(weights);
+ // kBlankProb isn't added yet.
+ probs.push_back(weights.prob);
+ if (weights.backoff != 0.0) backoffs.push_back(weights.backoff);
+ ++progress;
+ }
+ }
+ quant.Train(order, probs, backoffs);
+}
+
+template <class Quant> void TrainProbQuantizer(uint8_t order, uint64_t count, SortedFileReader &reader, util::ErsatzProgress &progress, Quant &quant) {
+ Prob weights;
+ std::vector<float> probs, backoffs;
+ probs.reserve(count);
+ for (reader.Rewind(); !reader.Ended(); reader.NextHeader()) {
+ uint64_t entries = reader.ReadCount();
+ for (uint64_t c = 0; c < entries; ++c) {
+ reader.ReadWord();
+ reader.ReadWeights(weights);
+ // kBlankProb isn't added yet.
+ probs.push_back(weights.prob);
+ ++progress;
+ }
+ }
+ quant.TrainProb(order, probs);
+}
+
+} // namespace
+
+template <class Quant, class Bhiksha> void BuildTrie(const std::string &file_prefix, std::vector<uint64_t> &counts, const Config &config, TrieSearch<Quant, Bhiksha> &out, Quant &quant, const SortedVocabulary &vocab, Backing &backing) {
+ std::vector<SortedFileReader> inputs(counts.size() - 1);
+ std::vector<ContextReader> contexts(counts.size() - 1);
for (unsigned char i = 2; i <= counts.size(); ++i) {
std::stringstream assembled;
@@ -785,12 +838,25 @@ void BuildTrie(const std::string &file_prefix, const std::vector<uint64_t> &coun
std::vector<uint64_t> fixed_counts(counts.size());
{
- RecursiveInsert<JustCount> counter(inputs, contexts, NULL, &*out.middle.begin(), out.longest, &*fixed_counts.begin(), counts.size());
+ RecursiveInsert<JustCount> counter(&*inputs.begin(), &*contexts.begin(), NULL, out.middle_begin_, out.longest, &*fixed_counts.begin(), counts.size());
counter.Apply(config.messages, "Counting n-grams that should not have been pruned", counts[0]);
}
+ for (std::vector<SortedFileReader>::const_iterator i = inputs.begin(); i != inputs.end(); ++i) {
+ if (!i->Ended()) UTIL_THROW(FormatLoadException, "There's a bug in the trie implementation: the " << (i - inputs.begin() + 2) << "-gram table did not complete reading");
+ }
SanityCheckCounts(counts, fixed_counts);
+ counts = fixed_counts;
+
+ out.SetupMemory(GrowForSearch(config, vocab.UnkCountChangePadding(), TrieSearch<Quant, Bhiksha>::Size(fixed_counts, config), backing), fixed_counts, config);
- out.SetupMemory(GrowForSearch(config, TrieSearch::kModelType, fixed_counts, TrieSearch::Size(fixed_counts, config), backing), fixed_counts, config);
+ if (Quant::kTrain) {
+ util::ErsatzProgress progress(config.messages, "Quantizing", std::accumulate(counts.begin() + 1, counts.end(), 0));
+ for (unsigned char i = 2; i < counts.size(); ++i) {
+ TrainQuantizer(i, counts[i-1], inputs[i-2], progress, quant);
+ }
+ TrainProbQuantizer(counts.size(), counts.back(), inputs[counts.size() - 2], progress, quant);
+ quant.FinishedLoading(config);
+ }
for (unsigned char i = 2; i <= counts.size(); ++i) {
inputs[i-2].Rewind();
@@ -798,12 +864,12 @@ void BuildTrie(const std::string &file_prefix, const std::vector<uint64_t> &coun
UnigramValue *unigrams = out.unigram.Raw();
// Fill entries except unigram probabilities.
{
- RecursiveInsert<WriteEntries> inserter(inputs, contexts, unigrams, &*out.middle.begin(), out.longest, &*fixed_counts.begin(), counts.size());
+ RecursiveInsert<WriteEntries<Quant, Bhiksha> > inserter(&*inputs.begin(), &*contexts.begin(), unigrams, out.middle_begin_, out.longest, &*fixed_counts.begin(), counts.size());
inserter.Apply(config.messages, "Building trie", fixed_counts[0]);
}
// Fill unigram probabilities.
- {
+ try {
std::string name(file_prefix + "unigrams");
util::scoped_FILE file(OpenOrThrow(name.c_str(), "r"));
for (WordIndex i = 0; i < counts[0]; ++i) {
@@ -814,6 +880,9 @@ void BuildTrie(const std::string &file_prefix, const std::vector<uint64_t> &coun
}
}
RemoveOrThrow(name.c_str());
+ } catch (util::Exception &e) {
+ e << " while re-reading unigram probabilities";
+ throw;
}
// Do not disable this error message or else too little state will be returned. Both WriteEntries::Middle and returning state based on found n-grams will need to be fixed to handle this situation.
@@ -825,30 +894,58 @@ void BuildTrie(const std::string &file_prefix, const std::vector<uint64_t> &coun
for (const WordIndex *i = *context; i != *context + order - 1; ++i) {
e << ' ' << *i;
}
- e << " so this context must appear in the model as a " << static_cast<unsigned int>(order - 1) << "-gram but it does not.";
+ e << " so this context must appear in the model as a " << static_cast<unsigned int>(order - 1) << "-gram but it does not";
throw e;
}
}
/* Set ending offsets so the last entry will be sized properly */
// Last entry for unigrams was already set.
- if (!out.middle.empty()) {
- for (size_t i = 0; i < out.middle.size() - 1; ++i) {
- out.middle[i].FinishedLoading(out.middle[i+1].InsertIndex());
+ if (out.middle_begin_ != out.middle_end_) {
+ for (typename TrieSearch<Quant, Bhiksha>::Middle *i = out.middle_begin_; i != out.middle_end_ - 1; ++i) {
+ i->FinishedLoading((i+1)->InsertIndex(), config);
}
- out.middle.back().FinishedLoading(out.longest.InsertIndex());
- }
+ (out.middle_end_ - 1)->FinishedLoading(out.longest.InsertIndex(), config);
+ }
}
-bool IsDirectory(const char *path) {
- struct stat info;
- if (0 != stat(path, &info)) return false;
- return S_ISDIR(info.st_mode);
+template <class Quant, class Bhiksha> uint8_t *TrieSearch<Quant, Bhiksha>::SetupMemory(uint8_t *start, const std::vector<uint64_t> &counts, const Config &config) {
+ quant_.SetupMemory(start, config);
+ start += Quant::Size(counts.size(), config);
+ unigram.Init(start);
+ start += Unigram::Size(counts[0]);
+ FreeMiddles();
+ middle_begin_ = static_cast<Middle*>(malloc(sizeof(Middle) * (counts.size() - 2)));
+ middle_end_ = middle_begin_ + (counts.size() - 2);
+ std::vector<uint8_t*> middle_starts(counts.size() - 2);
+ for (unsigned char i = 2; i < counts.size(); ++i) {
+ middle_starts[i-2] = start;
+ start += Middle::Size(Quant::MiddleBits(config), counts[i-1], counts[0], counts[i], config);
+ }
+ // Crazy backwards thing so we initialize using pointers to ones that have already been initialized
+ for (unsigned char i = counts.size() - 1; i >= 2; --i) {
+ new (middle_begin_ + i - 2) Middle(
+ middle_starts[i-2],
+ quant_.Mid(i),
+ counts[i-1],
+ counts[0],
+ counts[i],
+ (i == counts.size() - 1) ? static_cast<const BitPacked&>(longest) : static_cast<const BitPacked &>(middle_begin_[i-1]),
+ config);
+ }
+ longest.Init(start, quant_.Long(counts.size()), counts[0]);
+ return start + Longest::Size(Quant::LongestBits(config), counts.back(), counts[0]);
}
-} // namespace
+template <class Quant, class Bhiksha> void TrieSearch<Quant, Bhiksha>::LoadedBinary() {
+ unigram.LoadedBinary();
+ for (Middle *i = middle_begin_; i != middle_end_; ++i) {
+ i->LoadedBinary();
+ }
+ longest.LoadedBinary();
+}
-void TrieSearch::InitializeFromARPA(const char *file, util::FilePiece &f, std::vector<uint64_t> &counts, const Config &config, SortedVocabulary &vocab, Backing &backing) {
+template <class Quant, class Bhiksha> void TrieSearch<Quant, Bhiksha>::InitializeFromARPA(const char *file, util::FilePiece &f, std::vector<uint64_t> &counts, const Config &config, SortedVocabulary &vocab, Backing &backing) {
std::string temporary_directory;
if (config.temporary_directory_prefix) {
temporary_directory = config.temporary_directory_prefix;
@@ -870,14 +967,19 @@ void TrieSearch::InitializeFromARPA(const char *file, util::FilePiece &f, std::v
// Add directory delimiter. Assumes a real operating system.
temporary_directory += '/';
// At least 1MB sorting memory.
- ARPAToSortedFiles(f, counts, std::max<size_t>(config.building_memory, 1048576), temporary_directory.c_str(), vocab);
+ ARPAToSortedFiles(config, f, counts, std::max<size_t>(config.building_memory, 1048576), temporary_directory.c_str(), vocab);
- BuildTrie(temporary_directory, counts, config, *this, backing);
+ BuildTrie(temporary_directory, counts, config, *this, quant_, vocab, backing);
if (rmdir(temporary_directory.c_str()) && config.messages) {
*config.messages << "Failed to delete " << temporary_directory << std::endl;
}
}
+template class TrieSearch<DontQuantize, DontBhiksha>;
+template class TrieSearch<DontQuantize, ArrayBhiksha>;
+template class TrieSearch<SeparatelyQuantize, DontBhiksha>;
+template class TrieSearch<SeparatelyQuantize, ArrayBhiksha>;
+
} // namespace trie
} // namespace ngram
} // namespace lm
diff --git a/kenlm/lm/search_trie.hh b/kenlm/lm/search_trie.hh
index 0f720217d..2f39c09ff 100644
--- a/kenlm/lm/search_trie.hh
+++ b/kenlm/lm/search_trie.hh
@@ -13,72 +13,90 @@ struct Backing;
class SortedVocabulary;
namespace trie {
-struct TrieSearch {
- typedef NodeRange Node;
+template <class Quant, class Bhiksha> class TrieSearch;
+template <class Quant, class Bhiksha> void BuildTrie(const std::string &file_prefix, std::vector<uint64_t> &counts, const Config &config, TrieSearch<Quant, Bhiksha> &out, Quant &quant, const SortedVocabulary &vocab, Backing &backing);
- typedef ::lm::ngram::trie::Unigram Unigram;
- Unigram unigram;
+template <class Quant, class Bhiksha> class TrieSearch {
+ public:
+ typedef NodeRange Node;
- typedef trie::BitPackedMiddle Middle;
- std::vector<Middle> middle;
+ typedef ::lm::ngram::trie::Unigram Unigram;
+ Unigram unigram;
- typedef trie::BitPackedLongest Longest;
- Longest longest;
+ typedef trie::BitPackedMiddle<typename Quant::Middle, Bhiksha> Middle;
- static const ModelType kModelType = TRIE_SORTED;
+ typedef trie::BitPackedLongest<typename Quant::Longest> Longest;
+ Longest longest;
- static std::size_t Size(const std::vector<uint64_t> &counts, const Config &/*config*/) {
- std::size_t ret = Unigram::Size(counts[0]);
- for (unsigned char i = 1; i < counts.size() - 1; ++i) {
- ret += Middle::Size(counts[i], counts[0], counts[i+1]);
+ static const ModelType kModelType = static_cast<ModelType>(TRIE_SORTED + Quant::kModelTypeAdd + Bhiksha::kModelTypeAdd);
+
+ static void UpdateConfigFromBinary(int fd, const std::vector<uint64_t> &counts, Config &config) {
+ Quant::UpdateConfigFromBinary(fd, counts, config);
+ AdvanceOrThrow(fd, Quant::Size(counts.size(), config) + Unigram::Size(counts[0]));
+ Bhiksha::UpdateConfigFromBinary(fd, config);
}
- return ret + Longest::Size(counts.back(), counts[0]);
- }
-
- uint8_t *SetupMemory(uint8_t *start, const std::vector<uint64_t> &counts, const Config &/*config*/) {
- unigram.Init(start);
- start += Unigram::Size(counts[0]);
- middle.resize(counts.size() - 2);
- for (unsigned char i = 1; i < counts.size() - 1; ++i) {
- middle[i-1].Init(
- start,
- counts[0],
- counts[i+1],
- (i == counts.size() - 2) ? static_cast<const BitPacked&>(longest) : static_cast<const BitPacked &>(middle[i]));
- start += Middle::Size(counts[i], counts[0], counts[i+1]);
+
+ static std::size_t Size(const std::vector<uint64_t> &counts, const Config &config) {
+ std::size_t ret = Quant::Size(counts.size(), config) + Unigram::Size(counts[0]);
+ for (unsigned char i = 1; i < counts.size() - 1; ++i) {
+ ret += Middle::Size(Quant::MiddleBits(config), counts[i], counts[0], counts[i+1], config);
+ }
+ return ret + Longest::Size(Quant::LongestBits(config), counts.back(), counts[0]);
}
- longest.Init(start, counts[0]);
- return start + Longest::Size(counts.back(), counts[0]);
- }
-
- void InitializeFromARPA(const char *file, util::FilePiece &f, std::vector<uint64_t> &counts, const Config &config, SortedVocabulary &vocab, Backing &backing);
-
- bool LookupUnigram(WordIndex word, float &prob, float &backoff, Node &node) const {
- return unigram.Find(word, prob, backoff, node);
- }
-
- bool LookupMiddle(const Middle &mid, WordIndex word, float &prob, float &backoff, Node &node) const {
- return mid.Find(word, prob, backoff, node);
- }
-
- bool LookupMiddleNoProb(const Middle &mid, WordIndex word, float &backoff, Node &node) const {
- return mid.FindNoProb(word, backoff, node);
- }
-
- bool LookupLongest(WordIndex word, float &prob, const Node &node) const {
- return longest.Find(word, prob, node);
- }
-
- bool FastMakeNode(const WordIndex *begin, const WordIndex *end, Node &node) const {
- // TODO: don't decode backoff.
- assert(begin != end);
- float ignored_prob, ignored_backoff;
- LookupUnigram(*begin, ignored_prob, ignored_backoff, node);
- for (const WordIndex *i = begin + 1; i < end; ++i) {
- if (!LookupMiddleNoProb(middle[i - begin - 1], *i, ignored_backoff, node)) return false;
+
+ TrieSearch() : middle_begin_(NULL), middle_end_(NULL) {}
+
+ ~TrieSearch() { FreeMiddles(); }
+
+ uint8_t *SetupMemory(uint8_t *start, const std::vector<uint64_t> &counts, const Config &config);
+
+ void LoadedBinary();
+
+ const Middle *MiddleBegin() const { return middle_begin_; }
+ const Middle *MiddleEnd() const { return middle_end_; }
+
+ void InitializeFromARPA(const char *file, util::FilePiece &f, std::vector<uint64_t> &counts, const Config &config, SortedVocabulary &vocab, Backing &backing);
+
+ void LookupUnigram(WordIndex word, float &prob, float &backoff, Node &node) const {
+ unigram.Find(word, prob, backoff, node);
+ }
+
+ bool LookupMiddle(const Middle &mid, WordIndex word, float &prob, float &backoff, Node &node) const {
+ return mid.Find(word, prob, backoff, node);
}
- return true;
- }
+
+ bool LookupMiddleNoProb(const Middle &mid, WordIndex word, float &backoff, Node &node) const {
+ return mid.FindNoProb(word, backoff, node);
+ }
+
+ bool LookupLongest(WordIndex word, float &prob, const Node &node) const {
+ return longest.Find(word, prob, node);
+ }
+
+ bool FastMakeNode(const WordIndex *begin, const WordIndex *end, Node &node) const {
+ // TODO: don't decode backoff.
+ assert(begin != end);
+ float ignored_prob, ignored_backoff;
+ LookupUnigram(*begin, ignored_prob, ignored_backoff, node);
+ for (const WordIndex *i = begin + 1; i < end; ++i) {
+ if (!LookupMiddleNoProb(middle_begin_[i - begin - 1], *i, ignored_backoff, node)) return false;
+ }
+ return true;
+ }
+
+ private:
+ friend void BuildTrie<Quant, Bhiksha>(const std::string &file_prefix, std::vector<uint64_t> &counts, const Config &config, TrieSearch<Quant, Bhiksha> &out, Quant &quant, const SortedVocabulary &vocab, Backing &backing);
+
+ // Middles are managed manually so we can delay construction and they don't have to be copyable.
+ void FreeMiddles() {
+ for (const Middle *i = middle_begin_; i != middle_end_; ++i) {
+ i->~Middle();
+ }
+ free(middle_begin_);
+ }
+
+ Middle *middle_begin_, *middle_end_;
+ Quant quant_;
};
} // namespace trie
diff --git a/kenlm/lm/sri.cc b/kenlm/lm/sri.cc
index b634d2007..825f699bc 100644
--- a/kenlm/lm/sri.cc
+++ b/kenlm/lm/sri.cc
@@ -93,18 +93,12 @@ FullScoreReturn Model::FullScore(const State &in_state, const WordIndex new_word
const_history = local_history;
}
FullScoreReturn ret;
- if (new_word != not_found_) {
- ret.ngram_length = MatchedLength(*sri_, new_word, const_history);
- out_state.history_[0] = new_word;
- out_state.valid_length_ = std::min<unsigned char>(ret.ngram_length, Order() - 1);
- std::copy(const_history, const_history + out_state.valid_length_ - 1, out_state.history_ + 1);
- if (out_state.valid_length_ < kMaxOrder - 1) {
- out_state.history_[out_state.valid_length_] = Vocab_None;
- }
- } else {
- ret.ngram_length = 0;
- if (kMaxOrder > 1) out_state.history_[0] = Vocab_None;
- out_state.valid_length_ = 0;
+ ret.ngram_length = MatchedLength(*sri_, new_word, const_history);
+ out_state.history_[0] = new_word;
+ out_state.valid_length_ = std::min<unsigned char>(ret.ngram_length, Order() - 1);
+ std::copy(const_history, const_history + out_state.valid_length_ - 1, out_state.history_ + 1);
+ if (out_state.valid_length_ < kMaxOrder - 1) {
+ out_state.history_[out_state.valid_length_] = Vocab_None;
}
ret.prob = sri_->wordProb(new_word, const_history);
return ret;
diff --git a/kenlm/lm/test_nounk.arpa b/kenlm/lm/test_nounk.arpa
new file mode 100644
index 000000000..060733d98
--- /dev/null
+++ b/kenlm/lm/test_nounk.arpa
@@ -0,0 +1,120 @@
+
+\data\
+ngram 1=36
+ngram 2=45
+ngram 3=10
+ngram 4=6
+ngram 5=4
+
+\1-grams:
+-1.383514 , -0.30103
+-1.139057 . -0.845098
+-1.029493 </s>
+-99 <s> -0.4149733
+-1.285941 a -0.69897
+-1.687872 also -0.30103
+-1.687872 beyond -0.30103
+-1.687872 biarritz -0.30103
+-1.687872 call -0.30103
+-1.687872 concerns -0.30103
+-1.687872 consider -0.30103
+-1.687872 considering -0.30103
+-1.687872 for -0.30103
+-1.509559 higher -0.30103
+-1.687872 however -0.30103
+-1.687872 i -0.30103
+-1.687872 immediate -0.30103
+-1.687872 in -0.30103
+-1.687872 is -0.30103
+-1.285941 little -0.69897
+-1.383514 loin -0.30103
+-1.687872 look -0.30103
+-1.285941 looking -0.4771212
+-1.206319 more -0.544068
+-1.509559 on -0.4771212
+-1.509559 screening -0.4771212
+-1.687872 small -0.30103
+-1.687872 the -0.30103
+-1.687872 to -0.30103
+-1.687872 watch -0.30103
+-1.687872 watching -0.30103
+-1.687872 what -0.30103
+-1.687872 would -0.30103
+-3.141592 foo
+-2.718281 bar 3.0
+-6.535897 baz -0.0
+
+\2-grams:
+-0.6925742 , .
+-0.7522095 , however
+-0.7522095 , is
+-0.0602359 . </s>
+-0.4846522 <s> looking -0.4771214
+-1.051485 <s> screening
+-1.07153 <s> the
+-1.07153 <s> watching
+-1.07153 <s> what
+-0.09132547 a little -0.69897
+-0.2922095 also call
+-0.2922095 beyond immediate
+-0.2705918 biarritz .
+-0.2922095 call for
+-0.2922095 concerns in
+-0.2922095 consider watch
+-0.2922095 considering consider
+-0.2834328 for ,
+-0.5511513 higher more
+-0.5845945 higher small
+-0.2834328 however ,
+-0.2922095 i would
+-0.2922095 immediate concerns
+-0.2922095 in biarritz
+-0.2922095 is to
+-0.09021038 little more -0.1998621
+-0.7273645 loin ,
+-0.6925742 loin .
+-0.6708385 loin </s>
+-0.2922095 look beyond
+-0.4638903 looking higher
+-0.4638903 looking on -0.4771212
+-0.5136299 more . -0.4771212
+-0.3561665 more loin
+-0.1649931 on a -0.4771213
+-0.1649931 screening a -0.4771213
+-0.2705918 small .
+-0.287799 the screening
+-0.2922095 to look
+-0.2622373 watch </s>
+-0.2922095 watching considering
+-0.2922095 what i
+-0.2922095 would also
+-2 also would -6
+-6 foo bar
+
+\3-grams:
+-0.01916512 more . </s>
+-0.0283603 on a little -0.4771212
+-0.0283603 screening a little -0.4771212
+-0.01660496 a little more -0.09409451
+-0.3488368 <s> looking higher
+-0.3488368 <s> looking on -0.4771212
+-0.1892331 little more loin
+-0.04835128 looking on a -0.4771212
+-3 also would consider -7
+-7 to look good
+
+\4-grams:
+-0.009249173 looking on a little -0.4771212
+-0.005464747 on a little more -0.4771212
+-0.005464747 screening a little more
+-0.1453306 a little more loin
+-0.01552657 <s> looking on a -0.4771212
+-4 also would consider higher -8
+
+\5-grams:
+-0.003061223 <s> looking on a little
+-0.001813953 looking on a little more
+-0.0432557 on a little more loin
+-5 also would consider higher looking
+
+\end\
diff --git a/kenlm/lm/trie.cc b/kenlm/lm/trie.cc
index 2c6336137..8c536e667 100644
--- a/kenlm/lm/trie.cc
+++ b/kenlm/lm/trie.cc
@@ -1,8 +1,9 @@
#include "lm/trie.hh"
+#include "lm/bhiksha.hh"
+#include "lm/quantize.hh"
#include "util/bit_packing.hh"
#include "util/exception.hh"
-#include "util/proxy_iterator.hh"
#include "util/sorted_uniform.hh"
#include <assert.h>
@@ -12,53 +13,32 @@ namespace ngram {
namespace trie {
namespace {
-// Assumes key is first.
-class JustKeyProxy {
+class KeyAccessor {
public:
- JustKeyProxy() : inner_(), base_(), key_mask_(), key_bits_(), total_bits_() {}
+ KeyAccessor(const void *base, uint64_t key_mask, uint8_t key_bits, uint8_t total_bits)
+ : base_(reinterpret_cast<const uint8_t*>(base)), key_mask_(key_mask), key_bits_(key_bits), total_bits_(total_bits) {}
- operator uint64_t() const { return GetKey(); }
+ typedef uint64_t Key;
- uint64_t GetKey() const {
- uint64_t bit_off = inner_ * static_cast<uint64_t>(total_bits_);
- return util::ReadInt57(base_ + bit_off / 8, bit_off & 7, key_bits_, key_mask_);
+ Key operator()(uint64_t index) const {
+ return util::ReadInt57(base_, index * static_cast<uint64_t>(total_bits_), key_bits_, key_mask_);
}
private:
- friend class util::ProxyIterator<JustKeyProxy>;
- friend bool FindBitPacked(const void *base, uint64_t key_mask, uint8_t key_bits, uint8_t total_bits, uint64_t begin_index, uint64_t end_index, WordIndex key, uint64_t &at_index);
-
- JustKeyProxy(const void *base, uint64_t index, uint64_t key_mask, uint8_t key_bits, uint8_t total_bits)
- : inner_(index), base_(static_cast<const uint8_t*>(base)), key_mask_(key_mask), key_bits_(key_bits), total_bits_(total_bits) {}
-
- // This is a read-only iterator.
- JustKeyProxy &operator=(const JustKeyProxy &other);
-
- typedef uint64_t value_type;
-
- typedef uint64_t InnerIterator;
- uint64_t &Inner() { return inner_; }
- const uint64_t &Inner() const { return inner_; }
-
- // The address in bits is base_ * 8 + inner_ * total_bits_.
- uint64_t inner_;
const uint8_t *const base_;
- const uint64_t key_mask_;
+ const WordIndex key_mask_;
const uint8_t key_bits_, total_bits_;
};
-bool FindBitPacked(const void *base, uint64_t key_mask, uint8_t key_bits, uint8_t total_bits, uint64_t begin_index, uint64_t end_index, WordIndex key, uint64_t &at_index) {
- util::ProxyIterator<JustKeyProxy> begin_it(JustKeyProxy(base, begin_index, key_mask, key_bits, total_bits));
- util::ProxyIterator<JustKeyProxy> end_it(JustKeyProxy(base, end_index, key_mask, key_bits, total_bits));
- util::ProxyIterator<JustKeyProxy> out;
- if (!util::SortedUniformFind(begin_it, end_it, key, out)) return false;
- at_index = out.Inner();
+bool FindBitPacked(const void *base, uint64_t key_mask, uint8_t key_bits, uint8_t total_bits, uint64_t begin_index, uint64_t end_index, const uint64_t max_vocab, const uint64_t key, uint64_t &at_index) {
+ KeyAccessor accessor(base, key_mask, key_bits, total_bits);
+ if (!util::BoundedSortedUniformFind<uint64_t, KeyAccessor, util::PivotSelect<sizeof(WordIndex)>::T>(accessor, begin_index - 1, (uint64_t)0, end_index, max_vocab, key, at_index)) return false;
return true;
}
} // namespace
std::size_t BitPacked::BaseSize(uint64_t entries, uint64_t max_vocab, uint8_t remaining_bits) {
- uint8_t total_bits = util::RequiredBits(max_vocab) + 31 + remaining_bits;
+ uint8_t total_bits = util::RequiredBits(max_vocab) + remaining_bits;
// Extra entry for next pointer at the end.
// +7 then / 8 to round up bits and convert to bytes
// +sizeof(uint64_t) so that ReadInt57 etc don't go segfault.
@@ -71,100 +51,98 @@ void BitPacked::BaseInit(void *base, uint64_t max_vocab, uint8_t remaining_bits)
word_bits_ = util::RequiredBits(max_vocab);
word_mask_ = (1ULL << word_bits_) - 1ULL;
if (word_bits_ > 57) UTIL_THROW(util::Exception, "Sorry, word indices more than " << (1ULL << 57) << " are not implemented. Edit util/bit_packing.hh and fix the bit packing functions.");
- prob_bits_ = 31;
- total_bits_ = word_bits_ + prob_bits_ + remaining_bits;
+ total_bits_ = word_bits_ + remaining_bits;
base_ = static_cast<uint8_t*>(base);
insert_index_ = 0;
+ max_vocab_ = max_vocab;
}
-std::size_t BitPackedMiddle::Size(uint64_t entries, uint64_t max_vocab, uint64_t max_ptr) {
- return BaseSize(entries, max_vocab, 32 + util::RequiredBits(max_ptr));
+template <class Quant, class Bhiksha> std::size_t BitPackedMiddle<Quant, Bhiksha>::Size(uint8_t quant_bits, uint64_t entries, uint64_t max_vocab, uint64_t max_ptr, const Config &config) {
+ return Bhiksha::Size(entries + 1, max_ptr, config) + BaseSize(entries, max_vocab, quant_bits + Bhiksha::InlineBits(entries + 1, max_ptr, config));
}
-void BitPackedMiddle::Init(void *base, uint64_t max_vocab, uint64_t max_next, const BitPacked &next_source) {
- next_source_ = &next_source;
- backoff_bits_ = 32;
- next_bits_ = util::RequiredBits(max_next);
- if (next_bits_ > 57) UTIL_THROW(util::Exception, "Sorry, this does not support more than " << (1ULL << 57) << " n-grams of a particular order. Edit util/bit_packing.hh and fix the bit packing functions.");
- next_mask_ = (1ULL << next_bits_) - 1;
-
- BaseInit(base, max_vocab, backoff_bits_ + next_bits_);
+template <class Quant, class Bhiksha> BitPackedMiddle<Quant, Bhiksha>::BitPackedMiddle(void *base, const Quant &quant, uint64_t entries, uint64_t max_vocab, uint64_t max_next, const BitPacked &next_source, const Config &config) :
+ BitPacked(),
+ quant_(quant),
+ // If the offset of the method changes, also change TrieSearch::UpdateConfigFromBinary.
+ bhiksha_(base, entries + 1, max_next, config),
+ next_source_(&next_source) {
+ if (entries + 1 >= (1ULL << 57) || (max_next >= (1ULL << 57))) UTIL_THROW(util::Exception, "Sorry, this does not support more than " << (1ULL << 57) << " n-grams of a particular order. Edit util/bit_packing.hh and fix the bit packing functions.");
+ BaseInit(reinterpret_cast<uint8_t*>(base) + Bhiksha::Size(entries + 1, max_next, config), max_vocab, quant.TotalBits() + bhiksha_.InlineBits());
}
-void BitPackedMiddle::Insert(WordIndex word, float prob, float backoff) {
+template <class Quant, class Bhiksha> void BitPackedMiddle<Quant, Bhiksha>::Insert(WordIndex word, float prob, float backoff) {
assert(word <= word_mask_);
uint64_t at_pointer = insert_index_ * total_bits_;
- util::WriteInt57(base_ + (at_pointer >> 3), at_pointer & 7, word_bits_, word);
+ util::WriteInt57(base_, at_pointer, word_bits_, word);
at_pointer += word_bits_;
- util::WriteNonPositiveFloat31(base_ + (at_pointer >> 3), at_pointer & 7, prob);
- at_pointer += prob_bits_;
- util::WriteFloat32(base_ + (at_pointer >> 3), at_pointer & 7, backoff);
- at_pointer += backoff_bits_;
+ quant_.Write(base_, at_pointer, prob, backoff);
+ at_pointer += quant_.TotalBits();
uint64_t next = next_source_->InsertIndex();
- assert(next <= next_mask_);
- util::WriteInt57(base_ + (at_pointer >> 3), at_pointer & 7, next_bits_, next);
+ bhiksha_.WriteNext(base_, at_pointer, insert_index_, next);
++insert_index_;
}
-bool BitPackedMiddle::Find(WordIndex word, float &prob, float &backoff, NodeRange &range) const {
+template <class Quant, class Bhiksha> bool BitPackedMiddle<Quant, Bhiksha>::Find(WordIndex word, float &prob, float &backoff, NodeRange &range) const {
uint64_t at_pointer;
- if (!FindBitPacked(base_, word_mask_, word_bits_, total_bits_, range.begin, range.end, word, at_pointer)) {
+ if (!FindBitPacked(base_, word_mask_, word_bits_, total_bits_, range.begin, range.end, max_vocab_, word, at_pointer)) {
return false;
}
+ uint64_t index = at_pointer;
at_pointer *= total_bits_;
at_pointer += word_bits_;
- prob = util::ReadNonPositiveFloat31(base_ + (at_pointer >> 3), at_pointer & 7);
- at_pointer += prob_bits_;
- backoff = util::ReadFloat32(base_ + (at_pointer >> 3), at_pointer & 7);
- at_pointer += backoff_bits_;
- range.begin = util::ReadInt57(base_ + (at_pointer >> 3), at_pointer & 7, next_bits_, next_mask_);
- // Read the next entry's pointer.
- at_pointer += total_bits_;
- range.end = util::ReadInt57(base_ + (at_pointer >> 3), at_pointer & 7, next_bits_, next_mask_);
+ quant_.Read(base_, at_pointer, prob, backoff);
+ at_pointer += quant_.TotalBits();
+
+ bhiksha_.ReadNext(base_, at_pointer, index, total_bits_, range);
+
return true;
}
-bool BitPackedMiddle::FindNoProb(WordIndex word, float &backoff, NodeRange &range) const {
- uint64_t at_pointer;
- if (!FindBitPacked(base_, word_mask_, word_bits_, total_bits_, range.begin, range.end, word, at_pointer)) return false;
- at_pointer *= total_bits_;
+template <class Quant, class Bhiksha> bool BitPackedMiddle<Quant, Bhiksha>::FindNoProb(WordIndex word, float &backoff, NodeRange &range) const {
+ uint64_t index;
+ if (!FindBitPacked(base_, word_mask_, word_bits_, total_bits_, range.begin, range.end, max_vocab_, word, index)) return false;
+ uint64_t at_pointer = index * total_bits_;
at_pointer += word_bits_;
- at_pointer += prob_bits_;
- backoff = util::ReadFloat32(base_ + (at_pointer >> 3), at_pointer & 7);
- at_pointer += backoff_bits_;
- range.begin = util::ReadInt57(base_ + (at_pointer >> 3), at_pointer & 7, next_bits_, next_mask_);
- // Read the next entry's pointer.
- at_pointer += total_bits_;
- range.end = util::ReadInt57(base_ + (at_pointer >> 3), at_pointer & 7, next_bits_, next_mask_);
+ quant_.ReadBackoff(base_, at_pointer, backoff);
+ at_pointer += quant_.TotalBits();
+ bhiksha_.ReadNext(base_, at_pointer, index, total_bits_, range);
return true;
}
-void BitPackedMiddle::FinishedLoading(uint64_t next_end) {
- assert(next_end <= next_mask_);
- uint64_t last_next_write = (insert_index_ + 1) * total_bits_ - next_bits_;
- util::WriteInt57(base_ + (last_next_write >> 3), last_next_write & 7, next_bits_, next_end);
+template <class Quant, class Bhiksha> void BitPackedMiddle<Quant, Bhiksha>::FinishedLoading(uint64_t next_end, const Config &config) {
+ uint64_t last_next_write = (insert_index_ + 1) * total_bits_ - bhiksha_.InlineBits();
+ bhiksha_.WriteNext(base_, last_next_write, insert_index_ + 1, next_end);
+ bhiksha_.FinishedLoading(config);
}
-void BitPackedLongest::Insert(WordIndex index, float prob) {
+template <class Quant> void BitPackedLongest<Quant>::Insert(WordIndex index, float prob) {
assert(index <= word_mask_);
uint64_t at_pointer = insert_index_ * total_bits_;
- util::WriteInt57(base_ + (at_pointer >> 3), at_pointer & 7, word_bits_, index);
+ util::WriteInt57(base_, at_pointer, word_bits_, index);
at_pointer += word_bits_;
- util::WriteNonPositiveFloat31(base_ + (at_pointer >> 3), at_pointer & 7, prob);
+ quant_.Write(base_, at_pointer, prob);
++insert_index_;
}
-bool BitPackedLongest::Find(WordIndex word, float &prob, const NodeRange &range) const {
+template <class Quant> bool BitPackedLongest<Quant>::Find(WordIndex word, float &prob, const NodeRange &range) const {
uint64_t at_pointer;
- if (!FindBitPacked(base_, word_mask_, word_bits_, total_bits_, range.begin, range.end, word, at_pointer)) return false;
+ if (!FindBitPacked(base_, word_mask_, word_bits_, total_bits_, range.begin, range.end, max_vocab_, word, at_pointer)) return false;
at_pointer = at_pointer * total_bits_ + word_bits_;
- prob = util::ReadNonPositiveFloat31(base_ + (at_pointer >> 3), at_pointer & 7);
+ quant_.Read(base_, at_pointer, prob);
return true;
}
+template class BitPackedMiddle<DontQuantize::Middle, DontBhiksha>;
+template class BitPackedMiddle<DontQuantize::Middle, ArrayBhiksha>;
+template class BitPackedMiddle<SeparatelyQuantize::Middle, DontBhiksha>;
+template class BitPackedMiddle<SeparatelyQuantize::Middle, ArrayBhiksha>;
+template class BitPackedLongest<DontQuantize::Longest>;
+template class BitPackedLongest<SeparatelyQuantize::Longest>;
+
} // namespace trie
} // namespace ngram
} // namespace lm
diff --git a/kenlm/lm/trie.hh b/kenlm/lm/trie.hh
index 6aef050c3..536120648 100644
--- a/kenlm/lm/trie.hh
+++ b/kenlm/lm/trie.hh
@@ -10,6 +10,7 @@
namespace lm {
namespace ngram {
+class Config;
namespace trie {
struct NodeRange {
@@ -46,13 +47,12 @@ class Unigram {
void LoadedBinary() {}
- bool Find(WordIndex word, float &prob, float &backoff, NodeRange &next) const {
+ void Find(WordIndex word, float &prob, float &backoff, NodeRange &next) const {
UnigramValue *val = unigram_ + word;
prob = val->weights.prob;
backoff = val->weights.backoff;
next.begin = val->next;
next.end = (val+1)->next;
- return true;
}
private:
@@ -67,62 +67,65 @@ class BitPacked {
return insert_index_;
}
- void LoadedBinary() {}
-
protected:
static std::size_t BaseSize(uint64_t entries, uint64_t max_vocab, uint8_t remaining_bits);
void BaseInit(void *base, uint64_t max_vocab, uint8_t remaining_bits);
- uint8_t word_bits_, prob_bits_;
+ uint8_t word_bits_;
uint8_t total_bits_;
uint64_t word_mask_;
uint8_t *base_;
- uint64_t insert_index_;
+ uint64_t insert_index_, max_vocab_;
};
-class BitPackedMiddle : public BitPacked {
+template <class Quant, class Bhiksha> class BitPackedMiddle : public BitPacked {
public:
- BitPackedMiddle() {}
-
- static std::size_t Size(uint64_t entries, uint64_t max_vocab, uint64_t max_next);
+ static std::size_t Size(uint8_t quant_bits, uint64_t entries, uint64_t max_vocab, uint64_t max_next, const Config &config);
// next_source need not be initialized.
- void Init(void *base, uint64_t max_vocab, uint64_t max_next, const BitPacked &next_source);
+ BitPackedMiddle(void *base, const Quant &quant, uint64_t entries, uint64_t max_vocab, uint64_t max_next, const BitPacked &next_source, const Config &config);
void Insert(WordIndex word, float prob, float backoff);
+ void FinishedLoading(uint64_t next_end, const Config &config);
+
+ void LoadedBinary() { bhiksha_.LoadedBinary(); }
+
bool Find(WordIndex word, float &prob, float &backoff, NodeRange &range) const;
bool FindNoProb(WordIndex word, float &backoff, NodeRange &range) const;
- void FinishedLoading(uint64_t next_end);
-
private:
- uint8_t backoff_bits_, next_bits_;
- uint64_t next_mask_;
+ Quant quant_;
+ Bhiksha bhiksha_;
const BitPacked *next_source_;
};
-
-class BitPackedLongest : public BitPacked {
+template <class Quant> class BitPackedLongest : public BitPacked {
public:
+ static std::size_t Size(uint8_t quant_bits, uint64_t entries, uint64_t max_vocab) {
+ return BaseSize(entries, max_vocab, quant_bits);
+ }
+
BitPackedLongest() {}
- static std::size_t Size(uint64_t entries, uint64_t max_vocab) {
- return BaseSize(entries, max_vocab, 0);
+ void Init(void *base, const Quant &quant, uint64_t max_vocab) {
+ quant_ = quant;
+ BaseInit(base, max_vocab, quant_.TotalBits());
}
- void Init(void *base, uint64_t max_vocab) {
- return BaseInit(base, max_vocab, 0);
- }
+ void LoadedBinary() {}
void Insert(WordIndex word, float prob);
bool Find(WordIndex word, float &prob, const NodeRange &node) const;
+
+ private:
+ Quant quant_;
};
} // namespace trie
diff --git a/kenlm/lm/virtual_interface.cc b/kenlm/lm/virtual_interface.cc
index c5a64972b..17a74c3c1 100644
--- a/kenlm/lm/virtual_interface.cc
+++ b/kenlm/lm/virtual_interface.cc
@@ -11,8 +11,6 @@ void Vocabulary::SetSpecial(WordIndex begin_sentence, WordIndex end_sentence, Wo
begin_sentence_ = begin_sentence;
end_sentence_ = end_sentence;
not_found_ = not_found;
- if (begin_sentence_ == not_found_) throw SpecialWordMissingException("<s>");
- if (end_sentence_ == not_found_) throw SpecialWordMissingException("</s>");
}
Model::~Model() {}
diff --git a/kenlm/lm/virtual_interface.hh b/kenlm/lm/virtual_interface.hh
index f15f87892..08627efd7 100644
--- a/kenlm/lm/virtual_interface.hh
+++ b/kenlm/lm/virtual_interface.hh
@@ -8,8 +8,27 @@
namespace lm {
+/* Structure returned by scoring routines. */
struct FullScoreReturn {
+ // log10 probability
float prob;
+
+ /* The length of n-gram matched. Do not use this for recombination.
+ * Consider a model containing only the following n-grams:
+ * -1 foo
+ * -3.14 bar
+ * -2.718 baz -5
+ * -6 foo bar
+ *
+ * If you score ``bar'' then ngram_length is 1 and recombination state is the
+ * empty string because bar has zero backoff and does not extend to the
+ * right.
+ * If you score ``foo'' then ngram_length is 1 and recombination state is
+ * ``foo''.
+ *
+ * Ideally, keep output states around and compare them. Failing that,
+ * get out_state.ValidLength() and use that length for recombination.
+ */
unsigned char ngram_length;
};
@@ -72,7 +91,8 @@ class Vocabulary {
/* There are two ways to access a Model.
*
*
- * OPTION 1: Access the Model directly (e.g. lm::ngram::Model in ngram.hh).
+ * OPTION 1: Access the Model directly (e.g. lm::ngram::Model in model.hh).
+ *
* Every Model implements the scoring function:
* float Score(
* const Model::State &in_state,
@@ -85,6 +105,7 @@ class Vocabulary {
* const WordIndex new_word,
* Model::State &out_state) const;
*
+ *
* There are also accessor functions:
* const State &BeginSentenceState() const;
* const State &NullContextState() const;
@@ -114,6 +135,7 @@ class Vocabulary {
*
* All the State objects are POD, so it's ok to use raw memory for storing
* State.
+ * in_state and out_state must not have the same address.
*/
class Model {
public:
@@ -123,8 +145,10 @@ class Model {
const void *BeginSentenceMemory() const { return begin_sentence_memory_; }
const void *NullContextMemory() const { return null_context_memory_; }
+ // Requires in_state != out_state
virtual float Score(const void *in_state, const WordIndex new_word, void *out_state) const = 0;
+ // Requires in_state != out_state
virtual FullScoreReturn FullScore(const void *in_state, const WordIndex new_word, void *out_state) const = 0;
unsigned char Order() const { return order_; }
diff --git a/kenlm/lm/vocab.cc b/kenlm/lm/vocab.cc
index ae79c7277..04979d513 100644
--- a/kenlm/lm/vocab.cc
+++ b/kenlm/lm/vocab.cc
@@ -28,8 +28,8 @@ const uint64_t kUnknownHash = detail::HashForVocab("<unk>", 5);
// Sadly some LMs have <UNK>.
const uint64_t kUnknownCapHash = detail::HashForVocab("<UNK>", 5);
-void ReadWords(int fd, EnumerateVocab *enumerate) {
- if (!enumerate) return;
+WordIndex ReadWords(int fd, EnumerateVocab *enumerate) {
+ if (!enumerate) return std::numeric_limits<WordIndex>::max();
const std::size_t kInitialRead = 16384;
std::string buf;
buf.reserve(kInitialRead + 100);
@@ -37,14 +37,14 @@ void ReadWords(int fd, EnumerateVocab *enumerate) {
WordIndex index = 0;
while (true) {
ssize_t got = read(fd, &buf[0], kInitialRead);
- if (got == -1) UTIL_THROW(util::ErrnoException, "Reading vocabulary words");
- if (got == 0) return;
+ UTIL_THROW_IF(got == -1, util::ErrnoException, "Reading vocabulary words");
+ if (got == 0) return index;
buf.resize(got);
while (buf[buf.size() - 1]) {
char next_char;
ssize_t ret = read(fd, &next_char, 1);
- if (ret == -1) UTIL_THROW(util::ErrnoException, "Reading vocabulary words");
- if (ret == 0) UTIL_THROW(FormatLoadException, "Missing null terminator on a vocab word.");
+ UTIL_THROW_IF(ret == -1, util::ErrnoException, "Reading vocabulary words");
+ UTIL_THROW_IF(ret == 0, FormatLoadException, "Missing null terminator on a vocab word.");
buf.push_back(next_char);
}
// Ok now we have null terminated strings.
@@ -87,13 +87,13 @@ SortedVocabulary::SortedVocabulary() : begin_(NULL), end_(NULL), enumerate_(NULL
std::size_t SortedVocabulary::Size(std::size_t entries, const Config &/*config*/) {
// Lead with the number of entries.
- return sizeof(uint64_t) + sizeof(Entry) * entries;
+ return sizeof(uint64_t) + sizeof(uint64_t) * entries;
}
void SortedVocabulary::SetupMemory(void *start, std::size_t allocated, std::size_t entries, const Config &config) {
assert(allocated >= Size(entries, config));
// Leave space for number of entries.
- begin_ = reinterpret_cast<Entry*>(reinterpret_cast<uint64_t*>(start) + 1);
+ begin_ = reinterpret_cast<uint64_t*>(start) + 1;
end_ = begin_;
saw_unk_ = false;
}
@@ -112,7 +112,7 @@ WordIndex SortedVocabulary::Insert(const StringPiece &str) {
saw_unk_ = true;
return 0;
}
- end_->key = hashed;
+ *end_ = hashed;
if (enumerate_) {
strings_to_enumerate_[end_ - begin_].assign(str.data(), str.size());
}
@@ -134,8 +134,10 @@ void SortedVocabulary::FinishedLoading(ProbBackoff *reorder_vocab) {
util::JointSort(begin_, end_, reorder_vocab + 1);
}
SetSpecial(Index("<s>"), Index("</s>"), 0);
- // Save size.
+ // Save size. Excludes UNK.
*(reinterpret_cast<uint64_t*>(begin_) - 1) = end_ - begin_;
+ // Includes UNK.
+ bound_ = end_ - begin_ + 1;
}
void SortedVocabulary::LoadedBinary(int fd, EnumerateVocab *to) {
@@ -183,9 +185,33 @@ void ProbingVocabulary::FinishedLoading(ProbBackoff * /*reorder_vocab*/) {
void ProbingVocabulary::LoadedBinary(int fd, EnumerateVocab *to) {
lookup_.LoadedBinary();
- ReadWords(fd, to);
+ available_ = ReadWords(fd, to);
SetSpecial(Index("<s>"), Index("</s>"), 0);
}
+void MissingUnknown(const Config &config) throw(SpecialWordMissingException) {
+ switch(config.unknown_missing) {
+ case SILENT:
+ return;
+ case COMPLAIN:
+ if (config.messages) *config.messages << "The ARPA file is missing <unk>. Substituting log10 probability " << config.unknown_missing_logprob << "." << std::endl;
+ break;
+ case THROW_UP:
+ UTIL_THROW(SpecialWordMissingException, "The ARPA file is missing <unk> and the model is configured to throw an exception.");
+ }
+}
+
+void MissingSentenceMarker(const Config &config, const char *str) throw(SpecialWordMissingException) {
+ switch (config.sentence_marker_missing) {
+ case SILENT:
+ return;
+ case COMPLAIN:
+ if (config.messages) *config.messages << "Missing special word " << str << "; will treat it as <unk>.";
+ break;
+ case THROW_UP:
+ UTIL_THROW(SpecialWordMissingException, "The ARPA file is missing " << str << " and the model is configured to reject these models. Run build_binary -s to disable this check.");
+ }
+}
+
} // namespace ngram
} // namespace lm
diff --git a/kenlm/lm/vocab.hh b/kenlm/lm/vocab.hh
index b584c82fa..9d218fff0 100644
--- a/kenlm/lm/vocab.hh
+++ b/kenlm/lm/vocab.hh
@@ -2,12 +2,14 @@
#define LM_VOCAB__
#include "lm/enumerate_vocab.hh"
+#include "lm/lm_exception.hh"
#include "lm/virtual_interface.hh"
#include "util/key_value_packing.hh"
#include "util/probing_hash_table.hh"
#include "util/sorted_uniform.hh"
#include "util/string_piece.hh"
+#include <limits>
#include <string>
#include <vector>
@@ -43,30 +45,29 @@ class WriteWordsWrapper : public EnumerateVocab {
// Vocabulary based on sorted uniform find storing only uint64_t values and using their offsets as indices.
class SortedVocabulary : public base::Vocabulary {
- private:
- // Sorted uniform requires a GetKey function.
- struct Entry {
- uint64_t GetKey() const { return key; }
- uint64_t key;
- bool operator<(const Entry &other) const {
- return key < other.key;
- }
- };
-
public:
SortedVocabulary();
WordIndex Index(const StringPiece &str) const {
- const Entry *found;
- if (util::SortedUniformFind<const Entry *, uint64_t>(begin_, end_, detail::HashForVocab(str), found)) {
+ const uint64_t *found;
+ if (util::BoundedSortedUniformFind<const uint64_t*, util::IdentityAccessor<uint64_t>, util::Pivot64>(
+ util::IdentityAccessor<uint64_t>(),
+ begin_ - 1, 0,
+ end_, std::numeric_limits<uint64_t>::max(),
+ detail::HashForVocab(str), found)) {
return found - begin_ + 1; // +1 because <unk> is 0 and does not appear in the lookup table.
} else {
return 0;
}
}
+ // Size for purposes of file writing
static size_t Size(std::size_t entries, const Config &config);
+ // Vocab words are [0, Bound()) Only valid after FinishedLoading/LoadedBinary.
+ // While this number is correct, ProbingVocabulary::Bound might not be correct in some cases.
+ WordIndex Bound() const { return bound_; }
+
// Everything else is for populating. I'm too lazy to hide and friend these, but you'll only get a const reference anyway.
void SetupMemory(void *start, std::size_t allocated, std::size_t entries, const Config &config);
@@ -77,12 +78,19 @@ class SortedVocabulary : public base::Vocabulary {
// Reorders reorder_vocab so that the IDs are sorted.
void FinishedLoading(ProbBackoff *reorder_vocab);
+ // Trie stores the correct counts including <unk> in the header. If this was previously sized based on a count exluding <unk>, padding with 8 bytes will make it the correct size based on a count including <unk>.
+ std::size_t UnkCountChangePadding() const { return SawUnk() ? 0 : sizeof(uint64_t); }
+
bool SawUnk() const { return saw_unk_; }
void LoadedBinary(int fd, EnumerateVocab *to);
private:
- Entry *begin_, *end_;
+ uint64_t *begin_, *end_;
+
+ WordIndex bound_;
+
+ WordIndex highest_value_;
bool saw_unk_;
@@ -104,6 +112,12 @@ class ProbingVocabulary : public base::Vocabulary {
static size_t Size(std::size_t entries, const Config &config);
+ // Vocab words are [0, Bound()).
+ // WARNING WARNING: returns UINT_MAX when loading binary and not enumerating vocabulary.
+ // Fixing this bug requires a binary file format change and will be fixed with the next binary file format update.
+ // Specifically, the binary file format does not currently indicate whether <unk> is in count or not.
+ WordIndex Bound() const { return available_; }
+
// Everything else is for populating. I'm too lazy to hide and friend these, but you'll only get a const reference anyway.
void SetupMemory(void *start, std::size_t allocated, std::size_t entries, const Config &config);
@@ -134,6 +148,15 @@ class ProbingVocabulary : public base::Vocabulary {
EnumerateVocab *enumerate_;
};
+void MissingUnknown(const Config &config) throw(SpecialWordMissingException);
+void MissingSentenceMarker(const Config &config, const char *str) throw(SpecialWordMissingException);
+
+template <class Vocab> void CheckSpecials(const Config &config, const Vocab &vocab) throw(SpecialWordMissingException) {
+ if (!vocab.SawUnk()) MissingUnknown(config);
+ if (vocab.BeginSentence() == vocab.NotFound()) MissingSentenceMarker(config, "<s>");
+ if (vocab.EndSentence() == vocab.NotFound()) MissingSentenceMarker(config, "</s>");
+}
+
} // namespace ngram
} // namespace lm
diff --git a/kenlm/test.sh b/kenlm/test.sh
new file mode 100755
index 000000000..d02a3dc96
--- /dev/null
+++ b/kenlm/test.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+#Run tests. Requires Boost.
+set -e
+./compile.sh
+for i in util/{bit_packing,file_piece,joint_sort,key_value_packing,probing_hash_table,sorted_uniform}_test lm/model_test; do
+ g++ -I. -O3 $CXXFLAGS $i.cc {lm,util}/*.o -lboost_test_exec_monitor -lz -o $i
+ pushd $(dirname $i) >/dev/null && ./$(basename $i) || echo "$i failed"; popd >/dev/null
+done
diff --git a/kenlm/util/bit_packing.cc b/kenlm/util/bit_packing.cc
index 681da5f2d..41999b726 100644
--- a/kenlm/util/bit_packing.cc
+++ b/kenlm/util/bit_packing.cc
@@ -28,10 +28,10 @@ void BitPackingSanity() {
memset(mem, 0, sizeof(mem));
const uint64_t test57 = 0x123456789abcdefULL;
for (uint64_t b = 0; b < 57 * 8; b += 57) {
- WriteInt57(mem + b / 8, b % 8, 57, test57);
+ WriteInt57(mem, b, 57, test57);
}
for (uint64_t b = 0; b < 57 * 8; b += 57) {
- if (test57 != ReadInt57(mem + b / 8, b % 8, 57, (1ULL << 57) - 1))
+ if (test57 != ReadInt57(mem, b, 57, (1ULL << 57) - 1))
UTIL_THROW(Exception, "The bit packing routines are failing for your architecture. Please send a bug report with your architecture, operating system, and compiler.");
}
// TODO: more checks.
diff --git a/kenlm/util/bit_packing.hh b/kenlm/util/bit_packing.hh
index 70cfc2d22..9f47d559e 100644
--- a/kenlm/util/bit_packing.hh
+++ b/kenlm/util/bit_packing.hh
@@ -28,58 +28,76 @@ namespace util {
* but it may be called multiple times when that's inconvenient.
*/
-inline uint8_t BitPackShift(uint8_t bit, uint8_t length) {
+
// Fun fact: __BYTE_ORDER is wrong on Solaris Sparc, but the version without __ is correct.
#if BYTE_ORDER == LITTLE_ENDIAN
+inline uint8_t BitPackShift(uint8_t bit, uint8_t /*length*/) {
return bit;
+}
#elif BYTE_ORDER == BIG_ENDIAN
+inline uint8_t BitPackShift(uint8_t bit, uint8_t length) {
return 64 - length - bit;
+}
#else
#error "Bit packing code isn't written for your byte order."
#endif
+
+inline uint64_t ReadOff(const void *base, uint64_t bit_off) {
+ return *reinterpret_cast<const uint64_t*>(reinterpret_cast<const uint8_t*>(base) + (bit_off >> 3));
}
/* Pack integers up to 57 bits using their least significant digits.
* The length is specified using mask:
* Assumes mask == (1 << length) - 1 where length <= 57.
*/
-inline uint64_t ReadInt57(const void *base, uint8_t bit, uint8_t length, uint64_t mask) {
- return (*reinterpret_cast<const uint64_t*>(base) >> BitPackShift(bit, length)) & mask;
+inline uint64_t ReadInt57(const void *base, uint64_t bit_off, uint8_t length, uint64_t mask) {
+ return (ReadOff(base, bit_off) >> BitPackShift(bit_off & 7, length)) & mask;
}
/* Assumes value < (1 << length) and length <= 57.
* Assumes the memory is zero initially.
*/
-inline void WriteInt57(void *base, uint8_t bit, uint8_t length, uint64_t value) {
- *reinterpret_cast<uint64_t*>(base) |= (value << BitPackShift(bit, length));
+inline void WriteInt57(void *base, uint64_t bit_off, uint8_t length, uint64_t value) {
+ *reinterpret_cast<uint64_t*>(reinterpret_cast<uint8_t*>(base) + (bit_off >> 3)) |=
+ (value << BitPackShift(bit_off & 7, length));
+}
+
+/* Same caveats as above, but for a 25 bit limit. */
+inline uint32_t ReadInt25(const void *base, uint64_t bit_off, uint8_t length, uint32_t mask) {
+ return (*reinterpret_cast<const uint32_t*>(reinterpret_cast<const uint8_t*>(base) + (bit_off >> 3)) >> BitPackShift(bit_off & 7, length)) & mask;
+}
+
+inline void WriteInt25(void *base, uint64_t bit_off, uint8_t length, uint32_t value) {
+ *reinterpret_cast<uint32_t*>(reinterpret_cast<uint8_t*>(base) + (bit_off >> 3)) |=
+ (value << BitPackShift(bit_off & 7, length));
}
typedef union { float f; uint32_t i; } FloatEnc;
-inline float ReadFloat32(const void *base, uint8_t bit) {
+inline float ReadFloat32(const void *base, uint64_t bit_off) {
FloatEnc encoded;
- encoded.i = *reinterpret_cast<const uint64_t*>(base) >> BitPackShift(bit, 32);
+ encoded.i = ReadOff(base, bit_off) >> BitPackShift(bit_off & 7, 32);
return encoded.f;
}
-inline void WriteFloat32(void *base, uint8_t bit, float value) {
+inline void WriteFloat32(void *base, uint64_t bit_off, float value) {
FloatEnc encoded;
encoded.f = value;
- WriteInt57(base, bit, 32, encoded.i);
+ WriteInt57(base, bit_off, 32, encoded.i);
}
const uint32_t kSignBit = 0x80000000;
-inline float ReadNonPositiveFloat31(const void *base, uint8_t bit) {
+inline float ReadNonPositiveFloat31(const void *base, uint64_t bit_off) {
FloatEnc encoded;
- encoded.i = *reinterpret_cast<const uint64_t*>(base) >> BitPackShift(bit, 31);
+ encoded.i = ReadOff(base, bit_off) >> BitPackShift(bit_off & 7, 31);
// Sign bit set means negative.
encoded.i |= kSignBit;
return encoded.f;
}
-inline void WriteNonPositiveFloat31(void *base, uint8_t bit, float value) {
+inline void WriteNonPositiveFloat31(void *base, uint64_t bit_off, float value) {
FloatEnc encoded;
encoded.f = value;
encoded.i &= ~kSignBit;
- WriteInt57(base, bit, 31, encoded.i);
+ WriteInt57(base, bit_off, 31, encoded.i);
}
void BitPackingSanity();
@@ -89,9 +107,20 @@ void BitPackingSanity();
uint8_t RequiredBits(uint64_t max_value);
struct BitsMask {
+ static BitsMask ByMax(uint64_t max_value) {
+ BitsMask ret;
+ ret.FromMax(max_value);
+ return ret;
+ }
+ static BitsMask ByBits(uint8_t bits) {
+ BitsMask ret;
+ ret.bits = bits;
+ ret.mask = (1ULL << bits) - 1;
+ return ret;
+ }
void FromMax(uint64_t max_value) {
bits = RequiredBits(max_value);
- mask = (1 << bits) - 1;
+ mask = (1ULL << bits) - 1;
}
uint8_t bits;
uint64_t mask;
diff --git a/kenlm/util/bit_packing_test.cc b/kenlm/util/bit_packing_test.cc
index c578ddd15..4edc2004c 100644
--- a/kenlm/util/bit_packing_test.cc
+++ b/kenlm/util/bit_packing_test.cc
@@ -9,15 +9,16 @@ namespace util {
namespace {
const uint64_t test57 = 0x123456789abcdefULL;
+const uint32_t test25 = 0x1234567;
-BOOST_AUTO_TEST_CASE(ZeroBit) {
+BOOST_AUTO_TEST_CASE(ZeroBit57) {
char mem[16];
memset(mem, 0, sizeof(mem));
WriteInt57(mem, 0, 57, test57);
BOOST_CHECK_EQUAL(test57, ReadInt57(mem, 0, 57, (1ULL << 57) - 1));
}
-BOOST_AUTO_TEST_CASE(EachBit) {
+BOOST_AUTO_TEST_CASE(EachBit57) {
char mem[16];
for (uint8_t b = 0; b < 8; ++b) {
memset(mem, 0, sizeof(mem));
@@ -26,15 +27,27 @@ BOOST_AUTO_TEST_CASE(EachBit) {
}
}
-BOOST_AUTO_TEST_CASE(Consecutive) {
+BOOST_AUTO_TEST_CASE(Consecutive57) {
char mem[57+8];
memset(mem, 0, sizeof(mem));
for (uint64_t b = 0; b < 57 * 8; b += 57) {
- WriteInt57(mem + (b / 8), b % 8, 57, test57);
- BOOST_CHECK_EQUAL(test57, ReadInt57(mem + b / 8, b % 8, 57, (1ULL << 57) - 1));
+ WriteInt57(mem, b, 57, test57);
+ BOOST_CHECK_EQUAL(test57, ReadInt57(mem, b, 57, (1ULL << 57) - 1));
}
for (uint64_t b = 0; b < 57 * 8; b += 57) {
- BOOST_CHECK_EQUAL(test57, ReadInt57(mem + b / 8, b % 8, 57, (1ULL << 57) - 1));
+ BOOST_CHECK_EQUAL(test57, ReadInt57(mem, b, 57, (1ULL << 57) - 1));
+ }
+}
+
+BOOST_AUTO_TEST_CASE(Consecutive25) {
+ char mem[25+8];
+ memset(mem, 0, sizeof(mem));
+ for (uint64_t b = 0; b < 25 * 8; b += 25) {
+ WriteInt25(mem, b, 25, test25);
+ BOOST_CHECK_EQUAL(test25, ReadInt25(mem, b, 25, (1ULL << 25) - 1));
+ }
+ for (uint64_t b = 0; b < 25 * 8; b += 25) {
+ BOOST_CHECK_EQUAL(test25, ReadInt25(mem, b, 25, (1ULL << 25) - 1));
}
}
diff --git a/kenlm/util/exception.cc b/kenlm/util/exception.cc
index 6c758114b..62280970f 100644
--- a/kenlm/util/exception.cc
+++ b/kenlm/util/exception.cc
@@ -1,5 +1,9 @@
#include "util/exception.hh"
+#ifdef __GXX_RTTI
+#include <typeinfo>
+#endif
+
#include <errno.h>
#include <string.h>
@@ -8,6 +12,44 @@ namespace util {
Exception::Exception() throw() {}
Exception::~Exception() throw() {}
+Exception::Exception(const Exception &from) : std::exception() {
+ stream_ << from.stream_.str();
+}
+
+Exception &Exception::operator=(const Exception &from) {
+ stream_ << from.stream_.str();
+ return *this;
+}
+
+const char *Exception::what() const throw() {
+ text_ = stream_.str();
+ return text_.c_str();
+}
+
+void Exception::SetLocation(const char *file, unsigned int line, const char *func, const char *child_name, const char *condition) {
+ /* The child class might have set some text, but we want this to come first.
+ * Another option would be passing this information to the constructor, but
+ * then child classes would have to accept constructor arguments and pass
+ * them down.
+ */
+ text_ = stream_.str();
+ stream_.str("");
+ stream_ << file << ':' << line;
+ if (func) stream_ << " in " << func << " threw ";
+ if (child_name) {
+ stream_ << child_name;
+ } else {
+#ifdef __GXX_RTTI
+ stream_ << typeid(this).name();
+#else
+ stream_ << "an exception";
+#endif
+ }
+ if (condition) stream_ << " because `" << condition;
+ stream_ << "'.\n";
+ stream_ << text_;
+}
+
namespace {
// The XOPEN version.
const char *HandleStrerror(int ret, const char *buf) {
diff --git a/kenlm/util/exception.hh b/kenlm/util/exception.hh
index 124689cf5..81675a574 100644
--- a/kenlm/util/exception.hh
+++ b/kenlm/util/exception.hh
@@ -1,32 +1,43 @@
#ifndef UTIL_EXCEPTION__
#define UTIL_EXCEPTION__
-#include "util/string_piece.hh"
-
#include <exception>
#include <sstream>
#include <string>
namespace util {
+template <class Except, class Data> typename Except::template ExceptionTag<Except&>::Identity operator<<(Except &e, const Data &data);
+
class Exception : public std::exception {
public:
Exception() throw();
virtual ~Exception() throw();
- const char *what() const throw() { return what_.c_str(); }
+ Exception(const Exception &from);
+ Exception &operator=(const Exception &from);
+
+ // Not threadsafe, but probably doesn't matter. FWIW, Boost's exception guidance implies that what() isn't threadsafe.
+ const char *what() const throw();
+
+ // For use by the UTIL_THROW macros.
+ void SetLocation(
+ const char *file,
+ unsigned int line,
+ const char *func,
+ const char *child_name,
+ const char *condition);
+
+ private:
+ template <class Except, class Data> friend typename Except::template ExceptionTag<Except&>::Identity operator<<(Except &e, const Data &data);
// This helps restrict operator<< defined below.
template <class T> struct ExceptionTag {
typedef T Identity;
};
- std::string &Str() {
- return what_;
- }
-
- protected:
- std::string what_;
+ std::stringstream stream_;
+ mutable std::string text_;
};
/* This implements the normal operator<< for Exception and all its children.
@@ -34,26 +45,53 @@ class Exception : public std::exception {
* boost::enable_if.
*/
template <class Except, class Data> typename Except::template ExceptionTag<Except&>::Identity operator<<(Except &e, const Data &data) {
- // Argh I had a stringstream in the exception, but the only way to get the string is by calling str(). But that's a temporary string, so virtual const char *what() const can't actually return it.
- std::stringstream stream;
- stream << data;
- e.Str() += stream.str();
- return e;
-}
-template <class Except> typename Except::template ExceptionTag<Except&>::Identity operator<<(Except &e, const char *data) {
- e.Str() += data;
- return e;
-}
-template <class Except> typename Except::template ExceptionTag<Except&>::Identity operator<<(Except &e, const std::string &data) {
- e.Str() += data;
- return e;
-}
-template <class Except> typename Except::template ExceptionTag<Except&>::Identity operator<<(Except &e, const StringPiece &str) {
- e.Str().append(str.data(), str.length());
+ e.stream_ << data;
return e;
}
-#define UTIL_THROW(Exception, Modify) { Exception UTIL_e; {UTIL_e << Modify;} throw UTIL_e; }
+#ifdef __GNUC__
+#define UTIL_FUNC_NAME __PRETTY_FUNCTION__
+#else
+#ifdef _WIN32
+#define UTIL_FUNC_NAME __FUNCTION__
+#else
+#define UTIL_FUNC_NAME NULL
+#endif
+#endif
+
+#define UTIL_SET_LOCATION(UTIL_e, child, condition) do { \
+ (UTIL_e).SetLocation(__FILE__, __LINE__, UTIL_FUNC_NAME, (child), (condition)); \
+} while (0)
+
+/* Create an instance of Exception, add the message Modify, and throw it.
+ * Modify is appended to the what() message and can contain << for ostream
+ * operations.
+ *
+ * do .. while kludge to swallow trailing ; character
+ * http://gcc.gnu.org/onlinedocs/cpp/Swallowing-the-Semicolon.html .
+ */
+#define UTIL_THROW(Exception, Modify) do { \
+ Exception UTIL_e; \
+ UTIL_SET_LOCATION(UTIL_e, #Exception, NULL); \
+ UTIL_e << Modify; \
+ throw UTIL_e; \
+} while (0)
+
+#define UTIL_THROW_VAR(Var, Modify) do { \
+ Exception &UTIL_e = (Var); \
+ UTIL_SET_LOCATION(UTIL_e, NULL, NULL); \
+ UTIL_e << Modify; \
+ throw UTIL_e; \
+} while (0)
+
+#define UTIL_THROW_IF(Condition, Exception, Modify) do { \
+ if (Condition) { \
+ Exception UTIL_e; \
+ UTIL_SET_LOCATION(UTIL_e, #Exception, #Condition); \
+ UTIL_e << Modify; \
+ throw UTIL_e; \
+ } \
+} while (0)
class ErrnoException : public Exception {
public:
@@ -61,7 +99,7 @@ class ErrnoException : public Exception {
virtual ~ErrnoException() throw();
- int Error() { return errno_; }
+ int Error() const throw() { return errno_; }
private:
int errno_;
diff --git a/kenlm/util/file_piece.cc b/kenlm/util/file_piece.cc
index 67681f7e4..cbe4234ff 100644
--- a/kenlm/util/file_piece.cc
+++ b/kenlm/util/file_piece.cc
@@ -41,8 +41,8 @@ GZException::GZException(void *file) {
const bool kSpaces[256] = {0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int OpenReadOrThrow(const char *name) {
- int ret = open(name, O_RDONLY);
- if (ret == -1) UTIL_THROW(ErrnoException, "in open (" << name << ") for reading");
+ int ret;
+ UTIL_THROW_IF(-1 == (ret = open(name, O_RDONLY)), ErrnoException, "while opening " << name);
return ret;
}
@@ -52,13 +52,13 @@ off_t SizeFile(int fd) {
return sb.st_size;
}
-FilePiece::FilePiece(const char *name, std::ostream *show_progress, off_t min_buffer) throw (GZException) :
+FilePiece::FilePiece(const char *name, std::ostream *show_progress, off_t min_buffer) :
file_(OpenReadOrThrow(name)), total_size_(SizeFile(file_.get())), page_(sysconf(_SC_PAGE_SIZE)),
progress_(total_size_ == kBadSize ? NULL : show_progress, std::string("Reading ") + name, total_size_) {
Initialize(name, show_progress, min_buffer);
}
-FilePiece::FilePiece(int fd, const char *name, std::ostream *show_progress, off_t min_buffer) throw (GZException) :
+FilePiece::FilePiece(int fd, const char *name, std::ostream *show_progress, off_t min_buffer) :
file_(fd), total_size_(SizeFile(file_.get())), page_(sysconf(_SC_PAGE_SIZE)),
progress_(total_size_ == kBadSize ? NULL : show_progress, std::string("Reading ") + name, total_size_) {
Initialize(name, show_progress, min_buffer);
@@ -78,7 +78,7 @@ FilePiece::~FilePiece() {
#endif
}
-StringPiece FilePiece::ReadLine(char delim) throw (GZException, EndOfFileException) {
+StringPiece FilePiece::ReadLine(char delim) {
size_t skip = 0;
while (true) {
for (const char *i = position_ + skip; i < position_end_; ++i) {
@@ -97,20 +97,20 @@ StringPiece FilePiece::ReadLine(char delim) throw (GZException, EndOfFileExcepti
}
}
-float FilePiece::ReadFloat() throw(GZException, EndOfFileException, ParseNumberException) {
+float FilePiece::ReadFloat() {
return ReadNumber<float>();
}
-double FilePiece::ReadDouble() throw(GZException, EndOfFileException, ParseNumberException) {
+double FilePiece::ReadDouble() {
return ReadNumber<double>();
}
-long int FilePiece::ReadLong() throw(GZException, EndOfFileException, ParseNumberException) {
+long int FilePiece::ReadLong() {
return ReadNumber<long int>();
}
-unsigned long int FilePiece::ReadULong() throw(GZException, EndOfFileException, ParseNumberException) {
+unsigned long int FilePiece::ReadULong() {
return ReadNumber<unsigned long int>();
}
-void FilePiece::Initialize(const char *name, std::ostream *show_progress, off_t min_buffer) throw (GZException) {
+void FilePiece::Initialize(const char *name, std::ostream *show_progress, off_t min_buffer) {
#ifdef HAVE_ZLIB
gz_file_ = NULL;
#endif
@@ -163,7 +163,7 @@ void ParseNumber(const char *begin, char *&end, unsigned long int &out) {
}
} // namespace
-template <class T> T FilePiece::ReadNumber() throw(GZException, EndOfFileException, ParseNumberException) {
+template <class T> T FilePiece::ReadNumber() {
SkipSpaces();
while (last_space_ < position_) {
if (at_end_) {
@@ -186,7 +186,7 @@ template <class T> T FilePiece::ReadNumber() throw(GZException, EndOfFileExcepti
return ret;
}
-const char *FilePiece::FindDelimiterOrEOF(const bool *delim) throw (GZException, EndOfFileException) {
+const char *FilePiece::FindDelimiterOrEOF(const bool *delim) {
size_t skip = 0;
while (true) {
for (const char *i = position_ + skip; i < position_end_; ++i) {
@@ -201,7 +201,7 @@ const char *FilePiece::FindDelimiterOrEOF(const bool *delim) throw (GZException,
}
}
-void FilePiece::Shift() throw(GZException, EndOfFileException) {
+void FilePiece::Shift() {
if (at_end_) {
progress_.Finished();
throw EndOfFileException();
@@ -217,7 +217,7 @@ void FilePiece::Shift() throw(GZException, EndOfFileException) {
}
}
-void FilePiece::MMapShift(off_t desired_begin) throw() {
+void FilePiece::MMapShift(off_t desired_begin) {
// Use mmap.
off_t ignore = desired_begin % page_;
// Duplicate request for Shift means give more data.
@@ -237,7 +237,12 @@ void FilePiece::MMapShift(off_t desired_begin) throw() {
// Forcibly clear the existing mmap first.
data_.reset();
- data_.reset(mmap(NULL, mapped_size, PROT_READ, MAP_PRIVATE, *file_, mapped_offset), mapped_size, scoped_memory::MMAP_ALLOCATED);
+ data_.reset(mmap(NULL, mapped_size, PROT_READ, MAP_SHARED
+ // Populate where available on linux
+#ifdef MAP_POPULATE
+ | MAP_POPULATE
+#endif
+ , *file_, mapped_offset), mapped_size, scoped_memory::MMAP_ALLOCATED);
if (data_.get() == MAP_FAILED) {
if (desired_begin) {
if (((off_t)-1) == lseek(*file_, desired_begin, SEEK_SET)) UTIL_THROW(ErrnoException, "mmap failed even though it worked before. lseek failed too, so using read isn't an option either.");
@@ -254,25 +259,23 @@ void FilePiece::MMapShift(off_t desired_begin) throw() {
progress_.Set(desired_begin);
}
-void FilePiece::TransitionToRead() throw (GZException) {
+void FilePiece::TransitionToRead() {
assert(!fallback_to_read_);
fallback_to_read_ = true;
data_.reset();
data_.reset(malloc(default_map_size_), default_map_size_, scoped_memory::MALLOC_ALLOCATED);
- if (!data_.get()) UTIL_THROW(ErrnoException, "malloc failed for " << default_map_size_);
+ UTIL_THROW_IF(!data_.get(), ErrnoException, "malloc failed for " << default_map_size_);
position_ = data_.begin();
position_end_ = position_;
#ifdef HAVE_ZLIB
assert(!gz_file_);
gz_file_ = gzdopen(file_.get(), "r");
- if (!gz_file_) {
- UTIL_THROW(GZException, "zlib failed to open " << file_name_);
- }
+ UTIL_THROW_IF(!gz_file_, GZException, "zlib failed to open " << file_name_);
#endif
}
-void FilePiece::ReadShift() throw(GZException, EndOfFileException) {
+void FilePiece::ReadShift() {
assert(fallback_to_read_);
// Bytes [data_.begin(), position_) have been consumed.
// Bytes [position_, position_end_) have been read into the buffer.
@@ -292,7 +295,7 @@ void FilePiece::ReadShift() throw(GZException, EndOfFileException) {
std::size_t valid_length = position_end_ - position_;
default_map_size_ *= 2;
data_.call_realloc(default_map_size_);
- if (!data_.get()) UTIL_THROW(ErrnoException, "realloc failed for " << default_map_size_);
+ UTIL_THROW_IF(!data_.get(), ErrnoException, "realloc failed for " << default_map_size_);
position_ = data_.begin();
position_end_ = position_ + valid_length;
} else {
@@ -315,7 +318,7 @@ void FilePiece::ReadShift() throw(GZException, EndOfFileException) {
}
#else
read_return = read(file_.get(), static_cast<char*>(data_.get()) + already_read, default_map_size_ - already_read);
- if (read_return == -1) UTIL_THROW(ErrnoException, "read failed");
+ UTIL_THROW_IF(read_return == -1, ErrnoException, "read failed");
progress_.Set(mapped_offset_);
#endif
if (read_return == 0) {
diff --git a/kenlm/util/file_piece.hh b/kenlm/util/file_piece.hh
index 870ae5a34..a5c009107 100644
--- a/kenlm/util/file_piece.hh
+++ b/kenlm/util/file_piece.hh
@@ -45,13 +45,13 @@ off_t SizeFile(int fd);
class FilePiece {
public:
// 32 MB default.
- explicit FilePiece(const char *file, std::ostream *show_progress = NULL, off_t min_buffer = 33554432) throw(GZException);
+ explicit FilePiece(const char *file, std::ostream *show_progress = NULL, off_t min_buffer = 33554432);
// Takes ownership of fd. name is used for messages.
- explicit FilePiece(int fd, const char *name, std::ostream *show_progress = NULL, off_t min_buffer = 33554432) throw(GZException);
+ explicit FilePiece(int fd, const char *name, std::ostream *show_progress = NULL, off_t min_buffer = 33554432);
~FilePiece();
- char get() throw(GZException, EndOfFileException) {
+ char get() {
if (position_ == position_end_) {
Shift();
if (at_end_) throw EndOfFileException();
@@ -60,22 +60,22 @@ class FilePiece {
}
// Leaves the delimiter, if any, to be returned by get(). Delimiters defined by isspace().
- StringPiece ReadDelimited(const bool *delim = kSpaces) throw(GZException, EndOfFileException) {
+ StringPiece ReadDelimited(const bool *delim = kSpaces) {
SkipSpaces(delim);
return Consume(FindDelimiterOrEOF(delim));
}
// Unlike ReadDelimited, this includes leading spaces and consumes the delimiter.
// It is similar to getline in that way.
- StringPiece ReadLine(char delim = '\n') throw(GZException, EndOfFileException);
+ StringPiece ReadLine(char delim = '\n');
- float ReadFloat() throw(GZException, EndOfFileException, ParseNumberException);
- double ReadDouble() throw(GZException, EndOfFileException, ParseNumberException);
- long int ReadLong() throw(GZException, EndOfFileException, ParseNumberException);
- unsigned long int ReadULong() throw(GZException, EndOfFileException, ParseNumberException);
+ float ReadFloat();
+ double ReadDouble();
+ long int ReadLong();
+ unsigned long int ReadULong();
// Skip spaces defined by isspace.
- void SkipSpaces(const bool *delim = kSpaces) throw (GZException, EndOfFileException) {
+ void SkipSpaces(const bool *delim = kSpaces) {
for (; ; ++position_) {
if (position_ == position_end_) Shift();
if (!delim[static_cast<unsigned char>(*position_)]) return;
@@ -89,9 +89,9 @@ class FilePiece {
const std::string &FileName() const { return file_name_; }
private:
- void Initialize(const char *name, std::ostream *show_progress, off_t min_buffer) throw(GZException);
+ void Initialize(const char *name, std::ostream *show_progress, off_t min_buffer);
- template <class T> T ReadNumber() throw(GZException, EndOfFileException, ParseNumberException);
+ template <class T> T ReadNumber();
StringPiece Consume(const char *to) {
StringPiece ret(position_, to - position_);
@@ -99,14 +99,14 @@ class FilePiece {
return ret;
}
- const char *FindDelimiterOrEOF(const bool *delim = kSpaces) throw (GZException, EndOfFileException);
+ const char *FindDelimiterOrEOF(const bool *delim = kSpaces);
- void Shift() throw (EndOfFileException, GZException);
+ void Shift();
// Backends to Shift().
- void MMapShift(off_t desired_begin) throw ();
+ void MMapShift(off_t desired_begin);
- void TransitionToRead() throw (GZException);
- void ReadShift() throw (GZException, EndOfFileException);
+ void TransitionToRead();
+ void ReadShift();
const char *position_, *last_space_, *position_end_;
diff --git a/kenlm/util/mmap.cc b/kenlm/util/mmap.cc
index 456ce9531..e7c0643b1 100644
--- a/kenlm/util/mmap.cc
+++ b/kenlm/util/mmap.cc
@@ -15,8 +15,9 @@ namespace util {
scoped_mmap::~scoped_mmap() {
if (data_ != (void*)-1) {
- if (munmap(data_, size_)) {
- std::cerr << "munmap failed for " << size_ << " bytes." << std::endl;
+ // Thanks Denis Filimonov for pointing on NFS likes msync first.
+ if (msync(data_, size_, MS_SYNC) || munmap(data_, size_)) {
+ std::cerr << "msync or mmap failed for " << size_ << " bytes." << std::endl;
abort();
}
}
diff --git a/kenlm/util/probing_hash_table.hh b/kenlm/util/probing_hash_table.hh
index 00be0ed79..2ec342a66 100644
--- a/kenlm/util/probing_hash_table.hh
+++ b/kenlm/util/probing_hash_table.hh
@@ -57,7 +57,7 @@ template <class PackingT, class HashT, class EqualT = std::equal_to<typename Pac
equal_(equal_func),
entries_(0)
#ifdef DEBUG
- , initialized_(true),
+ , initialized_(true)
#endif
{}
diff --git a/kenlm/util/sorted_uniform.hh b/kenlm/util/sorted_uniform.hh
index 05826b51d..0d6ecbbd6 100644
--- a/kenlm/util/sorted_uniform.hh
+++ b/kenlm/util/sorted_uniform.hh
@@ -9,52 +9,117 @@
namespace util {
-inline std::size_t Pivot(uint64_t off, uint64_t range, std::size_t width) {
- std::size_t ret = static_cast<std::size_t>(static_cast<float>(off) / static_cast<float>(range) * static_cast<float>(width));
- // Cap for floating point rounding
- return (ret < width) ? ret : width - 1;
-}
-/*inline std::size_t Pivot(uint32_t off, uint32_t range, std::size_t width) {
- return static_cast<std::size_t>(static_cast<uint64_t>(off) * static_cast<uint64_t>(width) / static_cast<uint64_t>(range));
+template <class T> class IdentityAccessor {
+ public:
+ typedef T Key;
+ T operator()(const T *in) const { return *in; }
+};
+
+struct Pivot64 {
+ static inline std::size_t Calc(uint64_t off, uint64_t range, std::size_t width) {
+ std::size_t ret = static_cast<std::size_t>(static_cast<float>(off) / static_cast<float>(range) * static_cast<float>(width));
+ // Cap for floating point rounding
+ return (ret < width) ? ret : width - 1;
+ }
+};
+
+// Use when off * width is <2^64. This is guaranteed when each of them is actually a 32-bit value.
+struct Pivot32 {
+ static inline std::size_t Calc(uint64_t off, uint64_t range, uint64_t width) {
+ return static_cast<std::size_t>((off * width) / (range + 1));
+ }
+};
+
+// Usage: PivotSelect<sizeof(DataType)>::T
+template <unsigned> struct PivotSelect;
+template <> struct PivotSelect<8> { typedef Pivot64 T; };
+template <> struct PivotSelect<4> { typedef Pivot32 T; };
+template <> struct PivotSelect<2> { typedef Pivot32 T; };
+
+/* Binary search. */
+template <class Iterator, class Accessor> bool BinaryFind(
+ const Accessor &accessor,
+ Iterator begin,
+ Iterator end,
+ const typename Accessor::Key key, Iterator &out) {
+ while (end > begin) {
+ Iterator pivot(begin + (end - begin) / 2);
+ typename Accessor::Key mid(accessor(pivot));
+ if (mid < key) {
+ begin = pivot + 1;
+ } else if (mid > key) {
+ end = pivot;
+ } else {
+ out = pivot;
+ return true;
+ }
+ }
+ return false;
}
-inline std::size_t Pivot(uint16_t off, uint16_t range, std::size_t width) {
- return static_cast<std::size_t>(static_cast<std::size_t>(off) * width / static_cast<std::size_t>(range));
+
+// Search the range [before_it + 1, after_it - 1] for key.
+// Preconditions:
+// before_v <= key <= after_v
+// before_v <= all values in the range [before_it + 1, after_it - 1] <= after_v
+// range is sorted.
+template <class Iterator, class Accessor, class Pivot> bool BoundedSortedUniformFind(
+ const Accessor &accessor,
+ Iterator before_it, typename Accessor::Key before_v,
+ Iterator after_it, typename Accessor::Key after_v,
+ const typename Accessor::Key key, Iterator &out) {
+ while (after_it - before_it > 1) {
+ Iterator pivot(before_it + (1 + Pivot::Calc(key - before_v, after_v - before_v, after_it - before_it - 1)));
+ typename Accessor::Key mid(accessor(pivot));
+ if (mid < key) {
+ before_it = pivot;
+ before_v = mid;
+ } else if (mid > key) {
+ after_it = pivot;
+ after_v = mid;
+ } else {
+ out = pivot;
+ return true;
+ }
+ }
+ return false;
}
-inline std::size_t Pivot(unsigned char off, unsigned char range, std::size_t width) {
- return static_cast<std::size_t>(static_cast<std::size_t>(off) * width / static_cast<std::size_t>(range));
-}*/
-template <class Iterator, class Key> bool SortedUniformFind(Iterator begin, Iterator end, const Key key, Iterator &out) {
+template <class Iterator, class Accessor, class Pivot> bool SortedUniformFind(const Accessor &accessor, Iterator begin, Iterator end, const typename Accessor::Key key, Iterator &out) {
if (begin == end) return false;
- Key below(begin->GetKey());
+ typename Accessor::Key below(accessor(begin));
if (key <= below) {
if (key == below) { out = begin; return true; }
return false;
}
// Make the range [begin, end].
--end;
- Key above(end->GetKey());
+ typename Accessor::Key above(accessor(end));
if (key >= above) {
if (key == above) { out = end; return true; }
return false;
}
+ return BoundedSortedUniformFind<Iterator, Accessor, Pivot>(accessor, begin, below, end, above, key, out);
+}
- // Search the range [begin + 1, end - 1] knowing that *begin == below, *end == above.
- while (end - begin > 1) {
- Iterator pivot(begin + (1 + Pivot(key - below, above - below, static_cast<std::size_t>(end - begin - 1))));
- Key mid(pivot->GetKey());
+// May return begin - 1.
+template <class Iterator, class Accessor> Iterator BinaryBelow(
+ const Accessor &accessor,
+ Iterator begin,
+ Iterator end,
+ const typename Accessor::Key key) {
+ while (end > begin) {
+ Iterator pivot(begin + (end - begin) / 2);
+ typename Accessor::Key mid(accessor(pivot));
if (mid < key) {
- begin = pivot;
- below = mid;
+ begin = pivot + 1;
} else if (mid > key) {
end = pivot;
- above = mid;
} else {
- out = pivot;
- return true;
+ for (++pivot; (pivot < end) && accessor(pivot) == mid; ++pivot) {}
+ return pivot - 1;
}
}
- return false;
+ return begin - 1;
}
// To use this template, you need to define a Pivot function to match Key.
@@ -64,7 +129,13 @@ template <class PackingT> class SortedUniformMap {
typedef typename Packing::ConstIterator ConstIterator;
typedef typename Packing::MutableIterator MutableIterator;
- public:
+ struct Accessor {
+ public:
+ typedef typename Packing::Key Key;
+ const Key &operator()(const ConstIterator &i) const { return i->GetKey(); }
+ Key &operator()(const MutableIterator &i) const { return i->GetKey(); }
+ };
+
// Offer consistent API with probing hash.
static std::size_t Size(std::size_t entries, float /*ignore*/ = 0.0) {
return sizeof(uint64_t) + entries * Packing::kBytes;
@@ -120,7 +191,7 @@ template <class PackingT> class SortedUniformMap {
assert(initialized_);
assert(loaded_);
#endif
- return SortedUniformFind<MutableIterator, Key>(begin_, end_, key, out);
+ return SortedUniformFind<MutableIterator, Accessor, Pivot64>(begin_, end_, key, out);
}
// Do not call before FinishedInserting.
@@ -129,7 +200,7 @@ template <class PackingT> class SortedUniformMap {
assert(initialized_);
assert(loaded_);
#endif
- return SortedUniformFind<ConstIterator, Key>(ConstIterator(begin_), ConstIterator(end_), key, out);
+ return SortedUniformFind<ConstIterator, Accessor, Pivot64>(Accessor(), ConstIterator(begin_), ConstIterator(end_), key, out);
}
ConstIterator begin() const { return begin_; }
diff --git a/kenlm/util/string_piece.hh b/kenlm/util/string_piece.hh
index e48ce3d96..5de053aa8 100644
--- a/kenlm/util/string_piece.hh
+++ b/kenlm/util/string_piece.hh
@@ -60,10 +60,28 @@
#ifdef HAVE_ICU
#include <unicode/stringpiece.h>
+#include <unicode/uversion.h>
+
+// Old versions of ICU don't define operator== and operator!=.
+#if (U_ICU_VERSION_MAJOR_NUM < 4) || ((U_ICU_VERSION_MAJOR_NUM == 4) && (U_ICU_VERSION_MINOR_NUM < 4))
+#warning You are using an old version of ICU. Consider upgrading to ICU >= 4.6.
+inline bool operator==(const StringPiece& x, const StringPiece& y) {
+ if (x.size() != y.size())
+ return false;
+
+ return std::memcmp(x.data(), y.data(), x.size()) == 0;
+}
+
+inline bool operator!=(const StringPiece& x, const StringPiece& y) {
+ return !(x == y);
+}
+#endif // old version of ICU
+
U_NAMESPACE_BEGIN
#else
#include <algorithm>
+#include <cstddef>
#include <string>
#include <string.h>
@@ -208,7 +226,7 @@ inline bool operator!=(const StringPiece& x, const StringPiece& y) {
return !(x == y);
}
-#endif
+#endif // HAVE_ICU undefined
inline bool operator<(const StringPiece& x, const StringPiece& y) {
const int r = std::memcmp(x.data(), y.data(),
diff --git a/mert/Data.cpp b/mert/Data.cpp
index 0eb4f4ca4..830621ef9 100644
--- a/mert/Data.cpp
+++ b/mert/Data.cpp
@@ -103,3 +103,109 @@ void Data::loadnbest(const std::string &file)
inp.close();
}
+// really not the right place...
+float sentenceLevelBleuPlusOne( ScoreStats &stats ) {
+ float logbleu = 0.0;
+ const unsigned int bleu_order = 4;
+ for (unsigned int j=0; j<bleu_order; j++) {
+ //cerr << (stats.get(2*j)+1) << "/" << (stats.get(2*j+1)+1) << " ";
+ logbleu += log(stats.get(2*j)+1) - log(stats.get(2*j+1)+1);
+ }
+ logbleu /= bleu_order;
+ float brevity = 1.0 - (float)stats.get(bleu_order*2)/stats.get(1);
+ if (brevity < 0.0) {
+ logbleu += brevity;
+ }
+ //cerr << brevity << " -> " << exp(logbleu) << endl;
+ return exp(logbleu);
+}
+
+class SampledPair {
+private:
+ unsigned int translation1;
+ unsigned int translation2;
+ float scoreDiff;
+public:
+ SampledPair( unsigned int t1, unsigned int t2, float diff ) {
+ if (diff > 0) {
+ translation1 = t1;
+ translation2 = t2;
+ scoreDiff = diff;
+ }
+ else {
+ translation1 = t2;
+ translation2 = t1;
+ scoreDiff = -diff;
+ }
+ }
+ float getDiff() { return scoreDiff; }
+ unsigned int getTranslation1() { return translation1; }
+ unsigned int getTranslation2() { return translation2; }
+};
+
+
+void Data::sample_ranked_pairs( const std::string &rankedpairfile ) {
+ cout << "Sampling ranked pairs." << endl;
+
+ ofstream *outFile = new ofstream();
+ outFile->open( rankedpairfile.c_str() );
+ ostream *out = outFile;
+
+ const unsigned int n_samplings = 5000;
+ const unsigned int n_samples = 50;
+ const float min_diff = 0.05;
+
+ // loop over all sentences
+ for(unsigned int S=0; S<featdata->size(); S++) {
+ unsigned int n_translations = featdata->get(S).size();
+ // sample a fixed number of times
+ vector< SampledPair* > samples;
+ vector< float > scores;
+ for(unsigned int i=0; i<n_samplings; i++) {
+ unsigned int translation1 = rand() % n_translations;
+ float bleu1 = sentenceLevelBleuPlusOne(scoredata->get(S,translation1));
+
+ unsigned int translation2 = rand() % n_translations;
+ float bleu2 = sentenceLevelBleuPlusOne(scoredata->get(S,translation2));
+
+ if (abs(bleu1-bleu2) < min_diff)
+ continue;
+
+ samples.push_back( new SampledPair( translation1, translation2, bleu1-bleu2) );
+ scores.push_back( 1.0 - abs(bleu1-bleu2) );
+ }
+ //cerr << "sampled " << samples.size() << " pairs\n";
+
+ float min_diff = -1.0;
+ if (samples.size() > n_samples) {
+ nth_element(scores.begin(), scores.begin()+(n_samples-1), scores.end());
+ min_diff = 0.99999-scores[n_samples-1];
+ //cerr << "min_diff = " << min_diff << endl;
+ }
+
+ unsigned int collected = 0;
+ for(unsigned int i=0; i<samples.size() && collected < n_samples; i++) {
+ if (samples[i]->getDiff() >= min_diff) {
+ collected++;
+ FeatureStats &f1 = featdata->get(S,samples[i]->getTranslation1());
+ FeatureStats &f2 = featdata->get(S,samples[i]->getTranslation2());
+
+ *out << "1";
+ for(unsigned int j=0; j<f1.size(); j++)
+ if (abs(f1.get(j)-f2.get(j)) > 0.00001)
+ *out << " F" << j << " " << (f1.get(j)-f2.get(j));
+ *out << endl;
+
+ *out << "0";
+ for(unsigned int j=0; j<f1.size(); j++)
+ if (abs(f1.get(j)-f2.get(j)) > 0.00001)
+ *out << " F" << j << " " << (f2.get(j)-f1.get(j));
+ *out << endl;
+ }
+ delete samples[i];
+ }
+ //cerr << "collected " << collected << endl;
+ }
+ out->flush();
+ outFile->close();
+}
diff --git a/mert/Data.h b/mert/Data.h
index e46b7dc18..2973ef0ab 100644
--- a/mert/Data.h
+++ b/mert/Data.h
@@ -85,9 +85,12 @@ public:
inline std::string getFeatureName(size_t idx) {
return featdata->getFeatureName(idx);
};
+
inline size_t getFeatureIndex(const std::string& name) {
return featdata->getFeatureIndex(name);
};
+
+ void sample_ranked_pairs( const std::string &rankedPairFile );
};
diff --git a/mert/Makefile.am b/mert/Makefile.am
index ce264c9d0..61f6856b8 100644
--- a/mert/Makefile.am
+++ b/mert/Makefile.am
@@ -9,7 +9,25 @@ Point.cpp \
PerScorer.cpp \
Scorer.cpp \
Optimizer.cpp \
-mert.cpp
+mert.cpp \
+TERsrc/alignmentStruct.cpp \
+TERsrc/hashMap.cpp \
+TERsrc/hashMapStringInfos.cpp \
+TERsrc/segmentStructure.cpp \
+TERsrc/stringHasher.cpp \
+TERsrc/terAlignment.cpp \
+TERsrc/terShift.cpp \
+TERsrc/tinyxml.cpp \
+TERsrc/tinyxmlparser.cpp \
+TERsrc/documentStructure.cpp \
+TERsrc/hashMapInfos.cpp \
+TERsrc/infosHasher.cpp \
+TERsrc/stringInfosHasher.cpp \
+TERsrc/tercalc.cpp \
+TERsrc/tinystr.cpp \
+TERsrc/tinyxmlerror.cpp \
+TERsrc/tools.cpp \
+TerScorer.cpp
extractor_SOURCES = Util.cpp \
Timer.cpp \
@@ -21,8 +39,25 @@ Point.cpp \
PerScorer.cpp \
Scorer.cpp \
Optimizer.cpp \
-extractor.cpp
-
+extractor.cpp \
+TERsrc/alignmentStruct.cpp \
+TERsrc/hashMap.cpp \
+TERsrc/hashMapStringInfos.cpp \
+TERsrc/segmentStructure.cpp \
+TERsrc/stringHasher.cpp \
+TERsrc/terAlignment.cpp \
+TERsrc/terShift.cpp \
+TERsrc/tinyxml.cpp \
+TERsrc/tinyxmlparser.cpp \
+TERsrc/documentStructure.cpp \
+TERsrc/hashMapInfos.cpp \
+TERsrc/infosHasher.cpp \
+TERsrc/stringInfosHasher.cpp \
+TERsrc/tercalc.cpp \
+TERsrc/tinystr.cpp \
+TERsrc/tinyxmlerror.cpp \
+TERsrc/tools.cpp \
+TerScorer.cpp
mert_CPPFLAGS = -W -Wall -Wno-unused -ffor-scope -DTRACE_ENABLE
extractor_CPPFLAGS = -W -Wall -Wno-unused -ffor-scope -DTRACE_ENABLE
diff --git a/mert/Optimizer.cpp b/mert/Optimizer.cpp
index b49f49440..040d60e60 100644
--- a/mert/Optimizer.cpp
+++ b/mert/Optimizer.cpp
@@ -28,7 +28,7 @@ void Optimizer::SetFData(FeatureData *F)
FData=F;
};
-Optimizer::Optimizer(unsigned Pd,vector<unsigned> i2O,vector<parameter_t> start):scorer(NULL),FData(NULL)
+Optimizer::Optimizer(unsigned Pd,vector<unsigned> i2O,vector<parameter_t> start, unsigned int nrandom):scorer(NULL),FData(NULL),number_of_random_directions(nrandom)
{
//warning: the init vector is a full set of parameters, of dimension pdim!
@@ -381,15 +381,20 @@ statscore_t SimpleOptimizer::TrueRun(Point& P)const
Point linebest;
- for(unsigned int d=0; d<Point::getdim(); d++) {
+ for(unsigned int d=0; d<Point::getdim()+number_of_random_directions; d++) {
if(verboselevel()>4) {
// cerr<<"minimizing along direction "<<d<<endl;
cerr<<"starting point: " << P << " => " << prevscore << endl;
}
Point direction;
- for(unsigned int i=0; i<Point::getdim(); i++)
- direction[i];
- direction[d]=1.0;
+ if (d<Point::getdim()) { // regular updates along one dimension
+ for(unsigned int i=0; i<Point::getdim(); i++)
+ direction[i]=0.0;
+ direction[d]=1.0;
+ }
+ else { // random direction update
+ direction.Randomize();
+ }
statscore_t curscore=LineOptimize(P,direction,linebest);//find the minimum on the line
if(verboselevel()>5) {
cerr<<"direction: "<< d << " => " << curscore << endl;
@@ -417,19 +422,46 @@ statscore_t SimpleOptimizer::TrueRun(Point& P)const
return bestscore;
}
+//---------------- code for the optimizer with random directions
+float RandomDirectionOptimizer::eps=0.0001;
+statscore_t RandomDirectionOptimizer::TrueRun(Point& P)const
+{
+ statscore_t prevscore=P.score;
+
+ // do specified number of random direction optimizations
+ unsigned int nrun = 0;
+ unsigned int nrun_no_change = 0;
+ for(; nrun_no_change<number_of_random_directions; nrun++, nrun_no_change++)
+ {
+ // choose a random direction in which to optimize
+ Point direction;
+ direction.Randomize();
+
+ //find the minimum on the line
+ statscore_t score=LineOptimize(P,direction,P);
+ if(verboselevel()>4) {
+ cerr<<"direction: "<< direction << " => " << score;
+ cerr<<" ("<< (score-prevscore) << ")" << endl;
+ cerr<<"\tending point: "<< P << " => " << score << endl;
+ }
+
+ if (score-prevscore > eps)
+ nrun_no_change=0;
+ prevscore = score;
+ }
+
+ if(verboselevel()>2) {
+ cerr<<"end Powell Algo, nrun="<<nrun<<endl;
+ }
+ return prevscore;
+}
/**RandomOptimizer to use as beaseline and test.\n
Just return a random point*/
statscore_t RandomOptimizer::TrueRun(Point& P)const
{
- vector<parameter_t> min(Point::getdim());
- vector<parameter_t> max(Point::getdim());
- for(unsigned int d=0; d<Point::getdim(); d++) {
- min[d]=0.0;
- max[d]=1.0;
- }
- P.Randomize(min,max);
+ P.Randomize();
statscore_t score=GetStatScore(P);
P.score=score;
return score;
@@ -442,6 +474,7 @@ void OptimizerFactory::SetTypeNames()
if(typenames.empty()) {
typenames.resize(NOPTIMIZER);
typenames[POWELL]="powell";
+ typenames[RANDOM_DIRECTION]="random-direction";
typenames[RANDOM]="random";
//add new type there
}
@@ -464,9 +497,8 @@ OptimizerFactory::OptType OptimizerFactory::GetOType(string type)
return((OptType)thetype);
};
-Optimizer* OptimizerFactory::BuildOptimizer(unsigned dim,vector<unsigned> i2o,vector<parameter_t> start,string type)
+Optimizer* OptimizerFactory::BuildOptimizer(unsigned dim,vector<unsigned> i2o,vector<parameter_t> start,string type, unsigned int nrandom)
{
-
OptType T=GetOType(type);
if(T==NOPTIMIZER) {
cerr<<"Error: unknown Optimizer type "<<type<<endl;
@@ -479,10 +511,13 @@ Optimizer* OptimizerFactory::BuildOptimizer(unsigned dim,vector<unsigned> i2o,ve
switch((OptType)T) {
case POWELL:
- return new SimpleOptimizer(dim,i2o,start);
+ return new SimpleOptimizer(dim,i2o,start,nrandom);
+ break;
+ case RANDOM_DIRECTION:
+ return new RandomDirectionOptimizer(dim,i2o,start,nrandom);
break;
case RANDOM:
- return new RandomOptimizer(dim,i2o,start);
+ return new RandomOptimizer(dim,i2o,start,nrandom);
break;
default:
cerr<<"Error: unknown optimizer"<<type<<endl;
diff --git a/mert/Optimizer.h b/mert/Optimizer.h
index 95a9a3ef6..9920be77f 100644
--- a/mert/Optimizer.h
+++ b/mert/Optimizer.h
@@ -11,8 +11,6 @@
typedef float featurescore;
-
-
using namespace std;
/**abstract virtual class*/
class Optimizer
@@ -20,8 +18,9 @@ class Optimizer
protected:
Scorer * scorer; //no accessor for them only child can use them
FeatureData * FData;//no accessor for them only child can use them
+ unsigned int number_of_random_directions;
public:
- Optimizer(unsigned Pd,vector<unsigned> i2O,vector<parameter_t> start);
+ Optimizer(unsigned Pd,vector<unsigned> i2O,vector<parameter_t> start,unsigned int nrandom);
void SetScorer(Scorer *S);
void SetFData(FeatureData *F);
virtual ~Optimizer();
@@ -46,24 +45,33 @@ public:
};
-/**default basic optimizer*/
+/**default basic optimizer*/
class SimpleOptimizer: public Optimizer
{
private:
- static float eps;
+ static float eps;
public:
- SimpleOptimizer(unsigned dim,vector<unsigned> i2O,vector<parameter_t> start):Optimizer(dim,i2O,start) {};
+ SimpleOptimizer(unsigned dim,vector<unsigned> i2O,vector<parameter_t> start,unsigned int nrandom):Optimizer(dim,i2O,start,nrandom) {};
virtual statscore_t TrueRun(Point&)const;
};
-class RandomOptimizer: public Optimizer
+/**optimizer with random directions*/
+class RandomDirectionOptimizer: public Optimizer
{
+private:
+ static float eps;
public:
- RandomOptimizer(unsigned dim,vector<unsigned> i2O,vector<parameter_t> start):Optimizer(dim,i2O,start) {};
+ RandomDirectionOptimizer(unsigned dim,vector<unsigned> i2O,vector<parameter_t> start,unsigned int nrandom):Optimizer(dim,i2O,start,nrandom) {};
virtual statscore_t TrueRun(Point&)const;
};
-
+/**dumb baseline optimizer: just picks a random point and quits*/
+class RandomOptimizer: public Optimizer
+{
+public:
+ RandomOptimizer(unsigned dim,vector<unsigned> i2O,vector<parameter_t> start, unsigned int nrandom):Optimizer(dim,i2O,start,nrandom) {};
+ virtual statscore_t TrueRun(Point&)const;
+};
class OptimizerFactory
{
@@ -71,9 +79,9 @@ public:
// unsigned dim;
//Point Start;
static vector<string> GetTypeNames();
- static Optimizer* BuildOptimizer(unsigned dim,vector<unsigned>tooptimize,vector<parameter_t> start,string type);
+ static Optimizer* BuildOptimizer(unsigned dim,vector<unsigned>tooptimize,vector<parameter_t> start,string type,unsigned int nrandom);
private:
- enum OptType {POWELL=0,RANDOM,NOPTIMIZER}; //Add new optimizer here BEFORE NOPTIMZER
+ enum OptType {POWELL=0,RANDOM_DIRECTION=1,RANDOM,NOPTIMIZER}; //Add new optimizer here BEFORE NOPTIMZER
static OptType GetOType(string);
static vector<string> typenames;
static void SetTypeNames();
diff --git a/mert/Point.cpp b/mert/Point.cpp
index af57aaa98..2bb53744b 100644
--- a/mert/Point.cpp
+++ b/mert/Point.cpp
@@ -14,12 +14,16 @@ map<unsigned,statscore_t> Point::fixedweights;
unsigned Point::pdim=0;
unsigned Point::ncall=0;
-void Point::Randomize(const vector<parameter_t>& min,const vector<parameter_t>& max)
+vector<parameter_t> Point::m_min;
+vector<parameter_t> Point::m_max;
+
+void Point::Randomize()
{
- assert(min.size()==Point::dim);
- assert(max.size()==Point::dim);
+ assert(m_min.size()==Point::dim);
+ assert(m_max.size()==Point::dim);
for (unsigned int i=0; i<size(); i++)
- operator[](i)= min[i] + (float)random()/(float)RAND_MAX * (float)(max[i]-min[i]);
+ operator[](i)= m_min[i]
+ + (float)random()/(float)RAND_MAX * (float)(m_max[i]-m_min[i]);
}
void Point::NormalizeL2()
@@ -47,15 +51,26 @@ void Point::NormalizeL1()
}
//Can initialize from a vector of dim or pdim
-Point::Point(const vector<parameter_t>& init):vector<parameter_t>(Point::dim)
+Point::Point(const vector<parameter_t>& init,
+ const vector<parameter_t>& min,
+ const vector<parameter_t>& max
+ ):vector<parameter_t>(Point::dim)
{
+ m_min.resize(Point::dim);
+ m_max.resize(Point::dim);
if(init.size()==dim) {
- for (unsigned int i=0; i<Point::dim; i++)
+ for (unsigned int i=0; i<Point::dim; i++) {
operator[](i)=init[i];
+ m_min[i] = min[i];
+ m_max[i] = max[i];
+ }
} else {
assert(init.size()==pdim);
- for (unsigned int i=0; i<Point::dim; i++)
+ for (unsigned int i=0; i<Point::dim; i++) {
operator[](i)=init[optindices[i]];
+ m_min[i] = min[optindices[i]];
+ m_max[i] = max[optindices[i]];
+ }
}
};
diff --git a/mert/Point.h b/mert/Point.h
index 9a4d3b5b0..44690adf9 100644
--- a/mert/Point.h
+++ b/mert/Point.h
@@ -23,6 +23,9 @@ private:
/**total size of the parameter space; we have pdim=FixedWeight.size()+optinidices.size()*/
static unsigned int pdim;
static unsigned int ncall;
+ /**The limits for randomization, both vectors are of full length, pdim*/
+ static vector<parameter_t> m_min;
+ static vector<parameter_t> m_max;
public:
static unsigned int getdim() {
return dim;
@@ -35,8 +38,11 @@ public:
};
statscore_t score;
Point():vector<parameter_t>(dim) {};
- Point(const vector<parameter_t>& init);
- void Randomize(const vector<parameter_t>& min,const vector<parameter_t>& max);
+ Point(const vector<parameter_t>& init,
+ const vector<parameter_t>& min,
+ const vector<parameter_t>& max
+ );
+ void Randomize();
double operator*(const FeatureStats&)const;//compute the feature function
Point operator+(const Point&)const;
diff --git a/mert/ScorerFactory.h b/mert/ScorerFactory.h
index 51882ed0a..3cfc53ad9 100644
--- a/mert/ScorerFactory.h
+++ b/mert/ScorerFactory.h
@@ -14,6 +14,7 @@
#include "Scorer.h"
#include "BleuScorer.h"
#include "PerScorer.h"
+#include "TerScorer.h"
using namespace std;
@@ -25,6 +26,7 @@ public:
vector<string> types;
types.push_back(string("BLEU"));
types.push_back(string("PER"));
+ types.push_back(string("TER"));
return types;
}
@@ -33,6 +35,8 @@ public:
return (BleuScorer*) new BleuScorer(config);
} else if (type == "PER") {
return (PerScorer*) new PerScorer(config);
+ } else if (type == "TER") {
+ return (TerScorer*) new TerScorer(config);
} else {
throw runtime_error("Unknown scorer type: " + type);
}
diff --git a/mert/TERsrc/alignmentStruct.cpp b/mert/TERsrc/alignmentStruct.cpp
new file mode 100644
index 000000000..15b4a8032
--- /dev/null
+++ b/mert/TERsrc/alignmentStruct.cpp
@@ -0,0 +1,115 @@
+#include "alignmentStruct.h"
+
+using namespace std;
+namespace TERCpp
+{
+string alignmentStruct::toString()
+{
+ stringstream s;
+// s << "nword : " << vectorToString(nwords)<<endl;
+// s << "alignment" << vectorToString(alignment)<<endl;
+// s << "afterShift" << vectorToString(alignment)<<endl;
+ s << "Nothing to be printed" <<endl;
+ return s.str();
+}
+
+// alignmentStruct::alignmentStruct()
+// {
+// // vector<string> ref;
+// // vector<string> hyp;
+// // vector<string> aftershift;
+//
+// // alignmentStruct[] allshifts = null;
+//
+// numEdits=0;
+// numWords=0;
+// bestRef="";
+//
+// numIns=0;
+// numDel=0;
+// numSub=0;
+// numSft=0;
+// numWsf=0;
+// }
+// alignmentStruct::alignmentStruct ()
+// {
+// start = 0;
+// end = 0;
+// moveto = 0;
+// newloc = 0;
+// cost=1.0;
+// }
+// alignmentStruct::alignmentStruct (int _start, int _end, int _moveto, int _newloc)
+// {
+// start = _start;
+// end = _end;
+// moveto = _moveto;
+// newloc = _newloc;
+// cost=1.0;
+// }
+
+// alignmentStruct::alignmentStruct (int _start, int _end, int _moveto, int _newloc, vector<string> _shifted)
+// {
+// start = _start;
+// end = _end;
+// moveto = _moveto;
+// newloc = _newloc;
+// shifted = _shifted;
+// cost=1.0;
+// }
+// string alignmentStruct::vectorToString(vector<string> vec)
+// {
+// string retour("");
+// for (vector<string>::iterator vecIter=vec.begin();vecIter!=vec.end(); vecIter++)
+// {
+// retour+=(*vecIter)+"\t";
+// }
+// return retour;
+// }
+
+// string alignmentStruct::toString()
+// {
+// stringstream s;
+// s.str("");
+// s << "[" << start << ", " << end << ", " << moveto << "/" << newloc << "]";
+// if ((int)shifted.size() > 0)
+// {
+// s << " (" << vectorToString(shifted) << ")";
+// }
+// return s.str();
+// }
+
+/* The distance of the shift. */
+// int alignmentStruct::distance()
+// {
+// if (moveto < start)
+// {
+// return start - moveto;
+// }
+// else if (moveto > end)
+// {
+// return moveto - end;
+// }
+// else
+// {
+// return moveto - start;
+// }
+// }
+//
+// bool alignmentStruct::leftShift()
+// {
+// return (moveto < start);
+// }
+//
+// int alignmentStruct::size()
+// {
+// return (end - start) + 1;
+// }
+// alignmentStruct alignmentStruct::operator=(alignmentStruct t)
+// {
+//
+// return t;
+// }
+
+
+} \ No newline at end of file
diff --git a/mert/TERsrc/alignmentStruct.h b/mert/TERsrc/alignmentStruct.h
new file mode 100644
index 000000000..c635d624c
--- /dev/null
+++ b/mert/TERsrc/alignmentStruct.h
@@ -0,0 +1,46 @@
+#ifndef __TERCPPALIGNMENTSTRUCT_H__
+#define __TERCPPALIGNMENTSTRUCT_H__
+
+
+#include <vector>
+#include <stdio.h>
+#include <string>
+#include <sstream>
+#include "tools.h"
+
+
+using namespace std;
+using namespace Tools;
+
+namespace TERCpp
+{
+class alignmentStruct
+{
+private:
+public:
+
+// alignmentStruct();
+// alignmentStruct (int _start, int _end, int _moveto, int _newloc);
+// alignmentStruct (int _start, int _end, int _moveto, int _newloc, vector<string> _shifted);
+// string toString();
+// int distance() ;
+// bool leftShift();
+// int size();
+// alignmentStruct operator=(alignmentStruct t);
+// string vectorToString(vector<string> vec);
+
+// int start;
+// int end;
+// int moveto;
+// int newloc;
+ vector<string> nwords; // The words we shifted
+ vector<char> alignment ; // for pra_more output
+ vector<vecInt> aftershift; // for pra_more output
+ // This is used to store the cost of a shift, so we don't have to
+ // calculate it multiple times.
+ double cost;
+ string toString();
+};
+
+}
+#endif \ No newline at end of file
diff --git a/mert/TERsrc/bestShiftStruct.h b/mert/TERsrc/bestShiftStruct.h
new file mode 100644
index 000000000..f5a2b0e9d
--- /dev/null
+++ b/mert/TERsrc/bestShiftStruct.h
@@ -0,0 +1,50 @@
+#ifndef __BESTSHIFTSTRUCT_H__
+#define __BESTSHIFTSTRUCT_H__
+
+
+#include <vector>
+#include <stdio.h>
+#include <string>
+#include <sstream>
+#include "tools.h"
+#include "terShift.h"
+#include "terAlignment.h"
+
+
+using namespace std;
+using namespace Tools;
+
+namespace TERCpp
+{
+class bestShiftStruct
+{
+private:
+public:
+
+// alignmentStruct();
+// alignmentStruct (int _start, int _end, int _moveto, int _newloc);
+// alignmentStruct (int _start, int _end, int _moveto, int _newloc, vector<string> _shifted);
+// string toString();
+// int distance() ;
+// bool leftShift();
+// int size();
+// alignmentStruct operator=(alignmentStruct t);
+// string vectorToString(vector<string> vec);
+
+// int start;
+// int end;
+// int moveto;
+// int newloc;
+ terShift m_best_shift;
+ terAlignment m_best_align;
+ bool m_empty;
+// vector<string> nwords; // The words we shifted
+// char* alignment ; // for pra_more output
+// vector<vecInt> aftershift; // for pra_more output
+ // This is used to store the cost of a shift, so we don't have to
+ // calculate it multiple times.
+// double cost;
+};
+
+}
+#endif \ No newline at end of file
diff --git a/mert/TERsrc/documentStructure.cpp b/mert/TERsrc/documentStructure.cpp
new file mode 100644
index 000000000..a8c0140d5
--- /dev/null
+++ b/mert/TERsrc/documentStructure.cpp
@@ -0,0 +1,181 @@
+#include "documentStructure.h"
+
+using namespace std;
+namespace TERCpp
+{
+
+string documentStructure::toString()
+{
+ stringstream s;
+// s << "nword : " << vectorToString(nwords)<<endl;
+// s << "alignment" << vectorToString(alignment)<<endl;
+// s << "afterShift" << vectorToString(alignment)<<endl;
+ s << "Nothing to be printed" << endl;
+ return s.str();
+}
+
+string documentStructure::getDocId()
+{
+ return docId;
+}
+
+vector< segmentStructure >* documentStructure::getSegments()
+{
+ return &seg;
+}
+
+string documentStructure::getSysId()
+{
+ return sysId;
+}
+// float documentStructure::getAverageLength()
+// {
+// return averageLength;
+// }
+// void documentStructure::setAverageLength(float f)
+// {
+// averageLength=f;
+// }
+
+void documentStructure::addSegments ( segmentStructure s )
+{
+ seg.push_back ( s );
+}
+void documentStructure::addSegments ( string id, string text )
+{
+ segmentStructure tmp_seg ( id, text );
+ seg.push_back ( tmp_seg );
+}
+segmentStructure* documentStructure::getLastSegments()
+{
+ return & seg.at ( ( int ) seg.size() - 1 );
+}
+void documentStructure::setDocId ( string s )
+{
+ docId = s;
+}
+void documentStructure::setSysId ( string s )
+{
+ sysId = s;
+}
+
+segmentStructure* documentStructure::getSegment ( string id )
+{
+ for ( int i = 0; i < ( int ) seg.size(); i++ ) {
+ if ( id.compare ( seg.at ( i ).getSegId() ) == 0 ) {
+ return & ( seg.at ( i ) );
+ }
+ }
+ cerr << "ERROR : documentStructure::getSegment : Segment " << id << " does not exist" <<endl;
+ cerr << "Segment size " << seg.size()<< endl;
+ for (int i=0; i<(int)seg.size(); i++) {
+ cerr <<seg.at(i).getSegId()<<endl;
+ }
+ exit(0);
+}
+int documentStructure::getSize()
+{
+ return ( int ) seg.size();
+}
+
+
+// documentStructure::documentStructure()
+// {
+// // vector<string> ref;
+// // vector<string> hyp;
+// // vector<string> aftershift;
+//
+// // documentStructure[] allshifts = null;
+//
+// numEdits=0;
+// numWords=0;
+// bestRef="";
+//
+// numIns=0;
+// numDel=0;
+// numSub=0;
+// numSft=0;
+// numWsf=0;
+// }
+// documentStructure::documentStructure ()
+// {
+// start = 0;
+// end = 0;
+// moveto = 0;
+// newloc = 0;
+// cost=1.0;
+// }
+// documentStructure::documentStructure (int _start, int _end, int _moveto, int _newloc)
+// {
+// start = _start;
+// end = _end;
+// moveto = _moveto;
+// newloc = _newloc;
+// cost=1.0;
+// }
+
+// documentStructure::documentStructure (int _start, int _end, int _moveto, int _newloc, vector<string> _shifted)
+// {
+// start = _start;
+// end = _end;
+// moveto = _moveto;
+// newloc = _newloc;
+// shifted = _shifted;
+// cost=1.0;
+// }
+// string documentStructure::vectorToString(vector<string> vec)
+// {
+// string retour("");
+// for (vector<string>::iterator vecIter=vec.begin();vecIter!=vec.end(); vecIter++)
+// {
+// retour+=(*vecIter)+"\t";
+// }
+// return retour;
+// }
+
+// string documentStructure::toString()
+// {
+// stringstream s;
+// s.str("");
+// s << "[" << start << ", " << end << ", " << moveto << "/" << newloc << "]";
+// if ((int)shifted.size() > 0)
+// {
+// s << " (" << vectorToString(shifted) << ")";
+// }
+// return s.str();
+// }
+
+/* The distance of the shift. */
+// int documentStructure::distance()
+// {
+// if (moveto < start)
+// {
+// return start - moveto;
+// }
+// else if (moveto > end)
+// {
+// return moveto - end;
+// }
+// else
+// {
+// return moveto - start;
+// }
+// }
+//
+// bool documentStructure::leftShift()
+// {
+// return (moveto < start);
+// }
+//
+// int documentStructure::size()
+// {
+// return (end - start) + 1;
+// }
+// documentStructure documentStructure::operator=(documentStructure t)
+// {
+//
+// return t;
+// }
+
+
+}
diff --git a/mert/TERsrc/documentStructure.h b/mert/TERsrc/documentStructure.h
new file mode 100644
index 000000000..8ecb800d3
--- /dev/null
+++ b/mert/TERsrc/documentStructure.h
@@ -0,0 +1,60 @@
+#ifndef __DOCUMENTSTRUCTURE_H__
+#define __DOCUMENTSTRUCTURE_H__
+
+
+#include <vector>
+#include <stdio.h>
+#include <string>
+#include <sstream>
+#include "tools.h"
+#include "segmentStructure.h"
+
+
+using namespace std;
+using namespace Tools;
+
+namespace TERCpp
+{
+class documentStructure
+{
+private:
+ string docId;
+ string sysId;
+ vector<segmentStructure> seg;
+public:
+ string getDocId();
+ string getSysId();
+ vector<segmentStructure>* getSegments();
+ segmentStructure* getLastSegments();
+ void setDocId ( string s );
+ void setSysId ( string s );
+ void addSegments ( segmentStructure s );
+ void addSegments ( string id, string text );
+ segmentStructure* getSegment ( string id );
+ int getSize();
+
+// alignmentStruct();
+// alignmentStruct (int _start, int _end, int _moveto, int _newloc);
+// alignmentStruct (int _start, int _end, int _moveto, int _newloc, vector<string> _shifted);
+// string toString();
+// int distance() ;
+// bool leftShift();
+// int size();
+// alignmentStruct operator=(alignmentStruct t);
+// string vectorToString(vector<string> vec);
+
+// int start;
+// int end;
+// int moveto;
+// int newloc;
+// vector<string> nwords; // The words we shifted
+// vector<char> alignment ; // for pra_more output
+// vector<vecInt> aftershift; // for pra_more output
+ // This is used to store the cost of a shift, so we don't have to
+ // calculate it multiple times.
+// double cost;
+ string toString();
+};
+
+}
+#endif
diff --git a/mert/TERsrc/hashMap.cpp b/mert/TERsrc/hashMap.cpp
new file mode 100644
index 000000000..469167aaa
--- /dev/null
+++ b/mert/TERsrc/hashMap.cpp
@@ -0,0 +1,153 @@
+#include "hashMap.h"
+
+// The following class defines a hash function for strings
+
+
+using namespace std;
+
+namespace HashMapSpace
+{
+// hashMap::hashMap();
+/* hashMap::~hashMap()
+ {
+// vector<stringHasher>::const_iterator del = m_hasher.begin();
+ for ( vector<stringHasher>::const_iterator del=m_hasher.begin(); del != m_hasher.end(); del++ )
+ {
+ delete(*del);
+ }
+ }*/
+/**
+ * int hashMap::trouve ( long searchKey )
+ * @param searchKey
+ * @return
+ */
+int hashMap::trouve ( long searchKey )
+{
+ long foundKey;
+// vector<stringHasher>::const_iterator l_hasher=m_hasher.begin();
+ for ( vector<stringHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ ) {
+ foundKey= ( *l_hasher ).getHashKey();
+ if ( searchKey == foundKey ) {
+ return 1;
+ }
+ }
+ return 0;
+}
+int hashMap::trouve ( string key )
+{
+ long searchKey=hashValue ( key );
+ long foundKey;;
+// vector<stringHasher>::const_iterator l_hasher=m_hasher.begin();
+ for ( vector<stringHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ ) {
+ foundKey= ( *l_hasher ).getHashKey();
+ if ( searchKey == foundKey ) {
+ return 1;
+ }
+ }
+ return 0;
+}
+/**
+ * long hashMap::hashValue ( string key )
+ * @param key
+ * @return
+ */
+long hashMap::hashValue ( string key )
+{
+ locale loc; // the "C" locale
+ const collate<char>& coll = use_facet<collate<char> >(loc);
+ return coll.hash(key.data(),key.data()+key.length());
+// boost::hash<string> hasher;
+// return hasher ( key );
+}
+/**
+ * void hashMap::addHasher ( string key, string value )
+ * @param key
+ * @param value
+ */
+void hashMap::addHasher ( string key, string value )
+{
+ if ( trouve ( hashValue ( key ) ) ==0 ) {
+// cerr << "ICI1" <<endl;
+ stringHasher H ( hashValue ( key ),key,value );
+// cerr <<" "<< hashValue ( key )<<" "<< key<<" "<<value <<endl;
+// cerr << "ICI2" <<endl;
+
+ m_hasher.push_back ( H );
+ }
+}
+stringHasher hashMap::getHasher ( string key )
+{
+ long searchKey=hashValue ( key );
+ long foundKey;
+ stringHasher defaut(0,"","");
+// vector<stringHasher>::const_iterator l_hasher=m_hasher.begin();
+ for ( vector<stringHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ ) {
+ foundKey= ( *l_hasher ).getHashKey();
+ if ( searchKey == foundKey ) {
+ return ( *l_hasher );
+ }
+ }
+ return defaut;
+}
+string hashMap::getValue ( string key )
+{
+ long searchKey=hashValue ( key );
+ long foundKey;
+// vector<stringHasher>::const_iterator l_hasher=m_hasher.begin();
+ for ( vector<stringHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ ) {
+ foundKey= ( *l_hasher ).getHashKey();
+ if ( searchKey == foundKey ) {
+// cerr <<"value found : " << key<<"|"<< ( *l_hasher ).getValue()<<endl;
+ return ( *l_hasher ).getValue();
+ }
+ }
+ return "";
+}
+string hashMap::searchValue ( string value )
+{
+// long searchKey=hashValue ( key );
+// long foundKey;
+ string foundValue;
+
+// vector<stringHasher>::const_iterator l_hasher=m_hasher.begin();
+ for ( vector<stringHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ ) {
+ foundValue= ( *l_hasher ).getValue();
+ if ( foundValue.compare ( value ) == 0 ) {
+ return ( *l_hasher ).getKey();
+ }
+ }
+ return "";
+}
+
+
+void hashMap::setValue ( string key , string value )
+{
+ long searchKey=hashValue ( key );
+ long foundKey;
+// vector<stringHasher>::const_iterator l_hasher=m_hasher.begin();
+ for ( vector<stringHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ ) {
+ foundKey= ( *l_hasher ).getHashKey();
+ if ( searchKey == foundKey ) {
+ ( *l_hasher ).setValue ( value );
+// return ( *l_hasher ).getValue();
+ }
+ }
+}
+
+
+/**
+ *
+ */
+void hashMap::printHash()
+{
+ for ( vector<stringHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ ) {
+ cout << ( *l_hasher ).getHashKey() <<" | "<< ( *l_hasher ).getKey() << " | " << ( *l_hasher ).getValue() << endl;
+ }
+}
+
+
+
+// long hashValue(string key){}
+
+}
+
diff --git a/mert/TERsrc/hashMap.h b/mert/TERsrc/hashMap.h
new file mode 100644
index 000000000..a547d6565
--- /dev/null
+++ b/mert/TERsrc/hashMap.h
@@ -0,0 +1,44 @@
+/*
+ * Generic hashmap manipulation functions
+ */
+#ifndef __HASHMAP_H__
+#define __HASHMAP_H__
+#include <boost/functional/hash.hpp>
+#include "stringHasher.h"
+#include <vector>
+#include <string>
+#include <sstream>
+#include <fstream>
+#include <locale>
+
+using namespace std;
+
+namespace HashMapSpace
+{
+class hashMap
+{
+private:
+ vector<stringHasher> m_hasher;
+
+public:
+// ~hashMap();
+ long hashValue ( string key );
+ int trouve ( long searchKey );
+ int trouve ( string key );
+ void addHasher ( string key, string value );
+ stringHasher getHasher ( string key );
+ string getValue ( string key );
+ string searchValue ( string key );
+ void setValue ( string key , string value );
+ void printHash();
+ vector<stringHasher> getHashMap();
+ string printStringHash();
+ string printStringHash2();
+ string printStringHashForLexicon();
+};
+
+
+}
+
+
+#endif
diff --git a/mert/TERsrc/hashMapInfos.cpp b/mert/TERsrc/hashMapInfos.cpp
new file mode 100644
index 000000000..9cd431196
--- /dev/null
+++ b/mert/TERsrc/hashMapInfos.cpp
@@ -0,0 +1,162 @@
+#include "hashMapInfos.h"
+
+// The following class defines a hash function for strings
+
+
+using namespace std;
+
+namespace HashMapSpace
+{
+// hashMapInfos::hashMap();
+/* hashMapInfos::~hashMap()
+ {
+// vector<infosHasher>::const_iterator del = m_hasher.begin();
+ for ( vector<infosHasher>::const_iterator del=m_hasher.begin(); del != m_hasher.end(); del++ )
+ {
+ delete(*del);
+ }
+ }*/
+/**
+ * int hashMapInfos::trouve ( long searchKey )
+ * @param searchKey
+ * @return
+ */
+int hashMapInfos::trouve ( long searchKey )
+{
+ long foundKey;
+// vector<infosHasher>::const_iterator l_hasher=m_hasher.begin();
+ for ( vector<infosHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ ) {
+ foundKey= ( *l_hasher ).getHashKey();
+ if ( searchKey == foundKey ) {
+ return 1;
+ }
+ }
+ return 0;
+}
+int hashMapInfos::trouve ( string key )
+{
+ long searchKey=hashValue ( key );
+ long foundKey;;
+// vector<infosHasher>::const_iterator l_hasher=m_hasher.begin();
+ for ( vector<infosHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ ) {
+ foundKey= ( *l_hasher ).getHashKey();
+ if ( searchKey == foundKey ) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+/**
+ * long hashMapInfos::hashValue ( string key )
+ * @param key
+ * @return
+ */
+long hashMapInfos::hashValue ( string key )
+{
+ locale loc; // the "C" locale
+ const collate<char>& coll = use_facet<collate<char> >(loc);
+ return coll.hash(key.data(),key.data()+key.length());
+// boost::hash<string> hasher;
+// return hasher ( key );
+}
+/**
+ * void hashMapInfos::addHasher ( string key, string value )
+ * @param key
+ * @param value
+ */
+void hashMapInfos::addHasher ( string key, vector<int> value )
+{
+ if ( trouve ( hashValue ( key ) ) ==0 ) {
+// cerr << "ICI1" <<endl;
+ infosHasher H ( hashValue ( key ),key,value );
+// cerr <<" "<< hashValue ( key )<<" "<< key<<" "<<value <<endl;
+// cerr << "ICI2" <<endl;
+
+ m_hasher.push_back ( H );
+ }
+}
+void hashMapInfos::addValue ( string key, vector<int> value )
+{
+ addHasher ( key, value );
+}
+infosHasher hashMapInfos::getHasher ( string key )
+{
+ long searchKey=hashValue ( key );
+ long foundKey;
+// vector<infosHasher>::const_iterator l_hasher=m_hasher.begin();
+ for ( vector<infosHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ ) {
+ foundKey= ( *l_hasher ).getHashKey();
+ if ( searchKey == foundKey ) {
+ return ( *l_hasher );
+ }
+ }
+ vector<int> temp;
+ infosHasher defaut(0,"",temp);
+ return defaut;
+}
+vector<int> hashMapInfos::getValue ( string key )
+{
+ long searchKey=hashValue ( key );
+ long foundKey;
+ vector<int> retour;
+// vector<infosHasher>::const_iterator l_hasher=m_hasher.begin();
+ for ( vector<infosHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ ) {
+ foundKey= ( *l_hasher ).getHashKey();
+ if ( searchKey == foundKey ) {
+// cerr <<"value found : " << key<<"|"<< ( *l_hasher ).getValue()<<endl;
+ return ( *l_hasher ).getValue();
+ }
+ }
+ return retour;
+}
+// string hashMapInfos::searchValue ( string value )
+// {
+// // long searchKey=hashValue ( key );
+// // long foundKey;
+// vector<int> foundValue;
+//
+// // vector<infosHasher>::const_iterator l_hasher=m_hasher.begin();
+// for ( vector<infosHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ )
+// {
+// foundValue= ( *l_hasher ).getValue();
+// /* if ( foundValue.compare ( value ) == 0 )
+// {
+// return ( *l_hasher ).getKey();
+// }*/
+// }
+// return "";
+// }
+//
+
+void hashMapInfos::setValue ( string key , vector<int> value )
+{
+ long searchKey=hashValue ( key );
+ long foundKey;
+// vector<infosHasher>::const_iterator l_hasher=m_hasher.begin();
+ for ( vector<infosHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ ) {
+ foundKey= ( *l_hasher ).getHashKey();
+ if ( searchKey == foundKey ) {
+ ( *l_hasher ).setValue ( value );
+// return ( *l_hasher ).getValue();
+ }
+ }
+}
+
+
+/**
+ *
+ */
+void hashMapInfos::printHash()
+{
+ for ( vector<infosHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ ) {
+// cout << ( *l_hasher ).getHashKey() <<" | "<< ( *l_hasher ).getKey() << " | " << ( *l_hasher ).getValue() << endl;
+ }
+}
+
+
+
+// long hashValue(string key){}
+
+}
+
diff --git a/mert/TERsrc/hashMapInfos.h b/mert/TERsrc/hashMapInfos.h
new file mode 100644
index 000000000..5fd8a0263
--- /dev/null
+++ b/mert/TERsrc/hashMapInfos.h
@@ -0,0 +1,44 @@
+/*
+ * Generic hashmap manipulation functions
+ */
+#ifndef __HASHMAPINFOS_H__
+#define __HASHMAPINFOS_H__
+#include <boost/functional/hash.hpp>
+#include "infosHasher.h"
+#include <vector>
+#include <string>
+#include <sstream>
+#include <fstream>
+
+using namespace std;
+
+namespace HashMapSpace
+{
+class hashMapInfos
+{
+private:
+ vector<infosHasher> m_hasher;
+
+public:
+// ~hashMap();
+ long hashValue ( string key );
+ int trouve ( long searchKey );
+ int trouve ( string key );
+ void addHasher ( string key, vector<int> value );
+ void addValue ( string key, vector<int> value );
+ infosHasher getHasher ( string key );
+ vector<int> getValue ( string key );
+// string searchValue ( string key );
+ void setValue ( string key , vector<int> value );
+ void printHash();
+ vector<infosHasher> getHashMap();
+ string printStringHash();
+ string printStringHash2();
+ string printStringHashForLexicon();
+};
+
+
+}
+
+
+#endif
diff --git a/mert/TERsrc/hashMapStringInfos.cpp b/mert/TERsrc/hashMapStringInfos.cpp
new file mode 100644
index 000000000..0fbb0a98a
--- /dev/null
+++ b/mert/TERsrc/hashMapStringInfos.cpp
@@ -0,0 +1,167 @@
+#include "hashMapStringInfos.h"
+
+// The following class defines a hash function for strings
+
+
+using namespace std;
+
+namespace HashMapSpace
+{
+// hashMapStringInfos::hashMap();
+/* hashMapStringInfos::~hashMap()
+{
+// vector<stringInfosHasher>::const_iterator del = m_hasher.begin();
+ for ( vector<stringInfosHasher>::const_iterator del=m_hasher.begin(); del != m_hasher.end(); del++ )
+ {
+ delete(*del);
+ }
+}*/
+/**
+* int hashMapStringInfos::trouve ( long searchKey )
+* @param searchKey
+* @return
+*/
+int hashMapStringInfos::trouve ( long searchKey )
+{
+ long foundKey;
+ // vector<stringInfosHasher>::const_iterator l_hasher=m_hasher.begin();
+ for ( vector<stringInfosHasher>:: iterator l_hasher = m_hasher.begin() ; l_hasher != m_hasher.end() ; l_hasher++ ) {
+ foundKey = ( *l_hasher ).getHashKey();
+ if ( searchKey == foundKey ) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+int hashMapStringInfos::trouve ( string key )
+{
+ long searchKey = hashValue ( key );
+ long foundKey;;
+ // vector<stringInfosHasher>::const_iterator l_hasher=m_hasher.begin();
+ for ( vector<stringInfosHasher>:: iterator l_hasher = m_hasher.begin() ; l_hasher != m_hasher.end() ; l_hasher++ ) {
+ foundKey = ( *l_hasher ).getHashKey();
+ if ( searchKey == foundKey ) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+/**
+* long hashMapStringInfos::hashValue ( string key )
+* @param key
+* @return
+*/
+long hashMapStringInfos::hashValue ( string key )
+{
+ locale loc; // the "C" locale
+ const collate<char>& coll = use_facet<collate<char> > ( loc );
+ return coll.hash ( key.data(), key.data() + key.length() );
+// boost::hash<string> hasher;
+// return hasher ( key );
+}
+/**
+* void hashMapStringInfos::addHasher ( string key, string value )
+* @param key
+* @param value
+*/
+void hashMapStringInfos::addHasher ( string key, vector<string> value )
+{
+ if ( trouve ( hashValue ( key ) ) == 0 ) {
+ // cerr << "ICI1" <<endl;
+ stringInfosHasher H ( hashValue ( key ), key, value );
+ // cerr <<" "<< hashValue ( key )<<" "<< key<<" "<<value <<endl;
+ // cerr << "ICI2" <<endl;
+
+ m_hasher.push_back ( H );
+ }
+}
+void hashMapStringInfos::addValue ( string key, vector<string> value )
+{
+ addHasher ( key, value );
+}
+stringInfosHasher hashMapStringInfos::getHasher ( string key )
+{
+ long searchKey = hashValue ( key );
+ long foundKey;
+ // vector<stringInfosHasher>::const_iterator l_hasher=m_hasher.begin();
+ for ( vector<stringInfosHasher>:: iterator l_hasher = m_hasher.begin() ; l_hasher != m_hasher.end() ; l_hasher++ ) {
+ foundKey = ( *l_hasher ).getHashKey();
+ if ( searchKey == foundKey ) {
+ return ( *l_hasher );
+ }
+ }
+ vector<string> tmp;
+ stringInfosHasher defaut ( 0, "", tmp );
+ return defaut;
+}
+vector<string> hashMapStringInfos::getValue ( string key )
+{
+ long searchKey = hashValue ( key );
+ long foundKey;
+ vector<string> retour;
+ // vector<stringInfosHasher>::const_iterator l_hasher=m_hasher.begin();
+ for ( vector<stringInfosHasher>:: iterator l_hasher = m_hasher.begin() ; l_hasher != m_hasher.end() ; l_hasher++ ) {
+ foundKey = ( *l_hasher ).getHashKey();
+ if ( searchKey == foundKey ) {
+ // cerr <<"value found : " << key<<"|"<< ( *l_hasher ).getValue()<<endl;
+ return ( *l_hasher ).getValue();
+ }
+ }
+ return retour;
+}
+// string hashMapStringInfos::searchValue ( string value )
+// {
+// // long searchKey=hashValue ( key );
+// // long foundKey;
+// vector<int> foundValue;
+//
+// // vector<stringInfosHasher>::const_iterator l_hasher=m_hasher.begin();
+// for ( vector<stringInfosHasher>:: iterator l_hasher=m_hasher.begin() ; l_hasher!=m_hasher.end() ; l_hasher++ )
+// {
+// foundValue= ( *l_hasher ).getValue();
+// /* if ( foundValue.compare ( value ) == 0 )
+// {
+// return ( *l_hasher ).getKey();
+// }*/
+// }
+// return "";
+// }
+//
+
+void hashMapStringInfos::setValue ( string key , vector<string> value )
+{
+ long searchKey = hashValue ( key );
+ long foundKey;
+ // vector<stringInfosHasher>::const_iterator l_hasher=m_hasher.begin();
+ for ( vector<stringInfosHasher>:: iterator l_hasher = m_hasher.begin() ; l_hasher != m_hasher.end() ; l_hasher++ ) {
+ foundKey = ( *l_hasher ).getHashKey();
+ if ( searchKey == foundKey ) {
+ ( *l_hasher ).setValue ( value );
+ // return ( *l_hasher ).getValue();
+ }
+ }
+}
+
+
+/**
+*
+*/
+void hashMapStringInfos::printHash()
+{
+ for ( vector<stringInfosHasher>:: iterator l_hasher = m_hasher.begin() ; l_hasher != m_hasher.end() ; l_hasher++ ) {
+ // cout << ( *l_hasher ).getHashKey() <<" | "<< ( *l_hasher ).getKey() << " | " << ( *l_hasher ).getValue() << endl;
+ }
+}
+vector< stringInfosHasher > hashMapStringInfos::getHashMap()
+{
+ return m_hasher;
+}
+
+
+
+// long hashValue(string key){}
+
+}
+
diff --git a/mert/TERsrc/hashMapStringInfos.h b/mert/TERsrc/hashMapStringInfos.h
new file mode 100644
index 000000000..411797603
--- /dev/null
+++ b/mert/TERsrc/hashMapStringInfos.h
@@ -0,0 +1,44 @@
+/*
+ * Generic hashmap manipulation functions
+ */
+#ifndef __HASHMAPSTRINGINFOS_H__
+#define __HASHMAPSTRINGINFOS_H__
+#include <boost/functional/hash.hpp>
+#include "stringInfosHasher.h"
+#include <vector>
+#include <string>
+#include <sstream>
+#include <fstream>
+
+using namespace std;
+
+namespace HashMapSpace
+{
+class hashMapStringInfos
+{
+private:
+ vector<stringInfosHasher> m_hasher;
+
+public:
+// ~hashMap();
+ long hashValue ( string key );
+ int trouve ( long searchKey );
+ int trouve ( string key );
+ void addHasher ( string key, vector<string> value );
+ void addValue ( string key, vector<string> value );
+ stringInfosHasher getHasher ( string key );
+ vector<string> getValue ( string key );
+// string searchValue ( string key );
+ void setValue ( string key , vector<string> value );
+ void printHash();
+ vector<stringInfosHasher> getHashMap();
+ string printStringHash();
+ string printStringHash2();
+ string printStringHashForLexicon();
+};
+
+
+}
+
+
+#endif
diff --git a/mert/TERsrc/infosHasher.cpp b/mert/TERsrc/infosHasher.cpp
new file mode 100644
index 000000000..654b0b26f
--- /dev/null
+++ b/mert/TERsrc/infosHasher.cpp
@@ -0,0 +1,35 @@
+#include "infosHasher.h"
+// The following class defines a hash function for strings
+
+
+using namespace std;
+
+namespace HashMapSpace
+{
+infosHasher::infosHasher (long cle,string cleTxt, vector<int> valueVecInt )
+{
+ m_hashKey=cle;
+ m_key=cleTxt;
+ m_value=valueVecInt;
+}
+// infosHasher::~infosHasher(){};*/
+long infosHasher::getHashKey()
+{
+ return m_hashKey;
+}
+string infosHasher::getKey()
+{
+ return m_key;
+}
+vector<int> infosHasher::getValue()
+{
+ return m_value;
+}
+void infosHasher::setValue ( vector<int> value )
+{
+ m_value=value;
+}
+
+
+// typedef stdext::hash_map<std::string,string, stringhasher> HASH_S_S;
+}
diff --git a/mert/TERsrc/infosHasher.h b/mert/TERsrc/infosHasher.h
new file mode 100644
index 000000000..d03a9bdc6
--- /dev/null
+++ b/mert/TERsrc/infosHasher.h
@@ -0,0 +1,31 @@
+#ifndef __INFOSHASHER_H__
+#define __INFOSHASHER_H__
+#include <string>
+// #include <ext/hash_map>
+#include <stdio.h>
+#include <iostream>
+#include <vector>
+
+using namespace std;
+namespace HashMapSpace
+{
+class infosHasher
+{
+private:
+ long m_hashKey;
+ string m_key;
+ vector<int> m_value;
+
+public:
+ infosHasher ( long cle, string cleTxt, vector<int> valueVecInt );
+ long getHashKey();
+ string getKey();
+ vector<int> getValue();
+ void setValue ( vector<int> value );
+
+
+};
+
+
+}
+#endif \ No newline at end of file
diff --git a/mert/TERsrc/multiEvaluation.cpp b/mert/TERsrc/multiEvaluation.cpp
new file mode 100644
index 000000000..8b7a09aac
--- /dev/null
+++ b/mert/TERsrc/multiEvaluation.cpp
@@ -0,0 +1,332 @@
+#include "multiEvaluation.h"
+
+
+// #include <iostream>
+// #include <boost/filesystem/fstream.hpp>
+// #include <boost/archive/xml_oarchive.hpp>
+// #include <boost/archive/xml_iarchive.hpp>
+// #include <boost/serialization/nvp.hpp>
+
+// helper functions to allow us to load and save sandwiches to/from xml
+
+namespace TERCpp
+{
+
+multiEvaluation::multiEvaluation()
+{
+ evalParameters.debugMode = false;
+ evalParameters.caseOn = false;
+ evalParameters.noPunct = false;
+ evalParameters.normalize = false;
+ evalParameters.tercomLike = false;
+ evalParameters.sgmlInputs = false;
+ evalParameters.noTxtIds = false;
+// referencesTxt=new multiTxtDocument();
+// hypothesisTxt=new documentStructure();
+}
+
+multiEvaluation::multiEvaluation ( param p )
+{
+ evalParameters.debugMode = false;
+ evalParameters.caseOn = false;
+ evalParameters.noPunct = false;
+ evalParameters.normalize = false;
+ evalParameters.tercomLike = false;
+ evalParameters.sgmlInputs = false;
+ evalParameters.noTxtIds = false;
+
+ evalParameters = Tools::copyParam ( p );
+// referencesTxt=new multiTxtDocument();
+// hypothesisTxt=new documentStructure();
+}
+
+void multiEvaluation::addReferences()
+{
+ referencesTxt.loadRefFiles ( evalParameters );
+}
+// void multiEvaluation::addReferences(vector< string > vecRefecrences)
+// {
+// for (int i=0; i< (int) vecRefecrences.size(); i++)
+// {
+// referencesTxt.loadFile(vecRefecrences.at(i));
+// }
+// }
+
+
+void multiEvaluation::setHypothesis()
+{
+ multiTxtDocument l_multiTxtTmp;
+ l_multiTxtTmp.loadHypFile ( evalParameters );
+ hypothesisTxt = (*(l_multiTxtTmp.getDocument ( "0" )));
+}
+void multiEvaluation::setParameters ( param p )
+{
+ evalParameters = Tools::copyParam ( p );
+}
+
+void multiEvaluation::launchTxtEvaluation()
+{
+ if (evalParameters.debugMode) {
+ cerr <<"DEBUG tercpp : multiEvaluation::launchTxtEvaluation : before testing references and hypothesis size "<<endl<<"END DEBUG"<<endl;
+ }
+
+ if ( referencesTxt.getSize() == 0 ) {
+ cerr << "ERROR : multiEvaluation::launchTxtEvaluation : there is no references" << endl;
+ exit ( 0 );
+ }
+ if ( hypothesisTxt.getSize() == 0 ) {
+ cerr << "ERROR : multiEvaluation::launchTxtEvaluation : there is no hypothesis" << endl;
+ exit ( 0 );
+ }
+ if (evalParameters.debugMode) {
+ cerr <<"DEBUG tercpp : multiEvaluation::launchTxtEvaluation : testing references and hypothesis size "<<endl<<" number of references : "<< referencesTxt.getSize()<<endl;
+ vector <string> s =referencesTxt.getListDocuments();
+ cerr << " avaiable ids : ";
+ for (vector <string>::iterator iterS=s.begin(); iterS!=s.end(); iterS++) {
+ cerr << " " << (*iterS);
+ }
+ cerr << endl;
+ for (vector <string>::iterator iterSBis=s.begin(); iterSBis!=s.end(); iterSBis++) {
+ cerr << " reference : "+(*iterSBis)+"; size : "<< (referencesTxt.getDocument((*iterSBis)))->getSize() << endl;
+ }
+ cerr << " hypothesis size : "<< hypothesisTxt.getSize() << endl<<"END DEBUG"<<endl;
+ }
+
+ int incDocRefences = 0;
+ stringstream l_stream;
+ vector<float> editsResults;
+ vector<float> wordsResults;
+ int tot_ins = 0;
+ int tot_del = 0;
+ int tot_sub = 0;
+ int tot_sft = 0;
+ int tot_wsf = 0;
+ float tot_err = 0;
+ float tot_wds = 0;
+// vector<stringInfosHasher> setOfHypothesis = hashHypothesis.getHashMap();
+ ofstream outputSum ( ( evalParameters.hypothesisFile + ".output.sum.log" ).c_str() );
+ outputSum << "Hypothesis File: " + evalParameters.hypothesisFile + "\nReference File: " + evalParameters.referenceFile + "\n" + "Ave-Reference File: " << endl;
+ char outputCharBuffer[200];
+ sprintf ( outputCharBuffer, "%19s | %4s | %4s | %4s | %4s | %4s | %6s | %8s | %8s", "Sent Id", "Ins", "Del", "Sub", "Shft", "WdSh", "NumEr", "AvNumWd", "TER");
+ outputSum << outputCharBuffer << endl;
+ outputSum << "-------------------------------------------------------------------------------------" << endl;
+ vector <string> referenceList =referencesTxt.getListDocuments();
+ for (vector <string>::iterator referenceListIter=referenceList.begin(); referenceListIter!=referenceList.end(); referenceListIter++) {
+// cerr << " " << (*referenceListIter);
+ documentStructure l_reference = (*(referencesTxt.getDocument ( (*referenceListIter) )));
+ evaluate ( l_reference, hypothesisTxt );
+// evaluate ( l_reference);
+ }
+
+// for ( incDocRefences = 0; incDocRefences < referencesTxt.getSize();incDocRefences++ )
+// {
+// l_stream.str ( "" );
+// l_stream << incDocRefences;
+// }
+ for ( vector<segmentStructure>::iterator segHypIt = hypothesisTxt.getSegments()->begin(); segHypIt != hypothesisTxt.getSegments()->end(); segHypIt++ ) {
+ terAlignment l_result = segHypIt->getAlignment();
+ string bestDocId = segHypIt->getBestDocId();
+ string l_id=segHypIt->getSegId();
+ editsResults.push_back(l_result.numEdits);
+ wordsResults.push_back(l_result.numWords);
+ l_result.scoreDetails();
+ tot_ins += l_result.numIns;
+ tot_del += l_result.numDel;
+ tot_sub += l_result.numSub;
+ tot_sft += l_result.numSft;
+ tot_wsf += l_result.numWsf;
+ tot_err += l_result.numEdits;
+ tot_wds += l_result.averageWords;
+
+ char outputCharBufferTmp[200];
+ sprintf(outputCharBufferTmp, "%19s | %4d | %4d | %4d | %4d | %4d | %6.1f | %8.3f | %8.3f",(l_id+":"+bestDocId).c_str(), l_result.numIns, l_result.numDel, l_result.numSub, l_result.numSft, l_result.numWsf, l_result.numEdits, l_result.averageWords, l_result.scoreAv()*100.0);
+ outputSum<< outputCharBufferTmp<<endl;
+
+ if (evalParameters.debugMode) {
+ cerr <<"DEBUG tercpp : multiEvaluation::launchTxtEvaluation : Evaluation "<<endl<< l_result.toString() <<endl<<"END DEBUG"<<endl;
+ }
+
+ }
+
+ cout << "Total TER: " << scoreTER ( editsResults, wordsResults );
+ char outputCharBufferTmp[200];
+ outputSum << "-------------------------------------------------------------------------------------" << endl;
+ sprintf ( outputCharBufferTmp, "%19s | %4d | %4d | %4d | %4d | %4d | %6.1f | %8.3f | %8.3f", "TOTAL", tot_ins, tot_del, tot_sub, tot_sft, tot_wsf, tot_err, tot_wds, tot_err*100.0 / tot_wds );
+ outputSum << outputCharBufferTmp << endl;
+ outputSum.close();
+
+}
+void multiEvaluation::evaluate ( documentStructure& docStructReference, documentStructure& docStructhypothesis )
+{
+ if (evalParameters.debugMode) {
+ cerr <<"DEBUG tercpp : multiEvaluation::evaluate : launching evaluate on "<<endl<<" references size : "<< docStructReference.getSize() << endl << " hypothesis size : "<< docStructhypothesis.getSize() << endl<<"END DEBUG"<<endl;
+ }
+ if (evalParameters.debugMode) {
+ cerr <<"DEBUG tercpp : multiEvaluation::evaluate : testing hypothesis "<<endl;
+ cerr <<" segId : "<< docStructhypothesis.getSegments()->at(0).getSegId() << endl<<"END DEBUG"<<endl;
+ }
+
+ for ( vector<segmentStructure>::iterator segHypIt = docStructhypothesis.getSegments()->begin(); segHypIt != docStructhypothesis.getSegments()->end(); segHypIt++ ) {
+// cerr << "************************************************************************************************************************************************************************************** 1 " << (docStructhypothesis.getSegments()->at(0)).toString()<<endl;
+ terCalc * l_evalTER = new terCalc();
+// cerr << "************************************************************************************************************************************************************************************** 2"<<endl;
+// (*segHypIt).getSegId() ;
+// cerr << "************************************************************************************************************************************************************************************** 3"<<endl;
+ segmentStructure * l_segRef = docStructReference.getSegment ( segHypIt->getSegId() );
+// cerr << "************************************************************************************************************************************************************************************** 4"<<endl;
+// exit(0);
+ terAlignment l_result = l_evalTER->TER ( segHypIt->getContent(), l_segRef->getContent());
+ l_result.averageWords = l_segRef->getAverageLength();
+ if (l_result.averageWords==0.0) {
+ cerr << "ERROR : tercpp : multiEvaluation::evaluate : averageWords is equal to zero" <<endl;
+ exit(0);
+ }
+ l_segRef->setAlignment ( l_result );
+ if ((segHypIt->getAlignment().numWords == 0) && (segHypIt->getAlignment().numEdits == 0 )) {
+ segHypIt->setAlignment ( l_result );
+ segHypIt->setBestDocId ( docStructReference.getDocId() );
+ } else if ( l_result.scoreAv() < segHypIt->getAlignment().scoreAv() ) {
+ segHypIt->setAlignment ( l_result );
+ segHypIt->setBestDocId ( docStructReference.getDocId() );
+ }
+ if (evalParameters.debugMode) {
+ cerr <<"DEBUG tercpp : multiEvaluation::evaluate : testing "<<endl<<" hypothesis : "<< segHypIt->getSegId() <<endl;
+ cerr << "hypothesis score : "<< segHypIt->getAlignment().scoreAv() <<endl;
+ cerr << "BestDoc Id : "<< segHypIt->getBestDocId() <<endl;
+ cerr << "new score : "<< l_result.scoreAv() <<endl;
+ cerr << "new BestDoc Id : "<< docStructReference.getDocId() <<endl;
+ cerr << endl<<"END DEBUG"<<endl;
+ }
+ }
+ if (evalParameters.debugMode) {
+ cerr <<"DEBUG tercpp : multiEvaluation::evaluate : "<<endl<<"End of function"<<endl<<"END DEBUG"<<endl;
+ }
+// for (incSegHypothesis=0; incSegHypothesis< getSize();incSegHypothesis++)
+// {
+// docStructhypothesis->getSegments()
+// }
+}
+
+string multiEvaluation::scoreTER ( vector<float> numEdits, vector<float> numWords )
+{
+ vector<float>::iterator editsIt = numEdits.begin();
+ vector<float>::iterator wordsIt = numWords.begin();
+ if ( numWords.size() != numEdits.size() ) {
+ cerr << "ERROR : tercpp:score, diffrent size of hyp and ref" << endl;
+ exit ( 0 );
+ }
+
+ double editsCount = 0.0;
+ double wordsCount = 0.0;
+ while ( editsIt != numEdits.end() ) {
+ editsCount += ( *editsIt );
+ wordsCount += ( *wordsIt );
+ editsIt++;
+ wordsIt++;
+ }
+ stringstream output;
+
+ if ( ( wordsCount <= 0.0 ) && ( editsCount > 0.0 ) ) {
+ output << 1.0 << " (" << editsCount << "/" << wordsCount << ")" << endl;
+ } else if ( wordsCount <= 0.0 ) {
+ output << 0.0 << " (" << editsCount << "/" << wordsCount << ")" << endl;
+ } else {
+// return editsCount/wordsCount;
+ output << editsCount / wordsCount << " (" << editsCount << "/" << wordsCount << ")" << endl;
+ }
+ return output.str();
+}
+
+void multiEvaluation::launchSGMLEvaluation()
+{
+ if (evalParameters.debugMode) {
+ cerr <<"DEBUG tercpp : multiEvaluation::launchSGMLEvaluation : before testing references and hypothesis size "<<endl<<"END DEBUG"<<endl;
+ }
+
+ if ( referencesSGML.getSize() == 0 ) {
+ cerr << "ERROR : multiEvaluation::launchSGMLEvaluation : there is no references" << endl;
+ exit ( 0 );
+ }
+ if ( hypothesisSGML.getSize() == 0 ) {
+ cerr << "ERROR : multiEvaluation::launchSGMLEvaluation : there is no hypothesis" << endl;
+ exit ( 0 );
+ }
+ if (evalParameters.debugMode) {
+ cerr <<"DEBUG tercpp : multiEvaluation::launchSGMLEvaluation : testing references and hypothesis size "<<endl<<" references size : "<< referencesSGML.getSize() << endl << " hypothesis size : "<< hypothesisSGML.getSize() << endl<<"END DEBUG"<<endl;
+ }
+
+ int incDocRefences = 0;
+ stringstream l_stream;
+ vector<float> editsResults;
+ vector<float> wordsResults;
+ int tot_ins = 0;
+ int tot_del = 0;
+ int tot_sub = 0;
+ int tot_sft = 0;
+ int tot_wsf = 0;
+ float tot_err = 0;
+ float tot_wds = 0;
+// vector<stringInfosHasher> setOfHypothesis = hashHypothesis.getHashMap();
+ ofstream outputSum ( ( evalParameters.hypothesisFile + ".output.sum.log" ).c_str() );
+ outputSum << "Hypothesis File: " + evalParameters.hypothesisFile + "\nReference File: " + evalParameters.referenceFile + "\n" + "Ave-Reference File: " << endl;
+ char outputCharBuffer[200];
+ sprintf ( outputCharBuffer, "%19s | %4s | %4s | %4s | %4s | %4s | %6s | %8s | %8s", "Sent Id", "Ins", "Del", "Sub", "Shft", "WdSh", "NumEr", "AvNumWd", "TER");
+ outputSum << outputCharBuffer << endl;
+ outputSum << "-------------------------------------------------------------------------------------" << endl;
+ for ( incDocRefences = 0; incDocRefences < referencesSGML.getSize(); incDocRefences++ ) {
+ l_stream.str ( "" );
+ l_stream << incDocRefences;
+ documentStructure l_reference = (*(referencesSGML.getDocument ( l_stream.str() )));
+ evaluate ( l_reference, hypothesisSGML );
+ }
+ for ( vector<segmentStructure>::iterator segHypIt = hypothesisSGML.getSegments()->begin(); segHypIt != hypothesisSGML.getSegments()->end(); segHypIt++ ) {
+ terAlignment l_result = segHypIt->getAlignment();
+ string bestDocId = segHypIt->getBestDocId();
+ string l_id=segHypIt->getSegId();
+ editsResults.push_back(l_result.numEdits);
+ wordsResults.push_back(l_result.averageWords);
+ l_result.scoreDetails();
+ tot_ins += l_result.numIns;
+ tot_del += l_result.numDel;
+ tot_sub += l_result.numSub;
+ tot_sft += l_result.numSft;
+ tot_wsf += l_result.numWsf;
+ tot_err += l_result.numEdits;
+ tot_wds += l_result.averageWords;
+
+ char outputCharBufferTmp[200];
+ sprintf(outputCharBufferTmp, "%19s | %4d | %4d | %4d | %4d | %4d | %6.1f | %8.3f | %8.3f",(l_id+":"+bestDocId).c_str(), l_result.numIns, l_result.numDel, l_result.numSub, l_result.numSft, l_result.numWsf, l_result.numEdits, l_result.averageWords, l_result.scoreAv()*100.0);
+ outputSum<< outputCharBufferTmp<<endl;
+
+ if (evalParameters.debugMode) {
+ cerr <<"DEBUG tercpp : multiEvaluation::launchSGMLEvaluation : Evaluation "<<endl<< l_result.toString() <<endl<<"END DEBUG"<<endl;
+ }
+
+ }
+
+ cout << "Total TER: " << scoreTER ( editsResults, wordsResults );
+ char outputCharBufferTmp[200];
+ outputSum << "-------------------------------------------------------------------------------------" << endl;
+ sprintf ( outputCharBufferTmp, "%19s | %4d | %4d | %4d | %4d | %4d | %6.1f | %8.3f | %8.3f", "TOTAL", tot_ins, tot_del, tot_sub, tot_sft, tot_wsf, tot_err, tot_wds, tot_err*100.0 / tot_wds );
+ outputSum << outputCharBufferTmp << endl;
+ outputSum.close();
+
+
+}
+void multiEvaluation::addSGMLReferences()
+{
+ xmlStructure refStruct;
+ refStruct.xmlParams=copyParam(evalParameters);
+ referencesSGML=refStruct.dump_to_SGMLDocument(evalParameters.referenceFile);
+}
+void multiEvaluation::setSGMLHypothesis()
+{
+ SGMLDocument sgmlHyp;
+ xmlStructure hypStruct;
+ hypStruct.xmlParams=copyParam(evalParameters);
+ hypStruct.xmlParams.tercomLike=false;
+ sgmlHyp=hypStruct.dump_to_SGMLDocument(evalParameters.hypothesisFile);
+ hypothesisSGML=(*(sgmlHyp.getFirstDocument()));
+}
+
+}
diff --git a/mert/TERsrc/multiEvaluation.h b/mert/TERsrc/multiEvaluation.h
new file mode 100644
index 000000000..cc8f6d17b
--- /dev/null
+++ b/mert/TERsrc/multiEvaluation.h
@@ -0,0 +1,44 @@
+#ifndef __MULTIEVAL_DOCUMENT_H__
+#define __MULTIEVAL_DOCUMENT_H__
+
+#include "multiTxtDocument.h"
+#include "tools.h"
+#include <iostream>
+#include <string>
+#include "xmlStructure.h"
+#include "sgmlDocument.h"
+
+using namespace Tools;
+namespace TERCpp
+{
+
+class multiEvaluation
+{
+public:
+ multiEvaluation();
+ multiEvaluation(param p );
+// void addReferences(string s);
+// void addReferences(vector<string> vecRefecrences);
+// void addReferences(documentStructure doc);
+// void setHypothesis(string s);
+// void setHypothesis(documentStructure doc);
+ void addReferences();
+ void setHypothesis();
+ void addSGMLReferences();
+ void setSGMLHypothesis();
+ void setParameters ( param p );
+ void launchTxtEvaluation();
+ void launchSGMLEvaluation();
+ void evaluate ( documentStructure & docStructReference, documentStructure & docStructhypothesis );
+ string scoreTER ( vector<float> numEdits, vector<float> numWords );
+private:
+ param evalParameters;
+ multiTxtDocument referencesTxt;
+ documentStructure hypothesisTxt;
+ SGMLDocument referencesSGML;
+ documentStructure hypothesisSGML;
+
+
+};
+}
+#endif //SANDWICH_DEFINED
diff --git a/mert/TERsrc/multiTxtDocument.cpp b/mert/TERsrc/multiTxtDocument.cpp
new file mode 100644
index 000000000..de846d9ce
--- /dev/null
+++ b/mert/TERsrc/multiTxtDocument.cpp
@@ -0,0 +1,347 @@
+#include "multiTxtDocument.h"
+
+// #include <iostream>
+// #include <boost/filesystem/fstream.hpp>
+// #include <boost/archive/xml_oarchive.hpp>
+// #include <boost/archive/xml_iarchive.hpp>
+// #include <boost/serialization/nvp.hpp>
+
+// helper functions to allow us to load and save sandwiches to/from xml
+namespace TERCpp
+{
+multiTxtDocument::multiTxtDocument()
+{
+// docType="";
+// setId="";
+// srcLang="";
+// tgtLang="";
+}
+// multiTxtDocument::multiTxtDocument ( string FileName )
+// {
+// this=xmlStruct.copy_to_multiTxtDocument(FileName);
+// }
+// xmlStructure multiTxtDocument::getStructure()
+// {
+// return xmlStruct;
+// }
+// string multiTxtDocument::getDocType()
+// {
+// return docType;
+// }
+// string multiTxtDocument::getSetId()
+// {
+// return setId;
+// }
+// string multiTxtDocument::getSrcLang()
+// {
+// return srcLang;
+// }
+// string multiTxtDocument::getTgtLang()
+// {
+// return tgtLang;
+// }
+// void multiTxtDocument::setDocType ( string s )
+// {
+// docType=s;
+// }
+// void multiTxtDocument::setSetId ( string s )
+// {
+// setId=s;
+// }
+// void multiTxtDocument::setSrcLang ( string s )
+// {
+// srcLang=s;
+// }
+// void multiTxtDocument::setTgtLang ( string s )
+// {
+// tgtLang=s;
+// }
+void multiTxtDocument::addDocument ( documentStructure doc )
+{
+ documents.push_back ( doc );
+}
+documentStructure* multiTxtDocument::getLastDocument()
+{
+ return & ( documents.at ( ( int ) documents.size() - 1 ) );
+}
+vector< documentStructure > multiTxtDocument::getDocuments()
+{
+ return documents;
+}
+vector< string > multiTxtDocument::getListDocuments()
+{
+ vector< string > to_return;
+ for (vector< documentStructure >::iterator iter=documents.begin(); iter!=documents.end(); iter++) {
+ string l_id=(*iter).getDocId();
+ to_return.push_back(l_id);
+ }
+ return to_return;
+}
+
+documentStructure* multiTxtDocument::getDocument ( string docId )
+{
+ for ( int i = 0; i < ( int ) documents.size(); i++ ) {
+ if ( docId.compare ( documents.at ( i ).getDocId() ) == 0 ) {
+ return & ( documents.at ( i ) );
+ }
+ }
+ cerr << "ERROR : multiTxtDocument::getDocument : document " << docId << " does not exist !" << endl;
+ exit ( 0 );
+}
+
+void multiTxtDocument::loadFile ( string fileName, bool caseOn, bool noPunct, bool debugMode, bool noTxtIds, bool tercomLike )
+{
+ if ( multiTxtDocumentParams.debugMode ) {
+ cerr << "DEBUG tercpp : multiTxtDocument::loadFile : loading files " << endl << fileName << endl << "END DEBUG" << endl;
+ cerr << "DEBUG tercpp : multiTxtDocument::loadFile : testing params " << endl << Tools::printParams ( multiTxtDocumentParams ) << endl << "END DEBUG" << endl;
+ cerr << "DEBUG tercpp : multiTxtDocument::loadFile : testing others params " << endl << "caseOn : " << caseOn << endl << "noPunct : " << noPunct << endl << "debugMode : " << debugMode << endl << "noTxtIds : " << noTxtIds << endl << "tercomLike : " << tercomLike << endl << "END DEBUG" << endl;
+ }
+
+ ifstream fichierLoad ( fileName.c_str(), ios::in );
+ string line;
+ documentStructure l_doc;
+ if ( fichierLoad ) {
+ int l_ids = 1;
+ stringstream l_stream;
+ while ( getline ( fichierLoad, line ) ) {
+ string l_key;
+ string line_mod;
+ l_stream.str ( "" );
+
+ if ( noTxtIds ) {
+ l_stream << l_ids;
+ l_key = l_stream.str();
+ line_mod = line;
+ l_ids++;
+ } else {
+ if ((int)line.rfind ( "(" )==-1) {
+ cerr << "ERROR : multiTxtDocument::loadFile : Id not found, maybe you should use the --noTxtIds Option ? " << endl;
+ exit ( 0 );
+ }
+ l_key = line.substr ( line.rfind ( "(" ), line.size() - 1 );
+ line_mod = line.substr ( 0, line.rfind ( "(" ) - 1 );
+ }
+ if ( multiTxtDocumentParams.debugMode ) {
+ cerr << "DEBUG multiTxtDocument::loadFile : line NOT tokenized |" << line_mod << "|" << endl << "END DEBUG" << endl;
+ }
+ if ( !tercomLike ) {
+ if ( multiTxtDocumentParams.debugMode ) {
+ cerr << "DEBUG tercpp : multiTxtDocument::loadFile : " << endl << "TERCOM AT FALSE " << endl << "END DEBUG" << endl;
+ }
+
+ line_mod = tokenizePunct ( line_mod );
+ }
+ if ( !caseOn ) {
+ if ( multiTxtDocumentParams.debugMode ) {
+ cerr << "DEBUG tercpp : multiTxtDocument::loadFile : " << endl << "CASEON AT FALSE " << endl << "END DEBUG" << endl;
+ }
+ line_mod = lowerCase ( line_mod );
+ }
+ if ( noPunct ) {
+ if ( multiTxtDocumentParams.debugMode ) {
+ cerr << "DEBUG tercpp : multiTxtDocument::loadFile : " << endl << "NOPUNCT AT TRUE " << endl << "END DEBUG" << endl;
+ }
+ if ( !tercomLike ) {
+ line_mod = removePunctTercom ( line_mod );
+ } else {
+ line_mod = removePunct ( line_mod );
+ }
+ }
+ if ( multiTxtDocumentParams.debugMode ) {
+ cerr << "DEBUG multiTxtDocument::loadFile : line tokenized |" << line_mod << "|" << endl << "END DEBUG" << endl;
+ }
+ vector<string> vecDocLine = stringToVector ( line_mod, " " );
+// string l_key;
+// hashHypothesis.addValue(l_key,vecDocLine);
+// l_key=(string)vecDocLine.at((int)vecDocLine.size()-1);
+// vecDocLine.pop_back();
+ if ( multiTxtDocumentParams.debugMode ) {
+ cerr << "DEBUG tercpp multiTxtDocument::loadFile : " << l_key << "|" << vectorToString ( vecDocLine ) << "|" << endl << "Vector Size : " << vecDocLine.size() << endl << "Line length : " << ( int ) line_mod.length() << endl << "END DEBUG" << endl;
+ }
+// hashHypothesis.addValue(l_key,vecDocLine);
+ segmentStructure l_seg ( l_key, vecDocLine );
+ l_doc.addSegments ( l_seg );
+ }
+// Ref=line;
+// getline ( fichierHyp, line );
+// Hyp=line;
+ fichierLoad.close(); // on ferme le fichier
+ l_stream.str ( "" );
+ l_stream << ( int ) documents.size();
+ l_doc.setDocId ( l_stream.str() );
+ addDocument ( l_doc );
+ if ( multiTxtDocumentParams.debugMode ) {
+ cerr << "DEBUG multiTxtDocument::loadFile : document " << l_doc.getDocId() << " added !!!" << endl << "END DEBUG" << endl;
+ }
+ } else { // sinon
+ cerr << "ERROR : multiTxtDocument::loadFile : can't open file : " + fileName + " !" << endl;
+ exit ( 0 );
+ }
+}
+
+
+// void save_sandwich(const multiTxtDocument &sw, const std::string &file_name);
+// multiTxtDocument load_sandwich(const std::string &file_name);
+// int callmultiTxtDocument()
+// {
+// // xml filename
+// const std::string fn="JasonsSarnie.xml";
+//
+// // create a new sandwich and lets take a look at it!
+// multiTxtDocument *s = new multiTxtDocument("Granary", "Brie", "Bacon", false); // mmmmm, Brie and bacon! ;)
+// std::cout << "Created the following sandwich:" << std::endl;
+// s->output();
+//
+// // Now lets save the sandwich out to an XML file....
+// std::cout << std::endl << "Saving the sandwich to xml...." << std::endl;
+// save_sandwich(*s, fn);
+//
+// // And then load it into another multiTxtDocument variable and take a look at what we've got
+// std::cout << "Attempting to load the saved sandwich..." << std::endl;
+// multiTxtDocument s2 = load_sandwich(fn);
+// std::cout << "Contents of loaded multiTxtDocument:" << std::endl;
+// s2.output();
+//
+// delete s;
+// std::string dummy;
+// std::getline(std::cin, dummy);
+//
+// }
+/*
+
+// Save a multiTxtDocument to XML...
+void save_sandwich(const multiTxtDocument &sw, const std::string &file_name)
+{
+ // Create a filestream object
+ boost::filesystem::fstream ofs(file_name, std::ios::trunc | std::ios::out);
+
+ // Now create an XML output file using our filestream
+ boost::archive::xml_oarchive xml(ofs);
+
+ // call serialization::make_nvp, passing our sandwich.
+ // make_nvp will eventually call the sandwich instance (sw) serialize function
+ // causing the contents of sw to be output to the xml file
+ xml << boost::serialization::make_nvp("multiTxtDocument", sw);
+}
+
+// The load function works in almost the exact same way as save_sandwich,
+// The only differences are:
+// 1. we create an XML input stream - the original example in AD's link created another xml_oarchive, causing a runtime error...doh!
+// 2. the call to make_nvp populates the sandwich instance(sw) which is then returned...
+multiTxtDocument load_sandwich(const std::string &file_name)
+{
+ multiTxtDocument sw;
+ boost::filesystem::fstream ifs(file_name, std::ios::binary | std::ios::in);
+ boost::archive::xml_iarchive xml(ifs);
+ xml >> boost::serialization::make_nvp("multiTxtDocument", sw);
+ return sw;
+}*/
+
+void multiTxtDocument::setAverageLength()
+{
+ if ( multiTxtDocumentParams.debugMode ) {
+ cerr << "DEBUG tercpp : multiTxtDocument::setAverageLength : Starting calculate Average length " << endl << "END DEBUG" << endl;
+ }
+
+ vecFloat l_avLength((*documents.begin()).getSize(),0.0);
+ vector< documentStructure >::iterator iter=documents.begin();
+// for (vector< documentStructure >::iterator iter=documents.begin(); iter!=documents.end(); iter++)
+// {
+// string l_id=(*iter).getDocId();
+// to_return.push_back(l_id);
+ vector< segmentStructure > * l_vecSeg=(*iter).getSegments();
+// vector< segmentStructure >::iterator iterSeg=l_vecSeg->begin();
+ for (vector< segmentStructure >::iterator iterSeg=l_vecSeg->begin(); iterSeg!=l_vecSeg->end(); iterSeg++) {
+ segmentStructure l_seg=(*iterSeg);
+// if ( multiTxtDocumentParams.debugMode )
+// {
+// cerr << "DEBUG tercpp : multiTxtDocument::setAverageLength : Average length: " << l_seg.getAverageLength() << endl << "END DEBUG" << endl;
+// }
+ if (l_seg.getAverageLength()==0.0) {
+ float l_average=0.0;
+ for (int l_iter =0; l_iter < (int)documents.size(); l_iter++) {
+ l_average+=(float)(documents.at(l_iter).getSegment(l_seg.getSegId()))->getSize();
+ }
+ l_average=l_average/(float)documents.size();
+ l_seg.setAverageLength(l_average);
+ for (iter=documents.begin(); iter!=documents.end(); iter++) {
+// if ( multiTxtDocumentParams.debugMode )
+// {
+// cerr << "DEBUG tercpp : multiTxtDocument::setAverageLength : average length BEFORE assignation: DocId, SegId, Average: " << (*iter).getDocId() << "\t"<< (*iter).getSegment(l_seg.getSegId())->getSegId() << "\t"<< (*iter).getSegment(l_seg.getSegId())->getAverageLength() << endl << "END DEBUG" << endl;
+// }
+ (*iter).getSegment(l_seg.getSegId())->setAverageLength(l_average);
+ if ( multiTxtDocumentParams.debugMode ) {
+ cerr << "DEBUG tercpp : multiTxtDocument::setAverageLength : average length AFTER assignation: DocId, SegId, Average: " << (*iter).getDocId() << "\t"<< (*iter).getSegment(l_seg.getSegId())->getSegId() << "\t"<< (*iter).getSegment(l_seg.getSegId())->getAverageLength() << endl << "END DEBUG" << endl;
+ }
+ }
+ }
+ iter=documents.begin();
+// if ( multiTxtDocumentParams.debugMode )
+// {
+// cerr << "DEBUG tercpp : multiTxtDocument::setAverageLength : average length verification: DocId, SegId, Average: " << (*iter).getDocId() << "\t"<< (*iter).getSegment(l_seg.getSegId())->getSegId() << "\t"<< (*iter).getSegment(l_seg.getSegId())->getAverageLength() << endl << "END DEBUG" << endl;
+// }
+ }
+ if ( multiTxtDocumentParams.debugMode ) {
+ cerr << "DEBUG tercpp : multiTxtDocument::setAverageLength : End calculate Average length " << endl << "END DEBUG" << endl;
+ }
+
+
+// }
+
+}
+
+
+void multiTxtDocument::loadFiles ( string fileName, bool caseOn, bool noPunct, bool debugMode, bool noTxtIds, bool tercomLike )
+{
+ if ( multiTxtDocumentParams.debugMode ) {
+ cerr << "DEBUG tercpp : multiTxtDocument::loadFiles : loading files " << endl << fileName << endl << "END DEBUG" << endl;
+
+ }
+ vector<string> vecFiles = stringToVector ( fileName, "," );
+ for ( int i = 0; i < ( int ) vecFiles.size(); i++ ) {
+ loadFile ( vecFiles.at ( i ), caseOn, noPunct, debugMode, noTxtIds, tercomLike );
+ }
+ setAverageLength();
+}
+
+void multiTxtDocument::loadRefFile ( param p )
+{
+ multiTxtDocumentParams = Tools::copyParam ( p );
+ if ( multiTxtDocumentParams.debugMode ) {
+ cerr << "DEBUG tercpp : multiTxtDocument::loadRefFile : loading references " << endl << multiTxtDocumentParams.referenceFile << endl << "END DEBUG" << endl;
+ }
+ loadFile ( multiTxtDocumentParams.referenceFile, multiTxtDocumentParams.caseOn, multiTxtDocumentParams.noPunct, multiTxtDocumentParams.debugMode, multiTxtDocumentParams.noTxtIds, multiTxtDocumentParams.tercomLike );
+}
+void multiTxtDocument::loadRefFiles ( param p )
+{
+ multiTxtDocumentParams = Tools::copyParam ( p );
+ if ( multiTxtDocumentParams.debugMode ) {
+ cerr << "DEBUG tercpp : multiTxtDocument::loadRefFiles : loading references " << endl << multiTxtDocumentParams.referenceFile << endl << "END DEBUG" << endl;
+ }
+ loadFiles ( multiTxtDocumentParams.referenceFile, multiTxtDocumentParams.caseOn, multiTxtDocumentParams.noPunct, multiTxtDocumentParams.debugMode, multiTxtDocumentParams.noTxtIds, multiTxtDocumentParams.tercomLike );
+}
+void multiTxtDocument::loadHypFile ( param p )
+{
+ multiTxtDocumentParams = Tools::copyParam ( p );
+ multiTxtDocumentParams.tercomLike = false;
+ if ( multiTxtDocumentParams.debugMode ) {
+ cerr << "DEBUG tercpp : multiTxtDocument::loadHypFile : loading hypothesis " << endl << multiTxtDocumentParams.hypothesisFile << endl << "END DEBUG" << endl;
+ }
+ loadFile ( multiTxtDocumentParams.hypothesisFile, multiTxtDocumentParams.caseOn, multiTxtDocumentParams.noPunct, multiTxtDocumentParams.debugMode, multiTxtDocumentParams.noTxtIds, multiTxtDocumentParams.tercomLike );
+}
+void multiTxtDocument::loadHypFiles ( param p )
+{
+ multiTxtDocumentParams = Tools::copyParam ( p );
+ multiTxtDocumentParams.tercomLike = false;
+ if ( multiTxtDocumentParams.debugMode ) {
+ cerr << "DEBUG tercpp : multiTxtDocument::loadHypFiles : loading hypothesis " << endl << multiTxtDocumentParams.hypothesisFile << endl << "END DEBUG" << endl;
+ }
+ loadFile ( multiTxtDocumentParams.hypothesisFile, multiTxtDocumentParams.caseOn, multiTxtDocumentParams.noPunct, multiTxtDocumentParams.debugMode, multiTxtDocumentParams.noTxtIds, multiTxtDocumentParams.tercomLike );
+}
+
+int multiTxtDocument::getSize()
+{
+ return ( int ) documents.size();
+}
+
+}
diff --git a/mert/TERsrc/multiTxtDocument.h b/mert/TERsrc/multiTxtDocument.h
new file mode 100644
index 000000000..5249b0584
--- /dev/null
+++ b/mert/TERsrc/multiTxtDocument.h
@@ -0,0 +1,81 @@
+#ifndef __MULTITXT_DOCUMENT_H__
+#define __MULTITXT_DOCUMENT_H__
+
+#include "documentStructure.h"
+#include "tools.h"
+// #include "xmlStructure.h"
+
+#include <iostream>
+#include <string>
+namespace TERCpp
+{
+
+class multiTxtDocument
+{
+public:
+ multiTxtDocument();
+// multiTxtDocument(string FileName);
+// multiTxtDocument(const std::string &bread, const std::string &cheese, const std::string &meat, const bool pickle):
+// m_bread(bread), m_cheese(cheese), m_meat(meat), m_pickle(pickle){};
+// ~multiTxtDocument(){};
+
+// void output()
+// {
+// std::cout << "Bread = " << m_bread << ", Cheese = " << m_cheese <<
+// ", Meat = " << m_meat << ", Has Pickle = " << m_pickle << std::endl;
+//
+// }
+// void setDocType(string s);
+// void setSetId(string s);
+// void setSrcLang(string s);
+// void setTgtLang(string s);
+// string getDocType();
+// string getSetId();
+// string getSrcLang();
+// string getTgtLang();
+// xmlStructure getStructure();
+ void addDocument ( documentStructure doc );
+ documentStructure* getLastDocument();
+ documentStructure* getDocument ( string docId );
+ vector<documentStructure> getDocuments ();
+ vector<string> getListDocuments ();
+ void loadFile ( string fileName, bool caseOn, bool noPunct, bool debugMode, bool noTxtIds, bool tercomLike );
+ void loadFiles ( string fileName, bool caseOn, bool noPunct, bool debugMode, bool noTxtIds, bool tercomLike );
+ void loadRefFile ( param p );
+ void loadRefFiles ( param p );
+ void loadHypFile ( param p );
+ void loadHypFiles ( param p );
+ void setAverageLength();
+ int getSize();
+
+
+private:
+// string docType;
+// string setId;
+// string srcLang;
+// string tgtLang;
+// xmlStructure xmlStruct;
+ param multiTxtDocumentParams;
+ vector<documentStructure> documents;
+// vector<string> bestDocumentId;
+// std::string m_bread, m_cheese, m_meat;
+// bool m_pickle;
+//
+// // declare the boost::serialization::access class as a friend of multiTxtDocument
+// friend class boost::serialization::access;
+// // Create a serialize function for serialization::access to use, I guess you could regard this as a kind of callback function!
+// template<class archive>
+// void serialize(archive& ar, const unsigned int version)
+// {
+// // Note: As explained in the original tut. the & operator is overridden in boost to use
+// // << or >> depending on the direction of the data (read/write)
+// using boost::serialization::make_nvp;
+// ar & make_nvp("Bread", m_bread);
+// ar & make_nvp("Cheese", m_cheese);
+// ar & make_nvp("Meats", m_meat);
+// ar & make_nvp("HasPickle", m_pickle);
+// // Also note: strings in the first parameter of make_nvp cannot contain spaces!
+// }
+};
+}
+#endif //SANDWICH_DEFINED
diff --git a/mert/TERsrc/segmentStructure.cpp b/mert/TERsrc/segmentStructure.cpp
new file mode 100644
index 000000000..31bfa30fd
--- /dev/null
+++ b/mert/TERsrc/segmentStructure.cpp
@@ -0,0 +1,82 @@
+#include "segmentStructure.h"
+
+using namespace std;
+namespace TERCpp
+{
+vecString segmentStructure::getContent()
+{
+ return content;
+}
+string segmentStructure::getSegId()
+{
+ return segId;
+}
+string segmentStructure::toString()
+{
+// return vectorToString(content);
+ return "";
+}
+void segmentStructure::addContent ( vecString vecS )
+{
+ content = vecS;
+ averageLength=0.0;
+}
+void segmentStructure::setSegId ( string s )
+{
+ segId = s;
+}
+segmentStructure::segmentStructure ( string id, vecString vecS )
+{
+ segId = id;
+ content = vecS;
+ averageLength=0.0;
+}
+segmentStructure::segmentStructure ( string id, string txt )
+{
+ segId = id;
+ content = stringToVector ( txt, " " );
+ averageLength=0.0;
+}
+void segmentStructure::addContent ( string s )
+{
+ content = stringToVector ( s, " " );
+ averageLength=0.0;
+}
+segmentStructure::segmentStructure()
+{
+ segId = "";
+}
+terAlignment segmentStructure::getAlignment()
+{
+ return evaluation;
+}
+void segmentStructure::setAlignment ( terAlignment& l_align )
+{
+ evaluation = l_align;
+}
+
+string segmentStructure::getBestDocId()
+{
+ return bestDocId;
+}
+void segmentStructure::setBestDocId ( string s )
+{
+ bestDocId = s;
+}
+float segmentStructure::getAverageLength()
+{
+ return averageLength;
+}
+void segmentStructure::setAverageLength(float f)
+{
+ averageLength=f;
+}
+int segmentStructure::getSize()
+{
+ return (int)content.size();
+}
+
+
+
+
+}
diff --git a/mert/TERsrc/segmentStructure.h b/mert/TERsrc/segmentStructure.h
new file mode 100644
index 000000000..692d8a458
--- /dev/null
+++ b/mert/TERsrc/segmentStructure.h
@@ -0,0 +1,73 @@
+#ifndef __SEGMENTSTRUCTURE_H__
+#define __SEGMENTSTRUCTURE_H__
+
+
+#include <vector>
+#include <stdio.h>
+#include <string>
+#include <sstream>
+#include "tools.h"
+#include "tercalc.h"
+
+
+using namespace std;
+using namespace Tools;
+
+namespace TERCpp
+{
+class segmentStructure
+{
+private:
+ string segId;
+ vecString content;
+ terAlignment evaluation;
+ string bestDocId;
+ float averageLength;
+
+public:
+ segmentStructure();
+ segmentStructure ( string id, vecString vecS );
+ segmentStructure ( string id, string txt );
+ void setAverageLength(float f);
+ float getAverageLength();
+ string getSegId();
+ terAlignment getAlignment();
+ void setAlignment(terAlignment& l_align);
+ void setSegId ( string s );
+ void setBestDocId ( string s );
+ string getBestDocId();
+ void addContent ( vecString vecS );
+ void addContent ( string s );
+ int getSize();
+// {
+// return segId;
+// }
+ vecString getContent();
+// {
+// return content;
+// }
+// alignmentStruct();
+// alignmentStruct (int _start, int _end, int _moveto, int _newloc);
+// alignmentStruct (int _start, int _end, int _moveto, int _newloc, vector<string> _shifted);
+// string toString();
+// int distance() ;
+// bool leftShift();
+// int size();
+// alignmentStruct operator=(alignmentStruct t);
+// string vectorToString(vector<string> vec);
+
+// int start;
+// int end;
+// int moveto;
+// int newloc;
+ vector<string> nwords; // The words we shifted
+ vector<char> alignment ; // for pra_more output
+ vector<vecInt> aftershift; // for pra_more output
+ // This is used to store the cost of a shift, so we don't have to
+ // calculate it multiple times.
+ double cost;
+ string toString();
+};
+
+}
+#endif
diff --git a/mert/TERsrc/sgmlDocument.cpp b/mert/TERsrc/sgmlDocument.cpp
new file mode 100755
index 000000000..8fe943fed
--- /dev/null
+++ b/mert/TERsrc/sgmlDocument.cpp
@@ -0,0 +1,149 @@
+#include "sgmlDocument.h"
+
+// #include <iostream>
+// #include <boost/filesystem/fstream.hpp>
+// #include <boost/archive/xml_oarchive.hpp>
+// #include <boost/archive/xml_iarchive.hpp>
+// #include <boost/serialization/nvp.hpp>
+
+// helper functions to allow us to load and save sandwiches to/from xml
+namespace TERCpp
+{
+SGMLDocument::SGMLDocument()
+{
+ docType="";
+ setId="";
+ srcLang="";
+ tgtLang="";
+}
+// SGMLDocument::SGMLDocument ( string FileName )
+// {
+// this=xmlStruct.copy_to_SGMLDocument(FileName);
+// }
+// xmlStructure SGMLDocument::getStructure()
+// {
+// return xmlStruct;
+// }
+string SGMLDocument::getDocType()
+{
+ return docType;
+}
+string SGMLDocument::getSetId()
+{
+ return setId;
+}
+string SGMLDocument::getSrcLang()
+{
+ return srcLang;
+}
+string SGMLDocument::getTgtLang()
+{
+ return tgtLang;
+}
+void SGMLDocument::setDocType ( string s )
+{
+ docType=s;
+}
+void SGMLDocument::setSetId ( string s )
+{
+ setId=s;
+}
+void SGMLDocument::setSrcLang ( string s )
+{
+ srcLang=s;
+}
+void SGMLDocument::setTgtLang ( string s )
+{
+ tgtLang=s;
+}
+void SGMLDocument::addDocument ( documentStructure doc )
+{
+ documents.push_back(doc);
+}
+documentStructure* SGMLDocument::getLastDocument()
+{
+ return &(documents.at((int)documents.size()-1));
+}
+documentStructure* SGMLDocument::getFirstDocument()
+{
+ return &(documents.at(0));
+}
+int SGMLDocument::getSize()
+{
+ return (int)documents.size();
+}
+documentStructure* SGMLDocument::getDocument(string docId)
+{
+ for ( int i = 0; i < ( int ) documents.size(); i++ ) {
+ if ( docId.compare ( documents.at ( i ).getDocId() ) == 0 ) {
+ return & ( documents.at ( i ) );
+ }
+ }
+ cerr << "ERROR : SGMLDocument::getDocument : document " << docId << " does not exist !" << endl;
+ exit ( 0 );
+}
+
+
+
+
+
+// void save_sandwich(const SGMLDocument &sw, const std::string &file_name);
+// SGMLDocument load_sandwich(const std::string &file_name);
+// int callSGMLDocument()
+// {
+// // xml filename
+// const std::string fn="JasonsSarnie.xml";
+//
+// // create a new sandwich and lets take a look at it!
+// SGMLDocument *s = new SGMLDocument("Granary", "Brie", "Bacon", false); // mmmmm, Brie and bacon! ;)
+// std::cout << "Created the following sandwich:" << std::endl;
+// s->output();
+//
+// // Now lets save the sandwich out to an XML file....
+// std::cout << std::endl << "Saving the sandwich to xml...." << std::endl;
+// save_sandwich(*s, fn);
+//
+// // And then load it into another SGMLDocument variable and take a look at what we've got
+// std::cout << "Attempting to load the saved sandwich..." << std::endl;
+// SGMLDocument s2 = load_sandwich(fn);
+// std::cout << "Contents of loaded SGMLDocument:" << std::endl;
+// s2.output();
+//
+// delete s;
+// std::string dummy;
+// std::getline(std::cin, dummy);
+//
+// }
+/*
+
+// Save a SGMLDocument to XML...
+void save_sandwich(const SGMLDocument &sw, const std::string &file_name)
+{
+ // Create a filestream object
+ boost::filesystem::fstream ofs(file_name, std::ios::trunc | std::ios::out);
+
+ // Now create an XML output file using our filestream
+ boost::archive::xml_oarchive xml(ofs);
+
+ // call serialization::make_nvp, passing our sandwich.
+ // make_nvp will eventually call the sandwich instance (sw) serialize function
+ // causing the contents of sw to be output to the xml file
+ xml << boost::serialization::make_nvp("SGMLDocument", sw);
+}
+
+// The load function works in almost the exact same way as save_sandwich,
+// The only differences are:
+// 1. we create an XML input stream - the original example in AD's link created another xml_oarchive, causing a runtime error...doh!
+// 2. the call to make_nvp populates the sandwich instance(sw) which is then returned...
+SGMLDocument load_sandwich(const std::string &file_name)
+{
+ SGMLDocument sw;
+ boost::filesystem::fstream ifs(file_name, std::ios::binary | std::ios::in);
+ boost::archive::xml_iarchive xml(ifs);
+ xml >> boost::serialization::make_nvp("SGMLDocument", sw);
+ return sw;
+}*/
+
+
+
+}
diff --git a/mert/TERsrc/sgmlDocument.h b/mert/TERsrc/sgmlDocument.h
new file mode 100755
index 000000000..c58df92a5
--- /dev/null
+++ b/mert/TERsrc/sgmlDocument.h
@@ -0,0 +1,69 @@
+#ifndef __SGML_DOCUMENT_H__
+#define __SGML_DOCUMENT_H__
+
+#include "documentStructure.h"
+// #include "xmlStructure.h"
+
+#include <iostream>
+#include <string>
+namespace TERCpp
+{
+
+class SGMLDocument
+{
+public:
+ SGMLDocument();
+// SGMLDocument(string FileName);
+// SGMLDocument(const std::string &bread, const std::string &cheese, const std::string &meat, const bool pickle):
+// m_bread(bread), m_cheese(cheese), m_meat(meat), m_pickle(pickle){};
+// ~SGMLDocument(){};
+
+// void output()
+// {
+// std::cout << "Bread = " << m_bread << ", Cheese = " << m_cheese <<
+// ", Meat = " << m_meat << ", Has Pickle = " << m_pickle << std::endl;
+//
+// }
+ void setDocType ( string s );
+ void setSetId ( string s );
+ void setSrcLang ( string s );
+ void setTgtLang ( string s );
+ string getDocType();
+ string getSetId();
+ string getSrcLang();
+ string getTgtLang();
+// xmlStructure getStructure();
+ void addDocument ( documentStructure doc );
+ documentStructure* getLastDocument();
+ documentStructure* getFirstDocument();
+ int getSize();
+ documentStructure* getDocument(string docId);
+
+private:
+ string docType;
+ string setId;
+ string srcLang;
+ string tgtLang;
+// xmlStructure xmlStruct;
+ vector<documentStructure> documents;
+// std::string m_bread, m_cheese, m_meat;
+// bool m_pickle;
+//
+// // declare the boost::serialization::access class as a friend of SGMLDocument
+// friend class boost::serialization::access;
+// // Create a serialize function for serialization::access to use, I guess you could regard this as a kind of callback function!
+// template<class archive>
+// void serialize(archive& ar, const unsigned int version)
+// {
+// // Note: As explained in the original tut. the & operator is overridden in boost to use
+// // << or >> depending on the direction of the data (read/write)
+// using boost::serialization::make_nvp;
+// ar & make_nvp("Bread", m_bread);
+// ar & make_nvp("Cheese", m_cheese);
+// ar & make_nvp("Meats", m_meat);
+// ar & make_nvp("HasPickle", m_pickle);
+// // Also note: strings in the first parameter of make_nvp cannot contain spaces!
+// }
+};
+}
+#endif //SANDWICH_DEFINED
diff --git a/mert/TERsrc/stringHasher.cpp b/mert/TERsrc/stringHasher.cpp
new file mode 100644
index 000000000..24fde0e32
--- /dev/null
+++ b/mert/TERsrc/stringHasher.cpp
@@ -0,0 +1,35 @@
+#include "stringHasher.h"
+// The following class defines a hash function for strings
+
+
+using namespace std;
+
+namespace HashMapSpace
+{
+stringHasher::stringHasher ( long cle, string cleTxt, string valueTxt )
+{
+ m_hashKey=cle;
+ m_key=cleTxt;
+ m_value=valueTxt;
+}
+// stringHasher::~stringHasher(){};*/
+long stringHasher::getHashKey()
+{
+ return m_hashKey;
+}
+string stringHasher::getKey()
+{
+ return m_key;
+}
+string stringHasher::getValue()
+{
+ return m_value;
+}
+void stringHasher::setValue ( string value )
+{
+ m_value=value;
+}
+
+
+// typedef stdext::hash_map<string, string, stringhasher> HASH_S_S;
+}
diff --git a/mert/TERsrc/stringHasher.h b/mert/TERsrc/stringHasher.h
new file mode 100644
index 000000000..a995c0cc7
--- /dev/null
+++ b/mert/TERsrc/stringHasher.h
@@ -0,0 +1,30 @@
+#ifndef __STRINGHASHER_H__
+#define __STRINGHASHER_H__
+#include <string>
+//#include <ext/hash_map>
+#include <iostream>
+
+using namespace std;
+namespace HashMapSpace
+{
+
+class stringHasher
+{
+private:
+ long m_hashKey;
+ string m_key;
+ string m_value;
+
+public:
+ stringHasher ( long cle, string cleTxt, string valueTxt );
+ long getHashKey();
+ string getKey();
+ string getValue();
+ void setValue ( string value );
+
+
+};
+
+
+}
+#endif
diff --git a/mert/TERsrc/stringInfosHasher.cpp b/mert/TERsrc/stringInfosHasher.cpp
new file mode 100644
index 000000000..3e02e7a20
--- /dev/null
+++ b/mert/TERsrc/stringInfosHasher.cpp
@@ -0,0 +1,35 @@
+#include "stringInfosHasher.h"
+// The following class defines a hash function for strings
+
+
+using namespace std;
+
+namespace HashMapSpace
+{
+stringInfosHasher::stringInfosHasher ( long cle, string cleTxt, vector<string> valueVecInt )
+{
+ m_hashKey=cle;
+ m_key=cleTxt;
+ m_value=valueVecInt;
+}
+// stringInfosHasher::~stringInfosHasher(){};*/
+long stringInfosHasher::getHashKey()
+{
+ return m_hashKey;
+}
+string stringInfosHasher::getKey()
+{
+ return m_key;
+}
+vector<string> stringInfosHasher::getValue()
+{
+ return m_value;
+}
+void stringInfosHasher::setValue ( vector<string> value )
+{
+ m_value=value;
+}
+
+
+// typedef stdext::hash_map<string, string, stringhasher> HASH_S_S;
+}
diff --git a/mert/TERsrc/stringInfosHasher.h b/mert/TERsrc/stringInfosHasher.h
new file mode 100644
index 000000000..c7a705659
--- /dev/null
+++ b/mert/TERsrc/stringInfosHasher.h
@@ -0,0 +1,30 @@
+#ifndef __STRINGINFOSHASHER_H__
+#define __STRINGINFOSHASHER_H__
+#include <string>
+// #include <ext/hash_map>
+#include <iostream>
+#include <vector>
+
+using namespace std;
+namespace HashMapSpace
+{
+class stringInfosHasher
+{
+private:
+ long m_hashKey;
+ string m_key;
+ vector<string> m_value;
+
+public:
+ stringInfosHasher ( long cle, string cleTxt, vector<string> valueVecInt );
+ long getHashKey();
+ string getKey();
+ vector<string> getValue();
+ void setValue ( vector<string> value );
+
+
+};
+
+
+}
+#endif \ No newline at end of file
diff --git a/mert/TERsrc/terAlignment.cpp b/mert/TERsrc/terAlignment.cpp
new file mode 100644
index 000000000..87be53b11
--- /dev/null
+++ b/mert/TERsrc/terAlignment.cpp
@@ -0,0 +1,131 @@
+
+#include "terAlignment.h"
+using namespace std;
+namespace TERCpp
+{
+
+terAlignment::terAlignment()
+{
+// vector<string> ref;
+// vector<string> hyp;
+// vector<string> aftershift;
+
+ // TERshift[] allshifts = null;
+
+ numEdits=0;
+ numWords=0;
+ bestRef="";
+
+ numIns=0;
+ numDel=0;
+ numSub=0;
+ numSft=0;
+ numWsf=0;
+}
+string terAlignment::toString()
+{
+ stringstream s;
+ s.str ( "" );
+ s << "Original Ref: " << join ( " ", ref ) << endl;
+ s << "Original Hyp: " << join ( " ", hyp ) <<endl;
+ s << "Hyp After Shift: " << join ( " ", aftershift );
+ s << endl;
+// string s = "Original Ref: " + join(" ", ref) + "\nOriginal Hyp: " + join(" ", hyp) + "\nHyp After Shift: " + join(" ", aftershift);
+ if ( ( int ) sizeof ( alignment ) >0 ) {
+ s << "Alignment: (";
+// s += "\nAlignment: (";
+ for ( int i = 0; i < ( int ) ( alignment.size() ); i++ ) {
+ s << alignment[i];
+// s+=alignment[i];
+ }
+// s += ")";
+ s << ")";
+ }
+ s << endl;
+ if ( ( int ) allshifts.size() == 0 ) {
+// s += "\nNumShifts: 0";
+ s << "NumShifts: 0";
+ } else {
+// s += "\nNumShifts: " + (int)allshifts.size();
+ s << "NumShifts: "<< ( int ) allshifts.size();
+ for ( int i = 0; i < ( int ) allshifts.size(); i++ ) {
+ s << endl << " " ;
+ s << ( ( terShift ) allshifts[i] ).toString();
+// s += "\n " + allshifts[i];
+ }
+ }
+ s << endl << "Score: " << scoreAv() << " (" << numEdits << "/" << averageWords << ")";
+// s += "\nScore: " + score() + " (" + numEdits + "/" + numWords + ")";
+ return s.str();
+
+}
+string terAlignment::join ( string delim, vector<string> arr )
+{
+ if ( ( int ) arr.size() == 0 ) return "";
+// if ((int)delim.compare("") == 0) delim = new String("");
+// String s = new String("");
+ stringstream s;
+ s.str ( "" );
+ for ( int i = 0; i < ( int ) arr.size(); i++ ) {
+ if ( i == 0 ) {
+ s << arr.at ( i );
+ } else {
+ s << delim << arr.at ( i );
+ }
+ }
+ return s.str();
+// return "";
+}
+double terAlignment::score()
+{
+ if ( ( numWords <= 0.0 ) && ( numEdits > 0.0 ) ) {
+ return 1.0;
+ }
+ if ( numWords <= 0.0 ) {
+ return 0.0;
+ }
+ return ( double ) numEdits / numWords;
+}
+double terAlignment::scoreAv()
+{
+ if ( ( averageWords <= 0.0 ) && ( numEdits > 0.0 ) ) {
+ return 1.0;
+ }
+ if ( averageWords <= 0.0 ) {
+ return 0.0;
+ }
+ return ( double ) numEdits / averageWords;
+}
+
+void terAlignment::scoreDetails()
+{
+ numIns = numDel = numSub = numWsf = numSft = 0;
+ if((int)allshifts.size()>0) {
+ for(int i = 0; i < (int)allshifts.size(); ++i) {
+ numWsf += allshifts[i].size();
+ }
+ numSft = allshifts.size();
+ }
+
+ if((int)alignment.size()>0 ) {
+ for(int i = 0; i < (int)alignment.size(); ++i) {
+ switch (alignment[i]) {
+ case 'S':
+ case 'T':
+ numSub++;
+ break;
+ case 'D':
+ numDel++;
+ break;
+ case 'I':
+ numIns++;
+ break;
+ }
+ }
+ }
+ // if(numEdits != numSft + numDel + numIns + numSub)
+ // System.out.println("** Error, unmatch edit erros " + numEdits +
+ // " vs " + (numSft + numDel + numIns + numSub));
+}
+
+} \ No newline at end of file
diff --git a/mert/TERsrc/terAlignment.h b/mert/TERsrc/terAlignment.h
new file mode 100644
index 000000000..7c91e3aae
--- /dev/null
+++ b/mert/TERsrc/terAlignment.h
@@ -0,0 +1,51 @@
+#ifndef __TERCPPTERALIGNMENT_H__
+#define __TERCPPTERALIGNMENT_H__
+
+
+#include <vector>
+#include <stdio.h>
+#include <string.h>
+#include "tools.h"
+#include "terShift.h"
+
+
+using namespace std;
+// using namespace HashMapSpace;
+namespace TERCpp
+{
+
+class terAlignment
+{
+private:
+public:
+
+ terAlignment();
+ string toString();
+ void scoreDetails();
+
+ vector<string> ref;
+ vector<string> hyp;
+ vector<string> aftershift;
+
+ vector<terShift> allshifts;
+
+ double numEdits;
+ double numWords;
+ double averageWords;
+ vector<char> alignment;
+ string bestRef;
+
+ int numIns;
+ int numDel;
+ int numSub;
+ int numSft;
+ int numWsf;
+
+
+ string join ( string delim, vector<string> arr );
+ double score();
+ double scoreAv();
+};
+
+}
+#endif \ No newline at end of file
diff --git a/mert/TERsrc/terEvaluation.h b/mert/TERsrc/terEvaluation.h
new file mode 100644
index 000000000..a2d4a4452
--- /dev/null
+++ b/mert/TERsrc/terEvaluation.h
@@ -0,0 +1,40 @@
+/*
+ * Generic hashmap manipulation functions
+ */
+#ifndef __XMLSTRUCTURE_H__
+#define __XMLSTRUCTURE_H__
+
+#include "sgmlDocument.h"
+#include "documentStructure.h"
+#include "stdio.h"
+#include <iostream>
+#include <string>
+#include "tinyxml.h"
+
+using namespace std;
+
+namespace TERCpp
+{
+class xmlStructure
+{
+private:
+ unsigned int NUM_INDENTS_PER_SPACE;
+// void dump_attribs_to_SGMLDocuments ( SGMLDocument* arg1, const TiXmlElement* arg2 );
+ void dump_attribs_to_SGMLDocuments ( SGMLDocument* sgmlDoc, TiXmlElement* pElement, unsigned int indent );
+public:
+ xmlStructure();
+ const char * getIndent( unsigned int numIndents );
+ const char * getIndentAlt( unsigned int numIndents );
+ int dump_attribs_to_stdout(TiXmlElement* pElement, unsigned int indent);
+ void dump_to_stdout( TiXmlNode* pParent, unsigned int indent );
+ void dump_to_stdout(const char* pFilename);
+ void copy_to_SGMLDocument(SGMLDocument* sgmlDoc ,TiXmlNode* pParent, unsigned int indent );
+ SGMLDocument dump_to_SGMLDocument(string FileName);
+
+};
+
+
+}
+
+
+#endif
diff --git a/mert/TERsrc/terShift.cpp b/mert/TERsrc/terShift.cpp
new file mode 100644
index 000000000..428803849
--- /dev/null
+++ b/mert/TERsrc/terShift.cpp
@@ -0,0 +1,100 @@
+#include "terShift.h"
+
+using namespace std;
+namespace TERCpp
+{
+
+// terShift::terShift()
+// {
+// // vector<string> ref;
+// // vector<string> hyp;
+// // vector<string> aftershift;
+//
+// // terShift[] allshifts = null;
+//
+// numEdits=0;
+// numWords=0;
+// bestRef="";
+//
+// numIns=0;
+// numDel=0;
+// numSub=0;
+// numSft=0;
+// numWsf=0;
+// }
+terShift::terShift ()
+{
+ start = 0;
+ end = 0;
+ moveto = 0;
+ newloc = 0;
+ cost=1.0;
+}
+terShift::terShift ( int _start, int _end, int _moveto, int _newloc )
+{
+ start = _start;
+ end = _end;
+ moveto = _moveto;
+ newloc = _newloc;
+ cost=1.0;
+}
+
+terShift::terShift ( int _start, int _end, int _moveto, int _newloc, vector<string> _shifted )
+{
+ start = _start;
+ end = _end;
+ moveto = _moveto;
+ newloc = _newloc;
+ shifted = _shifted;
+ cost=1.0;
+}
+// string terShift::vectorToString(vector<string> vec)
+// {
+// string retour("");
+// for (vector<string>::iterator vecIter=vec.begin();vecIter!=vec.end(); vecIter++)
+// {
+// retour+=(*vecIter)+"\t";
+// }
+// return retour;
+// }
+
+string terShift::toString()
+{
+ stringstream s;
+ s.str ( "" );
+ s << "[" << start << ", " << end << ", " << moveto << "/" << newloc << "]";
+ if ( ( int ) shifted.size() > 0 ) {
+ s << " (" << vectorToString ( shifted ) << ")";
+ }
+ return s.str();
+}
+
+/* The distance of the shift. */
+int terShift::distance()
+{
+ if ( moveto < start ) {
+ return start - moveto;
+ } else if ( moveto > end ) {
+ return moveto - end;
+ } else {
+ return moveto - start;
+ }
+}
+
+bool terShift::leftShift()
+{
+ return ( moveto < start );
+}
+
+int terShift::size()
+{
+ return ( end - start ) + 1;
+}
+// terShift terShift::operator=(terShift t)
+// {
+//
+// return t;
+// }
+
+
+} \ No newline at end of file
diff --git a/mert/TERsrc/terShift.h b/mert/TERsrc/terShift.h
new file mode 100644
index 000000000..e4ce27f19
--- /dev/null
+++ b/mert/TERsrc/terShift.h
@@ -0,0 +1,45 @@
+#ifndef __TERCPPTERSHIFT_H__
+#define __TERCPPTERSHIFT_H__
+
+
+#include <vector>
+#include <stdio.h>
+#include <string>
+#include <sstream>
+#include "tools.h"
+
+
+using namespace std;
+using namespace Tools;
+
+namespace TERCpp
+{
+class terShift
+{
+private:
+public:
+
+ terShift();
+ terShift ( int _start, int _end, int _moveto, int _newloc );
+ terShift ( int _start, int _end, int _moveto, int _newloc, vector<string> _shifted );
+ string toString();
+ int distance() ;
+ bool leftShift();
+ int size();
+// terShift operator=(terShift t);
+// string vectorToString(vector<string> vec);
+
+ int start;
+ int end;
+ int moveto;
+ int newloc;
+ vector<string> shifted; // The words we shifted
+ vector<char> alignment ; // for pra_more output
+ vector<string> aftershift; // for pra_more output
+ // This is used to store the cost of a shift, so we don't have to
+ // calculate it multiple times.
+ double cost;
+};
+
+}
+#endif \ No newline at end of file
diff --git a/mert/TERsrc/tercalc.cpp b/mert/TERsrc/tercalc.cpp
new file mode 100644
index 000000000..e16f692e8
--- /dev/null
+++ b/mert/TERsrc/tercalc.cpp
@@ -0,0 +1,1035 @@
+//
+// C++ Implementation: tercalc
+//
+// Description:
+//
+//
+// Author: <>, (C) 2010
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#include "tercalc.h"
+using namespace std;
+using namespace Tools;
+namespace TERCpp
+{
+
+terCalc::terCalc()
+{
+ MAX_SHIFT_SIZE = 50;
+ INF = 999999.0;
+ shift_cost = 1.0;
+ insert_cost = 1.0;
+ delete_cost = 1.0;
+ substitute_cost = 1.0;
+ match_cost = 0.0;
+ NUM_SEGMENTS_SCORED = 0;
+ NUM_SHIFTS_CONSIDERED = 0;
+ NUM_BEAM_SEARCH_CALLS = 0;
+ BEAM_WIDTH = 20;
+ MAX_SHIFT_DIST = 50;
+ PRINT_DEBUG = false;
+}
+
+
+// terCalc::~terCalc()
+// {
+// }
+// size_t* terCalc::hashVec ( vector<string> s )
+// {
+// size_t retour[ ( int ) s.size() ];
+// int i=0;
+// for ( i=0; i< ( int ) s.size(); i++ )
+// {
+// boost::hash<std::string> hasher;
+// retour[i]=hasher ( s.at ( i ) );
+// }
+// return retour;
+// }
+
+
+int terCalc::WERCalculation ( size_t * ref, size_t * hyp )
+{
+ int retour;
+ int REFSize = sizeof ( ref ) + 1;
+ int HYPSize = sizeof ( hyp ) + 1;
+ int WER[REFSize][HYPSize];
+ int i = 0;
+ int j = 0;
+ for ( i = 0; i < REFSize; i++ ) {
+ WER[i][0] = ( int ) i;
+ }
+ for ( j = 0; j < HYPSize; j++ ) {
+ WER[0][j] = ( int ) j;
+ }
+ for ( j = 1; j < HYPSize; j++ ) {
+ for ( i = 1; i < REFSize; i++ ) {
+ if ( i == 1 ) {
+ cerr << endl;
+ }
+ if ( ref[i-1] == hyp[j-1] ) {
+ WER[i][j] = WER[i-1][j-1];
+ cerr << "- ";
+ cerr << WER[i][j] << "-\t";
+ } else {
+ if ( ( ( WER[i-1][ j] + 1 ) < ( WER[i][j-1] + 1 ) ) && ( ( WER[i-1][j] + 1 ) < ( WER[i-1][j-1] + 1 ) ) ) {
+ WER[i][j] = ( WER[i-1][j] + 1 );
+// cerr << "D ";
+ cerr << WER[i][j] << "D\t";
+ } else {
+ if ( ( ( WER[i][j-1] + 1 ) < ( WER[i-1][j] + 1 ) ) && ( ( WER[i][j-1] + 1 ) < ( WER[i-1][j-1] + 1 ) ) ) {
+ WER[i][j] = ( WER[i][j-1] + 1 );
+// cerr << "I ";
+ cerr << WER[i][j] << "I\t";
+ } else {
+ WER[i][j] = ( WER[i-1][j-1] + 1 );
+// cerr << "S ";
+ cerr << WER[i][j] << "S\t";
+ }
+ }
+ }
+ }
+ }
+ cerr << endl;
+ retour = WER[i-1][j-1];
+ cerr << "i : " << i - 1 << "\tj : " << j - 1 << endl;
+ return retour;
+}
+int terCalc::WERCalculation ( std::vector< int > ref, std::vector< int > hyp )
+{
+ stringstream s;
+ s.str ( "" );
+ string stringRef ( "" );
+ string stringHyp ( "" );
+ for ( vector<int>::iterator l_it = ref.begin(); l_it != ref.end(); l_it++ ) {
+ if ( l_it == ref.begin() ) {
+ s << ( *l_it );
+ } else {
+ s << " " << ( *l_it );
+ }
+ }
+ stringRef = s.str();
+ s.str ( "" );
+ for ( vector<int>::iterator l_itHyp = hyp.begin(); l_itHyp != hyp.end(); l_itHyp++ ) {
+ if ( l_itHyp == hyp.begin() ) {
+ s << ( *l_itHyp );
+ } else {
+ s << " " << ( *l_itHyp );
+ }
+ }
+ stringHyp = s.str();
+ s.str ( "" );
+ return WERCalculation ( stringToVector ( stringRef, " " ), stringToVector ( stringHyp , " " ) );
+}
+
+terAlignment terCalc::TER ( std::vector< int > hyp, std::vector< int > ref )
+{
+ stringstream s;
+ s.str ( "" );
+ string stringRef ( "" );
+ string stringHyp ( "" );
+ for ( vector<int>::iterator l_it = ref.begin(); l_it != ref.end(); l_it++ ) {
+ if ( l_it == ref.begin() ) {
+ s << ( *l_it );
+ } else {
+ s << " " << ( *l_it );
+ }
+ }
+ stringRef = s.str();
+ s.str ( "" );
+ for ( vector<int>::iterator l_itHyp = hyp.begin(); l_itHyp != hyp.end(); l_itHyp++ ) {
+ if ( l_itHyp == hyp.begin() ) {
+ s << ( *l_itHyp );
+ } else {
+ s << " " << ( *l_itHyp );
+ }
+ }
+ stringHyp = s.str();
+ s.str ( "" );
+ return TER ( stringToVector ( stringRef , " " ), stringToVector ( stringHyp , " " ) );
+}
+
+int terCalc::WERCalculation ( vector<string> ref, vector<string> hyp )
+{
+ int retour;
+ int REFSize = ( int ) ref.size() + 1;
+ int HYPSize = ( int ) hyp.size() + 1;
+ int WER[REFSize][HYPSize];
+ char WERchar[REFSize][HYPSize];
+ int i = 0;
+ int j = 0;
+ for ( i = 0; i < REFSize; i++ ) {
+ WER[i][0] = ( int ) i;
+ }
+ for ( j = 0; j < HYPSize; j++ ) {
+ WER[0][j] = ( int ) j;
+ }
+ for ( j = 1; j < HYPSize; j++ ) {
+ for ( i = 1; i < REFSize; i++ ) {
+// if (i==1)
+// {
+// cerr << endl;
+// }
+ if ( ref[i-1] == hyp[j-1] ) {
+ WER[i][j] = WER[i-1][j-1];
+// cerr << "- ";
+// cerr << WER[i][j]<< "-\t";
+ WERchar[i][j] = '-';
+ } else {
+ if ( ( ( WER[i-1][ j] + 1 ) < ( WER[i][j-1] + 1 ) ) && ( ( WER[i-1][j] + 1 ) < ( WER[i-1][j-1] + 1 ) ) ) {
+ WER[i][j] = ( WER[i-1][j] + 1 );
+// cerr << "D ";
+// cerr << WER[i][j]<< "D\t";
+ WERchar[i][j] = 'D';
+ } else {
+ if ( ( ( WER[i][j-1] + 1 ) < ( WER[i-1][j] + 1 ) ) && ( ( WER[i][j-1] + 1 ) < ( WER[i-1][j-1] + 1 ) ) ) {
+ WER[i][j] = ( WER[i][j-1] + 1 );
+// cerr << "I ";
+// cerr << WER[i][j]<< "I\t";
+ WERchar[i][j] = 'I';
+ } else {
+ WER[i][j] = ( WER[i-1][j-1] + 1 );
+// cerr << "S ";
+// cerr << WER[i][j]<< "S\t";
+ WERchar[i][j] = 'S';
+ }
+ }
+ }
+ }
+ }
+ cerr << endl;
+ retour = WER[REFSize-1][HYPSize-1];
+ cerr << "i : " << i - 1 << "\tj : " << j - 1 << endl;
+ j = HYPSize - 1;
+ i = REFSize - 1;
+ int k;
+ stringstream s;
+// WERalignment local[HYPSize];
+ if ( HYPSize > REFSize ) {
+ k = HYPSize;
+ } else {
+ k = REFSize;
+ }
+ WERalignment local;
+ while ( j > 0 && i > 0 ) {
+ cerr << "indice i : " << i << "\t";
+ cerr << "indice j : " << j << endl;
+ if ( ( j == HYPSize - 1 ) && ( i == REFSize - 1 ) ) {
+ alignmentElement localInfos;
+ s << WER[i][j];
+ localInfos.push_back ( s.str() );
+ s.str ( "" );
+ s << WERchar[i][j];
+ localInfos.push_back ( s.str() );
+ s.str ( "" );
+ local.push_back ( localInfos );
+// // i--;
+// j--;
+ }
+// else
+ {
+ if ( ( ( WER[i-1][j-1] ) <= ( WER[i-1][j] ) ) && ( ( WER[i-1][j-1] ) <= ( WER[i][j-1] ) ) ) {
+ alignmentElement localInfos;
+ s << WER[i-1][j-1];
+ localInfos.push_back ( s.str() );
+ s.str ( "" );
+ s << WERchar[i-1][j-1];
+ localInfos.push_back ( s.str() );
+ s.str ( "" );
+ local.push_back ( localInfos );
+ i--;
+ j--;
+ } else {
+ if ( ( ( WER[i][j-1] ) <= ( WER[i-1][j] ) ) && ( ( WER[i][j-1] ) <= ( WER[i-1][j-1] ) ) ) {
+ alignmentElement localInfos;
+ s << WER[i][j-1];
+ localInfos.push_back ( s.str() );
+ s.str ( "" );
+ s << WERchar[i][j-1];
+ localInfos.push_back ( s.str() );
+ s.str ( "" );
+ local.push_back ( localInfos );
+ j--;
+ } else {
+ alignmentElement localInfos;
+ s << WER[i-1][j];
+ localInfos.push_back ( s.str() );
+ s.str ( "" );
+ s << WERchar[i-1][j];
+ localInfos.push_back ( s.str() );
+ s.str ( "" );
+ local.push_back ( localInfos );
+ i--;
+ }
+ }
+ }
+ }
+
+ for ( j = 1; j < HYPSize; j++ ) {
+ for ( i = 1; i < REFSize; i++ ) {
+ cerr << WERchar[i][j] << " ";
+ }
+ cerr << endl;
+ }
+ cerr << endl;
+ for ( j = 1; j < HYPSize; j++ ) {
+ for ( i = 1; i < REFSize; i++ ) {
+ cerr << WER[i][j] << " ";
+ }
+ cerr << endl;
+ }
+
+ cerr << "=================" << endl;
+// k=local.size()-1;
+// while (k>0)
+// {
+// alignmentElement localInfos;
+// localInfos=local.at(k-1);
+
+// l_WERalignment.push_back(localInfos);
+// cerr << (string)localInfos.at(1)+"\t";
+ k--;
+// }
+// cerr<<endl;
+ k = local.size() - 1;
+ int l = 0;
+ int m = 0;
+ while ( k > 0 ) {
+ alignmentElement localInfos;
+ localInfos = local.at ( k - 1 );
+ if ( ( int ) ( localInfos.at ( 1 ).compare ( "D" ) ) == 0 || l > HYPSize - 1 ) {
+ localInfos.push_back ( "***" );
+ } else {
+ localInfos.push_back ( hyp.at ( l ) );
+ l++;
+ }
+ if ( ( int ) ( localInfos.at ( 1 ).compare ( "I" ) ) == 0 || m > REFSize - 1 ) {
+ localInfos.push_back ( "***" );
+ } else {
+ localInfos.push_back ( ref.at ( m ) );
+ m++;
+ }
+// cerr << vectorToString(localInfos)<<endl;
+// cerr <<localInfos.at(0)<<"\t"<<localInfos.at(1)<<"\t"<<localInfos.at(2)<<"\t"<<localInfos.at(3)<<endl;
+ l_WERalignment.push_back ( localInfos );
+// cerr << (string)localInfos.at(1)+"\t";
+ k--;
+ }
+ cerr << endl;
+ /* k=local.size()-1;
+ while (k>0)
+ {
+ alignmentElement localInfos;
+ localInfos=local.at(k-1);
+ // l_WERalignment.push_back(localInfos);
+ cerr << (string)localInfos.at(0)+"\t";
+ k--;
+ }
+ cerr<<endl;*/
+ k = 0;
+// k=l_WERalignment.size()-1;
+ m = 0;
+ while ( k < ( int ) l_WERalignment.size() ) {
+ alignmentElement localInfos;
+ localInfos = l_WERalignment.at ( k );
+ cerr << localInfos.at ( 0 ) << "\t" << localInfos.at ( 1 ) << "\t" << localInfos.at ( 2 ) << "\t" << localInfos.at ( 3 ) << endl;
+ /* if ((int)(localInfos.at(1).compare("I"))==0)
+ {
+ cerr << "***\t";
+ }
+ else
+ {
+ // if (m<ref.size())
+ {
+ cerr << ref.at(m) << "\t";
+ }
+ m++;
+ }
+ */
+ k++;
+ }
+ cerr << endl;
+ /* k=local.size()-1;
+ l=0;
+ while (k>0)
+ {
+ alignmentElement localInfos;
+ localInfos=local.at(k-1);
+ // l_WERalignment.push_back(localInfos);
+ if ((int)(localInfos.at(1).compare("D"))==0)
+ {
+ cerr << "***\t";
+ }
+ else
+ {
+ cerr << hyp.at(l) << "\t";
+ l++;
+ }
+ k--;
+ }
+ cerr<<endl;*/
+ cerr << "=================" << endl;
+ return retour;
+}
+
+// string terCalc::vectorToString(vector<string> vec)
+// {
+// string retour("");
+// for (vector<string>::iterator vecIter=vec.begin();vecIter!=vec.end(); vecIter++)
+// {
+// retour+=(*vecIter)+"\t";
+// }
+// return retour;
+// }
+
+// vector<string> terCalc::subVector(vector<string> vec, int start, int end)
+// {
+// if (start>end)
+// {
+// cerr << "ERREUR : terCalc::subVector : end > start"<<endl;
+// exit(0);
+// }
+// vector<string> retour;
+// for (int i=start; ((i<end) && (i< vec.size())); i++)
+// {
+// retour.push_back(vec.at(i));
+// }
+// return retour;
+// }
+
+hashMapInfos terCalc::BuildWordMatches ( vector<string> hyp, vector<string> ref )
+{
+ hashMap tempHash;
+ hashMapInfos retour;
+ for ( int i = 0; i < ( int ) hyp.size(); i++ ) {
+ tempHash.addHasher ( hyp.at ( i ), "" );
+ }
+ bool cor[ref.size() ];
+ for ( int i = 0; i < ( int ) ref.size(); i++ ) {
+ if ( tempHash.trouve ( ( string ) ref.at ( i ) ) ) {
+ cor[i] = true;
+ } else {
+ cor[i] = false;
+ }
+ }
+ for ( int start = 0; start < ( int ) ref.size(); start++ ) {
+ if ( cor[start] ) {
+ for ( int end = start; ( ( end < ( int ) ref.size() ) && ( end - start <= MAX_SHIFT_SIZE ) && ( cor[end] ) ); end++ ) {
+ vector<string> ajouter = subVector ( ref, start, end + 1 );
+ string ajouterString = vectorToString ( ajouter );
+ vector<int> values = retour.getValue ( ajouterString );
+ values.push_back ( start );
+ if ( values.size() > 1 ) {
+ retour.setValue ( ajouterString, values );
+ } else {
+ retour.addValue ( ajouterString, values );
+ }
+ }
+ }
+ }
+ return retour;
+}
+
+bool terCalc::spanIntersection ( vecInt refSpan, vecInt hypSpan )
+{
+ if ( ( refSpan.at ( 1 ) >= hypSpan.at ( 0 ) ) && ( refSpan.at ( 0 ) <= hypSpan.at ( 1 ) ) ) {
+ return true;
+ }
+ return false;
+}
+
+
+terAlignment terCalc::MinEditDist ( vector<string> hyp, vector<string> ref, vector<vecInt> curHypSpans )
+{
+ double current_best = INF;
+ double last_best = INF;
+ int first_good = 0;
+ int current_first_good = 0;
+ int last_good = -1;
+ int cur_last_good = 0;
+ int last_peak = 0;
+ int cur_last_peak = 0;
+ int i, j;
+ double cost, icost, dcost;
+ double score;
+
+// int hwsize = hyp.size()-1;
+// int rwsize = ref.size()-1;
+ NUM_BEAM_SEARCH_CALLS++;
+// if ((ref.size()+1 > sizeof(S)) || (hyp.size()+1 > sizeof(S)))
+// {
+// int max = ref.size();
+// if (hyp.size() > ref.size()) max = hyp.size();
+// max += 26; // we only need a +1 here, but let's pad for future use
+// S = new double[max][max];
+// P = new char[max][max];
+// }
+ for ( i = 0; i <= ( int ) ref.size(); i++ ) {
+ for ( j = 0; j <= ( int ) hyp.size(); j++ ) {
+ S[i][j] = -1.0;
+ P[i][j] = '0';
+ }
+ }
+ S[0][0] = 0.0;
+ for ( j = 0; j <= ( int ) hyp.size(); j++ ) {
+ last_best = current_best;
+ current_best = INF;
+ first_good = current_first_good;
+ current_first_good = -1;
+ last_good = cur_last_good;
+ cur_last_good = -1;
+ last_peak = cur_last_peak;
+ cur_last_peak = 0;
+ for ( i = first_good; i <= ( int ) ref.size(); i++ ) {
+ if ( i > last_good ) {
+ break;
+ }
+ if ( S[i][j] < 0 ) {
+ continue;
+ }
+ score = S[i][j];
+ if ( ( j < ( int ) hyp.size() ) && ( score > last_best + BEAM_WIDTH ) ) {
+ continue;
+ }
+ if ( current_first_good == -1 ) {
+ current_first_good = i ;
+ }
+ if ( ( i < ( int ) ref.size() ) && ( j < ( int ) hyp.size() ) ) {
+ if ( ( int ) refSpans.size() == 0 || ( int ) hypSpans.size() == 0 || spanIntersection ( refSpans.at ( i ), curHypSpans.at ( j ) ) ) {
+ if ( ( int ) ( ref.at ( i ).compare ( hyp.at ( j ) ) ) == 0 ) {
+ cost = match_cost + score;
+ if ( ( S[i+1][j+1] == -1 ) || ( cost < S[i+1][j+1] ) ) {
+ S[i+1][j+1] = cost;
+ P[i+1][j+1] = ' ';
+ }
+ if ( cost < current_best ) {
+ current_best = cost;
+ }
+ if ( current_best == cost ) {
+ cur_last_peak = i + 1;
+ }
+ } else {
+ cost = substitute_cost + score;
+ if ( ( S[i+1][j+1] < 0 ) || ( cost < S[i+1][j+1] ) ) {
+ S[i+1][j+1] = cost;
+ P[i+1][j+1] = 'S';
+ if ( cost < current_best ) {
+ current_best = cost;
+ }
+ if ( current_best == cost ) {
+ cur_last_peak = i + 1 ;
+ }
+ }
+ }
+ }
+ }
+ cur_last_good = i + 1;
+ if ( j < ( int ) hyp.size() ) {
+ icost = score + insert_cost;
+ if ( ( S[i][j+1] < 0 ) || ( S[i][j+1] > icost ) ) {
+ S[i][j+1] = icost;
+ P[i][j+1] = 'I';
+ if ( ( cur_last_peak < i ) && ( current_best == icost ) ) {
+ cur_last_peak = i;
+ }
+ }
+ }
+ if ( i < ( int ) ref.size() ) {
+ dcost = score + delete_cost;
+ if ( ( S[ i+1][ j] < 0.0 ) || ( S[i+1][j] > dcost ) ) {
+ S[i+1][j] = dcost;
+ P[i+1][j] = 'D';
+ if ( i >= last_good ) {
+ last_good = i + 1 ;
+ }
+ }
+ }
+ }
+ }
+
+
+ int tracelength = 0;
+ i = ref.size();
+ j = hyp.size();
+ while ( ( i > 0 ) || ( j > 0 ) ) {
+ tracelength++;
+ if ( P[i][j] == ' ' ) {
+ i--;
+ j--;
+ } else if ( P[i][j] == 'S' ) {
+ i--;
+ j--;
+ } else if ( P[i][j] == 'D' ) {
+ i--;
+ } else if ( P[i][j] == 'I' ) {
+ j--;
+ } else {
+ cerr << "ERROR : terCalc::MinEditDist : Invalid path : " << P[i][j] << endl;
+ exit ( -1 );
+ }
+ }
+ vector<char> path ( tracelength );
+ i = ref.size();
+ j = hyp.size();
+ while ( ( i > 0 ) || ( j > 0 ) ) {
+ path[--tracelength] = P[i][j];
+ if ( P[i][j] == ' ' ) {
+ i--;
+ j--;
+ } else if ( P[i][j] == 'S' ) {
+ i--;
+ j--;
+ } else if ( P[i][j] == 'D' ) {
+ i--;
+ } else if ( P[i][j] == 'I' ) {
+ j--;
+ }
+ }
+ terAlignment to_return;
+ to_return.numWords = ref.size();
+ to_return.alignment = path;
+ to_return.numEdits = S[ref.size() ][hyp.size() ];
+ if ( PRINT_DEBUG ) {
+ cerr << "BEGIN DEBUG : terCalc::MinEditDist : to_return :" << endl << to_return.toString() << endl << "END DEBUG" << endl;
+ }
+ return to_return;
+
+}
+terAlignment terCalc::TER ( vector<string> hyp, vector<string> ref )
+{
+ hashMapInfos rloc = BuildWordMatches ( hyp, ref );
+ terAlignment cur_align = MinEditDist ( hyp, ref, hypSpans );
+ vector<string> cur = hyp;
+ cur_align.hyp = hyp;
+ cur_align.ref = ref;
+ cur_align.aftershift = hyp;
+ double edits = 0;
+// int numshifts = 0;
+
+ vector<terShift> allshifts;
+
+// cerr << "Initial Alignment:" << endl << cur_align.toString() <<endl;
+ if ( PRINT_DEBUG ) {
+ cerr << "BEGIN DEBUG : terCalc::TER : cur_align :" << endl << cur_align.toString() << endl << "END DEBUG" << endl;
+ }
+ while ( true ) {
+ bestShiftStruct returns;
+ returns = CalcBestShift ( cur, hyp, ref, rloc, cur_align );
+ if ( returns.m_empty ) {
+ break;
+ }
+ terShift bestShift = returns.m_best_shift;
+ cur_align = returns.m_best_align;
+ edits += bestShift.cost;
+ bestShift.alignment = cur_align.alignment;
+ bestShift.aftershift = cur_align.aftershift;
+ allshifts.push_back ( bestShift );
+ cur = cur_align.aftershift;
+ }
+ terAlignment to_return;
+ to_return = cur_align;
+ to_return.allshifts = allshifts;
+ to_return.numEdits += edits;
+ NUM_SEGMENTS_SCORED++;
+ return to_return;
+}
+bestShiftStruct terCalc::CalcBestShift ( vector<string> cur, vector<string> hyp, vector<string> ref, hashMapInfos rloc, terAlignment med_align )
+{
+ bestShiftStruct to_return;
+ bool anygain = false;
+ bool herr[ ( int ) hyp.size() ];
+ bool rerr[ ( int ) ref.size() ];
+ int ralign[ ( int ) ref.size() ];
+ FindAlignErr ( med_align, herr, rerr, ralign );
+ vector<vecTerShift> poss_shifts;
+ poss_shifts = GatherAllPossShifts ( cur, ref, rloc, med_align, herr, rerr, ralign );
+ double curerr = med_align.numEdits;
+ if ( PRINT_DEBUG ) {
+ cerr << "BEGIN DEBUG : terCalc::CalcBestShift :" << endl;
+ cerr << "Possible Shifts:" << endl;
+ for ( int i = ( int ) poss_shifts.size() - 1; i >= 0; i-- ) {
+ for ( int j = 0; j < ( int ) ( poss_shifts.at ( i ) ).size(); j++ ) {
+ cerr << " [" << i << "] " << ( ( poss_shifts.at ( i ) ).at ( j ) ).toString() << endl;
+ }
+ }
+ cerr << endl;
+ cerr << "END DEBUG " << endl;
+ }
+ double cur_best_shift_cost = 0.0;
+ terAlignment cur_best_align = med_align;
+ terShift cur_best_shift;
+
+
+
+ for ( int i = ( int ) poss_shifts.size() - 1; i >= 0; i-- ) {
+ if ( PRINT_DEBUG ) {
+ cerr << "BEGIN DEBUG : terCalc::CalcBestShift :" << endl;
+ cerr << "Considering shift of length " << i << " (" << ( poss_shifts.at ( i ) ).size() << ")" << endl;
+ cerr << "END DEBUG " << endl;
+ }
+ /* Consider shifts of length i+1 */
+ double curfix = curerr - ( cur_best_shift_cost + cur_best_align.numEdits );
+ double maxfix = ( 2 * ( 1 + i ) );
+ if ( ( curfix > maxfix ) || ( ( cur_best_shift_cost != 0 ) && ( curfix == maxfix ) ) ) {
+ break;
+ }
+
+ for ( int s = 0; s < ( int ) ( poss_shifts.at ( i ) ).size(); s++ ) {
+ curfix = curerr - ( cur_best_shift_cost + cur_best_align.numEdits );
+ if ( ( curfix > maxfix ) || ( ( cur_best_shift_cost != 0 ) && ( curfix == maxfix ) ) ) {
+ break;
+ }
+ terShift curshift = ( poss_shifts.at ( i ) ).at ( s );
+
+ alignmentStruct shiftReturns = PerformShift ( cur, curshift );
+ vector<string> shiftarr = shiftReturns.nwords;
+ vector<vecInt> curHypSpans = shiftReturns.aftershift;
+
+ terAlignment curalign = MinEditDist ( shiftarr, ref, curHypSpans );
+
+ curalign.hyp = hyp;
+ curalign.ref = ref;
+ curalign.aftershift = shiftarr;
+
+ double gain = ( cur_best_align.numEdits + cur_best_shift_cost ) - ( curalign.numEdits + curshift.cost );
+
+ // if (DEBUG) {
+ // string testeuh=terAlignment join(" ", shiftarr);
+ if ( PRINT_DEBUG ) {
+ cerr << "BEGIN DEBUG : terCalc::CalcBestShift :" << endl;
+ cerr << "Gain for " << curshift.toString() << " is " << gain << ". (result: [" << curalign.join ( " ", shiftarr ) << "]" << endl;
+ cerr << "" << curalign.toString() << "\n" << endl;
+ cerr << "END DEBUG " << endl;
+ }
+ // }
+ //
+ if ( ( gain > 0 ) || ( ( cur_best_shift_cost == 0 ) && ( gain == 0 ) ) ) {
+ anygain = true;
+ cur_best_shift = curshift;
+ cur_best_shift_cost = curshift.cost;
+ cur_best_align = curalign;
+ // if (DEBUG)
+ if ( PRINT_DEBUG ) {
+ cerr << "BEGIN DEBUG : terCalc::CalcBestShift :" << endl;
+ cerr << "Tmp Choosing shift: " << cur_best_shift.toString() << " gives:\n" << cur_best_align.toString() << "\n" << endl;
+ cerr << "END DEBUG " << endl;
+ }
+ }
+ }
+ }
+ if ( anygain ) {
+ to_return.m_best_shift = cur_best_shift;
+ to_return.m_best_align = cur_best_align;
+ to_return.m_empty = false;
+ } else {
+ to_return.m_empty = true;
+ }
+ return to_return;
+}
+
+void terCalc::FindAlignErr ( terAlignment align, bool* herr, bool* rerr, int* ralign )
+{
+ int hpos = -1;
+ int rpos = -1;
+ if ( PRINT_DEBUG ) {
+
+ cerr << "BEGIN DEBUG : terCalc::FindAlignErr : " << endl << align.toString() << endl;
+ cerr << "END DEBUG " << endl;
+ }
+ for ( int i = 0; i < ( int ) align.alignment.size(); i++ ) {
+ char sym = align.alignment[i];
+ if ( sym == ' ' ) {
+ hpos++;
+ rpos++;
+ herr[hpos] = false;
+ rerr[rpos] = false;
+ ralign[rpos] = hpos;
+ } else if ( sym == 'S' ) {
+ hpos++;
+ rpos++;
+ herr[hpos] = true;
+ rerr[rpos] = true;
+ ralign[rpos] = hpos;
+ } else if ( sym == 'I' ) {
+ hpos++;
+ herr[hpos] = true;
+ } else if ( sym == 'D' ) {
+ rpos++;
+ rerr[rpos] = true;
+ ralign[rpos] = hpos;
+ } else {
+ cerr << "ERROR : terCalc::FindAlignErr : Invalid mini align sequence " << sym << " at pos " << i << endl;
+ exit ( -1 );
+ }
+ }
+}
+
+vector<vecTerShift> terCalc::GatherAllPossShifts ( vector<string> hyp, vector<string> ref, hashMapInfos rloc, terAlignment align, bool* herr, bool* rerr, int* ralign )
+{
+ vector<vecTerShift> to_return;
+ // Don't even bother to look if shifts can't be done
+ if ( ( MAX_SHIFT_SIZE <= 0 ) || ( MAX_SHIFT_DIST <= 0 ) ) {
+// terShift[][] to_return = new terShift[0][];
+ return to_return;
+ }
+
+ vector<vecTerShift> allshifts ( MAX_SHIFT_SIZE + 1 );
+
+// ArrayList[] allshifts = new ArrayList[MAX_SHIFT_SIZE+1];
+// for (int i = 0; i < allshifts.length; i++)
+// {
+// allshifts[i] = new ArrayList();
+// }
+
+// List hyplist = Arrays.asList(hyp);
+ for ( int start = 0; start < ( int ) hyp.size(); start++ ) {
+ string subVectorHypString = vectorToString ( subVector ( hyp, start, start + 1 ) );
+ if ( ! rloc.trouve ( subVectorHypString ) ) {
+ continue;
+ }
+
+ bool ok = false;
+ vector<int> mtiVec = rloc.getValue ( subVectorHypString );
+ vector<int>::iterator mti = mtiVec.begin();
+ while ( mti != mtiVec.end() && ( ! ok ) ) {
+ int moveto = ( *mti );
+ mti++;
+ if ( ( start != ralign[moveto] ) && ( ( ralign[moveto] - start ) <= MAX_SHIFT_DIST ) && ( ( start - ralign[moveto] - 1 ) <= MAX_SHIFT_DIST ) ) {
+ ok = true;
+ }
+ }
+ if ( ! ok ) {
+ continue;
+ }
+ ok = true;
+ for ( int end = start; ( ok && ( end < ( int ) hyp.size() ) && ( end < start + MAX_SHIFT_SIZE ) ); end++ ) {
+ /* check if cand is good if so, add it */
+ vector<string> cand = subVector ( hyp, start, end + 1 );
+ ok = false;
+ if ( ! ( rloc.trouve ( vectorToString ( cand ) ) ) ) {
+ continue;
+ }
+
+ bool any_herr = false;
+
+ for ( int i = 0; ( ( i <= ( end - start ) ) && ( ! any_herr ) ); i++ ) {
+ if ( herr[start+i] ) {
+ any_herr = true;
+ }
+ }
+ if ( any_herr == false ) {
+ ok = true;
+ continue;
+ }
+
+ vector<int> movetoitVec;
+ movetoitVec = rloc.getValue ( ( string ) vectorToString ( cand ) );
+ vector<int>::iterator movetoit = movetoitVec.begin();
+ while ( movetoit != movetoitVec.end() ) {
+ int moveto = ( *movetoit );
+ movetoit++;
+ if ( ! ( ( ralign[moveto] != start ) && ( ( ralign[moveto] < start ) || ( ralign[moveto] > end ) ) && ( ( ralign[moveto] - start ) <= MAX_SHIFT_DIST ) && ( ( start - ralign[moveto] ) <= MAX_SHIFT_DIST ) ) ) {
+ continue;
+ }
+ ok = true;
+
+ /* check to see if there are any errors in either string
+ (only move if this is the case!)
+ */
+
+ bool any_rerr = false;
+ for ( int i = 0; ( i <= end - start ) && ( ! any_rerr ); i++ ) {
+ if ( rerr[moveto+i] ) {
+ any_rerr = true;
+ }
+ }
+ if ( ! any_rerr ) {
+ continue;
+ }
+ for ( int roff = -1; roff <= ( end - start ); roff++ ) {
+ terShift topush;
+ bool topushNull = true;
+ if ( ( roff == -1 ) && ( moveto == 0 ) ) {
+ if ( PRINT_DEBUG ) {
+
+ cerr << "BEGIN DEBUG : terCalc::GatherAllPossShifts 01 : " << endl << "Consider making " << start << "..." << end << " moveto: " << moveto << " roff: " << roff << " ralign[mt+roff]: -1" << endl << "END DEBUG" << endl;
+ }
+ terShift t01 ( start, end, -1, -1 );
+ topush = t01;
+ topushNull = false;
+ } else if ( ( start != ralign[moveto+roff] ) && ( ( roff == 0 ) || ( ralign[moveto+roff] != ralign[moveto] ) ) ) {
+ int newloc = ralign[moveto+roff];
+ if ( PRINT_DEBUG ) {
+
+ cerr << "BEGIN DEBUG : terCalc::GatherAllPossShifts 02 : " << endl << "Consider making " << start << "..." << end << " moveto: " << moveto << " roff: " << roff << " ralign[mt+roff]: " << newloc << endl << "END DEBUG" << endl;
+ }
+ terShift t02 ( start, end, moveto + roff, newloc );
+ topush = t02;
+ topushNull = false;
+ }
+ if ( !topushNull ) {
+ topush.shifted = cand;
+ topush.cost = shift_cost;
+ if ( PRINT_DEBUG ) {
+
+ cerr << "BEGIN DEBUG : terCalc::GatherAllPossShifts 02 : " << endl;
+ cerr << "start : " << start << endl;
+ cerr << "end : " << end << endl;
+ cerr << "end - start : " << end - start << endl;
+ cerr << "END DEBUG " << endl;
+ }
+ ( allshifts.at ( end - start ) ).push_back ( topush );
+ }
+ }
+ }
+ }
+ }
+// vector<vecTerShift> to_return;
+ to_return.clear();
+// terShift[][] to_return = new terShift[MAX_SHIFT_SIZE+1][];
+ for ( int i = 0; i < MAX_SHIFT_SIZE + 1; i++ ) {
+// to_return[i] = (terShift[]) allshifts[i].toArray(new terShift[0]);
+ to_return.push_back ( ( vecTerShift ) allshifts.at ( i ) );
+ }
+ return to_return;
+}
+
+
+alignmentStruct terCalc::PerformShift ( vector<string> words, terShift s )
+{
+ return PerformShift ( words, s.start, s.end, s.newloc );
+}
+
+
+alignmentStruct terCalc::PerformShift ( vector<string> words, int start, int end, int newloc )
+{
+ int c = 0;
+ vector<string> nwords ( words );
+ vector<vecInt> spans ( ( int ) hypSpans.size() );
+ alignmentStruct toreturn;
+// ON EST ICI
+// if((int)hypSpans.size()>0) spans = new TERintpair[(int)hypSpans.size()];
+// if(DEBUG) {
+ if ( PRINT_DEBUG ) {
+
+ if ( ( int ) hypSpans.size() > 0 ) {
+ cerr << "BEGIN DEBUG : terCalc::PerformShift :" << endl << "word length: " << ( int ) words.size() << " span length: " << ( int ) hypSpans.size() << endl << "END DEBUG " << endl;
+ } else {
+ cerr << "BEGIN DEBUG : terCalc::PerformShift :" << endl << "word length: " << ( int ) words.size() << " span length: null" << endl << "END DEBUG " << endl;
+ }
+ }
+// }
+
+ if ( newloc == -1 ) {
+ for ( int i = start; i <= end; i++ ) {
+ nwords.at ( c++ ) = words.at ( i );
+ if ( ( int ) hypSpans.size() > 0 ) {
+ spans.at ( c - 1 ) = hypSpans.at ( i );
+ }
+ }
+ for ( int i = 0; i <= start - 1; i++ ) {
+ nwords.at ( c++ ) = words.at ( i );
+ if ( ( int ) hypSpans.size() > 0 ) {
+ spans.at ( c - 1 ) = hypSpans.at ( i );
+ }
+ }
+ for ( int i = end + 1; i < ( int ) words.size(); i++ ) {
+ nwords.at ( c++ ) = words.at ( i );
+ if ( ( int ) hypSpans.size() > 0 ) {
+ spans.at ( c - 1 ) = hypSpans.at ( i );
+ }
+ }
+ } else {
+ if ( newloc < start ) {
+ for ( int i = 0; i <= newloc; i++ ) {
+ nwords.at ( c++ ) = words.at ( i );
+ if ( ( int ) hypSpans.size() > 0 ) {
+ spans.at ( c - 1 ) = hypSpans.at ( i );
+ }
+ }
+ for ( int i = start; i <= end; i++ ) {
+ nwords.at ( c++ ) = words.at ( i );
+ if ( ( int ) hypSpans.size() > 0 ) {
+ spans.at ( c - 1 ) = hypSpans.at ( i );
+ }
+ }
+ for ( int i = newloc + 1; i <= start - 1; i++ ) {
+ nwords.at ( c++ ) = words.at ( i );
+ if ( ( int ) hypSpans.size() > 0 ) {
+ spans.at ( c - 1 ) = hypSpans.at ( i );
+ }
+ }
+ for ( int i = end + 1; i < ( int ) words.size(); i++ ) {
+ nwords.at ( c++ ) = words.at ( i );
+ if ( ( int ) hypSpans.size() > 0 ) {
+ spans.at ( c - 1 ) = hypSpans.at ( i );
+ }
+ }
+ } else {
+ if ( newloc > end ) {
+ for ( int i = 0; i <= start - 1; i++ ) {
+ nwords.at ( c++ ) = words.at ( i );
+ if ( ( int ) hypSpans.size() > 0 ) {
+ spans.at ( c - 1 ) = hypSpans.at ( i );
+ }
+ }
+ for ( int i = end + 1; i <= newloc; i++ ) {
+ nwords.at ( c++ ) = words.at ( i );
+ if ( ( int ) hypSpans.size() > 0 ) {
+ spans.at ( c - 1 ) = hypSpans.at ( i );
+ }
+ }
+ for ( int i = start; i <= end; i++ ) {
+ nwords.at ( c++ ) = words.at ( i );
+ if ( ( int ) hypSpans.size() > 0 ) {
+ spans.at ( c - 1 ) = hypSpans.at ( i );
+ }
+ }
+ for ( int i = newloc + 1; i < ( int ) words.size(); i++ ) {
+ nwords.at ( c++ ) = words.at ( i );
+ if ( ( int ) hypSpans.size() > 0 ) {
+ spans.at ( c - 1 ) = hypSpans.at ( i );
+ }
+ }
+ } else {
+ // we are moving inside of ourselves
+ for ( int i = 0; i <= start - 1; i++ ) {
+ nwords.at ( c++ ) = words.at ( i );
+ if ( ( int ) hypSpans.size() > 0 ) {
+ spans.at ( c - 1 ) = hypSpans.at ( i );
+ }
+ }
+ for ( int i = end + 1; ( i < ( int ) words.size() ) && ( i <= ( end + ( newloc - start ) ) ); i++ ) {
+ nwords.at ( c++ ) = words.at ( i );
+ if ( ( int ) hypSpans.size() > 0 ) {
+ spans.at ( c - 1 ) = hypSpans.at ( i );
+ }
+ }
+ for ( int i = start; i <= end; i++ ) {
+ nwords.at ( c++ ) = words.at ( i );
+ if ( ( int ) hypSpans.size() > 0 ) {
+ spans.at ( c - 1 ) = hypSpans.at ( i );
+ }
+ }
+ for ( int i = ( end + ( newloc - start ) + 1 ); i < ( int ) words.size(); i++ ) {
+ nwords.at ( c++ ) = words.at ( i );
+ if ( ( int ) hypSpans.size() > 0 ) {
+ spans.at ( c - 1 ) = hypSpans.at ( i );
+ }
+ }
+ }
+ }
+ }
+ NUM_SHIFTS_CONSIDERED++;
+
+ toreturn.nwords = nwords;
+ toreturn.aftershift = spans;
+ return toreturn;
+}
+void terCalc::setDebugMode ( bool b )
+{
+ PRINT_DEBUG = b;
+}
+
+}
diff --git a/mert/TERsrc/tercalc.h b/mert/TERsrc/tercalc.h
new file mode 100644
index 000000000..e66d75a98
--- /dev/null
+++ b/mert/TERsrc/tercalc.h
@@ -0,0 +1,82 @@
+#ifndef _TERCPPTERCALC_H___
+#define _TERCPPTERCALC_H___
+
+#include <vector>
+#include <stdio.h>
+#include <string.h>
+#include <sstream>
+#include "hashMap.h"
+#include "hashMapInfos.h"
+#include "hashMapStringInfos.h"
+#include "terAlignment.h"
+#include "tools.h"
+#include "terShift.h"
+#include "alignmentStruct.h"
+#include "bestShiftStruct.h"
+
+using namespace std;
+using namespace Tools;
+using namespace HashMapSpace;
+namespace TERCpp
+{
+// typedef size_t WERelement[2];
+// Vecteur d'alignement contenant le hash du mot et son evaluation (0=ok, 1=sub, 2=ins, 3=del)
+typedef vector<terShift> vecTerShift;
+/**
+ @author
+*/
+class terCalc
+{
+private :
+// Vecteur d'alignement contenant le hash du mot et son evaluation (0=ok, 1=sub, 2=ins, 3=del)
+ WERalignment l_WERalignment;
+// HashMap contenant les caleurs de hash de chaque mot
+ hashMap bagOfWords;
+ int MAX_SHIFT_SIZE;
+ /* Variables for some internal counting. */
+ int NUM_SEGMENTS_SCORED;
+ int NUM_SHIFTS_CONSIDERED;
+ int NUM_BEAM_SEARCH_CALLS;
+ int MAX_SHIFT_DIST;
+ bool PRINT_DEBUG;
+
+ /* These are resized by the MIN_EDIT_DIST code if they aren't big enough */
+ double S[1000][1000];
+ char P[1000][1000];
+ vector<vecInt> refSpans;
+ vector<vecInt> hypSpans;
+ int BEAM_WIDTH;
+
+public:
+ int shift_cost;
+ int insert_cost;
+ int delete_cost;
+ int substitute_cost;
+ int match_cost;
+ double INF;
+ terCalc();
+
+// ~terCalc();
+// size_t* hashVec ( vector<string> s );
+ void setDebugMode ( bool b );
+ int WERCalculation ( size_t * ref, size_t * hyp );
+ int WERCalculation ( vector<string> ref, vector<string> hyp );
+ int WERCalculation ( vector<int> ref, vector<int> hyp );
+// string vectorToString(vector<string> vec);
+// vector<string> subVector(vector<string> vec, int start, int end);
+ hashMapInfos BuildWordMatches ( vector<string> hyp, vector<string> ref );
+ terAlignment MinEditDist ( vector<string> hyp, vector<string> ref, vector<vecInt> curHypSpans );
+ bool spanIntersection ( vecInt refSpan, vecInt hypSpan );
+ terAlignment TER ( vector<string> hyp, vector<string> ref , float avRefLength );
+ terAlignment TER ( vector<string> hyp, vector<string> ref );
+ terAlignment TER ( vector<int> hyp, vector<int> ref );
+ bestShiftStruct CalcBestShift ( vector<string> cur, vector<string> hyp, vector<string> ref, hashMapInfos rloc, terAlignment cur_align );
+ void FindAlignErr ( terAlignment align, bool* herr, bool* rerr, int* ralign );
+ vector<vecTerShift> GatherAllPossShifts ( vector<string> hyp, vector<string> ref, hashMapInfos rloc, terAlignment align, bool* herr, bool* rerr, int* ralign );
+ alignmentStruct PerformShift ( vector<string> words, terShift s );
+ alignmentStruct PerformShift ( vector<string> words, int start, int end, int newloc );
+};
+
+}
+
+#endif
diff --git a/mert/TERsrc/tinystr.cpp b/mert/TERsrc/tinystr.cpp
new file mode 100644
index 000000000..5b547ffb8
--- /dev/null
+++ b/mert/TERsrc/tinystr.cpp
@@ -0,0 +1,111 @@
+/*
+www.sourceforge.net/projects/tinyxml
+Original file by Yves Berquin.
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must
+not claim that you wrote the original software. If you use this
+software in a product, an acknowledgment in the product documentation
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source
+distribution.
+*/
+
+/*
+ * THIS FILE WAS ALTERED BY Tyge Løvset, 7. April 2005.
+ */
+
+
+#ifndef TIXML_USE_STL
+
+#include "tinystr.h"
+
+// Error value for find primitive
+const TiXmlString::size_type TiXmlString::npos = static_cast< TiXmlString::size_type >(-1);
+
+
+// Null rep.
+TiXmlString::Rep TiXmlString::nullrep_ = { 0, 0, { '\0' } };
+
+
+void TiXmlString::reserve (size_type cap)
+{
+ if (cap > capacity()) {
+ TiXmlString tmp;
+ tmp.init(length(), cap);
+ memcpy(tmp.start(), data(), length());
+ swap(tmp);
+ }
+}
+
+
+TiXmlString& TiXmlString::assign(const char* str, size_type len)
+{
+ size_type cap = capacity();
+ if (len > cap || cap > 3*(len + 8)) {
+ TiXmlString tmp;
+ tmp.init(len);
+ memcpy(tmp.start(), str, len);
+ swap(tmp);
+ } else {
+ memmove(start(), str, len);
+ set_size(len);
+ }
+ return *this;
+}
+
+
+TiXmlString& TiXmlString::append(const char* str, size_type len)
+{
+ size_type newsize = length() + len;
+ if (newsize > capacity()) {
+ reserve (newsize + capacity());
+ }
+ memmove(finish(), str, len);
+ set_size(newsize);
+ return *this;
+}
+
+
+TiXmlString operator + (const TiXmlString & a, const TiXmlString & b)
+{
+ TiXmlString tmp;
+ tmp.reserve(a.length() + b.length());
+ tmp += a;
+ tmp += b;
+ return tmp;
+}
+
+TiXmlString operator + (const TiXmlString & a, const char* b)
+{
+ TiXmlString tmp;
+ TiXmlString::size_type b_len = static_cast<TiXmlString::size_type>( strlen(b) );
+ tmp.reserve(a.length() + b_len);
+ tmp += a;
+ tmp.append(b, b_len);
+ return tmp;
+}
+
+TiXmlString operator + (const char* a, const TiXmlString & b)
+{
+ TiXmlString tmp;
+ TiXmlString::size_type a_len = static_cast<TiXmlString::size_type>( strlen(a) );
+ tmp.reserve(a_len + b.length());
+ tmp.append(a, a_len);
+ tmp += b;
+ return tmp;
+}
+
+
+#endif // TIXML_USE_STL
diff --git a/mert/TERsrc/tinystr.h b/mert/TERsrc/tinystr.h
new file mode 100644
index 000000000..1a970b00d
--- /dev/null
+++ b/mert/TERsrc/tinystr.h
@@ -0,0 +1,337 @@
+/*
+www.sourceforge.net/projects/tinyxml
+Original file by Yves Berquin.
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must
+not claim that you wrote the original software. If you use this
+software in a product, an acknowledgment in the product documentation
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source
+distribution.
+*/
+
+/*
+ * THIS FILE WAS ALTERED BY Tyge Lovset, 7. April 2005.
+ *
+ * - completely rewritten. compact, clean, and fast implementation.
+ * - sizeof(TiXmlString) = pointer size (4 bytes on 32-bit systems)
+ * - fixed reserve() to work as per specification.
+ * - fixed buggy compares operator==(), operator<(), and operator>()
+ * - fixed operator+=() to take a const ref argument, following spec.
+ * - added "copy" constructor with length, and most compare operators.
+ * - added swap(), clear(), size(), capacity(), operator+().
+ */
+
+#ifndef TIXML_USE_STL
+
+#ifndef TIXML_STRING_INCLUDED
+#define TIXML_STRING_INCLUDED
+
+#include <assert.h>
+#include <string.h>
+
+/* The support for explicit isn't that universal, and it isn't really
+ required - it is used to check that the TiXmlString class isn't incorrectly
+ used. Be nice to old compilers and macro it here:
+*/
+#if defined(_MSC_VER) && (_MSC_VER >= 1200 )
+// Microsoft visual studio, version 6 and higher.
+#define TIXML_EXPLICIT explicit
+#elif defined(__GNUC__) && (__GNUC__ >= 3 )
+// GCC version 3 and higher.s
+#define TIXML_EXPLICIT explicit
+#else
+#define TIXML_EXPLICIT
+#endif
+
+
+/*
+ TiXmlString is an emulation of a subset of the std::string template.
+ Its purpose is to allow compiling TinyXML on compilers with no or poor STL support.
+ Only the member functions relevant to the TinyXML project have been implemented.
+ The buffer allocation is made by a simplistic power of 2 like mechanism : if we increase
+ a string and there's no more room, we allocate a buffer twice as big as we need.
+*/
+class TiXmlString
+{
+public :
+ // The size type used
+ typedef size_t size_type;
+
+ // Error value for find primitive
+ static const size_type npos; // = -1;
+
+
+ // TiXmlString empty constructor
+ TiXmlString () : rep_(&nullrep_) {
+ }
+
+ // TiXmlString copy constructor
+ TiXmlString ( const TiXmlString & copy) : rep_(0) {
+ init(copy.length());
+ memcpy(start(), copy.data(), length());
+ }
+
+ // TiXmlString constructor, based on a string
+ TIXML_EXPLICIT TiXmlString ( const char * copy) : rep_(0) {
+ init( static_cast<size_type>( strlen(copy) ));
+ memcpy(start(), copy, length());
+ }
+
+ // TiXmlString constructor, based on a string
+ TIXML_EXPLICIT TiXmlString ( const char * str, size_type len) : rep_(0) {
+ init(len);
+ memcpy(start(), str, len);
+ }
+
+ // TiXmlString destructor
+ ~TiXmlString () {
+ quit();
+ }
+
+ // = operator
+ TiXmlString& operator = (const char * copy) {
+ return assign( copy, (size_type)strlen(copy));
+ }
+
+ // = operator
+ TiXmlString& operator = (const TiXmlString & copy) {
+ return assign(copy.start(), copy.length());
+ }
+
+
+ // += operator. Maps to append
+ TiXmlString& operator += (const char * suffix) {
+ return append(suffix, static_cast<size_type>( strlen(suffix) ));
+ }
+
+ // += operator. Maps to append
+ TiXmlString& operator += (char single) {
+ return append(&single, 1);
+ }
+
+ // += operator. Maps to append
+ TiXmlString& operator += (const TiXmlString & suffix) {
+ return append(suffix.data(), suffix.length());
+ }
+
+
+ // Convert a TiXmlString into a null-terminated char *
+ const char * c_str () const {
+ return rep_->str;
+ }
+
+ // Convert a TiXmlString into a char * (need not be null terminated).
+ const char * data () const {
+ return rep_->str;
+ }
+
+ // Return the length of a TiXmlString
+ size_type length () const {
+ return rep_->size;
+ }
+
+ // Alias for length()
+ size_type size () const {
+ return rep_->size;
+ }
+
+ // Checks if a TiXmlString is empty
+ bool empty () const {
+ return rep_->size == 0;
+ }
+
+ // Return capacity of string
+ size_type capacity () const {
+ return rep_->capacity;
+ }
+
+
+ // single char extraction
+ const char& at (size_type index) const {
+ assert( index < length() );
+ return rep_->str[ index ];
+ }
+
+ // [] operator
+ char& operator [] (size_type index) const {
+ assert( index < length() );
+ return rep_->str[ index ];
+ }
+
+ // find a char in a string. Return TiXmlString::npos if not found
+ size_type find (char lookup) const {
+ return find(lookup, 0);
+ }
+
+ // find a char in a string from an offset. Return TiXmlString::npos if not found
+ size_type find (char tofind, size_type offset) const {
+ if (offset >= length()) return npos;
+
+ for (const char* p = c_str() + offset; *p != '\0'; ++p) {
+ if (*p == tofind) return static_cast< size_type >( p - c_str() );
+ }
+ return npos;
+ }
+
+ void clear () {
+ //Lee:
+ //The original was just too strange, though correct:
+ // TiXmlString().swap(*this);
+ //Instead use the quit & re-init:
+ quit();
+ init(0,0);
+ }
+
+ /* Function to reserve a big amount of data when we know we'll need it. Be aware that this
+ function DOES NOT clear the content of the TiXmlString if any exists.
+ */
+ void reserve (size_type cap);
+
+ TiXmlString& assign (const char* str, size_type len);
+
+ TiXmlString& append (const char* str, size_type len);
+
+ void swap (TiXmlString& other) {
+ Rep* r = rep_;
+ rep_ = other.rep_;
+ other.rep_ = r;
+ }
+
+private:
+
+ void init(size_type sz) {
+ init(sz, sz);
+ }
+ void set_size(size_type sz) {
+ rep_->str[ rep_->size = sz ] = '\0';
+ }
+ char* start() const {
+ return rep_->str;
+ }
+ char* finish() const {
+ return rep_->str + rep_->size;
+ }
+
+ struct Rep {
+ size_type size, capacity;
+ char str[1];
+ };
+
+ void init(size_type sz, size_type cap) {
+ if (cap) {
+ // Lee: the original form:
+ // rep_ = static_cast<Rep*>(operator new(sizeof(Rep) + cap));
+ // doesn't work in some cases of new being overloaded. Switching
+ // to the normal allocation, although use an 'int' for systems
+ // that are overly picky about structure alignment.
+ const size_type bytesNeeded = sizeof(Rep) + cap;
+ const size_type intsNeeded = ( bytesNeeded + sizeof(int) - 1 ) / sizeof( int );
+ rep_ = reinterpret_cast<Rep*>( new int[ intsNeeded ] );
+
+ rep_->str[ rep_->size = sz ] = '\0';
+ rep_->capacity = cap;
+ } else {
+ rep_ = &nullrep_;
+ }
+ }
+
+ void quit() {
+ if (rep_ != &nullrep_) {
+ // The rep_ is really an array of ints. (see the allocator, above).
+ // Cast it back before delete, so the compiler won't incorrectly call destructors.
+ delete [] ( reinterpret_cast<int*>( rep_ ) );
+ }
+ }
+
+ Rep * rep_;
+ static Rep nullrep_;
+
+} ;
+
+
+inline bool operator == (const TiXmlString & a, const TiXmlString & b)
+{
+ return ( a.length() == b.length() ) // optimization on some platforms
+ && ( strcmp(a.c_str(), b.c_str()) == 0 ); // actual compare
+}
+inline bool operator < (const TiXmlString & a, const TiXmlString & b)
+{
+ return strcmp(a.c_str(), b.c_str()) < 0;
+}
+
+inline bool operator != (const TiXmlString & a, const TiXmlString & b)
+{
+ return !(a == b);
+}
+inline bool operator > (const TiXmlString & a, const TiXmlString & b)
+{
+ return b < a;
+}
+inline bool operator <= (const TiXmlString & a, const TiXmlString & b)
+{
+ return !(b < a);
+}
+inline bool operator >= (const TiXmlString & a, const TiXmlString & b)
+{
+ return !(a < b);
+}
+
+inline bool operator == (const TiXmlString & a, const char* b)
+{
+ return strcmp(a.c_str(), b) == 0;
+}
+inline bool operator == (const char* a, const TiXmlString & b)
+{
+ return b == a;
+}
+inline bool operator != (const TiXmlString & a, const char* b)
+{
+ return !(a == b);
+}
+inline bool operator != (const char* a, const TiXmlString & b)
+{
+ return !(b == a);
+}
+
+TiXmlString operator + (const TiXmlString & a, const TiXmlString & b);
+TiXmlString operator + (const TiXmlString & a, const char* b);
+TiXmlString operator + (const char* a, const TiXmlString & b);
+
+
+/*
+ TiXmlOutStream is an emulation of std::ostream. It is based on TiXmlString.
+ Only the operators that we need for TinyXML have been developped.
+*/
+class TiXmlOutStream : public TiXmlString
+{
+public :
+
+ // TiXmlOutStream << operator.
+ TiXmlOutStream & operator << (const TiXmlString & in) {
+ *this += in;
+ return *this;
+ }
+
+ // TiXmlOutStream << operator.
+ TiXmlOutStream & operator << (const char * in) {
+ *this += in;
+ return *this;
+ }
+
+} ;
+
+#endif // TIXML_STRING_INCLUDED
+#endif // TIXML_USE_STL
diff --git a/mert/TERsrc/tinyxml.cpp b/mert/TERsrc/tinyxml.cpp
new file mode 100644
index 000000000..5f159b725
--- /dev/null
+++ b/mert/TERsrc/tinyxml.cpp
@@ -0,0 +1,1778 @@
+/*
+www.sourceforge.net/projects/tinyxml
+Original code (2.0 and earlier )copyright (c) 2000-2006 Lee Thomason (www.grinninglizard.com)
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must
+not claim that you wrote the original software. If you use this
+software in a product, an acknowledgment in the product documentation
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source
+distribution.
+*/
+
+#include <ctype.h>
+
+#ifdef TIXML_USE_STL
+#include <sstream>
+#include <iostream>
+#endif
+
+#include "tinyxml.h"
+
+
+bool TiXmlBase::condenseWhiteSpace = true;
+
+// Microsoft compiler security
+FILE* TiXmlFOpen( const char* filename, const char* mode )
+{
+#if defined(_MSC_VER) && (_MSC_VER >= 1400 )
+ FILE* fp = 0;
+ errno_t err = fopen_s( &fp, filename, mode );
+ if ( !err && fp )
+ return fp;
+ return 0;
+#else
+ return fopen( filename, mode );
+#endif
+}
+
+void TiXmlBase::EncodeString( const TIXML_STRING& str, TIXML_STRING* outString )
+{
+ int i=0;
+
+ while( i<(int)str.length() ) {
+ unsigned char c = (unsigned char) str[i];
+
+ if ( c == '&'
+ && i < ( (int)str.length() - 2 )
+ && str[i+1] == '#'
+ && str[i+2] == 'x' ) {
+ // Hexadecimal character reference.
+ // Pass through unchanged.
+ // &#xA9; -- copyright symbol, for example.
+ //
+ // The -1 is a bug fix from Rob Laveaux. It keeps
+ // an overflow from happening if there is no ';'.
+ // There are actually 2 ways to exit this loop -
+ // while fails (error case) and break (semicolon found).
+ // However, there is no mechanism (currently) for
+ // this function to return an error.
+ while ( i<(int)str.length()-1 ) {
+ outString->append( str.c_str() + i, 1 );
+ ++i;
+ if ( str[i] == ';' )
+ break;
+ }
+ } else if ( c == '&' ) {
+ outString->append( entity[0].str, entity[0].strLength );
+ ++i;
+ } else if ( c == '<' ) {
+ outString->append( entity[1].str, entity[1].strLength );
+ ++i;
+ } else if ( c == '>' ) {
+ outString->append( entity[2].str, entity[2].strLength );
+ ++i;
+ } else if ( c == '\"' ) {
+ outString->append( entity[3].str, entity[3].strLength );
+ ++i;
+ } else if ( c == '\'' ) {
+ outString->append( entity[4].str, entity[4].strLength );
+ ++i;
+ } else if ( c < 32 ) {
+ // Easy pass at non-alpha/numeric/symbol
+ // Below 32 is symbolic.
+ char buf[ 32 ];
+
+#if defined(TIXML_SNPRINTF)
+ TIXML_SNPRINTF( buf, sizeof(buf), "&#x%02X;", (unsigned) ( c & 0xff ) );
+#else
+ sprintf( buf, "&#x%02X;", (unsigned) ( c & 0xff ) );
+#endif
+
+ //*ME: warning C4267: convert 'size_t' to 'int'
+ //*ME: Int-Cast to make compiler happy ...
+ outString->append( buf, (int)strlen( buf ) );
+ ++i;
+ } else {
+ //char realc = (char) c;
+ //outString->append( &realc, 1 );
+ *outString += (char) c; // somewhat more efficient function call.
+ ++i;
+ }
+ }
+}
+
+
+TiXmlNode::TiXmlNode( NodeType _type ) : TiXmlBase()
+{
+ parent = 0;
+ type = _type;
+ firstChild = 0;
+ lastChild = 0;
+ prev = 0;
+ next = 0;
+}
+
+
+TiXmlNode::~TiXmlNode()
+{
+ TiXmlNode* node = firstChild;
+ TiXmlNode* temp = 0;
+
+ while ( node ) {
+ temp = node;
+ node = node->next;
+ delete temp;
+ }
+}
+
+
+void TiXmlNode::CopyTo( TiXmlNode* target ) const
+{
+ target->SetValue (value.c_str() );
+ target->userData = userData;
+}
+
+
+void TiXmlNode::Clear()
+{
+ TiXmlNode* node = firstChild;
+ TiXmlNode* temp = 0;
+
+ while ( node ) {
+ temp = node;
+ node = node->next;
+ delete temp;
+ }
+
+ firstChild = 0;
+ lastChild = 0;
+}
+
+
+TiXmlNode* TiXmlNode::LinkEndChild( TiXmlNode* node )
+{
+ assert( node->parent == 0 || node->parent == this );
+ assert( node->GetDocument() == 0 || node->GetDocument() == this->GetDocument() );
+
+ if ( node->Type() == TiXmlNode::DOCUMENT ) {
+ delete node;
+ if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN );
+ return 0;
+ }
+
+ node->parent = this;
+
+ node->prev = lastChild;
+ node->next = 0;
+
+ if ( lastChild )
+ lastChild->next = node;
+ else
+ firstChild = node; // it was an empty list.
+
+ lastChild = node;
+ return node;
+}
+
+
+TiXmlNode* TiXmlNode::InsertEndChild( const TiXmlNode& addThis )
+{
+ if ( addThis.Type() == TiXmlNode::DOCUMENT ) {
+ if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN );
+ return 0;
+ }
+ TiXmlNode* node = addThis.Clone();
+ if ( !node )
+ return 0;
+
+ return LinkEndChild( node );
+}
+
+
+TiXmlNode* TiXmlNode::InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis )
+{
+ if ( !beforeThis || beforeThis->parent != this ) {
+ return 0;
+ }
+ if ( addThis.Type() == TiXmlNode::DOCUMENT ) {
+ if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN );
+ return 0;
+ }
+
+ TiXmlNode* node = addThis.Clone();
+ if ( !node )
+ return 0;
+ node->parent = this;
+
+ node->next = beforeThis;
+ node->prev = beforeThis->prev;
+ if ( beforeThis->prev ) {
+ beforeThis->prev->next = node;
+ } else {
+ assert( firstChild == beforeThis );
+ firstChild = node;
+ }
+ beforeThis->prev = node;
+ return node;
+}
+
+
+TiXmlNode* TiXmlNode::InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis )
+{
+ if ( !afterThis || afterThis->parent != this ) {
+ return 0;
+ }
+ if ( addThis.Type() == TiXmlNode::DOCUMENT ) {
+ if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN );
+ return 0;
+ }
+
+ TiXmlNode* node = addThis.Clone();
+ if ( !node )
+ return 0;
+ node->parent = this;
+
+ node->prev = afterThis;
+ node->next = afterThis->next;
+ if ( afterThis->next ) {
+ afterThis->next->prev = node;
+ } else {
+ assert( lastChild == afterThis );
+ lastChild = node;
+ }
+ afterThis->next = node;
+ return node;
+}
+
+
+TiXmlNode* TiXmlNode::ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis )
+{
+ if ( replaceThis->parent != this )
+ return 0;
+
+ TiXmlNode* node = withThis.Clone();
+ if ( !node )
+ return 0;
+
+ node->next = replaceThis->next;
+ node->prev = replaceThis->prev;
+
+ if ( replaceThis->next )
+ replaceThis->next->prev = node;
+ else
+ lastChild = node;
+
+ if ( replaceThis->prev )
+ replaceThis->prev->next = node;
+ else
+ firstChild = node;
+
+ delete replaceThis;
+ node->parent = this;
+ return node;
+}
+
+
+bool TiXmlNode::RemoveChild( TiXmlNode* removeThis )
+{
+ if ( removeThis->parent != this ) {
+ assert( 0 );
+ return false;
+ }
+
+ if ( removeThis->next )
+ removeThis->next->prev = removeThis->prev;
+ else
+ lastChild = removeThis->prev;
+
+ if ( removeThis->prev )
+ removeThis->prev->next = removeThis->next;
+ else
+ firstChild = removeThis->next;
+
+ delete removeThis;
+ return true;
+}
+
+const TiXmlNode* TiXmlNode::FirstChild( const char * _value ) const
+{
+ const TiXmlNode* node;
+ for ( node = firstChild; node; node = node->next ) {
+ if ( strcmp( node->Value(), _value ) == 0 )
+ return node;
+ }
+ return 0;
+}
+
+
+const TiXmlNode* TiXmlNode::LastChild( const char * _value ) const
+{
+ const TiXmlNode* node;
+ for ( node = lastChild; node; node = node->prev ) {
+ if ( strcmp( node->Value(), _value ) == 0 )
+ return node;
+ }
+ return 0;
+}
+
+
+const TiXmlNode* TiXmlNode::IterateChildren( const TiXmlNode* previous ) const
+{
+ if ( !previous ) {
+ return FirstChild();
+ } else {
+ assert( previous->parent == this );
+ return previous->NextSibling();
+ }
+}
+
+
+const TiXmlNode* TiXmlNode::IterateChildren( const char * val, const TiXmlNode* previous ) const
+{
+ if ( !previous ) {
+ return FirstChild( val );
+ } else {
+ assert( previous->parent == this );
+ return previous->NextSibling( val );
+ }
+}
+
+
+const TiXmlNode* TiXmlNode::NextSibling( const char * _value ) const
+{
+ const TiXmlNode* node;
+ for ( node = next; node; node = node->next ) {
+ if ( strcmp( node->Value(), _value ) == 0 )
+ return node;
+ }
+ return 0;
+}
+
+
+const TiXmlNode* TiXmlNode::PreviousSibling( const char * _value ) const
+{
+ const TiXmlNode* node;
+ for ( node = prev; node; node = node->prev ) {
+ if ( strcmp( node->Value(), _value ) == 0 )
+ return node;
+ }
+ return 0;
+}
+
+
+void TiXmlElement::RemoveAttribute( const char * name )
+{
+#ifdef TIXML_USE_STL
+ TIXML_STRING str( name );
+ TiXmlAttribute* node = attributeSet.Find( str );
+#else
+ TiXmlAttribute* node = attributeSet.Find( name );
+#endif
+ if ( node ) {
+ attributeSet.Remove( node );
+ delete node;
+ }
+}
+
+const TiXmlElement* TiXmlNode::FirstChildElement() const
+{
+ const TiXmlNode* node;
+
+ for ( node = FirstChild();
+ node;
+ node = node->NextSibling() ) {
+ if ( node->ToElement() )
+ return node->ToElement();
+ }
+ return 0;
+}
+
+
+const TiXmlElement* TiXmlNode::FirstChildElement( const char * _value ) const
+{
+ const TiXmlNode* node;
+
+ for ( node = FirstChild( _value );
+ node;
+ node = node->NextSibling( _value ) ) {
+ if ( node->ToElement() )
+ return node->ToElement();
+ }
+ return 0;
+}
+
+
+const TiXmlElement* TiXmlNode::NextSiblingElement() const
+{
+ const TiXmlNode* node;
+
+ for ( node = NextSibling();
+ node;
+ node = node->NextSibling() ) {
+ if ( node->ToElement() )
+ return node->ToElement();
+ }
+ return 0;
+}
+
+
+const TiXmlElement* TiXmlNode::NextSiblingElement( const char * _value ) const
+{
+ const TiXmlNode* node;
+
+ for ( node = NextSibling( _value );
+ node;
+ node = node->NextSibling( _value ) ) {
+ if ( node->ToElement() )
+ return node->ToElement();
+ }
+ return 0;
+}
+
+
+const TiXmlDocument* TiXmlNode::GetDocument() const
+{
+ const TiXmlNode* node;
+
+ for( node = this; node; node = node->parent ) {
+ if ( node->ToDocument() )
+ return node->ToDocument();
+ }
+ return 0;
+}
+
+
+TiXmlElement::TiXmlElement (const char * _value)
+ : TiXmlNode( TiXmlNode::ELEMENT )
+{
+ firstChild = lastChild = 0;
+ value = _value;
+}
+
+
+#ifdef TIXML_USE_STL
+TiXmlElement::TiXmlElement( const std::string& _value )
+ : TiXmlNode( TiXmlNode::ELEMENT )
+{
+ firstChild = lastChild = 0;
+ value = _value;
+}
+#endif
+
+
+TiXmlElement::TiXmlElement( const TiXmlElement& copy)
+ : TiXmlNode( TiXmlNode::ELEMENT )
+{
+ firstChild = lastChild = 0;
+ copy.CopyTo( this );
+}
+
+
+void TiXmlElement::operator=( const TiXmlElement& base )
+{
+ ClearThis();
+ base.CopyTo( this );
+}
+
+
+TiXmlElement::~TiXmlElement()
+{
+ ClearThis();
+}
+
+
+void TiXmlElement::ClearThis()
+{
+ Clear();
+ while( attributeSet.First() ) {
+ TiXmlAttribute* node = attributeSet.First();
+ attributeSet.Remove( node );
+ delete node;
+ }
+}
+
+
+const char* TiXmlElement::Attribute( const char* name ) const
+{
+ const TiXmlAttribute* node = attributeSet.Find( name );
+ if ( node )
+ return node->Value();
+ return 0;
+}
+
+
+#ifdef TIXML_USE_STL
+const std::string* TiXmlElement::Attribute( const std::string& name ) const
+{
+ const TiXmlAttribute* node = attributeSet.Find( name );
+ if ( node )
+ return &node->ValueStr();
+ return 0;
+}
+#endif
+
+
+const char* TiXmlElement::Attribute( const char* name, int* i ) const
+{
+ const char* s = Attribute( name );
+ if ( i ) {
+ if ( s ) {
+ *i = atoi( s );
+ } else {
+ *i = 0;
+ }
+ }
+ return s;
+}
+
+
+#ifdef TIXML_USE_STL
+const std::string* TiXmlElement::Attribute( const std::string& name, int* i ) const
+{
+ const std::string* s = Attribute( name );
+ if ( i ) {
+ if ( s ) {
+ *i = atoi( s->c_str() );
+ } else {
+ *i = 0;
+ }
+ }
+ return s;
+}
+#endif
+
+
+const char* TiXmlElement::Attribute( const char* name, double* d ) const
+{
+ const char* s = Attribute( name );
+ if ( d ) {
+ if ( s ) {
+ *d = atof( s );
+ } else {
+ *d = 0;
+ }
+ }
+ return s;
+}
+
+
+#ifdef TIXML_USE_STL
+const std::string* TiXmlElement::Attribute( const std::string& name, double* d ) const
+{
+ const std::string* s = Attribute( name );
+ if ( d ) {
+ if ( s ) {
+ *d = atof( s->c_str() );
+ } else {
+ *d = 0;
+ }
+ }
+ return s;
+}
+#endif
+
+
+int TiXmlElement::QueryIntAttribute( const char* name, int* ival ) const
+{
+ const TiXmlAttribute* node = attributeSet.Find( name );
+ if ( !node )
+ return TIXML_NO_ATTRIBUTE;
+ return node->QueryIntValue( ival );
+}
+
+
+#ifdef TIXML_USE_STL
+int TiXmlElement::QueryIntAttribute( const std::string& name, int* ival ) const
+{
+ const TiXmlAttribute* node = attributeSet.Find( name );
+ if ( !node )
+ return TIXML_NO_ATTRIBUTE;
+ return node->QueryIntValue( ival );
+}
+#endif
+
+
+int TiXmlElement::QueryDoubleAttribute( const char* name, double* dval ) const
+{
+ const TiXmlAttribute* node = attributeSet.Find( name );
+ if ( !node )
+ return TIXML_NO_ATTRIBUTE;
+ return node->QueryDoubleValue( dval );
+}
+
+
+#ifdef TIXML_USE_STL
+int TiXmlElement::QueryDoubleAttribute( const std::string& name, double* dval ) const
+{
+ const TiXmlAttribute* node = attributeSet.Find( name );
+ if ( !node )
+ return TIXML_NO_ATTRIBUTE;
+ return node->QueryDoubleValue( dval );
+}
+#endif
+
+
+void TiXmlElement::SetAttribute( const char * name, int val )
+{
+ char buf[64];
+#if defined(TIXML_SNPRINTF)
+ TIXML_SNPRINTF( buf, sizeof(buf), "%d", val );
+#else
+ sprintf( buf, "%d", val );
+#endif
+ SetAttribute( name, buf );
+}
+
+
+#ifdef TIXML_USE_STL
+void TiXmlElement::SetAttribute( const std::string& name, int val )
+{
+ std::ostringstream oss;
+ oss << val;
+ SetAttribute( name, oss.str() );
+}
+#endif
+
+
+void TiXmlElement::SetDoubleAttribute( const char * name, double val )
+{
+ char buf[256];
+#if defined(TIXML_SNPRINTF)
+ TIXML_SNPRINTF( buf, sizeof(buf), "%f", val );
+#else
+ sprintf( buf, "%f", val );
+#endif
+ SetAttribute( name, buf );
+}
+
+
+void TiXmlElement::SetAttribute( const char * cname, const char * cvalue )
+{
+#ifdef TIXML_USE_STL
+ TIXML_STRING _name( cname );
+ TIXML_STRING _value( cvalue );
+#else
+ const char* _name = cname;
+ const char* _value = cvalue;
+#endif
+
+ TiXmlAttribute* node = attributeSet.Find( _name );
+ if ( node ) {
+ node->SetValue( _value );
+ return;
+ }
+
+ TiXmlAttribute* attrib = new TiXmlAttribute( cname, cvalue );
+ if ( attrib ) {
+ attributeSet.Add( attrib );
+ } else {
+ TiXmlDocument* document = GetDocument();
+ if ( document ) document->SetError( TIXML_ERROR_OUT_OF_MEMORY, 0, 0, TIXML_ENCODING_UNKNOWN );
+ }
+}
+
+
+#ifdef TIXML_USE_STL
+void TiXmlElement::SetAttribute( const std::string& name, const std::string& _value )
+{
+ TiXmlAttribute* node = attributeSet.Find( name );
+ if ( node ) {
+ node->SetValue( _value );
+ return;
+ }
+
+ TiXmlAttribute* attrib = new TiXmlAttribute( name, _value );
+ if ( attrib ) {
+ attributeSet.Add( attrib );
+ } else {
+ TiXmlDocument* document = GetDocument();
+ if ( document ) document->SetError( TIXML_ERROR_OUT_OF_MEMORY, 0, 0, TIXML_ENCODING_UNKNOWN );
+ }
+}
+#endif
+
+
+void TiXmlElement::Print( FILE* cfile, int depth ) const
+{
+ int i;
+ assert( cfile );
+ for ( i=0; i<depth; i++ ) {
+ fprintf( cfile, " " );
+ }
+
+ fprintf( cfile, "<%s", value.c_str() );
+
+ const TiXmlAttribute* attrib;
+ for ( attrib = attributeSet.First(); attrib; attrib = attrib->Next() ) {
+ fprintf( cfile, " " );
+ attrib->Print( cfile, depth );
+ }
+
+ // There are 3 different formatting approaches:
+ // 1) An element without children is printed as a <foo /> node
+ // 2) An element with only a text child is printed as <foo> text </foo>
+ // 3) An element with children is printed on multiple lines.
+ TiXmlNode* node;
+ if ( !firstChild ) {
+ fprintf( cfile, " />" );
+ } else if ( firstChild == lastChild && firstChild->ToText() ) {
+ fprintf( cfile, ">" );
+ firstChild->Print( cfile, depth + 1 );
+ fprintf( cfile, "</%s>", value.c_str() );
+ } else {
+ fprintf( cfile, ">" );
+
+ for ( node = firstChild; node; node=node->NextSibling() ) {
+ if ( !node->ToText() ) {
+ fprintf( cfile, "\n" );
+ }
+ node->Print( cfile, depth+1 );
+ }
+ fprintf( cfile, "\n" );
+ for( i=0; i<depth; ++i ) {
+ fprintf( cfile, " " );
+ }
+ fprintf( cfile, "</%s>", value.c_str() );
+ }
+}
+
+
+void TiXmlElement::CopyTo( TiXmlElement* target ) const
+{
+ // superclass:
+ TiXmlNode::CopyTo( target );
+
+ // Element class:
+ // Clone the attributes, then clone the children.
+ const TiXmlAttribute* attribute = 0;
+ for( attribute = attributeSet.First();
+ attribute;
+ attribute = attribute->Next() ) {
+ target->SetAttribute( attribute->Name(), attribute->Value() );
+ }
+
+ TiXmlNode* node = 0;
+ for ( node = firstChild; node; node = node->NextSibling() ) {
+ target->LinkEndChild( node->Clone() );
+ }
+}
+
+bool TiXmlElement::Accept( TiXmlVisitor* visitor ) const
+{
+ if ( visitor->VisitEnter( *this, attributeSet.First() ) ) {
+ for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) {
+ if ( !node->Accept( visitor ) )
+ break;
+ }
+ }
+ return visitor->VisitExit( *this );
+}
+
+
+TiXmlNode* TiXmlElement::Clone() const
+{
+ TiXmlElement* clone = new TiXmlElement( Value() );
+ if ( !clone )
+ return 0;
+
+ CopyTo( clone );
+ return clone;
+}
+
+
+const char* TiXmlElement::GetText() const
+{
+ const TiXmlNode* child = this->FirstChild();
+ if ( child ) {
+ const TiXmlText* childText = child->ToText();
+ if ( childText ) {
+ return childText->Value();
+ }
+ }
+ return 0;
+}
+
+
+TiXmlDocument::TiXmlDocument() : TiXmlNode( TiXmlNode::DOCUMENT )
+{
+ tabsize = 4;
+ useMicrosoftBOM = false;
+ ClearError();
+}
+
+TiXmlDocument::TiXmlDocument( const char * documentName ) : TiXmlNode( TiXmlNode::DOCUMENT )
+{
+ tabsize = 4;
+ useMicrosoftBOM = false;
+ value = documentName;
+ ClearError();
+}
+
+
+#ifdef TIXML_USE_STL
+TiXmlDocument::TiXmlDocument( const std::string& documentName ) : TiXmlNode( TiXmlNode::DOCUMENT )
+{
+ tabsize = 4;
+ useMicrosoftBOM = false;
+ value = documentName;
+ ClearError();
+}
+#endif
+
+
+TiXmlDocument::TiXmlDocument( const TiXmlDocument& copy ) : TiXmlNode( TiXmlNode::DOCUMENT )
+{
+ copy.CopyTo( this );
+}
+
+
+void TiXmlDocument::operator=( const TiXmlDocument& copy )
+{
+ Clear();
+ copy.CopyTo( this );
+}
+
+
+bool TiXmlDocument::LoadFile( TiXmlEncoding encoding )
+{
+ // See STL_STRING_BUG below.
+ //StringToBuffer buf( value );
+
+ return LoadFile( Value(), encoding );
+}
+
+
+bool TiXmlDocument::SaveFile() const
+{
+ // See STL_STRING_BUG below.
+// StringToBuffer buf( value );
+//
+// if ( buf.buffer && SaveFile( buf.buffer ) )
+// return true;
+//
+// return false;
+ return SaveFile( Value() );
+}
+
+bool TiXmlDocument::LoadFile( const char* _filename, TiXmlEncoding encoding )
+{
+ // There was a really terrifying little bug here. The code:
+ // value = filename
+ // in the STL case, cause the assignment method of the std::string to
+ // be called. What is strange, is that the std::string had the same
+ // address as it's c_str() method, and so bad things happen. Looks
+ // like a bug in the Microsoft STL implementation.
+ // Add an extra string to avoid the crash.
+ TIXML_STRING filename( _filename );
+ value = filename;
+
+ // reading in binary mode so that tinyxml can normalize the EOL
+ FILE* file = TiXmlFOpen( value.c_str (), "rb" );
+
+ if ( file ) {
+ bool result = LoadFile( file, encoding );
+ fclose( file );
+ return result;
+ } else {
+ SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN );
+ return false;
+ }
+}
+
+bool TiXmlDocument::LoadFile( FILE* file, TiXmlEncoding encoding )
+{
+ if ( !file ) {
+ SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN );
+ return false;
+ }
+
+ // Delete the existing data:
+ Clear();
+ location.Clear();
+
+ // Get the file size, so we can pre-allocate the string. HUGE speed impact.
+ long length = 0;
+ fseek( file, 0, SEEK_END );
+ length = ftell( file );
+ fseek( file, 0, SEEK_SET );
+
+ // Strange case, but good to handle up front.
+ if ( length <= 0 ) {
+ SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN );
+ return false;
+ }
+
+ // If we have a file, assume it is all one big XML file, and read it in.
+ // The document parser may decide the document ends sooner than the entire file, however.
+ TIXML_STRING data;
+ data.reserve( length );
+
+ // Subtle bug here. TinyXml did use fgets. But from the XML spec:
+ // 2.11 End-of-Line Handling
+ // <snip>
+ // <quote>
+ // ...the XML processor MUST behave as if it normalized all line breaks in external
+ // parsed entities (including the document entity) on input, before parsing, by translating
+ // both the two-character sequence #xD #xA and any #xD that is not followed by #xA to
+ // a single #xA character.
+ // </quote>
+ //
+ // It is not clear fgets does that, and certainly isn't clear it works cross platform.
+ // Generally, you expect fgets to translate from the convention of the OS to the c/unix
+ // convention, and not work generally.
+
+ /*
+ while( fgets( buf, sizeof(buf), file ) )
+ {
+ data += buf;
+ }
+ */
+
+ char* buf = new char[ length+1 ];
+ buf[0] = 0;
+
+ if ( fread( buf, length, 1, file ) != 1 ) {
+ delete [] buf;
+ SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN );
+ return false;
+ }
+
+ const char* lastPos = buf;
+ const char* p = buf;
+
+ buf[length] = 0;
+ while( *p ) {
+ assert( p < (buf+length) );
+ if ( *p == 0xa ) {
+ // Newline character. No special rules for this. Append all the characters
+ // since the last string, and include the newline.
+ data.append( lastPos, (p-lastPos+1) ); // append, include the newline
+ ++p; // move past the newline
+ lastPos = p; // and point to the new buffer (may be 0)
+ assert( p <= (buf+length) );
+ } else if ( *p == 0xd ) {
+ // Carriage return. Append what we have so far, then
+ // handle moving forward in the buffer.
+ if ( (p-lastPos) > 0 ) {
+ data.append( lastPos, p-lastPos ); // do not add the CR
+ }
+ data += (char)0xa; // a proper newline
+
+ if ( *(p+1) == 0xa ) {
+ // Carriage return - new line sequence
+ p += 2;
+ lastPos = p;
+ assert( p <= (buf+length) );
+ } else {
+ // it was followed by something else...that is presumably characters again.
+ ++p;
+ lastPos = p;
+ assert( p <= (buf+length) );
+ }
+ } else {
+ ++p;
+ }
+ }
+ // Handle any left over characters.
+ if ( p-lastPos ) {
+ data.append( lastPos, p-lastPos );
+ }
+ delete [] buf;
+ buf = 0;
+
+ Parse( data.c_str(), 0, encoding );
+
+ if ( Error() )
+ return false;
+ else
+ return true;
+}
+
+
+bool TiXmlDocument::SaveFile( const char * filename ) const
+{
+ // The old c stuff lives on...
+ FILE* fp = TiXmlFOpen( filename, "w" );
+ if ( fp ) {
+ bool result = SaveFile( fp );
+ fclose( fp );
+ return result;
+ }
+ return false;
+}
+
+
+bool TiXmlDocument::SaveFile( FILE* fp ) const
+{
+ if ( useMicrosoftBOM ) {
+ const unsigned char TIXML_UTF_LEAD_0 = 0xefU;
+ const unsigned char TIXML_UTF_LEAD_1 = 0xbbU;
+ const unsigned char TIXML_UTF_LEAD_2 = 0xbfU;
+
+ fputc( TIXML_UTF_LEAD_0, fp );
+ fputc( TIXML_UTF_LEAD_1, fp );
+ fputc( TIXML_UTF_LEAD_2, fp );
+ }
+ Print( fp, 0 );
+ return (ferror(fp) == 0);
+}
+
+
+void TiXmlDocument::CopyTo( TiXmlDocument* target ) const
+{
+ TiXmlNode::CopyTo( target );
+
+ target->error = error;
+ target->errorId = errorId;
+ target->errorDesc = errorDesc;
+ target->tabsize = tabsize;
+ target->errorLocation = errorLocation;
+ target->useMicrosoftBOM = useMicrosoftBOM;
+
+ TiXmlNode* node = 0;
+ for ( node = firstChild; node; node = node->NextSibling() ) {
+ target->LinkEndChild( node->Clone() );
+ }
+}
+
+
+TiXmlNode* TiXmlDocument::Clone() const
+{
+ TiXmlDocument* clone = new TiXmlDocument();
+ if ( !clone )
+ return 0;
+
+ CopyTo( clone );
+ return clone;
+}
+
+
+void TiXmlDocument::Print( FILE* cfile, int depth ) const
+{
+ assert( cfile );
+ for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) {
+ node->Print( cfile, depth );
+ fprintf( cfile, "\n" );
+ }
+}
+
+
+bool TiXmlDocument::Accept( TiXmlVisitor* visitor ) const
+{
+ if ( visitor->VisitEnter( *this ) ) {
+ for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) {
+ if ( !node->Accept( visitor ) )
+ break;
+ }
+ }
+ return visitor->VisitExit( *this );
+}
+
+
+const TiXmlAttribute* TiXmlAttribute::Next() const
+{
+ // We are using knowledge of the sentinel. The sentinel
+ // have a value or name.
+ if ( next->value.empty() && next->name.empty() )
+ return 0;
+ return next;
+}
+
+/*
+TiXmlAttribute* TiXmlAttribute::Next()
+{
+ // We are using knowledge of the sentinel. The sentinel
+ // have a value or name.
+ if ( next->value.empty() && next->name.empty() )
+ return 0;
+ return next;
+}
+*/
+
+const TiXmlAttribute* TiXmlAttribute::Previous() const
+{
+ // We are using knowledge of the sentinel. The sentinel
+ // have a value or name.
+ if ( prev->value.empty() && prev->name.empty() )
+ return 0;
+ return prev;
+}
+
+/*
+TiXmlAttribute* TiXmlAttribute::Previous()
+{
+ // We are using knowledge of the sentinel. The sentinel
+ // have a value or name.
+ if ( prev->value.empty() && prev->name.empty() )
+ return 0;
+ return prev;
+}
+*/
+
+void TiXmlAttribute::Print( FILE* cfile, int /*depth*/, TIXML_STRING* str ) const
+{
+ TIXML_STRING n, v;
+
+ EncodeString( name, &n );
+ EncodeString( value, &v );
+
+ if (value.find ('\"') == TIXML_STRING::npos) {
+ if ( cfile ) {
+ fprintf (cfile, "%s=\"%s\"", n.c_str(), v.c_str() );
+ }
+ if ( str ) {
+ (*str) += n;
+ (*str) += "=\"";
+ (*str) += v;
+ (*str) += "\"";
+ }
+ } else {
+ if ( cfile ) {
+ fprintf (cfile, "%s='%s'", n.c_str(), v.c_str() );
+ }
+ if ( str ) {
+ (*str) += n;
+ (*str) += "='";
+ (*str) += v;
+ (*str) += "'";
+ }
+ }
+}
+
+
+int TiXmlAttribute::QueryIntValue( int* ival ) const
+{
+ if ( TIXML_SSCANF( value.c_str(), "%d", ival ) == 1 )
+ return TIXML_SUCCESS;
+ return TIXML_WRONG_TYPE;
+}
+
+int TiXmlAttribute::QueryDoubleValue( double* dval ) const
+{
+ if ( TIXML_SSCANF( value.c_str(), "%lf", dval ) == 1 )
+ return TIXML_SUCCESS;
+ return TIXML_WRONG_TYPE;
+}
+
+void TiXmlAttribute::SetIntValue( int _value )
+{
+ char buf [64];
+#if defined(TIXML_SNPRINTF)
+ TIXML_SNPRINTF(buf, sizeof(buf), "%d", _value);
+#else
+ sprintf (buf, "%d", _value);
+#endif
+ SetValue (buf);
+}
+
+void TiXmlAttribute::SetDoubleValue( double _value )
+{
+ char buf [256];
+#if defined(TIXML_SNPRINTF)
+ TIXML_SNPRINTF( buf, sizeof(buf), "%lf", _value);
+#else
+ sprintf (buf, "%lf", _value);
+#endif
+ SetValue (buf);
+}
+
+int TiXmlAttribute::IntValue() const
+{
+ return atoi (value.c_str ());
+}
+
+double TiXmlAttribute::DoubleValue() const
+{
+ return atof (value.c_str ());
+}
+
+
+TiXmlComment::TiXmlComment( const TiXmlComment& copy ) : TiXmlNode( TiXmlNode::COMMENT )
+{
+ copy.CopyTo( this );
+}
+
+
+void TiXmlComment::operator=( const TiXmlComment& base )
+{
+ Clear();
+ base.CopyTo( this );
+}
+
+
+void TiXmlComment::Print( FILE* cfile, int depth ) const
+{
+ assert( cfile );
+ for ( int i=0; i<depth; i++ ) {
+ fprintf( cfile, " " );
+ }
+ fprintf( cfile, "<!--%s-->", value.c_str() );
+}
+
+
+void TiXmlComment::CopyTo( TiXmlComment* target ) const
+{
+ TiXmlNode::CopyTo( target );
+}
+
+
+bool TiXmlComment::Accept( TiXmlVisitor* visitor ) const
+{
+ return visitor->Visit( *this );
+}
+
+
+TiXmlNode* TiXmlComment::Clone() const
+{
+ TiXmlComment* clone = new TiXmlComment();
+
+ if ( !clone )
+ return 0;
+
+ CopyTo( clone );
+ return clone;
+}
+
+
+void TiXmlText::Print( FILE* cfile, int depth ) const
+{
+ assert( cfile );
+ if ( cdata ) {
+ int i;
+ fprintf( cfile, "\n" );
+ for ( i=0; i<depth; i++ ) {
+ fprintf( cfile, " " );
+ }
+ fprintf( cfile, "<![CDATA[%s]]>\n", value.c_str() ); // unformatted output
+ } else {
+ TIXML_STRING buffer;
+ EncodeString( value, &buffer );
+ fprintf( cfile, "%s", buffer.c_str() );
+ }
+}
+
+
+void TiXmlText::CopyTo( TiXmlText* target ) const
+{
+ TiXmlNode::CopyTo( target );
+ target->cdata = cdata;
+}
+
+
+bool TiXmlText::Accept( TiXmlVisitor* visitor ) const
+{
+ return visitor->Visit( *this );
+}
+
+
+TiXmlNode* TiXmlText::Clone() const
+{
+ TiXmlText* clone = 0;
+ clone = new TiXmlText( "" );
+
+ if ( !clone )
+ return 0;
+
+ CopyTo( clone );
+ return clone;
+}
+
+
+TiXmlDeclaration::TiXmlDeclaration( const char * _version,
+ const char * _encoding,
+ const char * _standalone )
+ : TiXmlNode( TiXmlNode::DECLARATION )
+{
+ version = _version;
+ encoding = _encoding;
+ standalone = _standalone;
+}
+
+
+#ifdef TIXML_USE_STL
+TiXmlDeclaration::TiXmlDeclaration( const std::string& _version,
+ const std::string& _encoding,
+ const std::string& _standalone )
+ : TiXmlNode( TiXmlNode::DECLARATION )
+{
+ version = _version;
+ encoding = _encoding;
+ standalone = _standalone;
+}
+#endif
+
+
+TiXmlDeclaration::TiXmlDeclaration( const TiXmlDeclaration& copy )
+ : TiXmlNode( TiXmlNode::DECLARATION )
+{
+ copy.CopyTo( this );
+}
+
+
+void TiXmlDeclaration::operator=( const TiXmlDeclaration& copy )
+{
+ Clear();
+ copy.CopyTo( this );
+}
+
+
+void TiXmlDeclaration::Print( FILE* cfile, int /*depth*/, TIXML_STRING* str ) const
+{
+ if ( cfile ) fprintf( cfile, "<?xml " );
+ if ( str ) (*str) += "<?xml ";
+
+ if ( !version.empty() ) {
+ if ( cfile ) fprintf (cfile, "version=\"%s\" ", version.c_str ());
+ if ( str ) {
+ (*str) += "version=\"";
+ (*str) += version;
+ (*str) += "\" ";
+ }
+ }
+ if ( !encoding.empty() ) {
+ if ( cfile ) fprintf (cfile, "encoding=\"%s\" ", encoding.c_str ());
+ if ( str ) {
+ (*str) += "encoding=\"";
+ (*str) += encoding;
+ (*str) += "\" ";
+ }
+ }
+ if ( !standalone.empty() ) {
+ if ( cfile ) fprintf (cfile, "standalone=\"%s\" ", standalone.c_str ());
+ if ( str ) {
+ (*str) += "standalone=\"";
+ (*str) += standalone;
+ (*str) += "\" ";
+ }
+ }
+ if ( cfile ) fprintf( cfile, "?>" );
+ if ( str ) (*str) += "?>";
+}
+
+
+void TiXmlDeclaration::CopyTo( TiXmlDeclaration* target ) const
+{
+ TiXmlNode::CopyTo( target );
+
+ target->version = version;
+ target->encoding = encoding;
+ target->standalone = standalone;
+}
+
+
+bool TiXmlDeclaration::Accept( TiXmlVisitor* visitor ) const
+{
+ return visitor->Visit( *this );
+}
+
+
+TiXmlNode* TiXmlDeclaration::Clone() const
+{
+ TiXmlDeclaration* clone = new TiXmlDeclaration();
+
+ if ( !clone )
+ return 0;
+
+ CopyTo( clone );
+ return clone;
+}
+
+
+void TiXmlUnknown::Print( FILE* cfile, int depth ) const
+{
+ for ( int i=0; i<depth; i++ )
+ fprintf( cfile, " " );
+ fprintf( cfile, "<%s>", value.c_str() );
+}
+
+
+void TiXmlUnknown::CopyTo( TiXmlUnknown* target ) const
+{
+ TiXmlNode::CopyTo( target );
+}
+
+
+bool TiXmlUnknown::Accept( TiXmlVisitor* visitor ) const
+{
+ return visitor->Visit( *this );
+}
+
+
+TiXmlNode* TiXmlUnknown::Clone() const
+{
+ TiXmlUnknown* clone = new TiXmlUnknown();
+
+ if ( !clone )
+ return 0;
+
+ CopyTo( clone );
+ return clone;
+}
+
+
+TiXmlAttributeSet::TiXmlAttributeSet()
+{
+ sentinel.next = &sentinel;
+ sentinel.prev = &sentinel;
+}
+
+
+TiXmlAttributeSet::~TiXmlAttributeSet()
+{
+ assert( sentinel.next == &sentinel );
+ assert( sentinel.prev == &sentinel );
+}
+
+
+void TiXmlAttributeSet::Add( TiXmlAttribute* addMe )
+{
+#ifdef TIXML_USE_STL
+ assert( !Find( TIXML_STRING( addMe->Name() ) ) ); // Shouldn't be multiply adding to the set.
+#else
+ assert( !Find( addMe->Name() ) ); // Shouldn't be multiply adding to the set.
+#endif
+
+ addMe->next = &sentinel;
+ addMe->prev = sentinel.prev;
+
+ sentinel.prev->next = addMe;
+ sentinel.prev = addMe;
+}
+
+void TiXmlAttributeSet::Remove( TiXmlAttribute* removeMe )
+{
+ TiXmlAttribute* node;
+
+ for( node = sentinel.next; node != &sentinel; node = node->next ) {
+ if ( node == removeMe ) {
+ node->prev->next = node->next;
+ node->next->prev = node->prev;
+ node->next = 0;
+ node->prev = 0;
+ return;
+ }
+ }
+ assert( 0 ); // we tried to remove a non-linked attribute.
+}
+
+
+#ifdef TIXML_USE_STL
+const TiXmlAttribute* TiXmlAttributeSet::Find( const std::string& name ) const
+{
+ for( const TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) {
+ if ( node->name == name )
+ return node;
+ }
+ return 0;
+}
+
+/*
+TiXmlAttribute* TiXmlAttributeSet::Find( const std::string& name )
+{
+ for( TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next )
+ {
+ if ( node->name == name )
+ return node;
+ }
+ return 0;
+}
+*/
+#endif
+
+
+const TiXmlAttribute* TiXmlAttributeSet::Find( const char* name ) const
+{
+ for( const TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) {
+ if ( strcmp( node->name.c_str(), name ) == 0 )
+ return node;
+ }
+ return 0;
+}
+
+/*
+TiXmlAttribute* TiXmlAttributeSet::Find( const char* name )
+{
+ for( TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next )
+ {
+ if ( strcmp( node->name.c_str(), name ) == 0 )
+ return node;
+ }
+ return 0;
+}
+*/
+
+#ifdef TIXML_USE_STL
+std::istream& operator>> (std::istream & in, TiXmlNode & base)
+{
+ TIXML_STRING tag;
+ tag.reserve( 8 * 1000 );
+ base.StreamIn( &in, &tag );
+
+ base.Parse( tag.c_str(), 0, TIXML_DEFAULT_ENCODING );
+ return in;
+}
+#endif
+
+
+#ifdef TIXML_USE_STL
+std::ostream& operator<< (std::ostream & out, const TiXmlNode & base)
+{
+ TiXmlPrinter printer;
+ printer.SetStreamPrinting();
+ base.Accept( &printer );
+ out << printer.Str();
+
+ return out;
+}
+
+
+std::string& operator<< (std::string& out, const TiXmlNode& base )
+{
+ TiXmlPrinter printer;
+ printer.SetStreamPrinting();
+ base.Accept( &printer );
+ out.append( printer.Str() );
+
+ return out;
+}
+#endif
+
+
+TiXmlHandle TiXmlHandle::FirstChild() const
+{
+ if ( node ) {
+ TiXmlNode* child = node->FirstChild();
+ if ( child )
+ return TiXmlHandle( child );
+ }
+ return TiXmlHandle( 0 );
+}
+
+
+TiXmlHandle TiXmlHandle::FirstChild( const char * value ) const
+{
+ if ( node ) {
+ TiXmlNode* child = node->FirstChild( value );
+ if ( child )
+ return TiXmlHandle( child );
+ }
+ return TiXmlHandle( 0 );
+}
+
+
+TiXmlHandle TiXmlHandle::FirstChildElement() const
+{
+ if ( node ) {
+ TiXmlElement* child = node->FirstChildElement();
+ if ( child )
+ return TiXmlHandle( child );
+ }
+ return TiXmlHandle( 0 );
+}
+
+
+TiXmlHandle TiXmlHandle::FirstChildElement( const char * value ) const
+{
+ if ( node ) {
+ TiXmlElement* child = node->FirstChildElement( value );
+ if ( child )
+ return TiXmlHandle( child );
+ }
+ return TiXmlHandle( 0 );
+}
+
+
+TiXmlHandle TiXmlHandle::Child( int count ) const
+{
+ if ( node ) {
+ int i;
+ TiXmlNode* child = node->FirstChild();
+ for ( i=0;
+ child && i<count;
+ child = child->NextSibling(), ++i ) {
+ // nothing
+ }
+ if ( child )
+ return TiXmlHandle( child );
+ }
+ return TiXmlHandle( 0 );
+}
+
+
+TiXmlHandle TiXmlHandle::Child( const char* value, int count ) const
+{
+ if ( node ) {
+ int i;
+ TiXmlNode* child = node->FirstChild( value );
+ for ( i=0;
+ child && i<count;
+ child = child->NextSibling( value ), ++i ) {
+ // nothing
+ }
+ if ( child )
+ return TiXmlHandle( child );
+ }
+ return TiXmlHandle( 0 );
+}
+
+
+TiXmlHandle TiXmlHandle::ChildElement( int count ) const
+{
+ if ( node ) {
+ int i;
+ TiXmlElement* child = node->FirstChildElement();
+ for ( i=0;
+ child && i<count;
+ child = child->NextSiblingElement(), ++i ) {
+ // nothing
+ }
+ if ( child )
+ return TiXmlHandle( child );
+ }
+ return TiXmlHandle( 0 );
+}
+
+
+TiXmlHandle TiXmlHandle::ChildElement( const char* value, int count ) const
+{
+ if ( node ) {
+ int i;
+ TiXmlElement* child = node->FirstChildElement( value );
+ for ( i=0;
+ child && i<count;
+ child = child->NextSiblingElement( value ), ++i ) {
+ // nothing
+ }
+ if ( child )
+ return TiXmlHandle( child );
+ }
+ return TiXmlHandle( 0 );
+}
+
+
+bool TiXmlPrinter::VisitEnter( const TiXmlDocument& )
+{
+ return true;
+}
+
+bool TiXmlPrinter::VisitExit( const TiXmlDocument& )
+{
+ return true;
+}
+
+bool TiXmlPrinter::VisitEnter( const TiXmlElement& element, const TiXmlAttribute* firstAttribute )
+{
+ DoIndent();
+ buffer += "<";
+ buffer += element.Value();
+
+ for( const TiXmlAttribute* attrib = firstAttribute; attrib; attrib = attrib->Next() ) {
+ buffer += " ";
+ attrib->Print( 0, 0, &buffer );
+ }
+
+ if ( !element.FirstChild() ) {
+ buffer += " />";
+ DoLineBreak();
+ } else {
+ buffer += ">";
+ if ( element.FirstChild()->ToText()
+ && element.LastChild() == element.FirstChild()
+ && element.FirstChild()->ToText()->CDATA() == false ) {
+ simpleTextPrint = true;
+ // no DoLineBreak()!
+ } else {
+ DoLineBreak();
+ }
+ }
+ ++depth;
+ return true;
+}
+
+
+bool TiXmlPrinter::VisitExit( const TiXmlElement& element )
+{
+ --depth;
+ if ( !element.FirstChild() ) {
+ // nothing.
+ } else {
+ if ( simpleTextPrint ) {
+ simpleTextPrint = false;
+ } else {
+ DoIndent();
+ }
+ buffer += "</";
+ buffer += element.Value();
+ buffer += ">";
+ DoLineBreak();
+ }
+ return true;
+}
+
+
+bool TiXmlPrinter::Visit( const TiXmlText& text )
+{
+ if ( text.CDATA() ) {
+ DoIndent();
+ buffer += "<![CDATA[";
+ buffer += text.Value();
+ buffer += "]]>";
+ DoLineBreak();
+ } else if ( simpleTextPrint ) {
+ TIXML_STRING str;
+ TiXmlBase::EncodeString( text.ValueTStr(), &str );
+ buffer += str;
+ } else {
+ DoIndent();
+ TIXML_STRING str;
+ TiXmlBase::EncodeString( text.ValueTStr(), &str );
+ buffer += str;
+ DoLineBreak();
+ }
+ return true;
+}
+
+
+bool TiXmlPrinter::Visit( const TiXmlDeclaration& declaration )
+{
+ DoIndent();
+ declaration.Print( 0, 0, &buffer );
+ DoLineBreak();
+ return true;
+}
+
+
+bool TiXmlPrinter::Visit( const TiXmlComment& comment )
+{
+ DoIndent();
+ buffer += "<!--";
+ buffer += comment.Value();
+ buffer += "-->";
+ DoLineBreak();
+ return true;
+}
+
+
+bool TiXmlPrinter::Visit( const TiXmlUnknown& unknown )
+{
+ DoIndent();
+ buffer += "<";
+ buffer += unknown.Value();
+ buffer += ">";
+ DoLineBreak();
+ return true;
+}
+
diff --git a/mert/TERsrc/tinyxml.h b/mert/TERsrc/tinyxml.h
new file mode 100644
index 000000000..f68429d52
--- /dev/null
+++ b/mert/TERsrc/tinyxml.h
@@ -0,0 +1,2043 @@
+/*
+www.sourceforge.net/projects/tinyxml
+Original code (2.0 and earlier )copyright (c) 2000-2006 Lee Thomason (www.grinninglizard.com)
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must
+not claim that you wrote the original software. If you use this
+software in a product, an acknowledgment in the product documentation
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source
+distribution.
+*/
+
+
+#ifndef TINYXML_INCLUDED
+#define TINYXML_INCLUDED
+
+#ifdef _MSC_VER
+#pragma warning( push )
+#pragma warning( disable : 4530 )
+#pragma warning( disable : 4786 )
+#endif
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+// Help out windows:
+#if defined( _DEBUG ) && !defined( DEBUG )
+#define DEBUG
+#endif
+
+#ifdef TIXML_USE_STL
+#include <string>
+#include <iostream>
+#include <sstream>
+#define TIXML_STRING std::string
+#else
+#include "tinystr.h"
+#define TIXML_STRING TiXmlString
+#endif
+
+// Deprecated library function hell. Compilers want to use the
+// new safe versions. This probably doesn't fully address the problem,
+// but it gets closer. There are too many compilers for me to fully
+// test. If you get compilation troubles, undefine TIXML_SAFE
+#define TIXML_SAFE
+
+#ifdef TIXML_SAFE
+#if defined(_MSC_VER) && (_MSC_VER >= 1400 )
+// Microsoft visual studio, version 2005 and higher.
+#define TIXML_SNPRINTF _snprintf_s
+#define TIXML_SNSCANF _snscanf_s
+#define TIXML_SSCANF sscanf_s
+#elif defined(_MSC_VER) && (_MSC_VER >= 1200 )
+// Microsoft visual studio, version 6 and higher.
+//#pragma message( "Using _sn* functions." )
+#define TIXML_SNPRINTF _snprintf
+#define TIXML_SNSCANF _snscanf
+#define TIXML_SSCANF sscanf
+#elif defined(__GNUC__) && (__GNUC__ >= 3 )
+// GCC version 3 and higher.s
+//#warning( "Using sn* functions." )
+#define TIXML_SNPRINTF snprintf
+#define TIXML_SNSCANF snscanf
+#define TIXML_SSCANF sscanf
+#else
+#define TIXML_SSCANF sscanf
+#endif
+#endif
+
+class TiXmlDocument;
+class TiXmlElement;
+class TiXmlComment;
+class TiXmlUnknown;
+class TiXmlAttribute;
+class TiXmlText;
+class TiXmlDeclaration;
+class TiXmlParsingData;
+
+const int TIXML_MAJOR_VERSION = 2;
+const int TIXML_MINOR_VERSION = 5;
+const int TIXML_PATCH_VERSION = 3;
+
+/* Internal structure for tracking location of items
+ in the XML file.
+*/
+struct TiXmlCursor {
+ TiXmlCursor() {
+ Clear();
+ }
+ void Clear() {
+ row = col = -1;
+ }
+
+ int row; // 0 based.
+ int col; // 0 based.
+};
+
+
+/**
+ If you call the Accept() method, it requires being passed a TiXmlVisitor
+ class to handle callbacks. For nodes that contain other nodes (Document, Element)
+ you will get called with a VisitEnter/VisitExit pair. Nodes that are always leaves
+ are simple called with Visit().
+
+ If you return 'true' from a Visit method, recursive parsing will continue. If you return
+ false, <b>no children of this node or its sibilings</b> will be Visited.
+
+ All flavors of Visit methods have a default implementation that returns 'true' (continue
+ visiting). You need to only override methods that are interesting to you.
+
+ Generally Accept() is called on the TiXmlDocument, although all nodes suppert Visiting.
+
+ You should never change the document from a callback.
+
+ @sa TiXmlNode::Accept()
+*/
+class TiXmlVisitor
+{
+public:
+ virtual ~TiXmlVisitor() {}
+
+ /// Visit a document.
+ virtual bool VisitEnter( const TiXmlDocument& /*doc*/ ) {
+ return true;
+ }
+ /// Visit a document.
+ virtual bool VisitExit( const TiXmlDocument& /*doc*/ ) {
+ return true;
+ }
+
+ /// Visit an element.
+ virtual bool VisitEnter( const TiXmlElement& /*element*/, const TiXmlAttribute* /*firstAttribute*/ ) {
+ return true;
+ }
+ /// Visit an element.
+ virtual bool VisitExit( const TiXmlElement& /*element*/ ) {
+ return true;
+ }
+
+ /// Visit a declaration
+ virtual bool Visit( const TiXmlDeclaration& /*declaration*/ ) {
+ return true;
+ }
+ /// Visit a text node
+ virtual bool Visit( const TiXmlText& /*text*/ ) {
+ return true;
+ }
+ /// Visit a comment node
+ virtual bool Visit( const TiXmlComment& /*comment*/ ) {
+ return true;
+ }
+ /// Visit an unknow node
+ virtual bool Visit( const TiXmlUnknown& /*unknown*/ ) {
+ return true;
+ }
+};
+
+// Only used by Attribute::Query functions
+enum {
+ TIXML_SUCCESS,
+ TIXML_NO_ATTRIBUTE,
+ TIXML_WRONG_TYPE
+};
+
+
+// Used by the parsing routines.
+enum TiXmlEncoding {
+ TIXML_ENCODING_UNKNOWN,
+ TIXML_ENCODING_UTF8,
+ TIXML_ENCODING_LEGACY
+};
+
+const TiXmlEncoding TIXML_DEFAULT_ENCODING = TIXML_ENCODING_UNKNOWN;
+
+/** TiXmlBase is a base class for every class in TinyXml.
+ It does little except to establish that TinyXml classes
+ can be printed and provide some utility functions.
+
+ In XML, the document and elements can contain
+ other elements and other types of nodes.
+
+ @verbatim
+ A Document can contain: Element (container or leaf)
+ Comment (leaf)
+ Unknown (leaf)
+ Declaration( leaf )
+
+ An Element can contain: Element (container or leaf)
+ Text (leaf)
+ Attributes (not on tree)
+ Comment (leaf)
+ Unknown (leaf)
+
+ A Decleration contains: Attributes (not on tree)
+ @endverbatim
+*/
+class TiXmlBase
+{
+ friend class TiXmlNode;
+ friend class TiXmlElement;
+ friend class TiXmlDocument;
+
+public:
+ TiXmlBase() : userData(0) {}
+ virtual ~TiXmlBase() {}
+
+ /** All TinyXml classes can print themselves to a filestream
+ or the string class (TiXmlString in non-STL mode, std::string
+ in STL mode.) Either or both cfile and str can be null.
+
+ This is a formatted print, and will insert
+ tabs and newlines.
+
+ (For an unformatted stream, use the << operator.)
+ */
+ virtual void Print( FILE* cfile, int depth ) const = 0;
+
+ /** The world does not agree on whether white space should be kept or
+ not. In order to make everyone happy, these global, static functions
+ are provided to set whether or not TinyXml will condense all white space
+ into a single space or not. The default is to condense. Note changing this
+ value is not thread safe.
+ */
+ static void SetCondenseWhiteSpace( bool condense ) {
+ condenseWhiteSpace = condense;
+ }
+
+ /// Return the current white space setting.
+ static bool IsWhiteSpaceCondensed() {
+ return condenseWhiteSpace;
+ }
+
+ /** Return the position, in the original source file, of this node or attribute.
+ The row and column are 1-based. (That is the first row and first column is
+ 1,1). If the returns values are 0 or less, then the parser does not have
+ a row and column value.
+
+ Generally, the row and column value will be set when the TiXmlDocument::Load(),
+ TiXmlDocument::LoadFile(), or any TiXmlNode::Parse() is called. It will NOT be set
+ when the DOM was created from operator>>.
+
+ The values reflect the initial load. Once the DOM is modified programmatically
+ (by adding or changing nodes and attributes) the new values will NOT update to
+ reflect changes in the document.
+
+ There is a minor performance cost to computing the row and column. Computation
+ can be disabled if TiXmlDocument::SetTabSize() is called with 0 as the value.
+
+ @sa TiXmlDocument::SetTabSize()
+ */
+ int Row() const {
+ return location.row + 1;
+ }
+ int Column() const {
+ return location.col + 1; ///< See Row()
+ }
+
+ void SetUserData( void* user ) {
+ userData = user; ///< Set a pointer to arbitrary user data.
+ }
+ void* GetUserData() {
+ return userData; ///< Get a pointer to arbitrary user data.
+ }
+ const void* GetUserData() const {
+ return userData; ///< Get a pointer to arbitrary user data.
+ }
+
+ // Table that returs, for a given lead byte, the total number of bytes
+ // in the UTF-8 sequence.
+ static const int utf8ByteTable[256];
+
+ virtual const char* Parse( const char* p,
+ TiXmlParsingData* data,
+ TiXmlEncoding encoding /*= TIXML_ENCODING_UNKNOWN */ ) = 0;
+
+ /** Expands entities in a string. Note this should not contian the tag's '<', '>', etc,
+ or they will be transformed into entities!
+ */
+ static void EncodeString( const TIXML_STRING& str, TIXML_STRING* out );
+
+ enum {
+ TIXML_NO_ERROR = 0,
+ TIXML_ERROR,
+ TIXML_ERROR_OPENING_FILE,
+ TIXML_ERROR_OUT_OF_MEMORY,
+ TIXML_ERROR_PARSING_ELEMENT,
+ TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME,
+ TIXML_ERROR_READING_ELEMENT_VALUE,
+ TIXML_ERROR_READING_ATTRIBUTES,
+ TIXML_ERROR_PARSING_EMPTY,
+ TIXML_ERROR_READING_END_TAG,
+ TIXML_ERROR_PARSING_UNKNOWN,
+ TIXML_ERROR_PARSING_COMMENT,
+ TIXML_ERROR_PARSING_DECLARATION,
+ TIXML_ERROR_DOCUMENT_EMPTY,
+ TIXML_ERROR_EMBEDDED_NULL,
+ TIXML_ERROR_PARSING_CDATA,
+ TIXML_ERROR_DOCUMENT_TOP_ONLY,
+
+ TIXML_ERROR_STRING_COUNT
+ };
+
+protected:
+
+ static const char* SkipWhiteSpace( const char*, TiXmlEncoding encoding );
+ inline static bool IsWhiteSpace( char c ) {
+ return ( isspace( (unsigned char) c ) || c == '\n' || c == '\r' );
+ }
+ inline static bool IsWhiteSpace( int c ) {
+ if ( c < 256 )
+ return IsWhiteSpace( (char) c );
+ return false; // Again, only truly correct for English/Latin...but usually works.
+ }
+
+#ifdef TIXML_USE_STL
+ static bool StreamWhiteSpace( std::istream * in, TIXML_STRING * tag );
+ static bool StreamTo( std::istream * in, int character, TIXML_STRING * tag );
+#endif
+
+ /* Reads an XML name into the string provided. Returns
+ a pointer just past the last character of the name,
+ or 0 if the function has an error.
+ */
+ static const char* ReadName( const char* p, TIXML_STRING* name, TiXmlEncoding encoding );
+
+ /* Reads text. Returns a pointer past the given end tag.
+ Wickedly complex options, but it keeps the (sensitive) code in one place.
+ */
+ static const char* ReadText( const char* in, // where to start
+ TIXML_STRING* text, // the string read
+ bool ignoreWhiteSpace, // whether to keep the white space
+ const char* endTag, // what ends this text
+ bool ignoreCase, // whether to ignore case in the end tag
+ TiXmlEncoding encoding ); // the current encoding
+
+ // If an entity has been found, transform it into a character.
+ static const char* GetEntity( const char* in, char* value, int* length, TiXmlEncoding encoding );
+
+ // Get a character, while interpreting entities.
+ // The length can be from 0 to 4 bytes.
+ inline static const char* GetChar( const char* p, char* _value, int* length, TiXmlEncoding encoding ) {
+ assert( p );
+ if ( encoding == TIXML_ENCODING_UTF8 ) {
+ *length = utf8ByteTable[ *((const unsigned char*)p) ];
+ assert( *length >= 0 && *length < 5 );
+ } else {
+ *length = 1;
+ }
+
+ if ( *length == 1 ) {
+ if ( *p == '&' )
+ return GetEntity( p, _value, length, encoding );
+ *_value = *p;
+ return p+1;
+ } else if ( *length ) {
+ //strncpy( _value, p, *length ); // lots of compilers don't like this function (unsafe),
+ // and the null terminator isn't needed
+ for( int i=0; p[i] && i<*length; ++i ) {
+ _value[i] = p[i];
+ }
+ return p + (*length);
+ } else {
+ // Not valid text.
+ return 0;
+ }
+ }
+
+ // Return true if the next characters in the stream are any of the endTag sequences.
+ // Ignore case only works for english, and should only be relied on when comparing
+ // to English words: StringEqual( p, "version", true ) is fine.
+ static bool StringEqual( const char* p,
+ const char* endTag,
+ bool ignoreCase,
+ TiXmlEncoding encoding );
+
+ static const char* errorString[ TIXML_ERROR_STRING_COUNT ];
+
+ TiXmlCursor location;
+
+ /// Field containing a generic user pointer
+ void* userData;
+
+ // None of these methods are reliable for any language except English.
+ // Good for approximation, not great for accuracy.
+ static int IsAlpha( unsigned char anyByte, TiXmlEncoding encoding );
+ static int IsAlphaNum( unsigned char anyByte, TiXmlEncoding encoding );
+ inline static int ToLower( int v, TiXmlEncoding encoding ) {
+ if ( encoding == TIXML_ENCODING_UTF8 ) {
+ if ( v < 128 ) return tolower( v );
+ return v;
+ } else {
+ return tolower( v );
+ }
+ }
+ static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length );
+
+private:
+ TiXmlBase( const TiXmlBase& ); // not implemented.
+ void operator=( const TiXmlBase& base ); // not allowed.
+
+ struct Entity {
+ const char* str;
+ unsigned int strLength;
+ char chr;
+ };
+ enum {
+ NUM_ENTITY = 5,
+ MAX_ENTITY_LENGTH = 6
+
+ };
+ static Entity entity[ NUM_ENTITY ];
+ static bool condenseWhiteSpace;
+};
+
+
+/** The parent class for everything in the Document Object Model.
+ (Except for attributes).
+ Nodes have siblings, a parent, and children. A node can be
+ in a document, or stand on its own. The type of a TiXmlNode
+ can be queried, and it can be cast to its more defined type.
+*/
+class TiXmlNode : public TiXmlBase
+{
+ friend class TiXmlDocument;
+ friend class TiXmlElement;
+
+public:
+#ifdef TIXML_USE_STL
+
+ /** An input stream operator, for every class. Tolerant of newlines and
+ formatting, but doesn't expect them.
+ */
+ friend std::istream& operator >> (std::istream& in, TiXmlNode& base);
+
+ /** An output stream operator, for every class. Note that this outputs
+ without any newlines or formatting, as opposed to Print(), which
+ includes tabs and new lines.
+
+ The operator<< and operator>> are not completely symmetric. Writing
+ a node to a stream is very well defined. You'll get a nice stream
+ of output, without any extra whitespace or newlines.
+
+ But reading is not as well defined. (As it always is.) If you create
+ a TiXmlElement (for example) and read that from an input stream,
+ the text needs to define an element or junk will result. This is
+ true of all input streams, but it's worth keeping in mind.
+
+ A TiXmlDocument will read nodes until it reads a root element, and
+ all the children of that root element.
+ */
+ friend std::ostream& operator<< (std::ostream& out, const TiXmlNode& base);
+
+ /// Appends the XML node or attribute to a std::string.
+ friend std::string& operator<< (std::string& out, const TiXmlNode& base );
+
+#endif
+
+ /** The types of XML nodes supported by TinyXml. (All the
+ unsupported types are picked up by UNKNOWN.)
+ */
+ enum NodeType {
+ DOCUMENT,
+ ELEMENT,
+ COMMENT,
+ UNKNOWN,
+ TEXT,
+ DECLARATION,
+ TYPECOUNT
+ };
+
+ virtual ~TiXmlNode();
+
+ /** The meaning of 'value' changes for the specific type of
+ TiXmlNode.
+ @verbatim
+ Document: filename of the xml file
+ Element: name of the element
+ Comment: the comment text
+ Unknown: the tag contents
+ Text: the text string
+ @endverbatim
+
+ The subclasses will wrap this function.
+ */
+ const char *Value() const {
+ return value.c_str ();
+ }
+
+#ifdef TIXML_USE_STL
+ /** Return Value() as a std::string. If you only use STL,
+ this is more efficient than calling Value().
+ Only available in STL mode.
+ */
+ const std::string& ValueStr() const {
+ return value;
+ }
+#endif
+
+ const TIXML_STRING& ValueTStr() const {
+ return value;
+ }
+
+ /** Changes the value of the node. Defined as:
+ @verbatim
+ Document: filename of the xml file
+ Element: name of the element
+ Comment: the comment text
+ Unknown: the tag contents
+ Text: the text string
+ @endverbatim
+ */
+ void SetValue(const char * _value) {
+ value = _value;
+ }
+
+#ifdef TIXML_USE_STL
+ /// STL std::string form.
+ void SetValue( const std::string& _value ) {
+ value = _value;
+ }
+#endif
+
+ /// Delete all the children of this node. Does not affect 'this'.
+ void Clear();
+
+ /// One step up the DOM.
+ TiXmlNode* Parent() {
+ return parent;
+ }
+ const TiXmlNode* Parent() const {
+ return parent;
+ }
+
+ const TiXmlNode* FirstChild() const {
+ return firstChild; ///< The first child of this node. Will be null if there are no children.
+ }
+ TiXmlNode* FirstChild() {
+ return firstChild;
+ }
+ const TiXmlNode* FirstChild( const char * value ) const; ///< The first child of this node with the matching 'value'. Will be null if none found.
+ /// The first child of this node with the matching 'value'. Will be null if none found.
+ TiXmlNode* FirstChild( const char * _value ) {
+ // Call through to the const version - safe since nothing is changed. Exiting syntax: cast this to a const (always safe)
+ // call the method, cast the return back to non-const.
+ return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->FirstChild( _value ));
+ }
+ const TiXmlNode* LastChild() const {
+ return lastChild; /// The last child of this node. Will be null if there are no children.
+ }
+ TiXmlNode* LastChild() {
+ return lastChild;
+ }
+
+ const TiXmlNode* LastChild( const char * value ) const; /// The last child of this node matching 'value'. Will be null if there are no children.
+ TiXmlNode* LastChild( const char * _value ) {
+ return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->LastChild( _value ));
+ }
+
+#ifdef TIXML_USE_STL
+ const TiXmlNode* FirstChild( const std::string& _value ) const {
+ return FirstChild (_value.c_str ()); ///< STL std::string form.
+ }
+ TiXmlNode* FirstChild( const std::string& _value ) {
+ return FirstChild (_value.c_str ()); ///< STL std::string form.
+ }
+ const TiXmlNode* LastChild( const std::string& _value ) const {
+ return LastChild (_value.c_str ()); ///< STL std::string form.
+ }
+ TiXmlNode* LastChild( const std::string& _value ) {
+ return LastChild (_value.c_str ()); ///< STL std::string form.
+ }
+#endif
+
+ /** An alternate way to walk the children of a node.
+ One way to iterate over nodes is:
+ @verbatim
+ for( child = parent->FirstChild(); child; child = child->NextSibling() )
+ @endverbatim
+
+ IterateChildren does the same thing with the syntax:
+ @verbatim
+ child = 0;
+ while( child = parent->IterateChildren( child ) )
+ @endverbatim
+
+ IterateChildren takes the previous child as input and finds
+ the next one. If the previous child is null, it returns the
+ first. IterateChildren will return null when done.
+ */
+ const TiXmlNode* IterateChildren( const TiXmlNode* previous ) const;
+ TiXmlNode* IterateChildren( const TiXmlNode* previous ) {
+ return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( previous ) );
+ }
+
+ /// This flavor of IterateChildren searches for children with a particular 'value'
+ const TiXmlNode* IterateChildren( const char * value, const TiXmlNode* previous ) const;
+ TiXmlNode* IterateChildren( const char * _value, const TiXmlNode* previous ) {
+ return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( _value, previous ) );
+ }
+
+#ifdef TIXML_USE_STL
+ const TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) const {
+ return IterateChildren (_value.c_str (), previous); ///< STL std::string form.
+ }
+ TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) {
+ return IterateChildren (_value.c_str (), previous); ///< STL std::string form.
+ }
+#endif
+
+ /** Add a new node related to this. Adds a child past the LastChild.
+ Returns a pointer to the new object or NULL if an error occured.
+ */
+ TiXmlNode* InsertEndChild( const TiXmlNode& addThis );
+
+
+ /** Add a new node related to this. Adds a child past the LastChild.
+
+ NOTE: the node to be added is passed by pointer, and will be
+ henceforth owned (and deleted) by tinyXml. This method is efficient
+ and avoids an extra copy, but should be used with care as it
+ uses a different memory model than the other insert functions.
+
+ @sa InsertEndChild
+ */
+ TiXmlNode* LinkEndChild( TiXmlNode* addThis );
+
+ /** Add a new node related to this. Adds a child before the specified child.
+ Returns a pointer to the new object or NULL if an error occured.
+ */
+ TiXmlNode* InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis );
+
+ /** Add a new node related to this. Adds a child after the specified child.
+ Returns a pointer to the new object or NULL if an error occured.
+ */
+ TiXmlNode* InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis );
+
+ /** Replace a child of this node.
+ Returns a pointer to the new object or NULL if an error occured.
+ */
+ TiXmlNode* ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis );
+
+ /// Delete a child of this node.
+ bool RemoveChild( TiXmlNode* removeThis );
+
+ /// Navigate to a sibling node.
+ const TiXmlNode* PreviousSibling() const {
+ return prev;
+ }
+ TiXmlNode* PreviousSibling() {
+ return prev;
+ }
+
+ /// Navigate to a sibling node.
+ const TiXmlNode* PreviousSibling( const char * ) const;
+ TiXmlNode* PreviousSibling( const char *_prev ) {
+ return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->PreviousSibling( _prev ) );
+ }
+
+#ifdef TIXML_USE_STL
+ const TiXmlNode* PreviousSibling( const std::string& _value ) const {
+ return PreviousSibling (_value.c_str ()); ///< STL std::string form.
+ }
+ TiXmlNode* PreviousSibling( const std::string& _value ) {
+ return PreviousSibling (_value.c_str ()); ///< STL std::string form.
+ }
+ const TiXmlNode* NextSibling( const std::string& _value) const {
+ return NextSibling (_value.c_str ()); ///< STL std::string form.
+ }
+ TiXmlNode* NextSibling( const std::string& _value) {
+ return NextSibling (_value.c_str ()); ///< STL std::string form.
+ }
+#endif
+
+ /// Navigate to a sibling node.
+ const TiXmlNode* NextSibling() const {
+ return next;
+ }
+ TiXmlNode* NextSibling() {
+ return next;
+ }
+
+ /// Navigate to a sibling node with the given 'value'.
+ const TiXmlNode* NextSibling( const char * ) const;
+ TiXmlNode* NextSibling( const char* _next ) {
+ return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->NextSibling( _next ) );
+ }
+
+ /** Convenience function to get through elements.
+ Calls NextSibling and ToElement. Will skip all non-Element
+ nodes. Returns 0 if there is not another element.
+ */
+ const TiXmlElement* NextSiblingElement() const;
+ TiXmlElement* NextSiblingElement() {
+ return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement() );
+ }
+
+ /** Convenience function to get through elements.
+ Calls NextSibling and ToElement. Will skip all non-Element
+ nodes. Returns 0 if there is not another element.
+ */
+ const TiXmlElement* NextSiblingElement( const char * ) const;
+ TiXmlElement* NextSiblingElement( const char *_next ) {
+ return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement( _next ) );
+ }
+
+#ifdef TIXML_USE_STL
+ const TiXmlElement* NextSiblingElement( const std::string& _value) const {
+ return NextSiblingElement (_value.c_str ()); ///< STL std::string form.
+ }
+ TiXmlElement* NextSiblingElement( const std::string& _value) {
+ return NextSiblingElement (_value.c_str ()); ///< STL std::string form.
+ }
+#endif
+
+ /// Convenience function to get through elements.
+ const TiXmlElement* FirstChildElement() const;
+ TiXmlElement* FirstChildElement() {
+ return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement() );
+ }
+
+ /// Convenience function to get through elements.
+ const TiXmlElement* FirstChildElement( const char * _value ) const;
+ TiXmlElement* FirstChildElement( const char * _value ) {
+ return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement( _value ) );
+ }
+
+#ifdef TIXML_USE_STL
+ const TiXmlElement* FirstChildElement( const std::string& _value ) const {
+ return FirstChildElement (_value.c_str ()); ///< STL std::string form.
+ }
+ TiXmlElement* FirstChildElement( const std::string& _value ) {
+ return FirstChildElement (_value.c_str ()); ///< STL std::string form.
+ }
+#endif
+
+ /** Query the type (as an enumerated value, above) of this node.
+ The possible types are: DOCUMENT, ELEMENT, COMMENT,
+ UNKNOWN, TEXT, and DECLARATION.
+ */
+ int Type() const {
+ return type;
+ }
+
+ /** Return a pointer to the Document this node lives in.
+ Returns null if not in a document.
+ */
+ const TiXmlDocument* GetDocument() const;
+ TiXmlDocument* GetDocument() {
+ return const_cast< TiXmlDocument* >( (const_cast< const TiXmlNode* >(this))->GetDocument() );
+ }
+
+ /// Returns true if this node has no children.
+ bool NoChildren() const {
+ return !firstChild;
+ }
+
+ virtual const TiXmlDocument* ToDocument() const {
+ return 0; ///< Cast to a more defined type. Will return null if not of the requested type.
+ }
+ virtual const TiXmlElement* ToElement() const {
+ return 0; ///< Cast to a more defined type. Will return null if not of the requested type.
+ }
+ virtual const TiXmlComment* ToComment() const {
+ return 0; ///< Cast to a more defined type. Will return null if not of the requested type.
+ }
+ virtual const TiXmlUnknown* ToUnknown() const {
+ return 0; ///< Cast to a more defined type. Will return null if not of the requested type.
+ }
+ virtual const TiXmlText* ToText() const {
+ return 0; ///< Cast to a more defined type. Will return null if not of the requested type.
+ }
+ virtual const TiXmlDeclaration* ToDeclaration() const {
+ return 0; ///< Cast to a more defined type. Will return null if not of the requested type.
+ }
+
+ virtual TiXmlDocument* ToDocument() {
+ return 0; ///< Cast to a more defined type. Will return null if not of the requested type.
+ }
+ virtual TiXmlElement* ToElement() {
+ return 0; ///< Cast to a more defined type. Will return null if not of the requested type.
+ }
+ virtual TiXmlComment* ToComment() {
+ return 0; ///< Cast to a more defined type. Will return null if not of the requested type.
+ }
+ virtual TiXmlUnknown* ToUnknown() {
+ return 0; ///< Cast to a more defined type. Will return null if not of the requested type.
+ }
+ virtual TiXmlText* ToText() {
+ return 0; ///< Cast to a more defined type. Will return null if not of the requested type.
+ }
+ virtual TiXmlDeclaration* ToDeclaration() {
+ return 0; ///< Cast to a more defined type. Will return null if not of the requested type.
+ }
+
+ /** Create an exact duplicate of this node and return it. The memory must be deleted
+ by the caller.
+ */
+ virtual TiXmlNode* Clone() const = 0;
+
+ /** Accept a hierchical visit the nodes in the TinyXML DOM. Every node in the
+ XML tree will be conditionally visited and the host will be called back
+ via the TiXmlVisitor interface.
+
+ This is essentially a SAX interface for TinyXML. (Note however it doesn't re-parse
+ the XML for the callbacks, so the performance of TinyXML is unchanged by using this
+ interface versus any other.)
+
+ The interface has been based on ideas from:
+
+ - http://www.saxproject.org/
+ - http://c2.com/cgi/wiki?HierarchicalVisitorPattern
+
+ Which are both good references for "visiting".
+
+ An example of using Accept():
+ @verbatim
+ TiXmlPrinter printer;
+ tinyxmlDoc.Accept( &printer );
+ const char* xmlcstr = printer.CStr();
+ @endverbatim
+ */
+ virtual bool Accept( TiXmlVisitor* visitor ) const = 0;
+
+protected:
+ TiXmlNode( NodeType _type );
+
+ // Copy to the allocated object. Shared functionality between Clone, Copy constructor,
+ // and the assignment operator.
+ void CopyTo( TiXmlNode* target ) const;
+
+#ifdef TIXML_USE_STL
+ // The real work of the input operator.
+ virtual void StreamIn( std::istream* in, TIXML_STRING* tag ) = 0;
+#endif
+
+ // Figure out what is at *p, and parse it. Returns null if it is not an xml node.
+ TiXmlNode* Identify( const char* start, TiXmlEncoding encoding );
+
+ TiXmlNode* parent;
+ NodeType type;
+
+ TiXmlNode* firstChild;
+ TiXmlNode* lastChild;
+
+ TIXML_STRING value;
+
+ TiXmlNode* prev;
+ TiXmlNode* next;
+
+private:
+ TiXmlNode( const TiXmlNode& ); // not implemented.
+ void operator=( const TiXmlNode& base ); // not allowed.
+};
+
+
+/** An attribute is a name-value pair. Elements have an arbitrary
+ number of attributes, each with a unique name.
+
+ @note The attributes are not TiXmlNodes, since they are not
+ part of the tinyXML document object model. There are other
+ suggested ways to look at this problem.
+*/
+class TiXmlAttribute : public TiXmlBase
+{
+ friend class TiXmlAttributeSet;
+
+public:
+ /// Construct an empty attribute.
+ TiXmlAttribute() : TiXmlBase() {
+ document = 0;
+ prev = next = 0;
+ }
+
+#ifdef TIXML_USE_STL
+ /// std::string constructor.
+ TiXmlAttribute( const std::string& _name, const std::string& _value ) {
+ name = _name;
+ value = _value;
+ document = 0;
+ prev = next = 0;
+ }
+#endif
+
+ /// Construct an attribute with a name and value.
+ TiXmlAttribute( const char * _name, const char * _value ) {
+ name = _name;
+ value = _value;
+ document = 0;
+ prev = next = 0;
+ }
+
+ const char* Name() const {
+ return name.c_str(); ///< Return the name of this attribute.
+ }
+ const char* Value() const {
+ return value.c_str(); ///< Return the value of this attribute.
+ }
+#ifdef TIXML_USE_STL
+ const std::string& ValueStr() const {
+ return value; ///< Return the value of this attribute.
+ }
+#endif
+ int IntValue() const; ///< Return the value of this attribute, converted to an integer.
+ double DoubleValue() const; ///< Return the value of this attribute, converted to a double.
+
+ // Get the tinyxml string representation
+ const TIXML_STRING& NameTStr() const {
+ return name;
+ }
+
+ /** QueryIntValue examines the value string. It is an alternative to the
+ IntValue() method with richer error checking.
+ If the value is an integer, it is stored in 'value' and
+ the call returns TIXML_SUCCESS. If it is not
+ an integer, it returns TIXML_WRONG_TYPE.
+
+ A specialized but useful call. Note that for success it returns 0,
+ which is the opposite of almost all other TinyXml calls.
+ */
+ int QueryIntValue( int* _value ) const;
+ /// QueryDoubleValue examines the value string. See QueryIntValue().
+ int QueryDoubleValue( double* _value ) const;
+
+ void SetName( const char* _name ) {
+ name = _name; ///< Set the name of this attribute.
+ }
+ void SetValue( const char* _value ) {
+ value = _value; ///< Set the value.
+ }
+
+ void SetIntValue( int _value ); ///< Set the value from an integer.
+ void SetDoubleValue( double _value ); ///< Set the value from a double.
+
+#ifdef TIXML_USE_STL
+ /// STL std::string form.
+ void SetName( const std::string& _name ) {
+ name = _name;
+ }
+ /// STL std::string form.
+ void SetValue( const std::string& _value ) {
+ value = _value;
+ }
+#endif
+
+ /// Get the next sibling attribute in the DOM. Returns null at end.
+ const TiXmlAttribute* Next() const;
+ TiXmlAttribute* Next() {
+ return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Next() );
+ }
+
+ /// Get the previous sibling attribute in the DOM. Returns null at beginning.
+ const TiXmlAttribute* Previous() const;
+ TiXmlAttribute* Previous() {
+ return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Previous() );
+ }
+
+ bool operator==( const TiXmlAttribute& rhs ) const {
+ return rhs.name == name;
+ }
+ bool operator<( const TiXmlAttribute& rhs ) const {
+ return name < rhs.name;
+ }
+ bool operator>( const TiXmlAttribute& rhs ) const {
+ return name > rhs.name;
+ }
+
+ /* Attribute parsing starts: first letter of the name
+ returns: the next char after the value end quote
+ */
+ virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding );
+
+ // Prints this Attribute to a FILE stream.
+ virtual void Print( FILE* cfile, int depth ) const {
+ Print( cfile, depth, 0 );
+ }
+ void Print( FILE* cfile, int depth, TIXML_STRING* str ) const;
+
+ // [internal use]
+ // Set the document pointer so the attribute can report errors.
+ void SetDocument( TiXmlDocument* doc ) {
+ document = doc;
+ }
+
+private:
+ TiXmlAttribute( const TiXmlAttribute& ); // not implemented.
+ void operator=( const TiXmlAttribute& base ); // not allowed.
+
+ TiXmlDocument* document; // A pointer back to a document, for error reporting.
+ TIXML_STRING name;
+ TIXML_STRING value;
+ TiXmlAttribute* prev;
+ TiXmlAttribute* next;
+};
+
+
+/* A class used to manage a group of attributes.
+ It is only used internally, both by the ELEMENT and the DECLARATION.
+
+ The set can be changed transparent to the Element and Declaration
+ classes that use it, but NOT transparent to the Attribute
+ which has to implement a next() and previous() method. Which makes
+ it a bit problematic and prevents the use of STL.
+
+ This version is implemented with circular lists because:
+ - I like circular lists
+ - it demonstrates some independence from the (typical) doubly linked list.
+*/
+class TiXmlAttributeSet
+{
+public:
+ TiXmlAttributeSet();
+ ~TiXmlAttributeSet();
+
+ void Add( TiXmlAttribute* attribute );
+ void Remove( TiXmlAttribute* attribute );
+
+ const TiXmlAttribute* First() const {
+ return ( sentinel.next == &sentinel ) ? 0 : sentinel.next;
+ }
+ TiXmlAttribute* First() {
+ return ( sentinel.next == &sentinel ) ? 0 : sentinel.next;
+ }
+ const TiXmlAttribute* Last() const {
+ return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev;
+ }
+ TiXmlAttribute* Last() {
+ return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev;
+ }
+
+ const TiXmlAttribute* Find( const char* _name ) const;
+ TiXmlAttribute* Find( const char* _name ) {
+ return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttributeSet* >(this))->Find( _name ) );
+ }
+#ifdef TIXML_USE_STL
+ const TiXmlAttribute* Find( const std::string& _name ) const;
+ TiXmlAttribute* Find( const std::string& _name ) {
+ return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttributeSet* >(this))->Find( _name ) );
+ }
+
+#endif
+
+private:
+ //*ME: Because of hidden/disabled copy-construktor in TiXmlAttribute (sentinel-element),
+ //*ME: this class must be also use a hidden/disabled copy-constructor !!!
+ TiXmlAttributeSet( const TiXmlAttributeSet& ); // not allowed
+ void operator=( const TiXmlAttributeSet& ); // not allowed (as TiXmlAttribute)
+
+ TiXmlAttribute sentinel;
+};
+
+
+/** The element is a container class. It has a value, the element name,
+ and can contain other elements, text, comments, and unknowns.
+ Elements also contain an arbitrary number of attributes.
+*/
+class TiXmlElement : public TiXmlNode
+{
+public:
+ /// Construct an element.
+ TiXmlElement (const char * in_value);
+
+#ifdef TIXML_USE_STL
+ /// std::string constructor.
+ TiXmlElement( const std::string& _value );
+#endif
+
+ TiXmlElement( const TiXmlElement& );
+
+ void operator=( const TiXmlElement& base );
+
+ virtual ~TiXmlElement();
+
+ /** Given an attribute name, Attribute() returns the value
+ for the attribute of that name, or null if none exists.
+ */
+ const char* Attribute( const char* name ) const;
+
+ /** Given an attribute name, Attribute() returns the value
+ for the attribute of that name, or null if none exists.
+ If the attribute exists and can be converted to an integer,
+ the integer value will be put in the return 'i', if 'i'
+ is non-null.
+ */
+ const char* Attribute( const char* name, int* i ) const;
+
+ /** Given an attribute name, Attribute() returns the value
+ for the attribute of that name, or null if none exists.
+ If the attribute exists and can be converted to an double,
+ the double value will be put in the return 'd', if 'd'
+ is non-null.
+ */
+ const char* Attribute( const char* name, double* d ) const;
+
+ /** QueryIntAttribute examines the attribute - it is an alternative to the
+ Attribute() method with richer error checking.
+ If the attribute is an integer, it is stored in 'value' and
+ the call returns TIXML_SUCCESS. If it is not
+ an integer, it returns TIXML_WRONG_TYPE. If the attribute
+ does not exist, then TIXML_NO_ATTRIBUTE is returned.
+ */
+ int QueryIntAttribute( const char* name, int* _value ) const;
+ /// QueryDoubleAttribute examines the attribute - see QueryIntAttribute().
+ int QueryDoubleAttribute( const char* name, double* _value ) const;
+ /// QueryFloatAttribute examines the attribute - see QueryIntAttribute().
+ int QueryFloatAttribute( const char* name, float* _value ) const {
+ double d;
+ int result = QueryDoubleAttribute( name, &d );
+ if ( result == TIXML_SUCCESS ) {
+ *_value = (float)d;
+ }
+ return result;
+ }
+
+#ifdef TIXML_USE_STL
+ /** Template form of the attribute query which will try to read the
+ attribute into the specified type. Very easy, very powerful, but
+ be careful to make sure to call this with the correct type.
+
+ NOTE: This method doesn't work correctly for 'string' types.
+
+ @return TIXML_SUCCESS, TIXML_WRONG_TYPE, or TIXML_NO_ATTRIBUTE
+ */
+ template< typename T > int QueryValueAttribute( const std::string& name, T* outValue ) const {
+ const TiXmlAttribute* node = attributeSet.Find( name );
+ if ( !node )
+ return TIXML_NO_ATTRIBUTE;
+
+ std::stringstream sstream( node->ValueStr() );
+ sstream >> *outValue;
+ if ( !sstream.fail() )
+ return TIXML_SUCCESS;
+ return TIXML_WRONG_TYPE;
+ }
+ /*
+ This is - in theory - a bug fix for "QueryValueAtribute returns truncated std::string"
+ but template specialization is hard to get working cross-compiler. Leaving the bug for now.
+
+ // The above will fail for std::string because the space character is used as a seperator.
+ // Specialize for strings. Bug [ 1695429 ] QueryValueAtribute returns truncated std::string
+ template<> int QueryValueAttribute( const std::string& name, std::string* outValue ) const
+ {
+ const TiXmlAttribute* node = attributeSet.Find( name );
+ if ( !node )
+ return TIXML_NO_ATTRIBUTE;
+ *outValue = node->ValueStr();
+ return TIXML_SUCCESS;
+ }
+ */
+#endif
+
+ /** Sets an attribute of name to a given value. The attribute
+ will be created if it does not exist, or changed if it does.
+ */
+ void SetAttribute( const char* name, const char * _value );
+
+#ifdef TIXML_USE_STL
+ const std::string* Attribute( const std::string& name ) const;
+ const std::string* Attribute( const std::string& name, int* i ) const;
+ const std::string* Attribute( const std::string& name, double* d ) const;
+ int QueryIntAttribute( const std::string& name, int* _value ) const;
+ int QueryDoubleAttribute( const std::string& name, double* _value ) const;
+
+ /// STL std::string form.
+ void SetAttribute( const std::string& name, const std::string& _value );
+ ///< STL std::string form.
+ void SetAttribute( const std::string& name, int _value );
+#endif
+
+ /** Sets an attribute of name to a given value. The attribute
+ will be created if it does not exist, or changed if it does.
+ */
+ void SetAttribute( const char * name, int value );
+
+ /** Sets an attribute of name to a given value. The attribute
+ will be created if it does not exist, or changed if it does.
+ */
+ void SetDoubleAttribute( const char * name, double value );
+
+ /** Deletes an attribute with the given name.
+ */
+ void RemoveAttribute( const char * name );
+#ifdef TIXML_USE_STL
+ void RemoveAttribute( const std::string& name ) {
+ RemoveAttribute (name.c_str ()); ///< STL std::string form.
+ }
+#endif
+
+ const TiXmlAttribute* FirstAttribute() const {
+ return attributeSet.First(); ///< Access the first attribute in this element.
+ }
+ TiXmlAttribute* FirstAttribute() {
+ return attributeSet.First();
+ }
+ const TiXmlAttribute* LastAttribute() const {
+ return attributeSet.Last(); ///< Access the last attribute in this element.
+ }
+ TiXmlAttribute* LastAttribute() {
+ return attributeSet.Last();
+ }
+
+ /** Convenience function for easy access to the text inside an element. Although easy
+ and concise, GetText() is limited compared to getting the TiXmlText child
+ and accessing it directly.
+
+ If the first child of 'this' is a TiXmlText, the GetText()
+ returns the character string of the Text node, else null is returned.
+
+ This is a convenient method for getting the text of simple contained text:
+ @verbatim
+ <foo>This is text</foo>
+ const char* str = fooElement->GetText();
+ @endverbatim
+
+ 'str' will be a pointer to "This is text".
+
+ Note that this function can be misleading. If the element foo was created from
+ this XML:
+ @verbatim
+ <foo><b>This is text</b></foo>
+ @endverbatim
+
+ then the value of str would be null. The first child node isn't a text node, it is
+ another element. From this XML:
+ @verbatim
+ <foo>This is <b>text</b></foo>
+ @endverbatim
+ GetText() will return "This is ".
+
+ WARNING: GetText() accesses a child node - don't become confused with the
+ similarly named TiXmlHandle::Text() and TiXmlNode::ToText() which are
+ safe type casts on the referenced node.
+ */
+ const char* GetText() const;
+
+ /// Creates a new Element and returns it - the returned element is a copy.
+ virtual TiXmlNode* Clone() const;
+ // Print the Element to a FILE stream.
+ virtual void Print( FILE* cfile, int depth ) const;
+
+ /* Attribtue parsing starts: next char past '<'
+ returns: next char past '>'
+ */
+ virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding );
+
+ virtual const TiXmlElement* ToElement() const {
+ return this; ///< Cast to a more defined type. Will return null not of the requested type.
+ }
+ virtual TiXmlElement* ToElement() {
+ return this; ///< Cast to a more defined type. Will return null not of the requested type.
+ }
+
+ /** Walk the XML tree visiting this node and all of its children.
+ */
+ virtual bool Accept( TiXmlVisitor* visitor ) const;
+
+protected:
+
+ void CopyTo( TiXmlElement* target ) const;
+ void ClearThis(); // like clear, but initializes 'this' object as well
+
+ // Used to be public [internal use]
+#ifdef TIXML_USE_STL
+ virtual void StreamIn( std::istream * in, TIXML_STRING * tag );
+#endif
+ /* [internal use]
+ Reads the "value" of the element -- another element, or text.
+ This should terminate with the current end tag.
+ */
+ const char* ReadValue( const char* in, TiXmlParsingData* prevData, TiXmlEncoding encoding );
+
+private:
+
+ TiXmlAttributeSet attributeSet;
+};
+
+
+/** An XML comment.
+*/
+class TiXmlComment : public TiXmlNode
+{
+public:
+ /// Constructs an empty comment.
+ TiXmlComment() : TiXmlNode( TiXmlNode::COMMENT ) {}
+ /// Construct a comment from text.
+ TiXmlComment( const char* _value ) : TiXmlNode( TiXmlNode::COMMENT ) {
+ SetValue( _value );
+ }
+ TiXmlComment( const TiXmlComment& );
+ void operator=( const TiXmlComment& base );
+
+ virtual ~TiXmlComment() {}
+
+ /// Returns a copy of this Comment.
+ virtual TiXmlNode* Clone() const;
+ // Write this Comment to a FILE stream.
+ virtual void Print( FILE* cfile, int depth ) const;
+
+ /* Attribtue parsing starts: at the ! of the !--
+ returns: next char past '>'
+ */
+ virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding );
+
+ virtual const TiXmlComment* ToComment() const {
+ return this; ///< Cast to a more defined type. Will return null not of the requested type.
+ }
+ virtual TiXmlComment* ToComment() {
+ return this; ///< Cast to a more defined type. Will return null not of the requested type.
+ }
+
+ /** Walk the XML tree visiting this node and all of its children.
+ */
+ virtual bool Accept( TiXmlVisitor* visitor ) const;
+
+protected:
+ void CopyTo( TiXmlComment* target ) const;
+
+ // used to be public
+#ifdef TIXML_USE_STL
+ virtual void StreamIn( std::istream * in, TIXML_STRING * tag );
+#endif
+// virtual void StreamOut( TIXML_OSTREAM * out ) const;
+
+private:
+
+};
+
+
+/** XML text. A text node can have 2 ways to output the next. "normal" output
+ and CDATA. It will default to the mode it was parsed from the XML file and
+ you generally want to leave it alone, but you can change the output mode with
+ SetCDATA() and query it with CDATA().
+*/
+class TiXmlText : public TiXmlNode
+{
+ friend class TiXmlElement;
+public:
+ /** Constructor for text element. By default, it is treated as
+ normal, encoded text. If you want it be output as a CDATA text
+ element, set the parameter _cdata to 'true'
+ */
+ TiXmlText (const char * initValue ) : TiXmlNode (TiXmlNode::TEXT) {
+ SetValue( initValue );
+ cdata = false;
+ }
+ virtual ~TiXmlText() {}
+
+#ifdef TIXML_USE_STL
+ /// Constructor.
+ TiXmlText( const std::string& initValue ) : TiXmlNode (TiXmlNode::TEXT) {
+ SetValue( initValue );
+ cdata = false;
+ }
+#endif
+
+ TiXmlText( const TiXmlText& copy ) : TiXmlNode( TiXmlNode::TEXT ) {
+ copy.CopyTo( this );
+ }
+ void operator=( const TiXmlText& base ) {
+ base.CopyTo( this );
+ }
+
+ // Write this text object to a FILE stream.
+ virtual void Print( FILE* cfile, int depth ) const;
+
+ /// Queries whether this represents text using a CDATA section.
+ bool CDATA() const {
+ return cdata;
+ }
+ /// Turns on or off a CDATA representation of text.
+ void SetCDATA( bool _cdata ) {
+ cdata = _cdata;
+ }
+
+ virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding );
+
+ virtual const TiXmlText* ToText() const {
+ return this; ///< Cast to a more defined type. Will return null not of the requested type.
+ }
+ virtual TiXmlText* ToText() {
+ return this; ///< Cast to a more defined type. Will return null not of the requested type.
+ }
+
+ /** Walk the XML tree visiting this node and all of its children.
+ */
+ virtual bool Accept( TiXmlVisitor* content ) const;
+
+protected :
+ /// [internal use] Creates a new Element and returns it.
+ virtual TiXmlNode* Clone() const;
+ void CopyTo( TiXmlText* target ) const;
+
+ bool Blank() const; // returns true if all white space and new lines
+ // [internal use]
+#ifdef TIXML_USE_STL
+ virtual void StreamIn( std::istream * in, TIXML_STRING * tag );
+#endif
+
+private:
+ bool cdata; // true if this should be input and output as a CDATA style text element
+};
+
+
+/** In correct XML the declaration is the first entry in the file.
+ @verbatim
+ <?xml version="1.0" standalone="yes"?>
+ @endverbatim
+
+ TinyXml will happily read or write files without a declaration,
+ however. There are 3 possible attributes to the declaration:
+ version, encoding, and standalone.
+
+ Note: In this version of the code, the attributes are
+ handled as special cases, not generic attributes, simply
+ because there can only be at most 3 and they are always the same.
+*/
+class TiXmlDeclaration : public TiXmlNode
+{
+public:
+ /// Construct an empty declaration.
+ TiXmlDeclaration() : TiXmlNode( TiXmlNode::DECLARATION ) {}
+
+#ifdef TIXML_USE_STL
+ /// Constructor.
+ TiXmlDeclaration( const std::string& _version,
+ const std::string& _encoding,
+ const std::string& _standalone );
+#endif
+
+ /// Construct.
+ TiXmlDeclaration( const char* _version,
+ const char* _encoding,
+ const char* _standalone );
+
+ TiXmlDeclaration( const TiXmlDeclaration& copy );
+ void operator=( const TiXmlDeclaration& copy );
+
+ virtual ~TiXmlDeclaration() {}
+
+ /// Version. Will return an empty string if none was found.
+ const char *Version() const {
+ return version.c_str ();
+ }
+ /// Encoding. Will return an empty string if none was found.
+ const char *Encoding() const {
+ return encoding.c_str ();
+ }
+ /// Is this a standalone document?
+ const char *Standalone() const {
+ return standalone.c_str ();
+ }
+
+ /// Creates a copy of this Declaration and returns it.
+ virtual TiXmlNode* Clone() const;
+ // Print this declaration to a FILE stream.
+ virtual void Print( FILE* cfile, int depth, TIXML_STRING* str ) const;
+ virtual void Print( FILE* cfile, int depth ) const {
+ Print( cfile, depth, 0 );
+ }
+
+ virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding );
+
+ virtual const TiXmlDeclaration* ToDeclaration() const {
+ return this; ///< Cast to a more defined type. Will return null not of the requested type.
+ }
+ virtual TiXmlDeclaration* ToDeclaration() {
+ return this; ///< Cast to a more defined type. Will return null not of the requested type.
+ }
+
+ /** Walk the XML tree visiting this node and all of its children.
+ */
+ virtual bool Accept( TiXmlVisitor* visitor ) const;
+
+protected:
+ void CopyTo( TiXmlDeclaration* target ) const;
+ // used to be public
+#ifdef TIXML_USE_STL
+ virtual void StreamIn( std::istream * in, TIXML_STRING * tag );
+#endif
+
+private:
+
+ TIXML_STRING version;
+ TIXML_STRING encoding;
+ TIXML_STRING standalone;
+};
+
+
+/** Any tag that tinyXml doesn't recognize is saved as an
+ unknown. It is a tag of text, but should not be modified.
+ It will be written back to the XML, unchanged, when the file
+ is saved.
+
+ DTD tags get thrown into TiXmlUnknowns.
+*/
+class TiXmlUnknown : public TiXmlNode
+{
+public:
+ TiXmlUnknown() : TiXmlNode( TiXmlNode::UNKNOWN ) {}
+ virtual ~TiXmlUnknown() {}
+
+ TiXmlUnknown( const TiXmlUnknown& copy ) : TiXmlNode( TiXmlNode::UNKNOWN ) {
+ copy.CopyTo( this );
+ }
+ void operator=( const TiXmlUnknown& copy ) {
+ copy.CopyTo( this );
+ }
+
+ /// Creates a copy of this Unknown and returns it.
+ virtual TiXmlNode* Clone() const;
+ // Print this Unknown to a FILE stream.
+ virtual void Print( FILE* cfile, int depth ) const;
+
+ virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding );
+
+ virtual const TiXmlUnknown* ToUnknown() const {
+ return this; ///< Cast to a more defined type. Will return null not of the requested type.
+ }
+ virtual TiXmlUnknown* ToUnknown() {
+ return this; ///< Cast to a more defined type. Will return null not of the requested type.
+ }
+
+ /** Walk the XML tree visiting this node and all of its children.
+ */
+ virtual bool Accept( TiXmlVisitor* content ) const;
+
+protected:
+ void CopyTo( TiXmlUnknown* target ) const;
+
+#ifdef TIXML_USE_STL
+ virtual void StreamIn( std::istream * in, TIXML_STRING * tag );
+#endif
+
+private:
+
+};
+
+
+/** Always the top level node. A document binds together all the
+ XML pieces. It can be saved, loaded, and printed to the screen.
+ The 'value' of a document node is the xml file name.
+*/
+class TiXmlDocument : public TiXmlNode
+{
+public:
+ /// Create an empty document, that has no name.
+ TiXmlDocument();
+ /// Create a document with a name. The name of the document is also the filename of the xml.
+ TiXmlDocument( const char * documentName );
+
+#ifdef TIXML_USE_STL
+ /// Constructor.
+ TiXmlDocument( const std::string& documentName );
+#endif
+
+ TiXmlDocument( const TiXmlDocument& copy );
+ void operator=( const TiXmlDocument& copy );
+
+ virtual ~TiXmlDocument() {}
+
+ /** Load a file using the current document value.
+ Returns true if successful. Will delete any existing
+ document data before loading.
+ */
+ bool LoadFile( TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );
+ /// Save a file using the current document value. Returns true if successful.
+ bool SaveFile() const;
+ /// Load a file using the given filename. Returns true if successful.
+ bool LoadFile( const char * filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );
+ /// Save a file using the given filename. Returns true if successful.
+ bool SaveFile( const char * filename ) const;
+ /** Load a file using the given FILE*. Returns true if successful. Note that this method
+ doesn't stream - the entire object pointed at by the FILE*
+ will be interpreted as an XML file. TinyXML doesn't stream in XML from the current
+ file location. Streaming may be added in the future.
+ */
+ bool LoadFile( FILE*, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );
+ /// Save a file using the given FILE*. Returns true if successful.
+ bool SaveFile( FILE* ) const;
+
+#ifdef TIXML_USE_STL
+ bool LoadFile( const std::string& filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ) { ///< STL std::string version.
+// StringToBuffer f( filename );
+// return ( f.buffer && LoadFile( f.buffer, encoding ));
+ return LoadFile( filename.c_str(), encoding );
+ }
+ bool SaveFile( const std::string& filename ) const { ///< STL std::string version.
+// StringToBuffer f( filename );
+// return ( f.buffer && SaveFile( f.buffer ));
+ return SaveFile( filename.c_str() );
+ }
+#endif
+
+ /** Parse the given null terminated block of xml data. Passing in an encoding to this
+ method (either TIXML_ENCODING_LEGACY or TIXML_ENCODING_UTF8 will force TinyXml
+ to use that encoding, regardless of what TinyXml might otherwise try to detect.
+ */
+ virtual const char* Parse( const char* p, TiXmlParsingData* data = 0, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING );
+
+ /** Get the root element -- the only top level element -- of the document.
+ In well formed XML, there should only be one. TinyXml is tolerant of
+ multiple elements at the document level.
+ */
+ const TiXmlElement* RootElement() const {
+ return FirstChildElement();
+ }
+ TiXmlElement* RootElement() {
+ return FirstChildElement();
+ }
+
+ /** If an error occurs, Error will be set to true. Also,
+ - The ErrorId() will contain the integer identifier of the error (not generally useful)
+ - The ErrorDesc() method will return the name of the error. (very useful)
+ - The ErrorRow() and ErrorCol() will return the location of the error (if known)
+ */
+ bool Error() const {
+ return error;
+ }
+
+ /// Contains a textual (english) description of the error if one occurs.
+ const char * ErrorDesc() const {
+ return errorDesc.c_str ();
+ }
+
+ /** Generally, you probably want the error string ( ErrorDesc() ). But if you
+ prefer the ErrorId, this function will fetch it.
+ */
+ int ErrorId() const {
+ return errorId;
+ }
+
+ /** Returns the location (if known) of the error. The first column is column 1,
+ and the first row is row 1. A value of 0 means the row and column wasn't applicable
+ (memory errors, for example, have no row/column) or the parser lost the error. (An
+ error in the error reporting, in that case.)
+
+ @sa SetTabSize, Row, Column
+ */
+ int ErrorRow() const {
+ return errorLocation.row+1;
+ }
+ int ErrorCol() const {
+ return errorLocation.col+1; ///< The column where the error occured. See ErrorRow()
+ }
+
+ /** SetTabSize() allows the error reporting functions (ErrorRow() and ErrorCol())
+ to report the correct values for row and column. It does not change the output
+ or input in any way.
+
+ By calling this method, with a tab size
+ greater than 0, the row and column of each node and attribute is stored
+ when the file is loaded. Very useful for tracking the DOM back in to
+ the source file.
+
+ The tab size is required for calculating the location of nodes. If not
+ set, the default of 4 is used. The tabsize is set per document. Setting
+ the tabsize to 0 disables row/column tracking.
+
+ Note that row and column tracking is not supported when using operator>>.
+
+ The tab size needs to be enabled before the parse or load. Correct usage:
+ @verbatim
+ TiXmlDocument doc;
+ doc.SetTabSize( 8 );
+ doc.Load( "myfile.xml" );
+ @endverbatim
+
+ @sa Row, Column
+ */
+ void SetTabSize( int _tabsize ) {
+ tabsize = _tabsize;
+ }
+
+ int TabSize() const {
+ return tabsize;
+ }
+
+ /** If you have handled the error, it can be reset with this call. The error
+ state is automatically cleared if you Parse a new XML block.
+ */
+ void ClearError() {
+ error = false;
+ errorId = 0;
+ errorDesc = "";
+ errorLocation.row = errorLocation.col = 0;
+ //errorLocation.last = 0;
+ }
+
+ /** Write the document to standard out using formatted printing ("pretty print"). */
+ void Print() const {
+ Print( stdout, 0 );
+ }
+
+ /* Write the document to a string using formatted printing ("pretty print"). This
+ will allocate a character array (new char[]) and return it as a pointer. The
+ calling code pust call delete[] on the return char* to avoid a memory leak.
+ */
+ //char* PrintToMemory() const;
+
+ /// Print this Document to a FILE stream.
+ virtual void Print( FILE* cfile, int depth = 0 ) const;
+ // [internal use]
+ void SetError( int err, const char* errorLocation, TiXmlParsingData* prevData, TiXmlEncoding encoding );
+
+ virtual const TiXmlDocument* ToDocument() const {
+ return this; ///< Cast to a more defined type. Will return null not of the requested type.
+ }
+ virtual TiXmlDocument* ToDocument() {
+ return this; ///< Cast to a more defined type. Will return null not of the requested type.
+ }
+
+ /** Walk the XML tree visiting this node and all of its children.
+ */
+ virtual bool Accept( TiXmlVisitor* content ) const;
+
+protected :
+ // [internal use]
+ virtual TiXmlNode* Clone() const;
+#ifdef TIXML_USE_STL
+ virtual void StreamIn( std::istream * in, TIXML_STRING * tag );
+#endif
+
+private:
+ void CopyTo( TiXmlDocument* target ) const;
+
+ bool error;
+ int errorId;
+ TIXML_STRING errorDesc;
+ int tabsize;
+ TiXmlCursor errorLocation;
+ bool useMicrosoftBOM; // the UTF-8 BOM were found when read. Note this, and try to write.
+};
+
+
+/**
+ A TiXmlHandle is a class that wraps a node pointer with null checks; this is
+ an incredibly useful thing. Note that TiXmlHandle is not part of the TinyXml
+ DOM structure. It is a separate utility class.
+
+ Take an example:
+ @verbatim
+ <Document>
+ <Element attributeA = "valueA">
+ <Child attributeB = "value1" />
+ <Child attributeB = "value2" />
+ </Element>
+ <Document>
+ @endverbatim
+
+ Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very
+ easy to write a *lot* of code that looks like:
+
+ @verbatim
+ TiXmlElement* root = document.FirstChildElement( "Document" );
+ if ( root )
+ {
+ TiXmlElement* element = root->FirstChildElement( "Element" );
+ if ( element )
+ {
+ TiXmlElement* child = element->FirstChildElement( "Child" );
+ if ( child )
+ {
+ TiXmlElement* child2 = child->NextSiblingElement( "Child" );
+ if ( child2 )
+ {
+ // Finally do something useful.
+ @endverbatim
+
+ And that doesn't even cover "else" cases. TiXmlHandle addresses the verbosity
+ of such code. A TiXmlHandle checks for null pointers so it is perfectly safe
+ and correct to use:
+
+ @verbatim
+ TiXmlHandle docHandle( &document );
+ TiXmlElement* child2 = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", 1 ).ToElement();
+ if ( child2 )
+ {
+ // do something useful
+ @endverbatim
+
+ Which is MUCH more concise and useful.
+
+ It is also safe to copy handles - internally they are nothing more than node pointers.
+ @verbatim
+ TiXmlHandle handleCopy = handle;
+ @endverbatim
+
+ What they should not be used for is iteration:
+
+ @verbatim
+ int i=0;
+ while ( true )
+ {
+ TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", i ).ToElement();
+ if ( !child )
+ break;
+ // do something
+ ++i;
+ }
+ @endverbatim
+
+ It seems reasonable, but it is in fact two embedded while loops. The Child method is
+ a linear walk to find the element, so this code would iterate much more than it needs
+ to. Instead, prefer:
+
+ @verbatim
+ TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).FirstChild( "Child" ).ToElement();
+
+ for( child; child; child=child->NextSiblingElement() )
+ {
+ // do something
+ }
+ @endverbatim
+*/
+class TiXmlHandle
+{
+public:
+ /// Create a handle from any node (at any depth of the tree.) This can be a null pointer.
+ TiXmlHandle( TiXmlNode* _node ) {
+ this->node = _node;
+ }
+ /// Copy constructor
+ TiXmlHandle( const TiXmlHandle& ref ) {
+ this->node = ref.node;
+ }
+ TiXmlHandle operator=( const TiXmlHandle& ref ) {
+ this->node = ref.node;
+ return *this;
+ }
+
+ /// Return a handle to the first child node.
+ TiXmlHandle FirstChild() const;
+ /// Return a handle to the first child node with the given name.
+ TiXmlHandle FirstChild( const char * value ) const;
+ /// Return a handle to the first child element.
+ TiXmlHandle FirstChildElement() const;
+ /// Return a handle to the first child element with the given name.
+ TiXmlHandle FirstChildElement( const char * value ) const;
+
+ /** Return a handle to the "index" child with the given name.
+ The first child is 0, the second 1, etc.
+ */
+ TiXmlHandle Child( const char* value, int index ) const;
+ /** Return a handle to the "index" child.
+ The first child is 0, the second 1, etc.
+ */
+ TiXmlHandle Child( int index ) const;
+ /** Return a handle to the "index" child element with the given name.
+ The first child element is 0, the second 1, etc. Note that only TiXmlElements
+ are indexed: other types are not counted.
+ */
+ TiXmlHandle ChildElement( const char* value, int index ) const;
+ /** Return a handle to the "index" child element.
+ The first child element is 0, the second 1, etc. Note that only TiXmlElements
+ are indexed: other types are not counted.
+ */
+ TiXmlHandle ChildElement( int index ) const;
+
+#ifdef TIXML_USE_STL
+ TiXmlHandle FirstChild( const std::string& _value ) const {
+ return FirstChild( _value.c_str() );
+ }
+ TiXmlHandle FirstChildElement( const std::string& _value ) const {
+ return FirstChildElement( _value.c_str() );
+ }
+
+ TiXmlHandle Child( const std::string& _value, int index ) const {
+ return Child( _value.c_str(), index );
+ }
+ TiXmlHandle ChildElement( const std::string& _value, int index ) const {
+ return ChildElement( _value.c_str(), index );
+ }
+#endif
+
+ /** Return the handle as a TiXmlNode. This may return null.
+ */
+ TiXmlNode* ToNode() const {
+ return node;
+ }
+ /** Return the handle as a TiXmlElement. This may return null.
+ */
+ TiXmlElement* ToElement() const {
+ return ( ( node && node->ToElement() ) ? node->ToElement() : 0 );
+ }
+ /** Return the handle as a TiXmlText. This may return null.
+ */
+ TiXmlText* ToText() const {
+ return ( ( node && node->ToText() ) ? node->ToText() : 0 );
+ }
+ /** Return the handle as a TiXmlUnknown. This may return null.
+ */
+ TiXmlUnknown* ToUnknown() const {
+ return ( ( node && node->ToUnknown() ) ? node->ToUnknown() : 0 );
+ }
+
+ /** @deprecated use ToNode.
+ Return the handle as a TiXmlNode. This may return null.
+ */
+ TiXmlNode* Node() const {
+ return ToNode();
+ }
+ /** @deprecated use ToElement.
+ Return the handle as a TiXmlElement. This may return null.
+ */
+ TiXmlElement* Element() const {
+ return ToElement();
+ }
+ /** @deprecated use ToText()
+ Return the handle as a TiXmlText. This may return null.
+ */
+ TiXmlText* Text() const {
+ return ToText();
+ }
+ /** @deprecated use ToUnknown()
+ Return the handle as a TiXmlUnknown. This may return null.
+ */
+ TiXmlUnknown* Unknown() const {
+ return ToUnknown();
+ }
+
+private:
+ TiXmlNode* node;
+};
+
+
+/** Print to memory functionality. The TiXmlPrinter is useful when you need to:
+
+ -# Print to memory (especially in non-STL mode)
+ -# Control formatting (line endings, etc.)
+
+ When constructed, the TiXmlPrinter is in its default "pretty printing" mode.
+ Before calling Accept() you can call methods to control the printing
+ of the XML document. After TiXmlNode::Accept() is called, the printed document can
+ be accessed via the CStr(), Str(), and Size() methods.
+
+ TiXmlPrinter uses the Visitor API.
+ @verbatim
+ TiXmlPrinter printer;
+ printer.SetIndent( "\t" );
+
+ doc.Accept( &printer );
+ fprintf( stdout, "%s", printer.CStr() );
+ @endverbatim
+*/
+class TiXmlPrinter : public TiXmlVisitor
+{
+public:
+ TiXmlPrinter() : depth( 0 ), simpleTextPrint( false ),
+ buffer(), indent( " " ), lineBreak( "\n" ) {}
+
+ virtual bool VisitEnter( const TiXmlDocument& doc );
+ virtual bool VisitExit( const TiXmlDocument& doc );
+
+ virtual bool VisitEnter( const TiXmlElement& element, const TiXmlAttribute* firstAttribute );
+ virtual bool VisitExit( const TiXmlElement& element );
+
+ virtual bool Visit( const TiXmlDeclaration& declaration );
+ virtual bool Visit( const TiXmlText& text );
+ virtual bool Visit( const TiXmlComment& comment );
+ virtual bool Visit( const TiXmlUnknown& unknown );
+
+ /** Set the indent characters for printing. By default 4 spaces
+ but tab (\t) is also useful, or null/empty string for no indentation.
+ */
+ void SetIndent( const char* _indent ) {
+ indent = _indent ? _indent : "" ;
+ }
+ /// Query the indention string.
+ const char* Indent() {
+ return indent.c_str();
+ }
+ /** Set the line breaking string. By default set to newline (\n).
+ Some operating systems prefer other characters, or can be
+ set to the null/empty string for no indenation.
+ */
+ void SetLineBreak( const char* _lineBreak ) {
+ lineBreak = _lineBreak ? _lineBreak : "";
+ }
+ /// Query the current line breaking string.
+ const char* LineBreak() {
+ return lineBreak.c_str();
+ }
+
+ /** Switch over to "stream printing" which is the most dense formatting without
+ linebreaks. Common when the XML is needed for network transmission.
+ */
+ void SetStreamPrinting() {
+ indent = "";
+ lineBreak = "";
+ }
+ /// Return the result.
+ const char* CStr() {
+ return buffer.c_str();
+ }
+ /// Return the length of the result string.
+ size_t Size() {
+ return buffer.size();
+ }
+
+#ifdef TIXML_USE_STL
+ /// Return the result.
+ const std::string& Str() {
+ return buffer;
+ }
+#endif
+
+private:
+ void DoIndent() {
+ for( int i=0; i<depth; ++i )
+ buffer += indent;
+ }
+ void DoLineBreak() {
+ buffer += lineBreak;
+ }
+
+ int depth;
+ bool simpleTextPrint;
+ TIXML_STRING buffer;
+ TIXML_STRING indent;
+ TIXML_STRING lineBreak;
+};
+
+
+#ifdef _MSC_VER
+#pragma warning( pop )
+#endif
+
+#endif
+
diff --git a/mert/TERsrc/tinyxmlerror.cpp b/mert/TERsrc/tinyxmlerror.cpp
new file mode 100644
index 000000000..49f3185d7
--- /dev/null
+++ b/mert/TERsrc/tinyxmlerror.cpp
@@ -0,0 +1,52 @@
+/*
+www.sourceforge.net/projects/tinyxml
+Original code (2.0 and earlier )copyright (c) 2000-2006 Lee Thomason (www.grinninglizard.com)
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must
+not claim that you wrote the original software. If you use this
+software in a product, an acknowledgment in the product documentation
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source
+distribution.
+*/
+
+#include "tinyxml.h"
+
+// The goal of the seperate error file is to make the first
+// step towards localization. tinyxml (currently) only supports
+// english error messages, but the could now be translated.
+//
+// It also cleans up the code a bit.
+//
+
+const char* TiXmlBase::errorString[ TIXML_ERROR_STRING_COUNT ] = {
+ "No error",
+ "Error",
+ "Failed to open file",
+ "Memory allocation failed.",
+ "Error parsing Element.",
+ "Failed to read Element name",
+ "Error reading Element value.",
+ "Error reading Attributes.",
+ "Error: empty tag.",
+ "Error reading end tag.",
+ "Error parsing Unknown.",
+ "Error parsing Comment.",
+ "Error parsing Declaration.",
+ "Error document empty.",
+ "Error null (0) or unexpected EOF found in input stream.",
+ "Error parsing CDATA.",
+ "Error when TiXmlDocument added to document, because TiXmlDocument can only be at the root.",
+};
diff --git a/mert/TERsrc/tinyxmlparser.cpp b/mert/TERsrc/tinyxmlparser.cpp
new file mode 100644
index 000000000..038171172
--- /dev/null
+++ b/mert/TERsrc/tinyxmlparser.cpp
@@ -0,0 +1,1457 @@
+/*
+www.sourceforge.net/projects/tinyxml
+Original code (2.0 and earlier )copyright (c) 2000-2002 Lee Thomason (www.grinninglizard.com)
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must
+not claim that you wrote the original software. If you use this
+software in a product, an acknowledgment in the product documentation
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source
+distribution.
+*/
+
+#include <ctype.h>
+#include <stddef.h>
+
+#include "tinyxml.h"
+
+//#define DEBUG_PARSER
+#if defined( DEBUG_PARSER )
+# if defined( DEBUG ) && defined( _MSC_VER )
+# include <windows.h>
+# define TIXML_LOG OutputDebugString
+# else
+# define TIXML_LOG printf
+# endif
+#endif
+
+// Note tha "PutString" hardcodes the same list. This
+// is less flexible than it appears. Changing the entries
+// or order will break putstring.
+TiXmlBase::Entity TiXmlBase::entity[ NUM_ENTITY ] = {
+ { "&amp;", 5, '&' },
+ { "&lt;", 4, '<' },
+ { "&gt;", 4, '>' },
+ { "&quot;", 6, '\"' },
+ { "&apos;", 6, '\'' }
+};
+
+// Bunch of unicode info at:
+// http://www.unicode.org/faq/utf_bom.html
+// Including the basic of this table, which determines the #bytes in the
+// sequence from the lead byte. 1 placed for invalid sequences --
+// although the result will be junk, pass it through as much as possible.
+// Beware of the non-characters in UTF-8:
+// ef bb bf (Microsoft "lead bytes")
+// ef bf be
+// ef bf bf
+
+const unsigned char TIXML_UTF_LEAD_0 = 0xefU;
+const unsigned char TIXML_UTF_LEAD_1 = 0xbbU;
+const unsigned char TIXML_UTF_LEAD_2 = 0xbfU;
+
+const int TiXmlBase::utf8ByteTable[256] = {
+ // 0 1 2 3 4 5 6 7 8 9 a b c d e f
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x00
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x10
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x20
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x30
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x40
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x50
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x60
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x70 End of ASCII range
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x80 0x80 to 0xc1 invalid
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x90
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xa0
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xb0
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xc0 0xc2 to 0xdf 2 byte
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xd0
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 0xe0 0xe0 to 0xef 3 byte
+ 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // 0xf0 0xf0 to 0xf4 4 byte, 0xf5 and higher invalid
+};
+
+
+void TiXmlBase::ConvertUTF32ToUTF8( unsigned long input, char* output, int* length )
+{
+ const unsigned long BYTE_MASK = 0xBF;
+ const unsigned long BYTE_MARK = 0x80;
+ const unsigned long FIRST_BYTE_MARK[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
+
+ if (input < 0x80)
+ *length = 1;
+ else if ( input < 0x800 )
+ *length = 2;
+ else if ( input < 0x10000 )
+ *length = 3;
+ else if ( input < 0x200000 )
+ *length = 4;
+ else {
+ *length = 0; // This code won't covert this correctly anyway.
+ return;
+ }
+
+ output += *length;
+
+ // Scary scary fall throughs.
+ switch (*length) {
+ case 4:
+ --output;
+ *output = (char)((input | BYTE_MARK) & BYTE_MASK);
+ input >>= 6;
+ case 3:
+ --output;
+ *output = (char)((input | BYTE_MARK) & BYTE_MASK);
+ input >>= 6;
+ case 2:
+ --output;
+ *output = (char)((input | BYTE_MARK) & BYTE_MASK);
+ input >>= 6;
+ case 1:
+ --output;
+ *output = (char)(input | FIRST_BYTE_MARK[*length]);
+ }
+}
+
+
+/*static*/ int TiXmlBase::IsAlpha( unsigned char anyByte, TiXmlEncoding /*encoding*/ )
+{
+ // This will only work for low-ascii, everything else is assumed to be a valid
+ // letter. I'm not sure this is the best approach, but it is quite tricky trying
+ // to figure out alhabetical vs. not across encoding. So take a very
+ // conservative approach.
+
+// if ( encoding == TIXML_ENCODING_UTF8 )
+// {
+ if ( anyByte < 127 )
+ return isalpha( anyByte );
+ else
+ return 1; // What else to do? The unicode set is huge...get the english ones right.
+// }
+// else
+// {
+// return isalpha( anyByte );
+// }
+}
+
+
+/*static*/ int TiXmlBase::IsAlphaNum( unsigned char anyByte, TiXmlEncoding /*encoding*/ )
+{
+ // This will only work for low-ascii, everything else is assumed to be a valid
+ // letter. I'm not sure this is the best approach, but it is quite tricky trying
+ // to figure out alhabetical vs. not across encoding. So take a very
+ // conservative approach.
+
+// if ( encoding == TIXML_ENCODING_UTF8 )
+// {
+ if ( anyByte < 127 )
+ return isalnum( anyByte );
+ else
+ return 1; // What else to do? The unicode set is huge...get the english ones right.
+// }
+// else
+// {
+// return isalnum( anyByte );
+// }
+}
+
+
+class TiXmlParsingData
+{
+ friend class TiXmlDocument;
+public:
+ void Stamp( const char* now, TiXmlEncoding encoding );
+
+ const TiXmlCursor& Cursor() {
+ return cursor;
+ }
+
+private:
+ // Only used by the document!
+ TiXmlParsingData( const char* start, int _tabsize, int row, int col ) {
+ assert( start );
+ stamp = start;
+ tabsize = _tabsize;
+ cursor.row = row;
+ cursor.col = col;
+ }
+
+ TiXmlCursor cursor;
+ const char* stamp;
+ int tabsize;
+};
+
+
+void TiXmlParsingData::Stamp( const char* now, TiXmlEncoding encoding )
+{
+ assert( now );
+
+ // Do nothing if the tabsize is 0.
+ if ( tabsize < 1 ) {
+ return;
+ }
+
+ // Get the current row, column.
+ int row = cursor.row;
+ int col = cursor.col;
+ const char* p = stamp;
+ assert( p );
+
+ while ( p < now ) {
+ // Treat p as unsigned, so we have a happy compiler.
+ const unsigned char* pU = (const unsigned char*)p;
+
+ // Code contributed by Fletcher Dunn: (modified by lee)
+ switch (*pU) {
+ case 0:
+ // We *should* never get here, but in case we do, don't
+ // advance past the terminating null character, ever
+ return;
+
+ case '\r':
+ // bump down to the next line
+ ++row;
+ col = 0;
+ // Eat the character
+ ++p;
+
+ // Check for \r\n sequence, and treat this as a single character
+ if (*p == '\n') {
+ ++p;
+ }
+ break;
+
+ case '\n':
+ // bump down to the next line
+ ++row;
+ col = 0;
+
+ // Eat the character
+ ++p;
+
+ // Check for \n\r sequence, and treat this as a single
+ // character. (Yes, this bizarre thing does occur still
+ // on some arcane platforms...)
+ if (*p == '\r') {
+ ++p;
+ }
+ break;
+
+ case '\t':
+ // Eat the character
+ ++p;
+
+ // Skip to next tab stop
+ col = (col / tabsize + 1) * tabsize;
+ break;
+
+ case TIXML_UTF_LEAD_0:
+ if ( encoding == TIXML_ENCODING_UTF8 ) {
+ if ( *(p+1) && *(p+2) ) {
+ // In these cases, don't advance the column. These are
+ // 0-width spaces.
+ if ( *(pU+1)==TIXML_UTF_LEAD_1 && *(pU+2)==TIXML_UTF_LEAD_2 )
+ p += 3;
+ else if ( *(pU+1)==0xbfU && *(pU+2)==0xbeU )
+ p += 3;
+ else if ( *(pU+1)==0xbfU && *(pU+2)==0xbfU )
+ p += 3;
+ else {
+ p +=3; // A normal character.
+ ++col;
+ }
+ }
+ } else {
+ ++p;
+ ++col;
+ }
+ break;
+
+ default:
+ if ( encoding == TIXML_ENCODING_UTF8 ) {
+ // Eat the 1 to 4 byte utf8 character.
+ int step = TiXmlBase::utf8ByteTable[*((const unsigned char*)p)];
+ if ( step == 0 )
+ step = 1; // Error case from bad encoding, but handle gracefully.
+ p += step;
+
+ // Just advance one column, of course.
+ ++col;
+ } else {
+ ++p;
+ ++col;
+ }
+ break;
+ }
+ }
+ cursor.row = row;
+ cursor.col = col;
+ assert( cursor.row >= -1 );
+ assert( cursor.col >= -1 );
+ stamp = p;
+ assert( stamp );
+}
+
+
+const char* TiXmlBase::SkipWhiteSpace( const char* p, TiXmlEncoding encoding )
+{
+ if ( !p || !*p ) {
+ return 0;
+ }
+ if ( encoding == TIXML_ENCODING_UTF8 ) {
+ while ( *p ) {
+ const unsigned char* pU = (const unsigned char*)p;
+
+ // Skip the stupid Microsoft UTF-8 Byte order marks
+ if ( *(pU+0)==TIXML_UTF_LEAD_0
+ && *(pU+1)==TIXML_UTF_LEAD_1
+ && *(pU+2)==TIXML_UTF_LEAD_2 ) {
+ p += 3;
+ continue;
+ } else if(*(pU+0)==TIXML_UTF_LEAD_0
+ && *(pU+1)==0xbfU
+ && *(pU+2)==0xbeU ) {
+ p += 3;
+ continue;
+ } else if(*(pU+0)==TIXML_UTF_LEAD_0
+ && *(pU+1)==0xbfU
+ && *(pU+2)==0xbfU ) {
+ p += 3;
+ continue;
+ }
+
+ if ( IsWhiteSpace( *p ) || *p == '\n' || *p =='\r' ) // Still using old rules for white space.
+ ++p;
+ else
+ break;
+ }
+ } else {
+ while ( *p && IsWhiteSpace( *p ) || *p == '\n' || *p =='\r' )
+ ++p;
+ }
+
+ return p;
+}
+
+#ifdef TIXML_USE_STL
+/*static*/ bool TiXmlBase::StreamWhiteSpace( std::istream * in, TIXML_STRING * tag )
+{
+ for( ;; ) {
+ if ( !in->good() ) return false;
+
+ int c = in->peek();
+ // At this scope, we can't get to a document. So fail silently.
+ if ( !IsWhiteSpace( c ) || c <= 0 )
+ return true;
+
+ *tag += (char) in->get();
+ }
+}
+
+/*static*/ bool TiXmlBase::StreamTo( std::istream * in, int character, TIXML_STRING * tag )
+{
+ //assert( character > 0 && character < 128 ); // else it won't work in utf-8
+ while ( in->good() ) {
+ int c = in->peek();
+ if ( c == character )
+ return true;
+ if ( c <= 0 ) // Silent failure: can't get document at this scope
+ return false;
+
+ in->get();
+ *tag += (char) c;
+ }
+ return false;
+}
+#endif
+
+// One of TinyXML's more performance demanding functions. Try to keep the memory overhead down. The
+// "assign" optimization removes over 10% of the execution time.
+//
+const char* TiXmlBase::ReadName( const char* p, TIXML_STRING * name, TiXmlEncoding encoding )
+{
+ // Oddly, not supported on some comilers,
+ //name->clear();
+ // So use this:
+ *name = "";
+ assert( p );
+
+ // Names start with letters or underscores.
+ // Of course, in unicode, tinyxml has no idea what a letter *is*. The
+ // algorithm is generous.
+ //
+ // After that, they can be letters, underscores, numbers,
+ // hyphens, or colons. (Colons are valid ony for namespaces,
+ // but tinyxml can't tell namespaces from names.)
+ if ( p && *p
+ && ( IsAlpha( (unsigned char) *p, encoding ) || *p == '_' ) ) {
+ const char* start = p;
+ while( p && *p
+ && ( IsAlphaNum( (unsigned char ) *p, encoding )
+ || *p == '_'
+ || *p == '-'
+ || *p == '.'
+ || *p == ':' ) ) {
+ //(*name) += *p; // expensive
+ ++p;
+ }
+ if ( p-start > 0 ) {
+ name->assign( start, p-start );
+ }
+ return p;
+ }
+ return 0;
+}
+
+const char* TiXmlBase::GetEntity( const char* p, char* value, int* length, TiXmlEncoding encoding )
+{
+ // Presume an entity, and pull it out.
+ TIXML_STRING ent;
+ int i;
+ *length = 0;
+
+ if ( *(p+1) && *(p+1) == '#' && *(p+2) ) {
+ unsigned long ucs = 0;
+ ptrdiff_t delta = 0;
+ unsigned mult = 1;
+
+ if ( *(p+2) == 'x' ) {
+ // Hexadecimal.
+ if ( !*(p+3) ) return 0;
+
+ const char* q = p+3;
+ q = strchr( q, ';' );
+
+ if ( !q || !*q ) return 0;
+
+ delta = q-p;
+ --q;
+
+ while ( *q != 'x' ) {
+ if ( *q >= '0' && *q <= '9' )
+ ucs += mult * (*q - '0');
+ else if ( *q >= 'a' && *q <= 'f' )
+ ucs += mult * (*q - 'a' + 10);
+ else if ( *q >= 'A' && *q <= 'F' )
+ ucs += mult * (*q - 'A' + 10 );
+ else
+ return 0;
+ mult *= 16;
+ --q;
+ }
+ } else {
+ // Decimal.
+ if ( !*(p+2) ) return 0;
+
+ const char* q = p+2;
+ q = strchr( q, ';' );
+
+ if ( !q || !*q ) return 0;
+
+ delta = q-p;
+ --q;
+
+ while ( *q != '#' ) {
+ if ( *q >= '0' && *q <= '9' )
+ ucs += mult * (*q - '0');
+ else
+ return 0;
+ mult *= 10;
+ --q;
+ }
+ }
+ if ( encoding == TIXML_ENCODING_UTF8 ) {
+ // convert the UCS to UTF-8
+ ConvertUTF32ToUTF8( ucs, value, length );
+ } else {
+ *value = (char)ucs;
+ *length = 1;
+ }
+ return p + delta + 1;
+ }
+
+ // Now try to match it.
+ for( i=0; i<NUM_ENTITY; ++i ) {
+ if ( strncmp( entity[i].str, p, entity[i].strLength ) == 0 ) {
+ assert( strlen( entity[i].str ) == entity[i].strLength );
+ *value = entity[i].chr;
+ *length = 1;
+ return ( p + entity[i].strLength );
+ }
+ }
+
+ // So it wasn't an entity, its unrecognized, or something like that.
+ *value = *p; // Don't put back the last one, since we return it!
+ //*length = 1; // Leave unrecognized entities - this doesn't really work.
+ // Just writes strange XML.
+ return p+1;
+}
+
+
+bool TiXmlBase::StringEqual( const char* p,
+ const char* tag,
+ bool ignoreCase,
+ TiXmlEncoding encoding )
+{
+ assert( p );
+ assert( tag );
+ if ( !p || !*p ) {
+ assert( 0 );
+ return false;
+ }
+
+ const char* q = p;
+
+ if ( ignoreCase ) {
+ while ( *q && *tag && ToLower( *q, encoding ) == ToLower( *tag, encoding ) ) {
+ ++q;
+ ++tag;
+ }
+
+ if ( *tag == 0 )
+ return true;
+ } else {
+ while ( *q && *tag && *q == *tag ) {
+ ++q;
+ ++tag;
+ }
+
+ if ( *tag == 0 ) // Have we found the end of the tag, and everything equal?
+ return true;
+ }
+ return false;
+}
+
+const char* TiXmlBase::ReadText( const char* p,
+ TIXML_STRING * text,
+ bool trimWhiteSpace,
+ const char* endTag,
+ bool caseInsensitive,
+ TiXmlEncoding encoding )
+{
+ *text = "";
+ if ( !trimWhiteSpace // certain tags always keep whitespace
+ || !condenseWhiteSpace ) { // if true, whitespace is always kept
+ // Keep all the white space.
+ while ( p && *p
+ && !StringEqual( p, endTag, caseInsensitive, encoding )
+ ) {
+ int len;
+ char cArr[4] = { 0, 0, 0, 0 };
+ p = GetChar( p, cArr, &len, encoding );
+ text->append( cArr, len );
+ }
+ } else {
+ bool whitespace = false;
+
+ // Remove leading white space:
+ p = SkipWhiteSpace( p, encoding );
+ while ( p && *p
+ && !StringEqual( p, endTag, caseInsensitive, encoding ) ) {
+ if ( *p == '\r' || *p == '\n' ) {
+ whitespace = true;
+ ++p;
+ } else if ( IsWhiteSpace( *p ) ) {
+ whitespace = true;
+ ++p;
+ } else {
+ // If we've found whitespace, add it before the
+ // new character. Any whitespace just becomes a space.
+ if ( whitespace ) {
+ (*text) += ' ';
+ whitespace = false;
+ }
+ int len;
+ char cArr[4] = { 0, 0, 0, 0 };
+ p = GetChar( p, cArr, &len, encoding );
+ if ( len == 1 )
+ (*text) += cArr[0]; // more efficient
+ else
+ text->append( cArr, len );
+ }
+ }
+ }
+ if ( p )
+ p += strlen( endTag );
+ return p;
+}
+
+#ifdef TIXML_USE_STL
+
+void TiXmlDocument::StreamIn( std::istream * in, TIXML_STRING * tag )
+{
+ // The basic issue with a document is that we don't know what we're
+ // streaming. Read something presumed to be a tag (and hope), then
+ // identify it, and call the appropriate stream method on the tag.
+ //
+ // This "pre-streaming" will never read the closing ">" so the
+ // sub-tag can orient itself.
+
+ if ( !StreamTo( in, '<', tag ) ) {
+ SetError( TIXML_ERROR_PARSING_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN );
+ return;
+ }
+
+ while ( in->good() ) {
+ int tagIndex = (int) tag->length();
+ while ( in->good() && in->peek() != '>' ) {
+ int c = in->get();
+ if ( c <= 0 ) {
+ SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN );
+ break;
+ }
+ (*tag) += (char) c;
+ }
+
+ if ( in->good() ) {
+ // We now have something we presume to be a node of
+ // some sort. Identify it, and call the node to
+ // continue streaming.
+ TiXmlNode* node = Identify( tag->c_str() + tagIndex, TIXML_DEFAULT_ENCODING );
+
+ if ( node ) {
+ node->StreamIn( in, tag );
+ bool isElement = node->ToElement() != 0;
+ delete node;
+ node = 0;
+
+ // If this is the root element, we're done. Parsing will be
+ // done by the >> operator.
+ if ( isElement ) {
+ return;
+ }
+ } else {
+ SetError( TIXML_ERROR, 0, 0, TIXML_ENCODING_UNKNOWN );
+ return;
+ }
+ }
+ }
+ // We should have returned sooner.
+ SetError( TIXML_ERROR, 0, 0, TIXML_ENCODING_UNKNOWN );
+}
+
+#endif
+
+const char* TiXmlDocument::Parse( const char* p, TiXmlParsingData* prevData, TiXmlEncoding encoding )
+{
+ ClearError();
+
+ // Parse away, at the document level. Since a document
+ // contains nothing but other tags, most of what happens
+ // here is skipping white space.
+ if ( !p || !*p ) {
+ SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN );
+ return 0;
+ }
+
+ // Note that, for a document, this needs to come
+ // before the while space skip, so that parsing
+ // starts from the pointer we are given.
+ location.Clear();
+ if ( prevData ) {
+ location.row = prevData->cursor.row;
+ location.col = prevData->cursor.col;
+ } else {
+ location.row = 0;
+ location.col = 0;
+ }
+ TiXmlParsingData data( p, TabSize(), location.row, location.col );
+ location = data.Cursor();
+
+ if ( encoding == TIXML_ENCODING_UNKNOWN ) {
+ // Check for the Microsoft UTF-8 lead bytes.
+ const unsigned char* pU = (const unsigned char*)p;
+ if ( *(pU+0) && *(pU+0) == TIXML_UTF_LEAD_0
+ && *(pU+1) && *(pU+1) == TIXML_UTF_LEAD_1
+ && *(pU+2) && *(pU+2) == TIXML_UTF_LEAD_2 ) {
+ encoding = TIXML_ENCODING_UTF8;
+ useMicrosoftBOM = true;
+ }
+ }
+
+ p = SkipWhiteSpace( p, encoding );
+ if ( !p ) {
+ SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN );
+ return 0;
+ }
+
+ while ( p && *p ) {
+ TiXmlNode* node = Identify( p, encoding );
+ if ( node ) {
+ p = node->Parse( p, &data, encoding );
+ LinkEndChild( node );
+ } else {
+ break;
+ }
+
+ // Did we get encoding info?
+ if ( encoding == TIXML_ENCODING_UNKNOWN
+ && node->ToDeclaration() ) {
+ TiXmlDeclaration* dec = node->ToDeclaration();
+ const char* enc = dec->Encoding();
+ assert( enc );
+
+ if ( *enc == 0 )
+ encoding = TIXML_ENCODING_UTF8;
+ else if ( StringEqual( enc, "UTF-8", true, TIXML_ENCODING_UNKNOWN ) )
+ encoding = TIXML_ENCODING_UTF8;
+ else if ( StringEqual( enc, "UTF8", true, TIXML_ENCODING_UNKNOWN ) )
+ encoding = TIXML_ENCODING_UTF8; // incorrect, but be nice
+ else
+ encoding = TIXML_ENCODING_LEGACY;
+ }
+
+ p = SkipWhiteSpace( p, encoding );
+ }
+
+ // Was this empty?
+ if ( !firstChild ) {
+ SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, encoding );
+ return 0;
+ }
+
+ // All is well.
+ return p;
+}
+
+void TiXmlDocument::SetError( int err, const char* pError, TiXmlParsingData* data, TiXmlEncoding encoding )
+{
+ // The first error in a chain is more accurate - don't set again!
+ if ( error )
+ return;
+
+ assert( err > 0 && err < TIXML_ERROR_STRING_COUNT );
+ error = true;
+ errorId = err;
+ errorDesc = errorString[ errorId ];
+
+ errorLocation.Clear();
+ if ( pError && data ) {
+ data->Stamp( pError, encoding );
+ errorLocation = data->Cursor();
+ }
+}
+
+
+TiXmlNode* TiXmlNode::Identify( const char* p, TiXmlEncoding encoding )
+{
+ TiXmlNode* returnNode = 0;
+
+ p = SkipWhiteSpace( p, encoding );
+ if( !p || !*p || *p != '<' ) {
+ return 0;
+ }
+
+ TiXmlDocument* doc = GetDocument();
+ p = SkipWhiteSpace( p, encoding );
+
+ if ( !p || !*p ) {
+ return 0;
+ }
+
+ // What is this thing?
+ // - Elements start with a letter or underscore, but xml is reserved.
+ // - Comments: <!--
+ // - Decleration: <?xml
+ // - Everthing else is unknown to tinyxml.
+ //
+
+ const char* xmlHeader = { "<?xml" };
+ const char* commentHeader = { "<!--" };
+ const char* dtdHeader = { "<!" };
+ const char* cdataHeader = { "<![CDATA[" };
+
+ if ( StringEqual( p, xmlHeader, true, encoding ) ) {
+#ifdef DEBUG_PARSER
+ TIXML_LOG( "XML parsing Declaration\n" );
+#endif
+ returnNode = new TiXmlDeclaration();
+ } else if ( StringEqual( p, commentHeader, false, encoding ) ) {
+#ifdef DEBUG_PARSER
+ TIXML_LOG( "XML parsing Comment\n" );
+#endif
+ returnNode = new TiXmlComment();
+ } else if ( StringEqual( p, cdataHeader, false, encoding ) ) {
+#ifdef DEBUG_PARSER
+ TIXML_LOG( "XML parsing CDATA\n" );
+#endif
+ TiXmlText* text = new TiXmlText( "" );
+ text->SetCDATA( true );
+ returnNode = text;
+ } else if ( StringEqual( p, dtdHeader, false, encoding ) ) {
+#ifdef DEBUG_PARSER
+ TIXML_LOG( "XML parsing Unknown(1)\n" );
+#endif
+ returnNode = new TiXmlUnknown();
+ } else if ( IsAlpha( *(p+1), encoding )
+ || *(p+1) == '_' ) {
+#ifdef DEBUG_PARSER
+ TIXML_LOG( "XML parsing Element\n" );
+#endif
+ returnNode = new TiXmlElement( "" );
+ } else {
+#ifdef DEBUG_PARSER
+ TIXML_LOG( "XML parsing Unknown(2)\n" );
+#endif
+ returnNode = new TiXmlUnknown();
+ }
+
+ if ( returnNode ) {
+ // Set the parent, so it can report errors
+ returnNode->parent = this;
+ } else {
+ if ( doc )
+ doc->SetError( TIXML_ERROR_OUT_OF_MEMORY, 0, 0, TIXML_ENCODING_UNKNOWN );
+ }
+ return returnNode;
+}
+
+#ifdef TIXML_USE_STL
+
+void TiXmlElement::StreamIn (std::istream * in, TIXML_STRING * tag)
+{
+ // We're called with some amount of pre-parsing. That is, some of "this"
+ // element is in "tag". Go ahead and stream to the closing ">"
+ while( in->good() ) {
+ int c = in->get();
+ if ( c <= 0 ) {
+ TiXmlDocument* document = GetDocument();
+ if ( document )
+ document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN );
+ return;
+ }
+ (*tag) += (char) c ;
+
+ if ( c == '>' )
+ break;
+ }
+
+ if ( tag->length() < 3 ) return;
+
+ // Okay...if we are a "/>" tag, then we're done. We've read a complete tag.
+ // If not, identify and stream.
+
+ if ( tag->at( tag->length() - 1 ) == '>'
+ && tag->at( tag->length() - 2 ) == '/' ) {
+ // All good!
+ return;
+ } else if ( tag->at( tag->length() - 1 ) == '>' ) {
+ // There is more. Could be:
+ // text
+ // cdata text (which looks like another node)
+ // closing tag
+ // another node.
+ for ( ;; ) {
+ StreamWhiteSpace( in, tag );
+
+ // Do we have text?
+ if ( in->good() && in->peek() != '<' ) {
+ // Yep, text.
+ TiXmlText text( "" );
+ text.StreamIn( in, tag );
+
+ // What follows text is a closing tag or another node.
+ // Go around again and figure it out.
+ continue;
+ }
+
+ // We now have either a closing tag...or another node.
+ // We should be at a "<", regardless.
+ if ( !in->good() ) return;
+ assert( in->peek() == '<' );
+ int tagIndex = (int) tag->length();
+
+ bool closingTag = false;
+ bool firstCharFound = false;
+
+ for( ;; ) {
+ if ( !in->good() )
+ return;
+
+ int c = in->peek();
+ if ( c <= 0 ) {
+ TiXmlDocument* document = GetDocument();
+ if ( document )
+ document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN );
+ return;
+ }
+
+ if ( c == '>' )
+ break;
+
+ *tag += (char) c;
+ in->get();
+
+ // Early out if we find the CDATA id.
+ if ( c == '[' && tag->size() >= 9 ) {
+ size_t len = tag->size();
+ const char* start = tag->c_str() + len - 9;
+ if ( strcmp( start, "<![CDATA[" ) == 0 ) {
+ assert( !closingTag );
+ break;
+ }
+ }
+
+ if ( !firstCharFound && c != '<' && !IsWhiteSpace( c ) ) {
+ firstCharFound = true;
+ if ( c == '/' )
+ closingTag = true;
+ }
+ }
+ // If it was a closing tag, then read in the closing '>' to clean up the input stream.
+ // If it was not, the streaming will be done by the tag.
+ if ( closingTag ) {
+ if ( !in->good() )
+ return;
+
+ int c = in->get();
+ if ( c <= 0 ) {
+ TiXmlDocument* document = GetDocument();
+ if ( document )
+ document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN );
+ return;
+ }
+ assert( c == '>' );
+ *tag += (char) c;
+
+ // We are done, once we've found our closing tag.
+ return;
+ } else {
+ // If not a closing tag, id it, and stream.
+ const char* tagloc = tag->c_str() + tagIndex;
+ TiXmlNode* node = Identify( tagloc, TIXML_DEFAULT_ENCODING );
+ if ( !node )
+ return;
+ node->StreamIn( in, tag );
+ delete node;
+ node = 0;
+
+ // No return: go around from the beginning: text, closing tag, or node.
+ }
+ }
+ }
+}
+#endif
+
+const char* TiXmlElement::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding )
+{
+ p = SkipWhiteSpace( p, encoding );
+ TiXmlDocument* document = GetDocument();
+
+ if ( !p || !*p ) {
+ if ( document ) document->SetError( TIXML_ERROR_PARSING_ELEMENT, 0, 0, encoding );
+ return 0;
+ }
+
+ if ( data ) {
+ data->Stamp( p, encoding );
+ location = data->Cursor();
+ }
+
+ if ( *p != '<' ) {
+ if ( document ) document->SetError( TIXML_ERROR_PARSING_ELEMENT, p, data, encoding );
+ return 0;
+ }
+
+ p = SkipWhiteSpace( p+1, encoding );
+
+ // Read the name.
+ const char* pErr = p;
+
+ p = ReadName( p, &value, encoding );
+ if ( !p || !*p ) {
+ if ( document ) document->SetError( TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME, pErr, data, encoding );
+ return 0;
+ }
+
+ TIXML_STRING endTag ("</");
+ endTag += value;
+ endTag += ">";
+
+ // Check for and read attributes. Also look for an empty
+ // tag or an end tag.
+ while ( p && *p ) {
+ pErr = p;
+ p = SkipWhiteSpace( p, encoding );
+ if ( !p || !*p ) {
+ if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, pErr, data, encoding );
+ return 0;
+ }
+ if ( *p == '/' ) {
+ ++p;
+ // Empty tag.
+ if ( *p != '>' ) {
+ if ( document ) document->SetError( TIXML_ERROR_PARSING_EMPTY, p, data, encoding );
+ return 0;
+ }
+ return (p+1);
+ } else if ( *p == '>' ) {
+ // Done with attributes (if there were any.)
+ // Read the value -- which can include other
+ // elements -- read the end tag, and return.
+ ++p;
+ p = ReadValue( p, data, encoding ); // Note this is an Element method, and will set the error if one happens.
+ if ( !p || !*p ) {
+ // We were looking for the end tag, but found nothing.
+ // Fix for [ 1663758 ] Failure to report error on bad XML
+ if ( document ) document->SetError( TIXML_ERROR_READING_END_TAG, p, data, encoding );
+ return 0;
+ }
+
+ // We should find the end tag now
+ if ( StringEqual( p, endTag.c_str(), false, encoding ) ) {
+ p += endTag.length();
+ return p;
+ } else {
+ if ( document ) document->SetError( TIXML_ERROR_READING_END_TAG, p, data, encoding );
+ return 0;
+ }
+ } else {
+ // Try to read an attribute:
+ TiXmlAttribute* attrib = new TiXmlAttribute();
+ if ( !attrib ) {
+ if ( document ) document->SetError( TIXML_ERROR_OUT_OF_MEMORY, pErr, data, encoding );
+ return 0;
+ }
+
+ attrib->SetDocument( document );
+ pErr = p;
+ p = attrib->Parse( p, data, encoding );
+
+ if ( !p || !*p ) {
+ if ( document ) document->SetError( TIXML_ERROR_PARSING_ELEMENT, pErr, data, encoding );
+ delete attrib;
+ return 0;
+ }
+
+ // Handle the strange case of double attributes:
+#ifdef TIXML_USE_STL
+ TiXmlAttribute* node = attributeSet.Find( attrib->NameTStr() );
+#else
+ TiXmlAttribute* node = attributeSet.Find( attrib->Name() );
+#endif
+ if ( node ) {
+ node->SetValue( attrib->Value() );
+ delete attrib;
+ return 0;
+ }
+
+ attributeSet.Add( attrib );
+ }
+ }
+ return p;
+}
+
+
+const char* TiXmlElement::ReadValue( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding )
+{
+ TiXmlDocument* document = GetDocument();
+
+ // Read in text and elements in any order.
+ const char* pWithWhiteSpace = p;
+ p = SkipWhiteSpace( p, encoding );
+
+ while ( p && *p ) {
+ if ( *p != '<' ) {
+ // Take what we have, make a text element.
+ TiXmlText* textNode = new TiXmlText( "" );
+
+ if ( !textNode ) {
+ if ( document ) document->SetError( TIXML_ERROR_OUT_OF_MEMORY, 0, 0, encoding );
+ return 0;
+ }
+
+ if ( TiXmlBase::IsWhiteSpaceCondensed() ) {
+ p = textNode->Parse( p, data, encoding );
+ } else {
+ // Special case: we want to keep the white space
+ // so that leading spaces aren't removed.
+ p = textNode->Parse( pWithWhiteSpace, data, encoding );
+ }
+
+ if ( !textNode->Blank() )
+ LinkEndChild( textNode );
+ else
+ delete textNode;
+ } else {
+ // We hit a '<'
+ // Have we hit a new element or an end tag? This could also be
+ // a TiXmlText in the "CDATA" style.
+ if ( StringEqual( p, "</", false, encoding ) ) {
+ return p;
+ } else {
+ TiXmlNode* node = Identify( p, encoding );
+ if ( node ) {
+ p = node->Parse( p, data, encoding );
+ LinkEndChild( node );
+ } else {
+ return 0;
+ }
+ }
+ }
+ pWithWhiteSpace = p;
+ p = SkipWhiteSpace( p, encoding );
+ }
+
+ if ( !p ) {
+ if ( document ) document->SetError( TIXML_ERROR_READING_ELEMENT_VALUE, 0, 0, encoding );
+ }
+ return p;
+}
+
+
+#ifdef TIXML_USE_STL
+void TiXmlUnknown::StreamIn( std::istream * in, TIXML_STRING * tag )
+{
+ while ( in->good() ) {
+ int c = in->get();
+ if ( c <= 0 ) {
+ TiXmlDocument* document = GetDocument();
+ if ( document )
+ document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN );
+ return;
+ }
+ (*tag) += (char) c;
+
+ if ( c == '>' ) {
+ // All is well.
+ return;
+ }
+ }
+}
+#endif
+
+
+const char* TiXmlUnknown::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding )
+{
+ TiXmlDocument* document = GetDocument();
+ p = SkipWhiteSpace( p, encoding );
+
+ if ( data ) {
+ data->Stamp( p, encoding );
+ location = data->Cursor();
+ }
+ if ( !p || !*p || *p != '<' ) {
+ if ( document ) document->SetError( TIXML_ERROR_PARSING_UNKNOWN, p, data, encoding );
+ return 0;
+ }
+ ++p;
+ value = "";
+
+ while ( p && *p && *p != '>' ) {
+ value += *p;
+ ++p;
+ }
+
+ if ( !p ) {
+ if ( document ) document->SetError( TIXML_ERROR_PARSING_UNKNOWN, 0, 0, encoding );
+ }
+ if ( *p == '>' )
+ return p+1;
+ return p;
+}
+
+#ifdef TIXML_USE_STL
+void TiXmlComment::StreamIn( std::istream * in, TIXML_STRING * tag )
+{
+ while ( in->good() ) {
+ int c = in->get();
+ if ( c <= 0 ) {
+ TiXmlDocument* document = GetDocument();
+ if ( document )
+ document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN );
+ return;
+ }
+
+ (*tag) += (char) c;
+
+ if ( c == '>'
+ && tag->at( tag->length() - 2 ) == '-'
+ && tag->at( tag->length() - 3 ) == '-' ) {
+ // All is well.
+ return;
+ }
+ }
+}
+#endif
+
+
+const char* TiXmlComment::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding )
+{
+ TiXmlDocument* document = GetDocument();
+ value = "";
+
+ p = SkipWhiteSpace( p, encoding );
+
+ if ( data ) {
+ data->Stamp( p, encoding );
+ location = data->Cursor();
+ }
+ const char* startTag = "<!--";
+ const char* endTag = "-->";
+
+ if ( !StringEqual( p, startTag, false, encoding ) ) {
+ document->SetError( TIXML_ERROR_PARSING_COMMENT, p, data, encoding );
+ return 0;
+ }
+ p += strlen( startTag );
+
+ // [ 1475201 ] TinyXML parses entities in comments
+ // Oops - ReadText doesn't work, because we don't want to parse the entities.
+ // p = ReadText( p, &value, false, endTag, false, encoding );
+ //
+ // from the XML spec:
+ /*
+ [Definition: Comments may appear anywhere in a document outside other markup; in addition,
+ they may appear within the document type declaration at places allowed by the grammar.
+ They are not part of the document's character data; an XML processor MAY, but need not,
+ make it possible for an application to retrieve the text of comments. For compatibility,
+ the string "--" (double-hyphen) MUST NOT occur within comments.] Parameter entity
+ references MUST NOT be recognized within comments.
+
+ An example of a comment:
+
+ <!-- declarations for <head> & <body> -->
+ */
+
+ value = "";
+ // Keep all the white space.
+ while ( p && *p && !StringEqual( p, endTag, false, encoding ) ) {
+ value.append( p, 1 );
+ ++p;
+ }
+ if ( p )
+ p += strlen( endTag );
+
+ return p;
+}
+
+
+const char* TiXmlAttribute::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding )
+{
+ p = SkipWhiteSpace( p, encoding );
+ if ( !p || !*p ) return 0;
+
+// int tabsize = 4;
+// if ( document )
+// tabsize = document->TabSize();
+
+ if ( data ) {
+ data->Stamp( p, encoding );
+ location = data->Cursor();
+ }
+ // Read the name, the '=' and the value.
+ const char* pErr = p;
+ p = ReadName( p, &name, encoding );
+ if ( !p || !*p ) {
+ if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, pErr, data, encoding );
+ return 0;
+ }
+ p = SkipWhiteSpace( p, encoding );
+ if ( !p || !*p || *p != '=' ) {
+ if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding );
+ return 0;
+ }
+
+ ++p; // skip '='
+ p = SkipWhiteSpace( p, encoding );
+ if ( !p || !*p ) {
+ if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding );
+ return 0;
+ }
+
+ const char* end;
+ const char SINGLE_QUOTE = '\'';
+ const char DOUBLE_QUOTE = '\"';
+
+ if ( *p == SINGLE_QUOTE ) {
+ ++p;
+ end = "\'"; // single quote in string
+ p = ReadText( p, &value, false, end, false, encoding );
+ } else if ( *p == DOUBLE_QUOTE ) {
+ ++p;
+ end = "\""; // double quote in string
+ p = ReadText( p, &value, false, end, false, encoding );
+ } else {
+ // All attribute values should be in single or double quotes.
+ // But this is such a common error that the parser will try
+ // its best, even without them.
+ value = "";
+ while ( p && *p // existence
+ && !IsWhiteSpace( *p ) && *p != '\n' && *p != '\r' // whitespace
+ && *p != '/' && *p != '>' ) { // tag end
+ if ( *p == SINGLE_QUOTE || *p == DOUBLE_QUOTE ) {
+ // [ 1451649 ] Attribute values with trailing quotes not handled correctly
+ // We did not have an opening quote but seem to have a
+ // closing one. Give up and throw an error.
+ if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding );
+ return 0;
+ }
+ value += *p;
+ ++p;
+ }
+ }
+ return p;
+}
+
+#ifdef TIXML_USE_STL
+void TiXmlText::StreamIn( std::istream * in, TIXML_STRING * tag )
+{
+ while ( in->good() ) {
+ int c = in->peek();
+ if ( !cdata && (c == '<' ) ) {
+ return;
+ }
+ if ( c <= 0 ) {
+ TiXmlDocument* document = GetDocument();
+ if ( document )
+ document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN );
+ return;
+ }
+
+ (*tag) += (char) c;
+ in->get(); // "commits" the peek made above
+
+ if ( cdata && c == '>' && tag->size() >= 3 ) {
+ size_t len = tag->size();
+ if ( (*tag)[len-2] == ']' && (*tag)[len-3] == ']' ) {
+ // terminator of cdata.
+ return;
+ }
+ }
+ }
+}
+#endif
+
+const char* TiXmlText::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding )
+{
+ value = "";
+ TiXmlDocument* document = GetDocument();
+
+ if ( data ) {
+ data->Stamp( p, encoding );
+ location = data->Cursor();
+ }
+
+ const char* const startTag = "<![CDATA[";
+ const char* const endTag = "]]>";
+
+ if ( cdata || StringEqual( p, startTag, false, encoding ) ) {
+ cdata = true;
+
+ if ( !StringEqual( p, startTag, false, encoding ) ) {
+ document->SetError( TIXML_ERROR_PARSING_CDATA, p, data, encoding );
+ return 0;
+ }
+ p += strlen( startTag );
+
+ // Keep all the white space, ignore the encoding, etc.
+ while ( p && *p
+ && !StringEqual( p, endTag, false, encoding )
+ ) {
+ value += *p;
+ ++p;
+ }
+
+ TIXML_STRING dummy;
+ p = ReadText( p, &dummy, false, endTag, false, encoding );
+ return p;
+ } else {
+ bool ignoreWhite = true;
+
+ const char* end = "<";
+ p = ReadText( p, &value, ignoreWhite, end, false, encoding );
+ if ( p )
+ return p-1; // don't truncate the '<'
+ return 0;
+ }
+}
+
+#ifdef TIXML_USE_STL
+void TiXmlDeclaration::StreamIn( std::istream * in, TIXML_STRING * tag )
+{
+ while ( in->good() ) {
+ int c = in->get();
+ if ( c <= 0 ) {
+ TiXmlDocument* document = GetDocument();
+ if ( document )
+ document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN );
+ return;
+ }
+ (*tag) += (char) c;
+
+ if ( c == '>' ) {
+ // All is well.
+ return;
+ }
+ }
+}
+#endif
+
+const char* TiXmlDeclaration::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding _encoding )
+{
+ p = SkipWhiteSpace( p, _encoding );
+ // Find the beginning, find the end, and look for
+ // the stuff in-between.
+ TiXmlDocument* document = GetDocument();
+ if ( !p || !*p || !StringEqual( p, "<?xml", true, _encoding ) ) {
+ if ( document ) document->SetError( TIXML_ERROR_PARSING_DECLARATION, 0, 0, _encoding );
+ return 0;
+ }
+ if ( data ) {
+ data->Stamp( p, _encoding );
+ location = data->Cursor();
+ }
+ p += 5;
+
+ version = "";
+ encoding = "";
+ standalone = "";
+
+ while ( p && *p ) {
+ if ( *p == '>' ) {
+ ++p;
+ return p;
+ }
+
+ p = SkipWhiteSpace( p, _encoding );
+ if ( StringEqual( p, "version", true, _encoding ) ) {
+ TiXmlAttribute attrib;
+ p = attrib.Parse( p, data, _encoding );
+ version = attrib.Value();
+ } else if ( StringEqual( p, "encoding", true, _encoding ) ) {
+ TiXmlAttribute attrib;
+ p = attrib.Parse( p, data, _encoding );
+ encoding = attrib.Value();
+ } else if ( StringEqual( p, "standalone", true, _encoding ) ) {
+ TiXmlAttribute attrib;
+ p = attrib.Parse( p, data, _encoding );
+ standalone = attrib.Value();
+ } else {
+ // Read over whatever it is.
+ while( p && *p && *p != '>' && !IsWhiteSpace( *p ) )
+ ++p;
+ }
+ }
+ return 0;
+}
+
+bool TiXmlText::Blank() const
+{
+ for ( unsigned i=0; i<value.length(); i++ )
+ if ( !IsWhiteSpace( value[i] ) )
+ return false;
+ return true;
+}
+
diff --git a/mert/TERsrc/tools.cpp b/mert/TERsrc/tools.cpp
new file mode 100644
index 000000000..d16287613
--- /dev/null
+++ b/mert/TERsrc/tools.cpp
@@ -0,0 +1,543 @@
+#include "tools.h"
+
+using namespace std;
+using namespace boost::xpressive;
+namespace Tools
+{
+
+string vectorToString ( vector<string> vec )
+{
+ string retour ( "" );
+ for ( vector<string>::iterator vecIter = vec.begin(); vecIter != vec.end(); vecIter++ ) {
+ if ( vecIter == vec.begin() ) {
+ retour += ( *vecIter );
+ } else {
+ retour += "\t" + ( *vecIter );
+ }
+ }
+ return retour;
+}
+
+string vectorToString ( vector< string > vec, string s )
+{
+ string retour ( "" );
+ for ( vector<string>::iterator vecIter = vec.begin(); vecIter != vec.end(); vecIter++ ) {
+ if ( vecIter == vec.begin() ) {
+ retour += ( *vecIter );
+ } else {
+ retour += s + ( *vecIter );
+ }
+ }
+ return retour;
+
+}
+
+vector<string> subVector ( vector<string> vec, int start, int end )
+{
+ vector<string> retour;
+ if ( start > end ) {
+ cerr << "ERREUR : TERcalc::subVector : end > start" << endl;
+ exit ( 0 );
+ }
+ for ( int i = start; ( ( i < end ) && ( i < ( int ) vec.size() ) ); i++ ) {
+ retour.push_back ( vec.at ( i ) );
+ }
+ return retour;
+}
+
+vector<int> subVector ( vector<int> vec, int start, int end )
+{
+ vector<int> retour;
+ if ( start > end ) {
+ cerr << "ERREUR : TERcalc::subVector : end > start" << endl;
+ exit ( 0 );
+ }
+ for ( int i = start; ( ( i < end ) && ( i < ( int ) vec.size() ) ); i++ ) {
+ retour.push_back ( vec.at ( i ) );
+ }
+ return retour;
+}
+
+vector<float> subVector ( vector<float> vec, int start, int end )
+{
+ vector<float> retour;
+ if ( start > end ) {
+ cerr << "ERREUR : TERcalc::subVector : end > start" << endl;
+ exit ( 0 );
+ }
+ for ( int i = start; ( ( i < end ) && ( i < ( int ) vec.size() ) ); i++ ) {
+ retour.push_back ( vec.at ( i ) );
+ }
+ return retour;
+}
+
+vector<string> copyVector ( vector<string> vec )
+{
+ vector<string> retour;
+ for ( int i = 0; i < ( int ) vec.size(); i++ ) {
+ retour.push_back ( vec.at ( i ) );
+ }
+ return retour;
+}
+vector<int> copyVector ( vector<int> vec )
+{
+ vector<int> retour;
+ for ( int i = 0; i < ( int ) vec.size(); i++ ) {
+ retour.push_back ( vec.at ( i ) );
+ }
+ return retour;
+}
+vector<float> copyVector ( vector<float> vec )
+{
+ vector<float> retour;
+ for ( int i = 0; i < ( int ) vec.size(); i++ ) {
+ retour.push_back ( vec.at ( i ) );
+ }
+ return retour;
+}
+vector<string> stringToVector ( string s, string tok )
+{
+ vector<string> to_return;
+ string to_push ( "" );
+ bool pushed = false;
+ string::iterator sIt;
+ for ( sIt = s.begin(); sIt < s.end(); sIt++ ) {
+ pushed = false;
+ for ( string::iterator sTok = tok.begin(); sTok < tok.end(); sTok++ ) {
+ if ( ( *sIt ) == ( *sTok ) ) {
+ to_return.push_back ( to_push );
+ to_push = "";
+ pushed = true;
+ }
+ }
+ if ( !pushed ) {
+ to_push.push_back ( ( *sIt ) );
+ }
+ }
+ to_return.push_back ( to_push );
+ return to_return;
+}
+vector<int> stringToVectorInt ( string s, string tok )
+{
+ vector<int> to_return;
+ string to_push ( "" );
+ bool pushed = false;
+ string::iterator sIt;
+ for ( sIt = s.begin(); sIt < s.end(); sIt++ ) {
+ pushed = false;
+ for ( string::iterator sTok = tok.begin(); sTok < tok.end(); sTok++ ) {
+ if ( ( *sIt ) == ( *sTok ) ) {
+ if ( ( int ) to_push.length() > 0 ) {
+ to_return.push_back ( atoi ( to_push.c_str() ) );
+ }
+ to_push = "";
+ pushed = true;
+ }
+ }
+ if ( !pushed ) {
+ to_push.push_back ( ( *sIt ) );
+ }
+ }
+ if ( ( int ) to_push.length() > 0 ) {
+ to_return.push_back ( atoi ( to_push.c_str() ) );
+ }
+ return to_return;
+}
+vector<float> stringToVectorFloat ( string s, string tok )
+{
+ vector<float> to_return;
+ string to_push ( "" );
+ bool pushed = false;
+ string::iterator sIt;
+ for ( sIt = s.begin(); sIt < s.end(); sIt++ ) {
+ pushed = false;
+ for ( string::iterator sTok = tok.begin(); sTok < tok.end(); sTok++ ) {
+ if ( ( *sIt ) == ( *sTok ) ) {
+ if ( ( int ) to_push.length() > 0 ) {
+ to_return.push_back ( atof ( to_push.c_str() ) );
+ }
+ to_push = "";
+ pushed = true;
+ }
+ }
+ if ( !pushed ) {
+ to_push.push_back ( ( *sIt ) );
+ }
+ }
+ if ( ( int ) to_push.length() > 0 ) {
+ to_return.push_back ( atoi ( to_push.c_str() ) );
+ }
+ return to_return;
+}
+
+string lowerCase ( string str )
+{
+ for ( int i = 0; i < ( int ) str.size(); i++ ) {
+ if ( ( str[i] >= 0x41 ) && ( str[i] <= 0x5A ) ) {
+ str[i] = str[i] + 0x20;
+ }
+ }
+ return str;
+}
+string removePunctTercom ( string str )
+{
+ string str_mod = str;
+ sregex rex;
+ string replace;
+
+
+ rex = sregex::compile ( "^[ ]+" );
+ replace = "";
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[\"]" );
+ replace = ( " " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[,]" );
+ replace = " ";
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "([^0-9])([\\.])([^0-9])" );
+ replace = ( "$1 $3" );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "([^0-9])([\\.])([^0-9])" );
+ replace = ( "$1 $3" );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "([^0-9])([\\.])([^0-9])" );
+ replace = ( "$1 $3" );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "([\\.]$)" );
+ replace = ( " " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[\\?]" );
+ replace = ( " " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[\\;]" );
+ replace = ( " " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[\\:]" );
+ replace = ( " " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[\\!]" );
+ replace = ( " " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[\\(]" );
+ replace = ( " " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[\\)]" );
+ replace = ( " " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[ ]+" );
+ replace = " ";
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[ ]+$" );
+ replace = "";
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ return str_mod;
+}
+string removePunct ( string str )
+{
+ string str_mod = str;
+ sregex rex;
+ string replace;
+
+
+ rex = sregex::compile ( "^[ ]+" );
+ replace = "";
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[\"]" );
+ replace = ( " " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[,]" );
+ replace = " ";
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "([^0-9])([\\.])([^0-9])" );
+ replace = ( "$1 $3" );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "([^0-9])([\\.])([^0-9])" );
+ replace = ( "$1 $3" );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "([^0-9])([\\.])([^0-9])" );
+ replace = ( "$1 $3" );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "([\\.]$)" );
+ replace = ( " " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[\\?]" );
+ replace = ( " " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[\\;]" );
+ replace = ( " " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[\\:]" );
+ replace = ( " " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[\\!]" );
+ replace = ( " " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[\\(]" );
+ replace = ( " " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[\\)]" );
+ replace = ( " " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[ ]+" );
+ replace = " ";
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[ ]+$" );
+ replace = "";
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "^[ ]+" );
+ replace = "";
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ return str_mod;
+}
+string tokenizePunct ( string str )
+{
+ string str_mod = str;
+ sregex rex = sregex::compile ( "(([^0-9])([\\,])([^0-9]))" );
+ string replace ( "$2 $3 $4" );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "(([^0-9])([\\.])([^0-9]))" );
+ replace = ( "$2 $3 $4" );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "( ([A-Z]|[a-z]) ([\\.]) )" );
+ replace = ( " $2. " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "( ([A-Z]|[a-z]) ([\\.])$)" );
+ replace = ( " $2. " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "(^([A-Z]|[a-z]) ([\\.]) )" );
+ replace = ( " $2. " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "(([A-Z]|[a-z])([\\.]) ([A-Z]|[a-z])([\\.]) )" );
+ replace = ( "$2.$4. " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[\\?]" );
+ replace = ( " ? " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[\\;]" );
+ replace = ( " ; " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "(([^0-9])([\\:])([^0-9]))" );
+ replace = ( "$2 $3 $4" );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[\\!]" );
+ replace = ( " ! " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[\\(]" );
+ replace = ( " ( " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[\\)]" );
+ replace = ( " ) " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[\"]" );
+ replace = ( " \" " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "(num_ \\( ([^\\)]+) \\))" );
+ replace = ( "num_($2)" );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "(ordinal_ \\( ([^\\)]*) \\))" );
+ replace = ( "ordinal_($2)" );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "(^([Mm]) \\.)" );
+ replace = ( "$2." );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "( ([Mm]) \\.)" );
+ replace = ( " $2." );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "(^([Dd]r) \\.)" );
+ replace = ( "$2." );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "( ([Dd]r) \\.)" );
+ replace = ( " $2." );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "(^([Mm]r) \\.)" );
+ replace = ( "$2." );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "( ([Mm]r) \\.)" );
+ replace = ( " $2." );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "(^([Mm]rs) \\.)" );
+ replace = ( "$2." );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "( ([Mm]rs) \\.)" );
+ replace = ( " $2." );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "(^([Nn]o) \\.)" );
+ replace = ( "$2." );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "( ([Nn]o) \\.)" );
+ replace = ( " $2." );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+// rex = sregex::compile ( "(^(([Jj]an)|([Ff]ev)|([Mm]ar)|([Aa]pr)|([Jj]un)|([Jj]ul)|([Aa]ug)|([Ss]ept)|([Oo]ct)|([Nn]ov)|([Dd]ec)) \\.)" );
+// replace = ( "$2." );
+// str_mod = regex_replace ( str_mod, rex, replace );
+//
+// rex = sregex::compile ( "( (([Jj]an)|([Ff]ev)|([Mm]ar)|([Aa]pr)|([Jj]un)|([Jj]ul)|([Aa]ug)|([Ss]ept)|([Oo]ct)|([Nn]ov)|([Dd]ec)) \\.)" );
+// replace = ( " $2." );
+// str_mod = regex_replace ( str_mod, rex, replace );
+//
+// rex = sregex::compile ( "(^(([Gg]en)|([Cc]ol)) \\.)" );
+// replace = ( "$2." );
+// str_mod = regex_replace ( str_mod, rex, replace );
+//
+// rex = sregex::compile ( "( (([Gg]en)|([Cc]ol)) \\.)" );
+// replace = ( " $2." );
+// str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "(^(([A-Z][a-z])) \\. )" );
+ replace = ( "$2. " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "( (([A-Z][a-z])) \\. )" );
+ replace = ( " $2. " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "(^(([A-Z][a-z][a-z])) \\. )" );
+ replace = ( "$2. " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "( (([A-Z][a-z][a-z])) \\. )" );
+ replace = ( " $2. " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[ ]+" );
+ replace = " ";
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "^[ ]+" );
+ replace = "";
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "[ ]+$" );
+ replace = "";
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ return str_mod;
+}
+
+string normalizeStd ( string str )
+{
+ string str_mod = str;
+ sregex rex = sregex::compile ( "(<skipped>)" );
+ string replace ( "" );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "-\n" );
+ replace = ( "" );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "\n" );
+ replace = ( " " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "&quot;" );
+ replace = ( "\"" );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "&amp;" );
+ replace = ( "& " );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "&lt;" );
+ replace = ( "<" );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ rex = sregex::compile ( "&gt;" );
+ replace = ( ">" );
+ str_mod = regex_replace ( str_mod, rex, replace );
+
+ return str_mod;
+}
+
+param copyParam ( param p )
+{
+ param to_return;
+ to_return.caseOn = p.caseOn;
+ to_return.noPunct = p.noPunct;
+ to_return.debugMode = p.debugMode;
+ to_return.hypothesisFile = p.hypothesisFile;
+ to_return.referenceFile = p.referenceFile;
+ to_return.normalize = p.normalize;
+ to_return.noTxtIds = p.noTxtIds;
+ to_return.outputFileExtension = p.outputFileExtension;
+ to_return.outputFileName = p.outputFileName;
+ to_return.sgmlInputs = p.sgmlInputs;
+ to_return.tercomLike = p.tercomLike;
+ return to_return;
+}
+string printParams ( param p )
+{
+ stringstream s;
+ s << "caseOn = " << p.caseOn << endl;
+ s << "noPunct = " << p.noPunct << endl;
+ s << "debugMode = " << p.debugMode << endl;
+ s << "hypothesisFile = " << p.hypothesisFile << endl;
+ s << "referenceFile = " << p.referenceFile << endl;
+ s << "normalize = " << p.normalize << endl;
+ s << "noTxtIds = " << p.noTxtIds << endl;
+ s << "outputFileExtension = " << p.outputFileExtension << endl;
+ s << "outputFileName = " << p.outputFileName << endl;
+ s << "sgmlInputs = " << p.sgmlInputs << endl;
+ s << "tercomLike = " << p.tercomLike << endl;
+ return s.str();
+
+}
+
+
+}
diff --git a/mert/TERsrc/tools.h b/mert/TERsrc/tools.h
new file mode 100644
index 000000000..5f1302c64
--- /dev/null
+++ b/mert/TERsrc/tools.h
@@ -0,0 +1,66 @@
+#ifndef __TERCPPTOOLS_H__
+#define __TERCPPTOOLS_H__
+
+
+#include <vector>
+#include <iostream>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string>
+#include <sstream>
+#include <boost/xpressive/xpressive.hpp>
+
+
+using namespace std;
+
+namespace Tools
+{
+typedef vector<double> vecDouble;
+typedef vector<char> vecChar;
+typedef vector<int> vecInt;
+typedef vector<float> vecFloat;
+typedef vector<string> vecString;
+typedef vector<string> alignmentElement;
+typedef vector<alignmentElement> WERalignment;
+
+
+struct param {
+ bool debugMode;
+ string referenceFile; // path to the resources
+ string hypothesisFile; // path to the configuration files
+ string outputFileExtension;
+ string outputFileName;
+ bool noPunct;
+ bool caseOn;
+ bool normalize;
+ bool tercomLike;
+ bool sgmlInputs;
+ bool noTxtIds;
+};
+// param = { false, "","","","" };
+
+// class tools{
+// private:
+// public:
+
+string vectorToString ( vector<string> vec );
+string vectorToString ( vector<string> vec, string s );
+vector<string> subVector ( vector<string> vec, int start, int end );
+vector<int> subVector ( vector<int> vec, int start, int end );
+vector<float> subVector ( vector<float> vec, int start, int end );
+vector<string> copyVector ( vector<string> vec );
+vector<int> copyVector ( vector<int> vec );
+vector<float> copyVector ( vector<float> vec );
+vector<string> stringToVector ( string s, string tok );
+vector<int> stringToVectorInt ( string s, string tok );
+vector<float> stringToVectorFloat ( string s, string tok );
+string lowerCase(string str);
+string removePunct(string str);
+string tokenizePunct(string str);
+string removePunctTercom(string str);
+string normalizeStd(string str);
+string printParams(param p);
+// };
+param copyParam(param p);
+}
+#endif \ No newline at end of file
diff --git a/mert/TERsrc/xmlStructure.cpp b/mert/TERsrc/xmlStructure.cpp
new file mode 100644
index 000000000..d65ad1ca6
--- /dev/null
+++ b/mert/TERsrc/xmlStructure.cpp
@@ -0,0 +1,332 @@
+#include "xmlStructure.h"
+
+// The following class defines a hash function for strings
+
+
+using namespace std;
+
+namespace TERCpp
+{
+
+// tutorial demo program
+
+// ----------------------------------------------------------------------
+// STDOUT dump and indenting utility functions
+// ----------------------------------------------------------------------
+// const unsigned int NUM_INDENTS_PER_SPACE=2;
+
+xmlStructure::xmlStructure()
+{
+ NUM_INDENTS_PER_SPACE = 2;
+}
+
+const char * xmlStructure::getIndent ( unsigned int numIndents )
+{
+ static const char * pINDENT = " + ";
+ static const unsigned int LENGTH = strlen ( pINDENT );
+ unsigned int n = numIndents * NUM_INDENTS_PER_SPACE;
+ if ( n > LENGTH )
+ n = LENGTH;
+
+ return &pINDENT[ LENGTH-n ];
+}
+
+// same as getIndent but no "+" at the end
+const char * xmlStructure::getIndentAlt ( unsigned int numIndents )
+{
+ static const char * pINDENT = " ";
+ static const unsigned int LENGTH = strlen ( pINDENT );
+ unsigned int n = numIndents * NUM_INDENTS_PER_SPACE;
+ if ( n > LENGTH )
+ n = LENGTH;
+
+ return &pINDENT[ LENGTH-n ];
+}
+
+int xmlStructure::dump_attribs_to_stdout ( TiXmlElement* pElement, unsigned int indent )
+{
+ if ( !pElement )
+ return 0;
+
+ TiXmlAttribute* pAttrib = pElement->FirstAttribute();
+ int i = 0;
+ int ival;
+ double dval;
+ const char* pIndent = getIndent ( indent );
+ printf ( "\n" );
+ while ( pAttrib ) {
+ printf ( "%s%s: value=[%s]", pIndent, pAttrib->Name(), pAttrib->Value() );
+
+ if ( pAttrib->QueryIntValue ( &ival ) == TIXML_SUCCESS )
+ printf ( " int=%d", ival );
+ if ( pAttrib->QueryDoubleValue ( &dval ) == TIXML_SUCCESS )
+ printf ( " d=%1.1f", dval );
+ printf ( "\n" );
+ i++;
+ pAttrib = pAttrib->Next();
+ }
+ return i;
+}
+
+void xmlStructure::dump_to_stdout ( TiXmlNode* pParent, unsigned int indent = 0 )
+{
+ if ( !pParent )
+ return;
+
+ TiXmlNode* pChild;
+ TiXmlText* pText;
+ int t = pParent->Type();
+ printf ( "%s", getIndent ( indent ) );
+ int num;
+
+ switch ( t ) {
+ case TiXmlNode::DOCUMENT:
+ printf ( "Document" );
+ break;
+
+ case TiXmlNode::ELEMENT:
+ printf ( "Element [%s]", pParent->Value() );
+ num = dump_attribs_to_stdout ( pParent->ToElement(), indent + 1 );
+ switch ( num ) {
+ case 0:
+ printf ( " (No attributes)" );
+ break;
+ case 1:
+ printf ( "%s1 attribute", getIndentAlt ( indent ) );
+ break;
+ default:
+ printf ( "%s%d attributes", getIndentAlt ( indent ), num );
+ break;
+ }
+ break;
+
+ case TiXmlNode::COMMENT:
+ printf ( "Comment: [%s]", pParent->Value() );
+ break;
+
+ case TiXmlNode::UNKNOWN:
+ printf ( "Unknown" );
+ break;
+
+ case TiXmlNode::TEXT:
+ pText = pParent->ToText();
+ printf ( "Text: [%s]", pText->Value() );
+ break;
+
+ case TiXmlNode::DECLARATION:
+ printf ( "Declaration" );
+ break;
+ default:
+ break;
+ }
+ printf ( "\n" );
+ for ( pChild = pParent->FirstChild(); pChild != 0; pChild = pChild->NextSibling() ) {
+ dump_to_stdout ( pChild, indent + 1 );
+ }
+}
+
+// load the named file and dump its structure to STDOUT
+void xmlStructure::dump_to_stdout ( const char* pFilename )
+{
+ TiXmlDocument doc ( pFilename );
+ bool loadOkay = doc.LoadFile();
+ if ( loadOkay ) {
+ printf ( "\n%s:\n", pFilename );
+ dump_to_stdout ( &doc ); // defined later in the tutorial
+ } else {
+ printf ( "Failed to load file \"%s\"\n", pFilename );
+ }
+}
+// Load the file and dump it into a SGMLDocument.
+SGMLDocument xmlStructure::dump_to_SGMLDocument ( string FileName )
+{
+
+ TiXmlDocument doc ( FileName.c_str() );
+ SGMLDocument to_return;
+ bool isLoaded = doc.LoadFile();
+ if ( isLoaded ) {
+ copy_to_SGMLDocument ( &to_return, &doc, ( unsigned int ) 0 );
+ } else {
+ cerr << "ERROR : xmlStructure::dump_to_SGMLDocument : Failed to load file " << FileName << endl;
+ exit ( 0 );
+ }
+ return to_return;
+}
+
+void xmlStructure::copy_to_SGMLDocument ( SGMLDocument* sgmlDoc, TiXmlNode* pParent, unsigned int indent )
+{
+ if ( !pParent )
+ return;
+
+ TiXmlNode* pChild;
+ TiXmlText* pText;
+ int t = pParent->Type();
+// printf ( "%s", getIndent ( indent ) );
+// int num;
+ string elementValue;
+ switch ( t ) {
+ case TiXmlNode::DOCUMENT:
+// printf ( "Document" );
+ break;
+
+ case TiXmlNode::ELEMENT:
+ printf ( "Element [%s]", pParent->Value() );
+ elementValue = pParent->Value();
+ if ( ( ( int ) elementValue.compare ( "refset" ) == 0 ) || ( ( int ) elementValue.compare ( "tstset" ) == 0 ) ) {
+ sgmlDoc->setDocType ( elementValue );
+ } else if ( ( int ) elementValue.compare ( "doc" ) == 0 ) {
+ documentStructure tmp_doc;
+ sgmlDoc->addDocument ( tmp_doc );
+ } else if ( ( int ) elementValue.compare ( "seg" ) == 0 ) {
+ segmentStructure tmp_seg;
+ ( sgmlDoc->getLastDocument() )->addSegments ( tmp_seg );
+ }
+ dump_attribs_to_SGMLDocuments ( sgmlDoc, pParent->ToElement(), indent + 1 );
+// num = dump_attribs_to_stdout ( pParent->ToElement(), indent + 1 );
+// switch ( num )
+// {
+// case 0:
+// printf ( " (No attributes)" );
+// break;
+// case 1:
+// printf ( "%s1 attribute", getIndentAlt ( indent ) );
+// break;
+// default:
+// printf ( "%s%d attributes", getIndentAlt ( indent ), num );
+// break;
+// }
+ break;
+
+// case TiXmlNode::COMMENT:
+// printf ( "Comment: [%s]", pParent->Value() );
+// break;
+//
+// case TiXmlNode::UNKNOWN:
+// printf ( "Unknown" );
+// break;
+
+ case TiXmlNode::TEXT:
+ pText = pParent->ToText();
+// printf ( "Text: [%s]", pText->Value() );
+ if ( indent == 5 ) {
+ documentStructure * l_tmp_doc = sgmlDoc->getLastDocument();
+ segmentStructure * l_tmp_seg = l_tmp_doc->getLastSegments();
+ string l_text = pText->Value();
+ string line_mod=l_text;
+ if ( !xmlParams.tercomLike ) {
+ if ( xmlParams.debugMode ) {
+ cerr << "DEBUG xmlStructure::copy_to_SGMLDocument : line NOT tokenized |" << line_mod << "|" << endl << "END DEBUG" << endl;
+ }
+ if ( xmlParams.debugMode ) {
+ cerr << "DEBUG tercpp : xmlStructure::copy_to_SGMLDocument : " << endl << "TERCOM AT FALSE " << endl << "END DEBUG" << endl;
+ }
+
+ line_mod = tokenizePunct ( line_mod );
+ }
+ if ( !xmlParams.caseOn ) {
+ if ( xmlParams.debugMode ) {
+ cerr << "DEBUG tercpp : xmlStructure::copy_to_SGMLDocument : " << endl << "CASEON AT FALSE " << endl << "END DEBUG" << endl;
+ }
+ line_mod = lowerCase ( line_mod );
+ }
+ if ( xmlParams.noPunct ) {
+ if ( xmlParams.debugMode ) {
+ cerr << "DEBUG tercpp : xmlStructure::copy_to_SGMLDocument : " << endl << "NOPUNCT AT TRUE " << endl << "END DEBUG" << endl;
+ }
+ if ( !xmlParams.tercomLike ) {
+ line_mod = removePunctTercom ( line_mod );
+ } else {
+ line_mod = removePunct ( line_mod );
+ }
+ }
+ if ( xmlParams.debugMode ) {
+ cerr << "DEBUG xmlStructure::copy_to_SGMLDocument : line tokenized |" << line_mod << "|" << endl << "END DEBUG" << endl;
+ }
+ l_tmp_seg->addContent ( line_mod );
+ }
+ break;
+
+// case TiXmlNode::DECLARATION:
+// printf ( "Declaration" );
+// break;
+ default:
+ break;
+ }
+// printf ( "\n" );
+ for ( pChild = pParent->FirstChild(); pChild != 0; pChild = pChild->NextSibling() ) {
+ copy_to_SGMLDocument ( sgmlDoc, pChild, indent + 1 );
+ }
+}
+
+void xmlStructure::dump_attribs_to_SGMLDocuments ( SGMLDocument * sgmlDoc, TiXmlElement* pElement, unsigned int indent )
+{
+ if ( !pElement )
+ return;
+ TiXmlAttribute* pAttrib = pElement->FirstAttribute();
+// int i = 0;
+// int ival;
+// double dval;
+// const char* pIndent = getIndent ( indent );
+// printf ( "\n" );
+ while ( pAttrib ) {
+ string attribut = pAttrib->Name();
+ switch ( indent ) {
+ case 1 : {
+ if ( attribut.compare ( "setid" ) == 0 ) {
+ sgmlDoc->setSetId ( pAttrib->Value() );
+ }
+ if ( attribut.compare ( "srclang" ) == 0 ) {
+ sgmlDoc->setSrcLang ( pAttrib->Value() );
+ }
+ if ( attribut.compare ( "tgtlang" ) == 0 ) {
+ sgmlDoc->setTgtLang ( pAttrib->Value() );
+ }
+ }
+ break;
+
+ case 2: {
+ documentStructure * tmp_doc_bis = sgmlDoc->getLastDocument();
+ if ( attribut.compare ( "docid" ) == 0 ) {
+ tmp_doc_bis->setDocId ( pAttrib->Value() );
+ }
+ if ( attribut.compare ( "sysid" ) == 0 ) {
+ tmp_doc_bis->setSysId ( pAttrib->Value() );
+ }
+ }
+ break;
+
+ case 4: {
+ documentStructure * l_tmp_doc = sgmlDoc->getLastDocument();
+ segmentStructure * l_tmp_seg = l_tmp_doc->getLastSegments();
+ if ( attribut.compare ( "id" ) == 0 ) {
+ l_tmp_seg->setSegId ( pAttrib->Value() );
+ }
+// else
+// if (attribut.compare("Text")==0)
+// {
+// tmp_seg.addContent(pAttrib->Value());
+// }
+ }
+ break;
+ default:
+ break;
+
+ }
+// printf ( "%s%s: value=[%s]", pIndent, pAttrib->Name(), pAttrib->Value() );
+
+// if ( pAttrib->QueryIntValue ( &ival ) == TIXML_SUCCESS )
+// printf ( " int=%d", ival );
+// if ( pAttrib->QueryDoubleValue ( &dval ) == TIXML_SUCCESS )
+// printf ( " d=%1.1f", dval );
+// printf ( "\n" );
+// i++;
+ pAttrib = pAttrib->Next();
+ }
+// return i;
+}
+
+
+// std::size_t hashValue(std::string key){}
+
+}
+
diff --git a/mert/TERsrc/xmlStructure.h b/mert/TERsrc/xmlStructure.h
new file mode 100644
index 000000000..150beedf9
--- /dev/null
+++ b/mert/TERsrc/xmlStructure.h
@@ -0,0 +1,40 @@
+/*
+ * Generic hashmap manipulation functions
+ */
+#ifndef __XMLSTRUCTURE_H__
+#define __XMLSTRUCTURE_H__
+
+#include "sgmlDocument.h"
+#include "documentStructure.h"
+#include "stdio.h"
+#include <iostream>
+#include <string>
+#include "tinyxml.h"
+
+using namespace std;
+
+namespace TERCpp
+{
+class xmlStructure
+{
+private:
+ unsigned int NUM_INDENTS_PER_SPACE;
+// void dump_attribs_to_SGMLDocuments ( SGMLDocument* arg1, const TiXmlElement* arg2 );
+ void dump_attribs_to_SGMLDocuments ( SGMLDocument* sgmlDoc, TiXmlElement* pElement, unsigned int indent );
+public:
+ xmlStructure();
+ const char * getIndent ( unsigned int numIndents );
+ const char * getIndentAlt ( unsigned int numIndents );
+ int dump_attribs_to_stdout ( TiXmlElement* pElement, unsigned int indent );
+ void dump_to_stdout ( TiXmlNode* pParent, unsigned int indent );
+ void dump_to_stdout ( const char* pFilename );
+ void copy_to_SGMLDocument ( SGMLDocument* sgmlDoc , TiXmlNode* pParent, unsigned int indent );
+ SGMLDocument dump_to_SGMLDocument ( string FileName );
+ param xmlParams;
+};
+
+
+}
+
+
+#endif
diff --git a/mert/TODO b/mert/TODO
new file mode 100644
index 000000000..2559e78b5
--- /dev/null
+++ b/mert/TODO
@@ -0,0 +1,6 @@
+- check that mert-moses.pl emits devset score after every iteration
+ - correctly for whichever metric we are optimizing
+ - even when using --pairwise-ranked (PRO)
+ - this may make use of 'evaluator', soon to be added by Matous Machacek
+
+- check that --pairwise-ranked is compatible with all optimization metrics
diff --git a/mert/TerScorer.cpp b/mert/TerScorer.cpp
new file mode 100644
index 000000000..fee8e7080
--- /dev/null
+++ b/mert/TerScorer.cpp
@@ -0,0 +1,107 @@
+#include "TerScorer.h"
+#include "TERsrc/tercalc.h"
+#include "TERsrc/terAlignment.h"
+
+const int TerScorer::LENGTH = 2;
+using namespace TERCpp;
+using namespace std;
+
+
+void TerScorer::setReferenceFiles ( const vector<string>& referenceFiles )
+{
+ // for each line in the reference file, create a multiset of the
+ // word ids
+ for ( int incRefs = 0; incRefs < ( int ) referenceFiles.size(); incRefs++ ) {
+ stringstream convert;
+ m_references.clear();
+
+ _reftokens.clear();
+ _reflengths.clear();
+ ifstream in ( referenceFiles.at ( incRefs ).c_str() );
+ if ( !in ) {
+ throw runtime_error ( "Unable to open " + referenceFiles.at ( incRefs ) );
+ }
+ string line;
+ int sid = 0;
+ while ( getline ( in, line ) ) {
+ vector<int> tokens;
+ encode ( line, tokens );
+ m_references.push_back ( tokens );
+ TRACE_ERR ( "." );
+ ++sid;
+ }
+ m_multi_references.push_back ( m_references );
+ }
+
+ TRACE_ERR ( endl );
+ m_references=m_multi_references.at(0);
+}
+
+void TerScorer::prepareStats ( size_t sid, const string& text, ScoreStats& entry )
+{
+
+ terAlignment result;
+ result.numEdits = 0.0 ;
+ result.numWords = 0.0 ;
+ result.averageWords = 0.0;
+
+ for ( int incRefs = 0; incRefs < ( int ) m_multi_references.size(); incRefs++ ) {
+ if ( sid >= m_multi_references.at(incRefs).size() ) {
+ stringstream msg;
+ msg << "Sentence id (" << sid << ") not found in reference set";
+ throw runtime_error ( msg.str() );
+ }
+
+ vector<int> testtokens;
+ vector<int> reftokens;
+ reftokens = m_multi_references.at ( incRefs ).at ( sid );
+ double averageLength=0.0;
+ for ( int incRefsBis = 0; incRefsBis < ( int ) m_multi_references.size(); incRefsBis++ ) {
+ if ( sid >= m_multi_references.at(incRefsBis).size() ) {
+ stringstream msg;
+ msg << "Sentence id (" << sid << ") not found in reference set";
+ throw runtime_error ( msg.str() );
+ }
+ averageLength+=(double)m_multi_references.at ( incRefsBis ).at ( sid ).size();
+ }
+ averageLength=averageLength/( double ) m_multi_references.size();
+ encode ( text, testtokens );
+ terCalc * evaluation=new terCalc();
+ evaluation->setDebugMode ( false );
+ terAlignment tmp_result = evaluation->TER ( reftokens, testtokens );
+ tmp_result.averageWords=averageLength;
+ if ( ( result.numEdits == 0.0 ) && ( result.averageWords == 0.0 ) ) {
+ result = tmp_result;
+ } else if ( result.scoreAv() > tmp_result.scoreAv() ) {
+ result = tmp_result;
+ }
+
+ }
+ ostringstream stats;
+ stats << result.numEdits << " " << result.averageWords << " " << result.scoreAv() << " " ;
+ string stats_str = stats.str();
+ entry.set ( stats_str );
+}
+
+float TerScorer::calculateScore ( const vector<int>& comps )
+{
+ float denom = 1.0 * comps[1];
+ float num = -1.0 * comps[0];
+ if ( denom == 0 ) {
+// shouldn't happen!
+ return 1.0;
+ } else {
+ return (1.0+(num / denom));
+ }
+}
+float TerScorer::calculateScore ( const vector<float>& comps )
+{
+ float denom = 1.0 * comps[1];
+ float num = -1.0 * comps[0];
+ if ( denom == 0 ) {
+// shouldn't happen!
+ return 1.0;
+ } else {
+ return (1.0+(num / denom));
+ }
+}
diff --git a/mert/TerScorer.h b/mert/TerScorer.h
new file mode 100644
index 000000000..aaba29fed
--- /dev/null
+++ b/mert/TerScorer.h
@@ -0,0 +1,67 @@
+#ifndef __TERSCORER_H__
+#define __TERSCORER_H__
+
+// #include <stdio.h>
+#include <algorithm>
+#include <cmath>
+#include <iostream>
+#include <iterator>
+#include <set>
+#include <sstream>
+#include <stdexcept>
+#include <string>
+#include <vector>
+#include <limits.h>
+#include "Types.h"
+#include "ScoreData.h"
+#include "Scorer.h"
+#include "TERsrc/tercalc.h"
+#include "TERsrc/terAlignment.h"
+
+using namespace std;
+using namespace TERCpp;
+
+// enum TerReferenceLengthStrategy { TER_AVERAGE, TER_SHORTEST, TER_CLOSEST };
+
+
+/**
+ * Bleu scoring
+ **/
+class TerScorer: public StatisticsBasedScorer
+{
+public:
+ TerScorer(const string& config = "") : StatisticsBasedScorer("TER",config) {}
+ virtual void setReferenceFiles(const vector<string>& referenceFiles);
+ virtual void prepareStats(size_t sid, const string& text, ScoreStats& entry);
+ static const int LENGTH;
+ virtual void whoami() {
+ cerr << "I AM TerScorer" << std::endl;
+ }
+ size_t NumberOfScores() {
+ cerr << "TerScorer: " << (LENGTH + 1) << endl;
+ return (LENGTH + 1);
+ };
+
+
+// protected:
+ float calculateScore(const vector<int>& comps);
+ float calculateScore(const vector<float>& comps);
+
+private:
+ string javaEnv;
+ string tercomEnv;
+ //no copy
+ TerScorer(const TerScorer&);
+ ~TerScorer() {};
+ TerScorer& operator=(const TerScorer&);
+ // data extracted from reference files
+ vector<size_t> _reflengths;
+ vector<multiset<int> > _reftokens;
+ vector<vector<int> > m_references;
+ vector<vector<vector<int> > > m_multi_references;
+ string m_pid;
+
+};
+
+
+#endif //__TERSCORER_H
diff --git a/mert/example/README b/mert/example/README
index 8a994d7d0..7ece55a53 100644
--- a/mert/example/README
+++ b/mert/example/README
@@ -10,7 +10,7 @@ $extractor --binary --ffile FEATSTAT.3 --scfile SCORESTAT.3 --sctype BLEU --prev
$extractor --nbest NBEST --reference REF.0,REF.1,REF.2 --ffile FEATSTAT.4 --scfile SCORESTAT.4 --sctype BLEU --prev-ffile FEATSTAT,FEATSTAT.3 --prev-scfile SCORESTAT,SCORESTAT.3
-$mert --ifile init.opt --scfile SCORESTAT --ffile FEATSTAT -d $size --verbose 4 -n 5
+$mert -r 1234 --ifile init.opt --scfile SCORESTAT --ffile FEATSTAT -d $size --verbose 4 -n 5
exit
diff --git a/mert/example/init.opt b/mert/example/init.opt
index 1d5437e2a..3fd30cb88 100644
--- a/mert/example/init.opt
+++ b/mert/example/init.opt
@@ -1 +1,3 @@
1 1 1 1 1 1 1 1 0.3 0.2 0.3 0.2 0 0 1
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
diff --git a/mert/mert.cpp b/mert/mert.cpp
index 3fad71dc5..4cb8ea9d1 100755
--- a/mert/mert.cpp
+++ b/mert/mert.cpp
@@ -31,10 +31,12 @@ using namespace std;
void usage(void)
{
cerr<<"usage: mert -d <dimensions> (mandatory )"<<endl;
- cerr<<"[-n retry ntimes (default 1)]"<<endl;
- cerr<<"[-o\tthe indexes to optimize(default all)]"<<endl;
- cerr<<"[-t\tthe optimizer(default powell)]"<<endl;
- cerr<<"[-r\tthe random seed (defaults to system clock)"<<endl;
+ cerr<<"[-n] retry ntimes (default 1)"<<endl;
+ cerr<<"[-m] number of random directions in powell (default 0)"<<endl;
+ cerr<<"[-o] the indexes to optimize(default all)"<<endl;
+ cerr<<"[-t] the optimizer(default powell)"<<endl;
+ cerr<<"[-r] the random seed (defaults to system clock)"<<endl;
+ cerr<<"[-p] only create data for paired ranked optimizer"<<endl;
cerr<<"[--sctype|-s] the scorer type (default BLEU)"<<endl;
cerr<<"[--scconfig|-c] configuration string passed to scorer"<<endl;
cerr<<"[--scfile|-S] comma separated list of scorer data files (default score.data)"<<endl;
@@ -48,8 +50,10 @@ void usage(void)
static struct option long_options[] = {
{"pdim", 1, 0, 'd'},
{"ntry",1,0,'n'},
+ {"nrandom",1,0,'m'},
{"rseed",required_argument,0,'r'},
{"optimize",1,0,'o'},
+ {"pro",required_argument,0,'p'},
{"type",1,0,'t'},
{"sctype",1,0,'s'},
{"scconfig",required_argument,0,'c'},
@@ -76,6 +80,7 @@ int main (int argc, char **argv)
int c,pdim,i;
pdim=-1;
int ntry=1;
+ int nrandom=0;
int seed=0;
bool hasSeed = false;
string type("powell");
@@ -84,22 +89,32 @@ int main (int argc, char **argv)
string scorerfile("statscore.data");
string featurefile("features.data");
string initfile("init.opt");
+ string pairedrankfile("");
string tooptimizestr("");
vector<unsigned> tooptimize;
- vector<parameter_t> start;
+ vector<vector<parameter_t> > start_list;
+ vector<parameter_t> min;
+ vector<parameter_t> max;
+ //note: those mins and max are the bound for the starting points of the algorithm, not strict bound on the result!
- while ((c=getopt_long (argc, argv, "o:r:d:n:t:s:S:F:v:", long_options, &option_index)) != -1) {
+ while ((c=getopt_long (argc, argv, "o:r:d:n:m:t:s:S:F:v:p:", long_options, &option_index)) != -1) {
switch (c) {
case 'o':
tooptimizestr = string(optarg);
break;
+ case 'p':
+ pairedrankfile = string(optarg);
+ break;
case 'd':
pdim = strtol(optarg, NULL, 10);
break;
case 'n':
ntry=strtol(optarg, NULL, 10);
break;
+ case 'm':
+ nrandom=strtol(optarg, NULL, 10);
+ break;
case 'r':
seed=strtol(optarg, NULL, 10);
hasSeed = true;
@@ -140,22 +155,46 @@ int main (int argc, char **argv)
srandom(time(NULL));
}
- ifstream opt(initfile.c_str());
- if(opt.fail()) {
- cerr<<"could not open initfile: " << initfile << endl;
- exit(3);
- }
- start.resize(pdim);//to do:read from file
- int j;
- for( j=0; j<pdim&&!opt.fail(); j++)
- opt>>start[j];
- if(j<pdim) {
- cerr<<"error could not initialize start point with " << initfile << endl;
- exit(3);
+ // read in starting points
+ std::string onefile;
+ while (!initfile.empty()) {
+ getNextPound(initfile, onefile, ",");
+ vector<parameter_t> start;
+ ifstream opt(onefile.c_str());
+ if(opt.fail()) {
+ cerr<<"could not open initfile: " << initfile << endl;
+ exit(3);
+ }
+ start.resize(pdim);//to do:read from file
+ int j;
+ for( j=0; j<pdim&&!opt.fail(); j++)
+ opt>>start[j];
+ if(j<pdim) {
+ cerr<<initfile<<":Too few starting weights." << endl;
+ exit(3);
+ }
+ start_list.push_back(start);
+ // for the first time, also read in the min/max values for scores
+ if (start_list.size() == 1) {
+ min.resize(pdim);
+ for( j=0; j<pdim&&!opt.fail(); j++)
+ opt>>min[j];
+ if(j<pdim) {
+ cerr<<initfile<<":Too few minimum weights." << endl;
+ cerr<<"error could not initialize start point with " << initfile << endl;
+ exit(3);
+ }
+ max.resize(pdim);
+ for( j=0; j<pdim&&!opt.fail(); j++)
+ opt>>max[j];
+ if(j<pdim) {
+ cerr<<initfile<<":Too few maximum weights." << endl;
+ exit(3);
+ }
+ }
+ opt.close();
}
- opt.close();
-
vector<string> ScoreDataFiles;
if (scorerfile.length() > 0) {
std::string substring;
@@ -217,42 +256,49 @@ int main (int argc, char **argv)
}
}
- Optimizer *O=OptimizerFactory::BuildOptimizer(pdim,tooptimize,start,type);
+ if (pairedrankfile.compare("") != 0) {
+ D.sample_ranked_pairs(pairedrankfile);
+ PrintUserTime("Stopping...");
+ exit(0);
+ }
+
+ Optimizer *O=OptimizerFactory::BuildOptimizer(pdim,tooptimize,start_list[0],type,nrandom);
O->SetScorer(TheScorer);
O->SetFData(D.getFeatureData());
- Point P(start);//Generate from the full feature set. Warning: must be done after Optimizer initialization
- statscore_t best=O->Run(P);
- Point bestP=P;
- statscore_t mean=best;
- statscore_t var=best*best;
+ // run with specified starting points
stringstream oss;
- oss << "Try number 1";
-
- PrintUserTime(oss.str());
-
- vector<parameter_t> min(Point::getdim());
- vector<parameter_t> max(Point::getdim());
-
- for(unsigned int d=0; d<Point::getdim(); d++) {
- min[d]=0.0;
- max[d]=1.0;
+ statscore_t best=0, mean=0, var=0;
+ Point bestP;
+ for(int i=0;i<start_list.size();i++) {
+ Point P(start_list[i], min, max);//Generate from the full feature set. Warning: must be done after Optimizer initialization
+ statscore_t score=O->Run(P);
+ oss.str("");
+ oss << "Specified starting point number " << (1+i) << ", score: " << score;
+ if (i==0 || score>best) {
+ best=score;
+ bestP=P;
+ oss << " (new best)";
+ }
+ mean+=score;
+ var+=(score*score);
+ PrintUserTime(oss.str());
}
- //note: those mins and max are the bound for the starting points of the algorithm, not strict bound on the result!
-
- for(int i=1; i<ntry; i++) {
- P.Randomize(min,max);
+ // run with random starting points
+ for(int i=0; i<ntry; i++) {
+ Point P(start_list[0], min, max);
+ P.Randomize(); // randomize within min and max as given to the constructor
statscore_t score=O->Run(P);
+ oss.str("");
+ oss << "Randomized starting point number " << (1+i) << ", score: " << score;
if(score>best) {
best=score;
bestP=P;
+ oss << " (new best)";
}
mean+=score;
var+=(score*score);
-
- oss.str("");
- oss << "Try number " << (i+1);
PrintUserTime(oss.str());
}
mean/=(float)ntry;
@@ -261,11 +307,10 @@ int main (int argc, char **argv)
if (verboselevel()>1)
cerr<<"best score: "<< best << " variance of the score (for "<<ntry<<" try): "<<var<<endl;
-//L1-Normalization of the best Point
- if (tooptimize.size() == pdim)
+ // L1-Normalization of the best Point
+ if ((int)tooptimize.size() == pdim)
bestP.NormalizeL1();
-
cerr << "Best point: " << bestP << " => " << best << endl;
ofstream res("weights.txt");
res<<bestP<<endl;
diff --git a/misc/processLexicalTable.cpp b/misc/processLexicalTable.cpp
index e396e95e5..a81c65965 100644
--- a/misc/processLexicalTable.cpp
+++ b/misc/processLexicalTable.cpp
@@ -49,6 +49,7 @@ int main(int argc, char** argv)
} else {
std::cerr << "processing " << inFilePath<< " to " << outFilePath << ".*\n";
InputFileStream file(inFilePath);
- return LexicalReorderingTableTree::Create(file, outFilePath);
+ bool success = LexicalReorderingTableTree::Create(file, outFilePath);
+ return (success ? 0 : 1);
}
}
diff --git a/misc/processLexicalTable.vcproj b/misc/processLexicalTable.vcproj
deleted file mode 100644
index 8c4df64a7..000000000
--- a/misc/processLexicalTable.vcproj
+++ /dev/null
@@ -1,354 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="processLexicalTable"
- ProjectGUID="{9834EABB-2033-4607-9DAC-36D16E0725B5}"
- RootNamespace="processLexicalTable"
- Keyword="Win32Proj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="&quot;$(SolutionDir)\moses\src&quot;"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="zlib.lib &quot;$(SolutionDir)$(ConfigurationName)\moses.lib&quot;"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="0"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(SolutionDir)\moses\src&quot;"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="zlib.lib &quot;$(SolutionDir)$(ConfigurationName)\moses.lib&quot;"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="0"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release-withSRILM|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(SolutionDir)\moses\src&quot;"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalOptions="/FORCE:MULTIPLE"
- AdditionalDependencies="zlib.lib &quot;$(SolutionDir)$(ConfigurationName)\moses.lib&quot;"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="0"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug-withSRILM|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="&quot;$(SolutionDir)\moses\src&quot;"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalOptions="/FORCE:MULTIPLE"
- AdditionalDependencies="zlib.lib &quot;$(SolutionDir)$(ConfigurationName)\moses.lib&quot;"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="0"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\processLexicalTable.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/misc/processLexicalTable.vcxproj b/misc/processLexicalTable.vcxproj
new file mode 100644
index 000000000..5ca439115
--- /dev/null
+++ b/misc/processLexicalTable.vcxproj
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug-withSRILM|Win32">
+ <Configuration>Debug-withSRILM</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release-withSRILM|Win32">
+ <Configuration>Release-withSRILM</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{9834EABB-2033-4607-9DAC-36D16E0725B5}</ProjectGuid>
+ <RootNamespace>processLexicalTable</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-withSRILM|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-withSRILM|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-withSRILM|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-withSRILM|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release-withSRILM|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release-withSRILM|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release-withSRILM|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-withSRILM|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-withSRILM|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-withSRILM|Win32'">true</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>$(SolutionDir)\moses\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>zlib.lib;$(SolutionDir)$(Configuration)\moses.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>$(SolutionDir)\moses\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>zlib.lib;$(SolutionDir)$(Configuration)\moses.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-withSRILM|Win32'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>$(SolutionDir)\moses\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalOptions>/FORCE:MULTIPLE %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>zlib.lib;$(SolutionDir)$(Configuration)\moses.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-withSRILM|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>$(SolutionDir)\moses\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalOptions>/FORCE:MULTIPLE %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>zlib.lib;$(SolutionDir)$(Configuration)\moses.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="processLexicalTable.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\moses\moses.vcxproj">
+ <Project>{8122157a-0de5-44ff-8e5b-024ed6ace7af}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ <ProjectReference Include="..\OnDiskPt\OnDiskPt.vcxproj">
+ <Project>{8b07671b-cbaf-4514-affd-ce238cd427e9}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/misc/processPhraseTable.vcproj b/misc/processPhraseTable.vcproj
deleted file mode 100644
index d70be4581..000000000
--- a/misc/processPhraseTable.vcproj
+++ /dev/null
@@ -1,354 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="processPhraseTable"
- ProjectGUID="{AA230564-6DF1-4662-9BF9-7AD73DE53B76}"
- RootNamespace="processPhraseTable"
- Keyword="Win32Proj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="&quot;$(SolutionDir)\moses\src&quot;"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="zlib.lib &quot;$(SolutionDir)$(ConfigurationName)\moses.lib&quot;"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="0"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(SolutionDir)\moses\src&quot;"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="zlib.lib &quot;$(SolutionDir)$(ConfigurationName)\moses.lib&quot;"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="0"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release-withSRILM|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;$(SolutionDir)\moses\src&quot;"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalOptions="/FORCE:MULTIPLE"
- AdditionalDependencies="zlib.lib &quot;$(SolutionDir)$(ConfigurationName)\moses.lib&quot;"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="0"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug-withSRILM|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="&quot;$(SolutionDir)\moses\src&quot;"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalOptions="/FORCE:MULTIPLE"
- AdditionalDependencies="zlib.lib &quot;$(SolutionDir)$(ConfigurationName)\moses.lib&quot;"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="0"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\processPhraseTable.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/misc/processPhraseTable.vcxproj b/misc/processPhraseTable.vcxproj
new file mode 100644
index 000000000..8e88fde12
--- /dev/null
+++ b/misc/processPhraseTable.vcxproj
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug-withSRILM|Win32">
+ <Configuration>Debug-withSRILM</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release-withSRILM|Win32">
+ <Configuration>Release-withSRILM</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{AA230564-6DF1-4662-9BF9-7AD73DE53B76}</ProjectGuid>
+ <RootNamespace>processPhraseTable</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-withSRILM|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-withSRILM|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-withSRILM|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-withSRILM|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release-withSRILM|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release-withSRILM|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release-withSRILM|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-withSRILM|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-withSRILM|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug-withSRILM|Win32'">true</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>$(SolutionDir)\moses\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>zlib.lib;$(SolutionDir)$(Configuration)\moses.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>$(SolutionDir)\moses\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>zlib.lib;$(SolutionDir)$(Configuration)\moses.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-withSRILM|Win32'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>$(SolutionDir)\moses\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalOptions>/FORCE:MULTIPLE %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>zlib.lib;$(SolutionDir)$(Configuration)\moses.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-withSRILM|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>$(SolutionDir)\moses\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalOptions>/FORCE:MULTIPLE %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>zlib.lib;$(SolutionDir)$(Configuration)\moses.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="processPhraseTable.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\moses\moses.vcxproj">
+ <Project>{8122157a-0de5-44ff-8e5b-024ed6ace7af}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ <ProjectReference Include="..\OnDiskPt\OnDiskPt.vcxproj">
+ <Project>{8b07671b-cbaf-4514-affd-ce238cd427e9}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/misc/queryLexicalTable.cpp b/misc/queryLexicalTable.cpp
index 388336947..ef6e741c1 100644
--- a/misc/queryLexicalTable.cpp
+++ b/misc/queryLexicalTable.cpp
@@ -86,7 +86,7 @@ int main(int argc, char** argv)
if(use_context) {
c_mask.push_back(0);
}
- Phrase e(Output),f(Input),c(Output);
+ Phrase e(Output, 0),f(Input, 0),c(Output, 0);
e.CreateFromString(e_mask, query_e, "|");
f.CreateFromString(f_mask, query_f, "|");
c.CreateFromString(c_mask, query_c,"|");
diff --git a/moses-chart-cmd/moses-chart-cmd.vcproj b/moses-chart-cmd/moses-chart-cmd.vcproj
deleted file mode 100644
index 3bbe3b4f5..000000000
--- a/moses-chart-cmd/moses-chart-cmd.vcproj
+++ /dev/null
@@ -1,228 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="moses-chart-cmd"
- ProjectGUID="{C3AF5C05-D4EC-41D2-8319-D1E69B9B5820}"
- RootNamespace="moseschartcmd"
- Keyword="Win32Proj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="&quot;../moses/src&quot;"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;LM_INTERNAL;TRACE_ENABLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="zlib.lib &quot;$(OutDir)\moses.lib&quot; &quot;$(OutDir)\moses-chart.lib&quot; &quot;$(OutDir)\OnDiskPt.lib&quot;"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="0"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;../moses/src&quot;"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;LM_INTERNAL;TRACE_ENABLE"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="zlib.lib &quot;$(OutDir)\moses.lib&quot; &quot;$(OutDir)\moses-chart.lib&quot; &quot;$(OutDir)\OnDiskPt.lib&quot;"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="0"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\src\IOWrapper.cpp"
- >
- </File>
- <File
- RelativePath=".\src\Main.cpp"
- >
- </File>
- <File
- RelativePath=".\src\mbr.cpp"
- >
- </File>
- <File
- RelativePath=".\src\TranslationAnalysis.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath=".\src\IOWrapper.h"
- >
- </File>
- <File
- RelativePath=".\src\Main.h"
- >
- </File>
- <File
- RelativePath=".\src\mbr.h"
- >
- </File>
- <File
- RelativePath=".\src\TranslationAnalysis.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/moses-chart-cmd/moses-chart-cmd.vcxproj b/moses-chart-cmd/moses-chart-cmd.vcxproj
new file mode 100644
index 000000000..585811288
--- /dev/null
+++ b/moses-chart-cmd/moses-chart-cmd.vcxproj
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{C3AF5C05-D4EC-41D2-8319-D1E69B9B5820}</ProjectGuid>
+ <RootNamespace>moseschartcmd</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../moses/src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;LM_INTERNAL;TRACE_ENABLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>zlib.lib;$(OutDir)moses.lib;$(OutDir)OnDiskPt.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>../moses/src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;LM_INTERNAL;TRACE_ENABLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>zlib.lib;$(OutDir)moses.lib;$(OutDir)OnDiskPt.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="src\IOWrapper.cpp" />
+ <ClCompile Include="src\Main.cpp" />
+ <ClCompile Include="src\mbr.cpp" />
+ <ClCompile Include="src\TranslationAnalysis.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="src\IOWrapper.h" />
+ <ClInclude Include="src\Main.h" />
+ <ClInclude Include="src\mbr.h" />
+ <ClInclude Include="src\TranslationAnalysis.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\moses\moses.vcxproj">
+ <Project>{8122157a-0de5-44ff-8e5b-024ed6ace7af}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ <ProjectReference Include="..\OnDiskPt\OnDiskPt.vcxproj">
+ <Project>{8b07671b-cbaf-4514-affd-ce238cd427e9}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/moses-chart-cmd/moses-chart-cmd.xcodeproj/project.pbxproj b/moses-chart-cmd/moses-chart-cmd.xcodeproj/project.pbxproj
index 31551fc24..c9da6b792 100644
--- a/moses-chart-cmd/moses-chart-cmd.xcodeproj/project.pbxproj
+++ b/moses-chart-cmd/moses-chart-cmd.xcodeproj/project.pbxproj
@@ -12,7 +12,6 @@
1E9DA31611BDC84A00F4DBD1 /* Main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E9DA30C11BDC84A00F4DBD1 /* Main.cpp */; };
1E9DA31811BDC84A00F4DBD1 /* mbr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E9DA31111BDC84A00F4DBD1 /* mbr.cpp */; };
1E9DA31911BDC84A00F4DBD1 /* TranslationAnalysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E9DA31311BDC84A00F4DBD1 /* TranslationAnalysis.cpp */; };
- 1E9DA34211BDC8DB00F4DBD1 /* libmoses-chart.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E9DA34111BDC8CA00F4DBD1 /* libmoses-chart.a */; };
1E9DA35011BDC97100F4DBD1 /* libOnDiskPt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E9DA34F11BDC96A00F4DBD1 /* libOnDiskPt.a */; };
1ED8B842124B98A60030CCF4 /* libkenlm.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E60D2A212496B1900D15873 /* libkenlm.a */; };
/* End PBXBuildFile section */
@@ -46,13 +45,6 @@
remoteGlobalIDString = D2AAC045055464E500DB518D;
remoteInfo = moses;
};
- 1E9DA34011BDC8CA00F4DBD1 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 1E9DA33911BDC8CA00F4DBD1 /* moses-chart.xcodeproj */;
- proxyType = 2;
- remoteGlobalIDString = D2AAC046055464E500DB518D;
- remoteInfo = "moses-chart";
- };
1E9DA34E11BDC96A00F4DBD1 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 1E9DA34A11BDC96A00F4DBD1 /* OnDiskPt.xcodeproj */;
@@ -67,13 +59,6 @@
remoteGlobalIDString = D2AAC045055464E500DB518D;
remoteInfo = OnDiskPt;
};
- 1E9DA36711BDC9B200F4DBD1 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 1E9DA33911BDC8CA00F4DBD1 /* moses-chart.xcodeproj */;
- proxyType = 1;
- remoteGlobalIDString = D2AAC045055464E500DB518D;
- remoteInfo = "moses-chart";
- };
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
@@ -99,7 +84,6 @@
1E9DA31311BDC84A00F4DBD1 /* TranslationAnalysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TranslationAnalysis.cpp; path = src/TranslationAnalysis.cpp; sourceTree = "<group>"; };
1E9DA31411BDC84A00F4DBD1 /* TranslationAnalysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TranslationAnalysis.h; path = src/TranslationAnalysis.h; sourceTree = "<group>"; };
1E9DA33311BDC8BB00F4DBD1 /* moses.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = moses.xcodeproj; path = ../moses/moses.xcodeproj; sourceTree = SOURCE_ROOT; };
- 1E9DA33911BDC8CA00F4DBD1 /* moses-chart.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "moses-chart.xcodeproj"; path = "../moses-chart/moses-chart.xcodeproj"; sourceTree = SOURCE_ROOT; };
1E9DA34A11BDC96A00F4DBD1 /* OnDiskPt.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = OnDiskPt.xcodeproj; path = ../OnDiskPt/OnDiskPt.xcodeproj; sourceTree = SOURCE_ROOT; };
8DD76F6C0486A84900D96B5E /* moses-chart-cmd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "moses-chart-cmd"; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
@@ -112,7 +96,6 @@
1ED8B842124B98A60030CCF4 /* libkenlm.a in Frameworks */,
1E87F09311BDCD2E0033951C /* libmoses.a in Frameworks */,
1E9DA35011BDC97100F4DBD1 /* libOnDiskPt.a in Frameworks */,
- 1E9DA34211BDC8DB00F4DBD1 /* libmoses-chart.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -124,7 +107,6 @@
children = (
1E60D29A12496B1900D15873 /* kenlm.xcodeproj */,
1E9DA34A11BDC96A00F4DBD1 /* OnDiskPt.xcodeproj */,
- 1E9DA33911BDC8CA00F4DBD1 /* moses-chart.xcodeproj */,
1E9DA33311BDC8BB00F4DBD1 /* moses.xcodeproj */,
08FB7795FE84155DC02AAC07 /* Source */,
C6859E8C029090F304C91782 /* Documentation */,
@@ -172,14 +154,6 @@
name = Products;
sourceTree = "<group>";
};
- 1E9DA33A11BDC8CA00F4DBD1 /* Products */ = {
- isa = PBXGroup;
- children = (
- 1E9DA34111BDC8CA00F4DBD1 /* libmoses-chart.a */,
- );
- name = Products;
- sourceTree = "<group>";
- };
1E9DA34B11BDC96A00F4DBD1 /* Products */ = {
isa = PBXGroup;
children = (
@@ -210,7 +184,6 @@
);
dependencies = (
1E9DA36411BDC9B200F4DBD1 /* PBXTargetDependency */,
- 1E9DA36811BDC9B200F4DBD1 /* PBXTargetDependency */,
1E87F09511BDCD390033951C /* PBXTargetDependency */,
1E60D2A912496B4F00D15873 /* PBXTargetDependency */,
);
@@ -243,10 +216,6 @@
ProjectRef = 1E60D29A12496B1900D15873 /* kenlm.xcodeproj */;
},
{
- ProductGroup = 1E9DA33A11BDC8CA00F4DBD1 /* Products */;
- ProjectRef = 1E9DA33911BDC8CA00F4DBD1 /* moses-chart.xcodeproj */;
- },
- {
ProductGroup = 1E9DA33411BDC8BB00F4DBD1 /* Products */;
ProjectRef = 1E9DA33311BDC8BB00F4DBD1 /* moses.xcodeproj */;
},
@@ -277,13 +246,6 @@
remoteRef = 1E87F08C11BDCD1B0033951C /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
- 1E9DA34111BDC8CA00F4DBD1 /* libmoses-chart.a */ = {
- isa = PBXReferenceProxy;
- fileType = archive.ar;
- path = "libmoses-chart.a";
- remoteRef = 1E9DA34011BDC8CA00F4DBD1 /* PBXContainerItemProxy */;
- sourceTree = BUILT_PRODUCTS_DIR;
- };
1E9DA34F11BDC96A00F4DBD1 /* libOnDiskPt.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
@@ -323,11 +285,6 @@
name = OnDiskPt;
targetProxy = 1E9DA36311BDC9B200F4DBD1 /* PBXContainerItemProxy */;
};
- 1E9DA36811BDC9B200F4DBD1 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- name = "moses-chart";
- targetProxy = 1E9DA36711BDC9B200F4DBD1 /* PBXContainerItemProxy */;
- };
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
@@ -399,7 +356,10 @@
GCC_PREPROCESSOR_DEFINITIONS = TRACE_ENABLE;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- HEADER_SEARCH_PATHS = ../moses/src;
+ HEADER_SEARCH_PATHS = (
+ ../moses/src,
+ ../,
+ );
ONLY_ACTIVE_ARCH = YES;
PREBINDING = NO;
SDKROOT = macosx10.6;
@@ -414,7 +374,10 @@
GCC_PREPROCESSOR_DEFINITIONS = TRACE_ENABLE;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- HEADER_SEARCH_PATHS = ../moses/src;
+ HEADER_SEARCH_PATHS = (
+ ../moses/src,
+ ../,
+ );
ONLY_ACTIVE_ARCH = YES;
PREBINDING = NO;
SDKROOT = macosx10.6;
diff --git a/moses-chart-cmd/src/IOWrapper.cpp b/moses-chart-cmd/src/IOWrapper.cpp
index 260a16248..ed6112e00 100644
--- a/moses-chart-cmd/src/IOWrapper.cpp
+++ b/moses-chart-cmd/src/IOWrapper.cpp
@@ -41,12 +41,15 @@ POSSIBILITY OF SUCH DAMAGE.
#include "DummyScoreProducers.h"
#include "InputFileStream.h"
#include "PhraseDictionary.h"
-#include "../../moses-chart/src/ChartTrellisPathList.h"
-#include "../../moses-chart/src/ChartTrellisPath.h"
+#include "ChartTrellisPathList.h"
+#include "ChartTrellisPath.h"
+#include "ChartTranslationOption.h"
+#include "ChartHypothesis.h"
+#include "DotChart.h"
+
using namespace std;
using namespace Moses;
-using namespace MosesChart;
IOWrapper::IOWrapper(const std::vector<FactorType> &inputFactorOrder
, const std::vector<FactorType> &outputFactorOrder
@@ -165,37 +168,37 @@ void OutputSurface(std::ostream &out, const Phrase &phrase, const std::vector<Fa
}
}
-void OutputSurface(std::ostream &out, const MosesChart::Hypothesis *hypo, const std::vector<FactorType> &outputFactorOrder
+void OutputSurface(std::ostream &out, const ChartHypothesis *hypo, const std::vector<FactorType> &outputFactorOrder
,bool reportSegmentation, bool reportAllFactors)
{
if ( hypo != NULL) {
//OutputSurface(out, hypo->GetCurrTargetPhrase(), outputFactorOrder, reportAllFactors);
- const vector<const MosesChart::Hypothesis*> &prevHypos = hypo->GetPrevHypos();
+ const vector<const ChartHypothesis*> &prevHypos = hypo->GetPrevHypos();
- vector<const MosesChart::Hypothesis*>::const_iterator iter;
+ vector<const ChartHypothesis*>::const_iterator iter;
for (iter = prevHypos.begin(); iter != prevHypos.end(); ++iter) {
- const MosesChart::Hypothesis *prevHypo = *iter;
+ const ChartHypothesis *prevHypo = *iter;
OutputSurface(out, prevHypo, outputFactorOrder, reportSegmentation, reportAllFactors);
}
}
}
-void IOWrapper::Backtrack(const MosesChart::Hypothesis *hypo)
+void IOWrapper::Backtrack(const ChartHypothesis *hypo)
{
- const vector<const MosesChart::Hypothesis*> &prevHypos = hypo->GetPrevHypos();
+ const vector<const ChartHypothesis*> &prevHypos = hypo->GetPrevHypos();
- vector<const MosesChart::Hypothesis*>::const_iterator iter;
+ vector<const ChartHypothesis*>::const_iterator iter;
for (iter = prevHypos.begin(); iter != prevHypos.end(); ++iter) {
- const MosesChart::Hypothesis *prevHypo = *iter;
+ const ChartHypothesis *prevHypo = *iter;
VERBOSE(3,prevHypo->GetId() << " <= ");
Backtrack(prevHypo);
}
}
-void IOWrapper::OutputBestHypo(const std::vector<const Factor*>& mbrBestHypo, long /*translationId*/, bool reportSegmentation, bool reportAllFactors)
+void IOWrapper::OutputBestHypo(const std::vector<const Factor*>& mbrBestHypo, long /*translationId*/, bool /* reportSegmentation */, bool /* reportAllFactors */)
{
for (size_t i = 0 ; i < mbrBestHypo.size() ; i++) {
const Factor *factor = mbrBestHypo[i];
@@ -203,7 +206,7 @@ void IOWrapper::OutputBestHypo(const std::vector<const Factor*>& mbrBestHypo, l
}
}
/*
-void OutputInput(std::vector<const Phrase*>& map, const MosesChart::Hypothesis* hypo)
+void OutputInput(std::vector<const Phrase*>& map, const ChartHypothesis* hypo)
{
if (hypo->GetPrevHypos())
{
@@ -212,7 +215,7 @@ void OutputInput(std::vector<const Phrase*>& map, const MosesChart::Hypothesis*
}
}
-void OutputInput(std::ostream& os, const MosesChart::Hypothesis* hypo)
+void OutputInput(std::ostream& os, const ChartHypothesis* hypo)
{
size_t len = StaticData::Instance().GetInput()->GetSize();
std::vector<const Phrase*> inp_phrases(len, 0);
@@ -222,25 +225,29 @@ void OutputInput(std::ostream& os, const MosesChart::Hypothesis* hypo)
}
*/
-void OutputTranslationOptions(std::ostream &out, const MosesChart::Hypothesis *hypo, long translationId)
+void OutputTranslationOptions(std::ostream &out, const ChartHypothesis *hypo, long translationId)
{
// recursive
if (hypo != NULL) {
- out << "Trans Opt " << translationId << " " << hypo->GetCurrSourceRange() << ": " << hypo->GetTranslationOption()
+ out << "Trans Opt " << translationId
+ << " " << hypo->GetCurrSourceRange()
+ << ": " << hypo->GetTranslationOption().GetDottedRule()
+ << ": " << hypo->GetCurrTargetPhrase().GetTargetLHS()
+ << "->" << hypo->GetCurrTargetPhrase()
<< " " << hypo->GetTotalScore() << hypo->GetScoreBreakdown()
<< endl;
}
- const std::vector<const MosesChart::Hypothesis*> &prevHypos = hypo->GetPrevHypos();
- std::vector<const MosesChart::Hypothesis*>::const_iterator iter;
+ const std::vector<const ChartHypothesis*> &prevHypos = hypo->GetPrevHypos();
+ std::vector<const ChartHypothesis*>::const_iterator iter;
for (iter = prevHypos.begin(); iter != prevHypos.end(); ++iter) {
- const MosesChart::Hypothesis *prevHypo = *iter;
+ const ChartHypothesis *prevHypo = *iter;
OutputTranslationOptions(out, prevHypo, translationId);
}
}
void IOWrapper::OutputDetailedTranslationReport(
- const MosesChart::Hypothesis *hypo,
+ const ChartHypothesis *hypo,
long translationId)
{
if (hypo == NULL) {
@@ -252,7 +259,7 @@ void IOWrapper::OutputDetailedTranslationReport(
m_detailOutputCollector->Write(translationId, out.str());
}
-void IOWrapper::OutputBestHypo(const MosesChart::Hypothesis *hypo, long translationId, bool reportSegmentation, bool reportAllFactors)
+void IOWrapper::OutputBestHypo(const ChartHypothesis *hypo, long translationId, bool /* reportSegmentation */, bool /* reportAllFactors */)
{
std::ostringstream out;
IOWrapper::FixPrecision(out);
@@ -264,14 +271,14 @@ void IOWrapper::OutputBestHypo(const MosesChart::Hypothesis *hypo, long translat
if (StaticData::Instance().GetOutputHypoScore()) {
out << hypo->GetTotalScore() << " "
- << MosesChart::Hypothesis::GetHypoCount() << " ";
+ << ChartHypothesis::GetHypoCount() << " ";
}
if (!m_surpressSingleBestOutput) {
if (StaticData::Instance().IsPathRecoveryEnabled()) {
out << "||| ";
}
- Phrase outPhrase(Output);
+ Phrase outPhrase(Output, ARRAY_SIZE_INCR);
hypo->CreateOutputPhrase(outPhrase);
// delete 1st & last
@@ -298,7 +305,7 @@ void IOWrapper::OutputBestHypo(const MosesChart::Hypothesis *hypo, long translat
}
}
-void IOWrapper::OutputNBestList(const MosesChart::TrellisPathList &nBestList, const MosesChart::Hypothesis *bestHypo, const TranslationSystem* system, long translationId)
+void IOWrapper::OutputNBestList(const ChartTrellisPathList &nBestList, const ChartHypothesis *bestHypo, const TranslationSystem* system, long translationId)
{
std::ostringstream out;
@@ -312,7 +319,7 @@ void IOWrapper::OutputNBestList(const MosesChart::TrellisPathList &nBestList, co
if (StaticData::Instance().GetOutputHypoScore()) {
if (bestHypo != NULL) {
out << bestHypo->GetTotalScore() << " "
- << MosesChart::Hypothesis::GetHypoCount() << " ";
+ << ChartHypothesis::GetHypoCount() << " ";
} else {
out << "0 ";
}
@@ -322,9 +329,9 @@ void IOWrapper::OutputNBestList(const MosesChart::TrellisPathList &nBestList, co
bool labeledOutput = StaticData::Instance().IsLabeledNBestList();
//bool includeAlignment = StaticData::Instance().NBestIncludesAlignment();
- MosesChart::TrellisPathList::const_iterator iter;
+ ChartTrellisPathList::const_iterator iter;
for (iter = nBestList.begin() ; iter != nBestList.end() ; ++iter) {
- const MosesChart::TrellisPath &path = **iter;
+ const ChartTrellisPath &path = **iter;
//cerr << path << endl << endl;
Moses::Phrase outputPhrase = path.GetOutputPhrase();
@@ -433,7 +440,7 @@ void IOWrapper::OutputNBestList(const MosesChart::TrellisPathList &nBestList, co
*m_nBestStream << " |||";
for (int currEdge = (int)edges.size() - 2 ; currEdge >= 0 ; currEdge--)
{
- const MosesChart::Hypothesis &edge = *edges[currEdge];
+ const ChartHypothesis &edge = *edges[currEdge];
WordsRange sourceRange = edge.GetCurrSourceWordsRange();
WordsRange targetRange = edge.GetCurrTargetWordsRange();
*m_nBestStream << " " << sourceRange.GetStartPos();
diff --git a/moses-chart-cmd/src/IOWrapper.h b/moses-chart-cmd/src/IOWrapper.h
index fca183436..c606774e1 100644
--- a/moses-chart-cmd/src/IOWrapper.h
+++ b/moses-chart-cmd/src/IOWrapper.h
@@ -40,18 +40,14 @@ POSSIBILITY OF SUCH DAMAGE.
#include "Sentence.h"
#include "FactorTypeSet.h"
#include "TranslationSystem.h"
-#include "TrellisPathList.h"
+#include "ChartTrellisPathList.h"
#include "OutputCollector.h"
-#include "../../moses-chart/src/ChartHypothesis.h"
+#include "ChartHypothesis.h"
namespace Moses
{
class FactorCollection;
-}
-
-namespace MosesChart
-{
-class TrellisPathList;
+class ChartTrellisPathList;
}
class IOWrapper
@@ -83,11 +79,11 @@ public:
~IOWrapper();
Moses::InputType* GetInput(Moses::InputType *inputType);
- void OutputBestHypo(const MosesChart::Hypothesis *hypo, long translationId, bool reportSegmentation, bool reportAllFactors);
+ void OutputBestHypo(const Moses::ChartHypothesis *hypo, long translationId, bool reportSegmentation, bool reportAllFactors);
void OutputBestHypo(const std::vector<const Moses::Factor*>& mbrBestHypo, long translationId, bool reportSegmentation, bool reportAllFactors);
- void OutputNBestList(const MosesChart::TrellisPathList &nBestList, const MosesChart::Hypothesis *bestHypo, const Moses::TranslationSystem* system, long translationId);
- void OutputDetailedTranslationReport(const MosesChart::Hypothesis *hypo, long translationId);
- void Backtrack(const MosesChart::Hypothesis *hypo);
+ void OutputNBestList(const Moses::ChartTrellisPathList &nBestList, const Moses::ChartHypothesis *bestHypo, const Moses::TranslationSystem* system, long translationId);
+ void OutputDetailedTranslationReport(const Moses::ChartHypothesis *hypo, long translationId);
+ void Backtrack(const Moses::ChartHypothesis *hypo);
void ResetTranslationId() {
m_translationId = 0;
diff --git a/moses-chart-cmd/src/Main.cpp b/moses-chart-cmd/src/Main.cpp
index 10eff5acd..87174b438 100644
--- a/moses-chart-cmd/src/Main.cpp
+++ b/moses-chart-cmd/src/Main.cpp
@@ -34,17 +34,15 @@ POSSIBILITY OF SUCH DAMAGE.
#ifdef WIN32
// Include Visual Leak Detector
-#include <vld.h>
+//#include <vld.h>
#endif
#include <fstream>
#include "Main.h"
-#include "TrellisPath.h"
#include "FactorCollection.h"
#include "Manager.h"
#include "Phrase.h"
#include "Util.h"
-#include "TrellisPathList.h"
#include "Timer.h"
#include "IOWrapper.h"
#include "Sentence.h"
@@ -54,9 +52,10 @@ POSSIBILITY OF SUCH DAMAGE.
#include "TranslationAnalysis.h"
#include "mbr.h"
#include "ThreadPool.h"
-#include "../../moses-chart/src/ChartManager.h"
-#include "../../moses-chart/src/ChartHypothesis.h"
-#include "../../moses-chart/src/ChartTrellisPathList.h"
+#include "ChartManager.h"
+#include "ChartHypothesis.h"
+#include "ChartTrellisPath.h"
+#include "ChartTrellisPathList.h"
#if HAVE_CONFIG_H
#include "config.h"
@@ -67,7 +66,6 @@ POSSIBILITY OF SUCH DAMAGE.
using namespace std;
using namespace Moses;
-using namespace MosesChart;
/**
* Translates a sentence.
@@ -91,13 +89,13 @@ public:
VERBOSE(2,"\nTRANSLATING(" << lineNumber << "): " << *m_source);
- MosesChart::Manager manager(*m_source, &system);
+ ChartManager manager(*m_source, &system);
manager.ProcessSentence();
assert(!staticData.UseMBR());
// 1-best
- const MosesChart::Hypothesis *bestHypo = manager.GetBestHypothesis();
+ const ChartHypothesis *bestHypo = manager.GetBestHypothesis();
m_ioWrapper.OutputBestHypo(bestHypo, lineNumber,
staticData.GetReportSegmentation(),
staticData.GetReportAllFactors());
@@ -113,7 +111,7 @@ public:
size_t nBestSize = staticData.GetNBestSize();
if (nBestSize > 0) {
VERBOSE(2,"WRITING " << nBestSize << " TRANSLATION ALTERNATIVES TO " << staticData.GetNBestFilePath() << endl);
- MosesChart::TrellisPathList nBestList;
+ ChartTrellisPathList nBestList;
manager.CalcNBest(nBestSize, nBestList,staticData.GetDistinctNBest());
m_ioWrapper.OutputNBestList(nBestList, bestHypo, &system, lineNumber);
IFVERBOSE(2) {
diff --git a/moses-chart-cmd/src/Makefile.am b/moses-chart-cmd/src/Makefile.am
index bab006ca7..b6e7cc4ff 100644
--- a/moses-chart-cmd/src/Makefile.am
+++ b/moses-chart-cmd/src/Makefile.am
@@ -2,8 +2,8 @@ bin_PROGRAMS = moses_chart
moses_chart_SOURCES = Main.cpp mbr.cpp IOWrapper.cpp TranslationAnalysis.cpp
AM_CPPFLAGS = -W -Wall -ffor-scope -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -DUSE_HYPO_POOL -I$(top_srcdir)/moses/src $(BOOST_CPPFLAGS)
-moses_chart_LDADD = -L$(top_srcdir)/moses/src -L$(top_srcdir)/moses-chart/src -L$(top_srcdir)/OnDiskPt/src -lmoses -lmoses-chart -lOnDiskPt @KENLM_LDFLAGS@ $(BOOST_THREAD_LDFLAGS) $(BOOST_THREAD_LIBS)
-moses_chart_DEPENDENCIES = $(top_srcdir)/moses/src/libmoses.la $(top_srcdir)/moses-chart/src/libmoses-chart.a $(top_srcdir)/OnDiskPt/src/libOnDiskPt.a @KENLM_DEPS@
+moses_chart_LDADD = -L$(top_srcdir)/moses/src -L$(top_srcdir)/OnDiskPt/src -lmoses -lOnDiskPt @KENLM_LDFLAGS@ $(BOOST_THREAD_LDFLAGS) $(BOOST_THREAD_LIBS)
+moses_chart_DEPENDENCIES = $(top_srcdir)/moses/src/libmoses.la $(top_srcdir)/OnDiskPt/src/libOnDiskPt.a @KENLM_DEPS@
diff --git a/moses-chart-cmd/src/TranslationAnalysis.cpp b/moses-chart-cmd/src/TranslationAnalysis.cpp
index 939954fc8..1ba6052ed 100644
--- a/moses-chart-cmd/src/TranslationAnalysis.cpp
+++ b/moses-chart-cmd/src/TranslationAnalysis.cpp
@@ -14,7 +14,7 @@ using namespace Moses;
namespace TranslationAnalysis
{
-void PrintTranslationAnalysis(ostream &os, const Hypothesis* hypo)
+void PrintTranslationAnalysis(ostream & /* os */, const Hypothesis* /* hypo */)
{
/*
os << endl << "TRANSLATION HYPOTHESIS DETAILS:" << endl;
diff --git a/moses-chart-cmd/src/TranslationAnalysis.h b/moses-chart-cmd/src/TranslationAnalysis.h
index 426158a42..1291548f8 100644
--- a/moses-chart-cmd/src/TranslationAnalysis.h
+++ b/moses-chart-cmd/src/TranslationAnalysis.h
@@ -8,7 +8,7 @@
#define _TRANSLATION_ANALYSIS_H_
#include <iostream>
-#include "Hypothesis.h"
+#include "ChartHypothesis.h"
namespace TranslationAnalysis
{
diff --git a/moses-chart/moses-chart.vcproj b/moses-chart/moses-chart.vcproj
deleted file mode 100644
index 73127014d..000000000
--- a/moses-chart/moses-chart.vcproj
+++ /dev/null
@@ -1,262 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="moses-chart"
- ProjectGUID="{C877DCA8-B4C0-4357-B6AE-34575B3D3328}"
- RootNamespace="moseschart"
- Keyword="Win32Proj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="4"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_LIB;LM_INTERNAL;TRACE_ENABLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="4"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LM_INTERNAL;TRACE_ENABLE"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\src\ChartCell.cpp"
- >
- </File>
- <File
- RelativePath=".\src\ChartCellCollection.cpp"
- >
- </File>
- <File
- RelativePath=".\src\ChartHypothesis.cpp"
- >
- </File>
- <File
- RelativePath=".\src\ChartHypothesisCollection.cpp"
- >
- </File>
- <File
- RelativePath=".\src\ChartManager.cpp"
- >
- </File>
- <File
- RelativePath=".\src\ChartTranslationOptionCollection.cpp"
- >
- </File>
- <File
- RelativePath=".\src\ChartTrellisNode.cpp"
- >
- </File>
- <File
- RelativePath=".\src\ChartTrellisPath.cpp"
- >
- </File>
- <File
- RelativePath=".\src\ChartTrellisPathCollection.cpp"
- >
- </File>
- <File
- RelativePath=".\src\ChartTrellisPathList.cpp"
- >
- </File>
- <File
- RelativePath=".\src\Cube.cpp"
- >
- </File>
- <File
- RelativePath=".\src\QueueEntry.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath=".\src\ChartCell.h"
- >
- </File>
- <File
- RelativePath=".\src\ChartCellCollection.h"
- >
- </File>
- <File
- RelativePath=".\src\ChartHypothesis.h"
- >
- </File>
- <File
- RelativePath=".\src\ChartHypothesisCollection.h"
- >
- </File>
- <File
- RelativePath=".\src\ChartManager.h"
- >
- </File>
- <File
- RelativePath=".\src\ChartTranslationOptionCollection.h"
- >
- </File>
- <File
- RelativePath=".\src\ChartTrellisNode.h"
- >
- </File>
- <File
- RelativePath=".\src\ChartTrellisPath.h"
- >
- </File>
- <File
- RelativePath=".\src\ChartTrellisPathCollection.h"
- >
- </File>
- <File
- RelativePath=".\src\ChartTrellisPathList.h"
- >
- </File>
- <File
- RelativePath=".\src\Cube.h"
- >
- </File>
- <File
- RelativePath=".\src\QueueEntry.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/moses-chart/moses-chart.xcodeproj/project.pbxproj b/moses-chart/moses-chart.xcodeproj/project.pbxproj
deleted file mode 100644
index b97ea5e47..000000000
--- a/moses-chart/moses-chart.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,300 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 45;
- objects = {
-
-/* Begin PBXBuildFile section */
- 1ED4FBB511BDBC9F004E826A /* ChartCell.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED4FB9611BDBC9F004E826A /* ChartCell.cpp */; };
- 1ED4FBB611BDBC9F004E826A /* ChartCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED4FB9711BDBC9F004E826A /* ChartCell.h */; };
- 1ED4FBB711BDBC9F004E826A /* ChartCellCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED4FB9811BDBC9F004E826A /* ChartCellCollection.cpp */; };
- 1ED4FBB811BDBC9F004E826A /* ChartCellCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED4FB9911BDBC9F004E826A /* ChartCellCollection.h */; };
- 1ED4FBB911BDBC9F004E826A /* ChartHypothesis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED4FB9A11BDBC9F004E826A /* ChartHypothesis.cpp */; };
- 1ED4FBBA11BDBC9F004E826A /* ChartHypothesis.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED4FB9B11BDBC9F004E826A /* ChartHypothesis.h */; };
- 1ED4FBBB11BDBC9F004E826A /* ChartHypothesisCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED4FB9C11BDBC9F004E826A /* ChartHypothesisCollection.cpp */; };
- 1ED4FBBC11BDBC9F004E826A /* ChartHypothesisCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED4FB9D11BDBC9F004E826A /* ChartHypothesisCollection.h */; };
- 1ED4FBBD11BDBC9F004E826A /* ChartManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED4FB9E11BDBC9F004E826A /* ChartManager.cpp */; };
- 1ED4FBBE11BDBC9F004E826A /* ChartManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED4FB9F11BDBC9F004E826A /* ChartManager.h */; };
- 1ED4FBC111BDBC9F004E826A /* ChartTranslationOptionCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED4FBA211BDBC9F004E826A /* ChartTranslationOptionCollection.cpp */; };
- 1ED4FBC211BDBC9F004E826A /* ChartTranslationOptionCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED4FBA311BDBC9F004E826A /* ChartTranslationOptionCollection.h */; };
- 1ED4FBC511BDBC9F004E826A /* ChartTrellisNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED4FBA611BDBC9F004E826A /* ChartTrellisNode.cpp */; };
- 1ED4FBC611BDBC9F004E826A /* ChartTrellisNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED4FBA711BDBC9F004E826A /* ChartTrellisNode.h */; };
- 1ED4FBC711BDBC9F004E826A /* ChartTrellisPath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED4FBA811BDBC9F004E826A /* ChartTrellisPath.cpp */; };
- 1ED4FBC811BDBC9F004E826A /* ChartTrellisPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED4FBA911BDBC9F004E826A /* ChartTrellisPath.h */; };
- 1ED4FBC911BDBC9F004E826A /* ChartTrellisPathCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED4FBAA11BDBC9F004E826A /* ChartTrellisPathCollection.cpp */; };
- 1ED4FBCA11BDBC9F004E826A /* ChartTrellisPathCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED4FBAB11BDBC9F004E826A /* ChartTrellisPathCollection.h */; };
- 1ED4FBCB11BDBC9F004E826A /* ChartTrellisPathList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED4FBAC11BDBC9F004E826A /* ChartTrellisPathList.cpp */; };
- 1ED4FBCC11BDBC9F004E826A /* ChartTrellisPathList.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED4FBAD11BDBC9F004E826A /* ChartTrellisPathList.h */; };
- 1ED4FBCD11BDBC9F004E826A /* Cube.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED4FBAE11BDBC9F004E826A /* Cube.cpp */; };
- 1ED4FBCE11BDBC9F004E826A /* Cube.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED4FBAF11BDBC9F004E826A /* Cube.h */; };
- 1ED4FBD011BDBC9F004E826A /* QueueEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED4FBB311BDBC9F004E826A /* QueueEntry.cpp */; };
- 1ED4FBD111BDBC9F004E826A /* QueueEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED4FBB411BDBC9F004E826A /* QueueEntry.h */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXFileReference section */
- 1ED4FB9611BDBC9F004E826A /* ChartCell.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartCell.cpp; path = src/ChartCell.cpp; sourceTree = "<group>"; };
- 1ED4FB9711BDBC9F004E826A /* ChartCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartCell.h; path = src/ChartCell.h; sourceTree = "<group>"; };
- 1ED4FB9811BDBC9F004E826A /* ChartCellCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartCellCollection.cpp; path = src/ChartCellCollection.cpp; sourceTree = "<group>"; };
- 1ED4FB9911BDBC9F004E826A /* ChartCellCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartCellCollection.h; path = src/ChartCellCollection.h; sourceTree = "<group>"; };
- 1ED4FB9A11BDBC9F004E826A /* ChartHypothesis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartHypothesis.cpp; path = src/ChartHypothesis.cpp; sourceTree = "<group>"; };
- 1ED4FB9B11BDBC9F004E826A /* ChartHypothesis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartHypothesis.h; path = src/ChartHypothesis.h; sourceTree = "<group>"; };
- 1ED4FB9C11BDBC9F004E826A /* ChartHypothesisCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartHypothesisCollection.cpp; path = src/ChartHypothesisCollection.cpp; sourceTree = "<group>"; };
- 1ED4FB9D11BDBC9F004E826A /* ChartHypothesisCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartHypothesisCollection.h; path = src/ChartHypothesisCollection.h; sourceTree = "<group>"; };
- 1ED4FB9E11BDBC9F004E826A /* ChartManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartManager.cpp; path = src/ChartManager.cpp; sourceTree = "<group>"; };
- 1ED4FB9F11BDBC9F004E826A /* ChartManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartManager.h; path = src/ChartManager.h; sourceTree = "<group>"; };
- 1ED4FBA211BDBC9F004E826A /* ChartTranslationOptionCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartTranslationOptionCollection.cpp; path = src/ChartTranslationOptionCollection.cpp; sourceTree = "<group>"; };
- 1ED4FBA311BDBC9F004E826A /* ChartTranslationOptionCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartTranslationOptionCollection.h; path = src/ChartTranslationOptionCollection.h; sourceTree = "<group>"; };
- 1ED4FBA611BDBC9F004E826A /* ChartTrellisNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartTrellisNode.cpp; path = src/ChartTrellisNode.cpp; sourceTree = "<group>"; };
- 1ED4FBA711BDBC9F004E826A /* ChartTrellisNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartTrellisNode.h; path = src/ChartTrellisNode.h; sourceTree = "<group>"; };
- 1ED4FBA811BDBC9F004E826A /* ChartTrellisPath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartTrellisPath.cpp; path = src/ChartTrellisPath.cpp; sourceTree = "<group>"; };
- 1ED4FBA911BDBC9F004E826A /* ChartTrellisPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartTrellisPath.h; path = src/ChartTrellisPath.h; sourceTree = "<group>"; };
- 1ED4FBAA11BDBC9F004E826A /* ChartTrellisPathCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartTrellisPathCollection.cpp; path = src/ChartTrellisPathCollection.cpp; sourceTree = "<group>"; };
- 1ED4FBAB11BDBC9F004E826A /* ChartTrellisPathCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartTrellisPathCollection.h; path = src/ChartTrellisPathCollection.h; sourceTree = "<group>"; };
- 1ED4FBAC11BDBC9F004E826A /* ChartTrellisPathList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartTrellisPathList.cpp; path = src/ChartTrellisPathList.cpp; sourceTree = "<group>"; };
- 1ED4FBAD11BDBC9F004E826A /* ChartTrellisPathList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartTrellisPathList.h; path = src/ChartTrellisPathList.h; sourceTree = "<group>"; };
- 1ED4FBAE11BDBC9F004E826A /* Cube.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Cube.cpp; path = src/Cube.cpp; sourceTree = "<group>"; };
- 1ED4FBAF11BDBC9F004E826A /* Cube.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Cube.h; path = src/Cube.h; sourceTree = "<group>"; };
- 1ED4FBB311BDBC9F004E826A /* QueueEntry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = QueueEntry.cpp; path = src/QueueEntry.cpp; sourceTree = "<group>"; };
- 1ED4FBB411BDBC9F004E826A /* QueueEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = QueueEntry.h; path = src/QueueEntry.h; sourceTree = "<group>"; };
- D2AAC046055464E500DB518D /* libmoses-chart.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libmoses-chart.a"; sourceTree = BUILT_PRODUCTS_DIR; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- D289987405E68DCB004EDB86 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 08FB7794FE84155DC02AAC07 /* moses-chart */ = {
- isa = PBXGroup;
- children = (
- 08FB7795FE84155DC02AAC07 /* Source */,
- C6A0FF2B0290797F04C91782 /* Documentation */,
- 1AB674ADFE9D54B511CA2CBB /* Products */,
- );
- name = "moses-chart";
- sourceTree = "<group>";
- };
- 08FB7795FE84155DC02AAC07 /* Source */ = {
- isa = PBXGroup;
- children = (
- 1ED4FB9611BDBC9F004E826A /* ChartCell.cpp */,
- 1ED4FB9711BDBC9F004E826A /* ChartCell.h */,
- 1ED4FB9811BDBC9F004E826A /* ChartCellCollection.cpp */,
- 1ED4FB9911BDBC9F004E826A /* ChartCellCollection.h */,
- 1ED4FB9A11BDBC9F004E826A /* ChartHypothesis.cpp */,
- 1ED4FB9B11BDBC9F004E826A /* ChartHypothesis.h */,
- 1ED4FB9C11BDBC9F004E826A /* ChartHypothesisCollection.cpp */,
- 1ED4FB9D11BDBC9F004E826A /* ChartHypothesisCollection.h */,
- 1ED4FB9E11BDBC9F004E826A /* ChartManager.cpp */,
- 1ED4FB9F11BDBC9F004E826A /* ChartManager.h */,
- 1ED4FBA211BDBC9F004E826A /* ChartTranslationOptionCollection.cpp */,
- 1ED4FBA311BDBC9F004E826A /* ChartTranslationOptionCollection.h */,
- 1ED4FBA611BDBC9F004E826A /* ChartTrellisNode.cpp */,
- 1ED4FBA711BDBC9F004E826A /* ChartTrellisNode.h */,
- 1ED4FBA811BDBC9F004E826A /* ChartTrellisPath.cpp */,
- 1ED4FBA911BDBC9F004E826A /* ChartTrellisPath.h */,
- 1ED4FBAA11BDBC9F004E826A /* ChartTrellisPathCollection.cpp */,
- 1ED4FBAB11BDBC9F004E826A /* ChartTrellisPathCollection.h */,
- 1ED4FBAC11BDBC9F004E826A /* ChartTrellisPathList.cpp */,
- 1ED4FBAD11BDBC9F004E826A /* ChartTrellisPathList.h */,
- 1ED4FBAE11BDBC9F004E826A /* Cube.cpp */,
- 1ED4FBAF11BDBC9F004E826A /* Cube.h */,
- 1ED4FBB311BDBC9F004E826A /* QueueEntry.cpp */,
- 1ED4FBB411BDBC9F004E826A /* QueueEntry.h */,
- );
- name = Source;
- sourceTree = "<group>";
- };
- 1AB674ADFE9D54B511CA2CBB /* Products */ = {
- isa = PBXGroup;
- children = (
- D2AAC046055464E500DB518D /* libmoses-chart.a */,
- );
- name = Products;
- sourceTree = "<group>";
- };
- C6A0FF2B0290797F04C91782 /* Documentation */ = {
- isa = PBXGroup;
- children = (
- );
- name = Documentation;
- sourceTree = "<group>";
- };
-/* End PBXGroup section */
-
-/* Begin PBXHeadersBuildPhase section */
- D2AAC043055464E500DB518D /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 1ED4FBB611BDBC9F004E826A /* ChartCell.h in Headers */,
- 1ED4FBB811BDBC9F004E826A /* ChartCellCollection.h in Headers */,
- 1ED4FBBA11BDBC9F004E826A /* ChartHypothesis.h in Headers */,
- 1ED4FBBC11BDBC9F004E826A /* ChartHypothesisCollection.h in Headers */,
- 1ED4FBBE11BDBC9F004E826A /* ChartManager.h in Headers */,
- 1ED4FBC211BDBC9F004E826A /* ChartTranslationOptionCollection.h in Headers */,
- 1ED4FBC611BDBC9F004E826A /* ChartTrellisNode.h in Headers */,
- 1ED4FBC811BDBC9F004E826A /* ChartTrellisPath.h in Headers */,
- 1ED4FBCA11BDBC9F004E826A /* ChartTrellisPathCollection.h in Headers */,
- 1ED4FBCC11BDBC9F004E826A /* ChartTrellisPathList.h in Headers */,
- 1ED4FBCE11BDBC9F004E826A /* Cube.h in Headers */,
- 1ED4FBD111BDBC9F004E826A /* QueueEntry.h in Headers */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXHeadersBuildPhase section */
-
-/* Begin PBXNativeTarget section */
- D2AAC045055464E500DB518D /* moses-chart */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 1DEB91EB08733DB70010E9CD /* Build configuration list for PBXNativeTarget "moses-chart" */;
- buildPhases = (
- D2AAC043055464E500DB518D /* Headers */,
- D2AAC044055464E500DB518D /* Sources */,
- D289987405E68DCB004EDB86 /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = "moses-chart";
- productName = "moses-chart";
- productReference = D2AAC046055464E500DB518D /* libmoses-chart.a */;
- productType = "com.apple.product-type.library.static";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- 08FB7793FE84155DC02AAC07 /* Project object */ = {
- isa = PBXProject;
- buildConfigurationList = 1DEB91EF08733DB70010E9CD /* Build configuration list for PBXProject "moses-chart" */;
- compatibilityVersion = "Xcode 3.1";
- developmentRegion = English;
- hasScannedForEncodings = 1;
- knownRegions = (
- English,
- Japanese,
- French,
- German,
- );
- mainGroup = 08FB7794FE84155DC02AAC07 /* moses-chart */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- D2AAC045055464E500DB518D /* moses-chart */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXSourcesBuildPhase section */
- D2AAC044055464E500DB518D /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 1ED4FBB511BDBC9F004E826A /* ChartCell.cpp in Sources */,
- 1ED4FBB711BDBC9F004E826A /* ChartCellCollection.cpp in Sources */,
- 1ED4FBB911BDBC9F004E826A /* ChartHypothesis.cpp in Sources */,
- 1ED4FBBB11BDBC9F004E826A /* ChartHypothesisCollection.cpp in Sources */,
- 1ED4FBBD11BDBC9F004E826A /* ChartManager.cpp in Sources */,
- 1ED4FBC111BDBC9F004E826A /* ChartTranslationOptionCollection.cpp in Sources */,
- 1ED4FBC511BDBC9F004E826A /* ChartTrellisNode.cpp in Sources */,
- 1ED4FBC711BDBC9F004E826A /* ChartTrellisPath.cpp in Sources */,
- 1ED4FBC911BDBC9F004E826A /* ChartTrellisPathCollection.cpp in Sources */,
- 1ED4FBCB11BDBC9F004E826A /* ChartTrellisPathList.cpp in Sources */,
- 1ED4FBCD11BDBC9F004E826A /* Cube.cpp in Sources */,
- 1ED4FBD011BDBC9F004E826A /* QueueEntry.cpp in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin XCBuildConfiguration section */
- 1DEB91EC08733DB70010E9CD /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- COPY_PHASE_STRIP = NO;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_ENABLE_FIX_AND_CONTINUE = YES;
- GCC_MODEL_TUNING = G5;
- GCC_OPTIMIZATION_LEVEL = 0;
- INSTALL_PATH = /usr/local/lib;
- PRODUCT_NAME = "moses-chart";
- };
- name = Debug;
- };
- 1DEB91ED08733DB70010E9CD /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- GCC_MODEL_TUNING = G5;
- INSTALL_PATH = /usr/local/lib;
- PRODUCT_NAME = "moses-chart";
- };
- name = Release;
- };
- 1DEB91F008733DB70010E9CD /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = TRACE_ENABLE;
- GCC_WARN_ABOUT_RETURN_TYPE = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- HEADER_SEARCH_PATHS = /usr/local/include;
- ONLY_ACTIVE_ARCH = YES;
- PREBINDING = NO;
- SDKROOT = macosx10.6;
- };
- name = Debug;
- };
- 1DEB91F108733DB70010E9CD /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_PREPROCESSOR_DEFINITIONS = TRACE_ENABLE;
- GCC_WARN_ABOUT_RETURN_TYPE = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- HEADER_SEARCH_PATHS = /usr/local/include;
- ONLY_ACTIVE_ARCH = YES;
- PREBINDING = NO;
- SDKROOT = macosx10.6;
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- 1DEB91EB08733DB70010E9CD /* Build configuration list for PBXNativeTarget "moses-chart" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 1DEB91EC08733DB70010E9CD /* Debug */,
- 1DEB91ED08733DB70010E9CD /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 1DEB91EF08733DB70010E9CD /* Build configuration list for PBXProject "moses-chart" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 1DEB91F008733DB70010E9CD /* Debug */,
- 1DEB91F108733DB70010E9CD /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
- };
- rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
-}
diff --git a/moses-chart/src/ChartHypothesis.h b/moses-chart/src/ChartHypothesis.h
deleted file mode 100644
index 593a3852b..000000000
--- a/moses-chart/src/ChartHypothesis.h
+++ /dev/null
@@ -1,168 +0,0 @@
-// $Id$
-// vim:tabstop=2
-/***********************************************************************
- Moses - factored phrase-based language decoder
- Copyright (C) 2010 Hieu Hoang
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- ***********************************************************************/
-
-#pragma once
-
-#include <vector>
-#include "../../moses/src/Util.h"
-#include "../../moses/src/WordsRange.h"
-#include "../../moses/src/ScoreComponentCollection.h"
-#include "../../moses/src/Phrase.h"
-#include "../../moses/src/ChartTranslationOption.h"
-#include "../../moses/src/ObjectPool.h"
-
-namespace MosesChart
-{
-class QueueEntry;
-class Hypothesis;
-class Manager;
-
-typedef std::vector<Hypothesis*> ArcList;
-
-class Hypothesis
-{
- friend std::ostream& operator<<(std::ostream&, const Hypothesis&);
-
-protected:
-
-#ifdef USE_HYPO_POOL
- static ObjectPool<Hypothesis> s_objectPool;
-#endif
-
- static unsigned int s_HypothesesCreated;
-
- int m_id; /**< numeric ID of this hypothesis, used for logging */
- const Moses::ChartTranslationOption &m_transOpt;
-
- Moses::Phrase m_contextPrefix, m_contextSuffix;
- const std::vector<size_t> &m_wordsConsumedTargetOrder; // same size as target phrase ?
- Moses::WordsRange m_currSourceWordsRange;
- Moses::ScoreComponentCollection m_scoreBreakdown /*! detailed score break-down by components (for instance language model, word penalty, etc) */
- ,m_lmNGram
- ,m_lmPrefix;
- float m_totalScore;
- size_t m_numTargetTerminals;
-
- ArcList *m_arcList; /*! all arcs that end at the same trellis point as this hypothesis */
- const Hypothesis *m_winningHypo;
-
- std::vector<const Hypothesis*> m_prevHypos;
-
- Manager& m_manager;
-
- size_t CalcPrefix(Moses::Phrase &ret, size_t size) const;
- size_t CalcSuffix(Moses::Phrase &ret, size_t size) const;
-
- void CalcLMScore();
-
- Hypothesis(); // not implemented
- Hypothesis(const Hypothesis &copy); // not implemented
-
-public:
- static void ResetHypoCount() {
- s_HypothesesCreated = 0;
- }
- static unsigned int GetHypoCount() {
- return s_HypothesesCreated;
- }
-
-#ifdef USE_HYPO_POOL
- void *operator new(size_t num_bytes) {
- void *ptr = s_objectPool.getPtr();
- return ptr;
- }
-
- static void Delete(Hypothesis *hypo) {
- s_objectPool.freeObject(hypo);
- }
-#else
- static void Delete(Hypothesis *hypo) {
- delete hypo;
- }
-#endif
-
- explicit Hypothesis(const QueueEntry &queueEntry, Manager &manager);
- ~Hypothesis();
-
- int GetId()const {
- return m_id;
- }
- const Moses::ChartTranslationOption &GetTranslationOption()const {
- return m_transOpt;
- }
- const Moses::TargetPhrase &GetCurrTargetPhrase()const {
- return m_transOpt.GetTargetPhrase();
- }
- const Moses::WordsRange &GetCurrSourceRange()const {
- return m_currSourceWordsRange;
- }
- inline const ArcList* GetArcList() const {
- return m_arcList;
- }
-
- void CreateOutputPhrase(Moses::Phrase &outPhrase) const;
- Moses::Phrase GetOutputPhrase() const;
-
- int LMContextCompare(const Hypothesis &other) const;
-
- const Moses::Phrase &GetPrefix() const {
- return m_contextPrefix;
- }
- const Moses::Phrase &GetSuffix() const {
- return m_contextSuffix;
- }
-
- void CalcScore();
-
- void AddArc(Hypothesis *loserHypo);
- void CleanupArcList();
- void SetWinningHypo(const Hypothesis *hypo);
-
- const Moses::ScoreComponentCollection &GetScoreBreakdown() const {
- return m_scoreBreakdown;
- }
- float GetTotalScore() const {
- return m_totalScore;
- }
-
- const std::vector<const Hypothesis*> &GetPrevHypos() const {
- return m_prevHypos;
- }
-
- size_t GetWordsConsumedTargetOrder(size_t pos) const {
- assert(pos < m_wordsConsumedTargetOrder.size());
- return m_wordsConsumedTargetOrder[pos];
- }
-
- const Moses::Word &GetTargetLHS() const {
- return GetCurrTargetPhrase().GetTargetLHS();
- }
-
- size_t GetNumTargetTerminals() const {
- return m_numTargetTerminals;
- }
-
- TO_STRING();
-
-}; // class Hypothesis
-
-}
-
diff --git a/moses-chart/src/Cube.h b/moses-chart/src/Cube.h
deleted file mode 100644
index 249a58392..000000000
--- a/moses-chart/src/Cube.h
+++ /dev/null
@@ -1,102 +0,0 @@
-// $Id$
-// vim:tabstop=2
-/***********************************************************************
- Moses - factored phrase-based language decoder
- Copyright (C) 2010 Hieu Hoang
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- ***********************************************************************/
-#include <queue>
-#include <vector>
-#include <set>
-#include "QueueEntry.h"
-
-#ifdef HAVE_BOOST
-#include <boost/functional/hash.hpp>
-#include <boost/unordered_set.hpp>
-#include <boost/version.hpp>
-#endif
-
-namespace MosesChart
-{
-
-#ifdef HAVE_BOOST
-class QueueEntryUniqueHasher
-{
-public:
- size_t operator()(const QueueEntry * p) const {
- size_t seed = 0;
- boost::hash_combine(seed, &(p->GetTranslationOption()));
- boost::hash_combine(seed, p->GetChildEntries());
- return seed;
- }
-};
-
-class QueueEntryUniqueEqualityPred
-{
-public:
- bool operator()(const QueueEntry * p, const QueueEntry * q) const {
- return ((&(p->GetTranslationOption()) == &(q->GetTranslationOption()))
- && (p->GetChildEntries() == q->GetChildEntries()));
- }
-};
-#endif
-
-class QueueEntryUniqueOrderer
-{
-public:
- bool operator()(const QueueEntry* entryA, const QueueEntry* entryB) const {
- return (*entryA) < (*entryB);
- }
-};
-
-class QueueEntryScoreOrderer
-{
-public:
- bool operator()(const QueueEntry* entryA, const QueueEntry* entryB) const {
- return (entryA->GetCombinedScore() < entryB->GetCombinedScore());
- }
-};
-
-
-class Cube
-{
-protected:
-#if defined(BOOST_VERSION) && (BOOST_VERSION >= 104200)
- typedef boost::unordered_set<QueueEntry*,
- QueueEntryUniqueHasher,
- QueueEntryUniqueEqualityPred> UniqueCubeEntry;
-#else
- typedef std::set<QueueEntry*, QueueEntryUniqueOrderer> UniqueCubeEntry;
-#endif
- UniqueCubeEntry m_uniqueEntry;
-
- typedef std::priority_queue<QueueEntry*, std::vector<QueueEntry*>, QueueEntryScoreOrderer> SortedByScore;
- SortedByScore m_sortedByScore;
-
-
-public:
- ~Cube();
- bool IsEmpty() const {
- return m_sortedByScore.empty();
- }
-
- QueueEntry *Pop();
- bool Add(QueueEntry *queueEntry);
-};
-
-
-};
-
diff --git a/moses-chart/src/Makefile.am b/moses-chart/src/Makefile.am
deleted file mode 100644
index 256a0caee..000000000
--- a/moses-chart/src/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-lib_LIBRARIES = libmoses-chart.a
-AM_CPPFLAGS = -W -Wall -ffor-scope -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES $(BOOST_CPPFLAGS)
-libmoses_chart_a_SOURCES = \
- ChartCell.cpp \
- ChartCellCollection.cpp \
- ChartHypothesis.cpp \
- ChartHypothesisCollection.cpp \
- ChartManager.cpp \
- ChartTranslationOptionCollection.cpp \
- ChartTrellisNode.cpp \
- ChartTrellisPath.cpp \
- ChartTrellisPathCollection.cpp \
- ChartTrellisPathList.cpp \
- Cube.cpp \
- QueueEntry.cpp
-
-CLEANFILES = $(BUILT_SOURCES)
-
-
-
diff --git a/moses-chart/src/QueueEntry.cpp b/moses-chart/src/QueueEntry.cpp
deleted file mode 100644
index f5e95e031..000000000
--- a/moses-chart/src/QueueEntry.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-// $Id$
-// vim:tabstop=2
-/***********************************************************************
- Moses - factored phrase-based language decoder
- Copyright (C) 2010 Hieu Hoang
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- ***********************************************************************/
-
-#include "QueueEntry.h"
-#include "ChartCell.h"
-#include "ChartTranslationOptionCollection.h"
-#include "ChartCellCollection.h"
-#include "Cube.h"
-#include "../../moses/src/WordsRange.h"
-#include "../../moses/src/ChartTranslationOption.h"
-#include "../../moses/src/Util.h"
-#include "../../moses/src/WordConsumed.h"
-
-#ifdef HAVE_BOOST
-#include <boost/functional/hash.hpp>
-#endif
-
-using namespace std;
-using namespace Moses;
-
-namespace MosesChart
-{
-
-QueueEntry::QueueEntry(const Moses::ChartTranslationOption &transOpt
- , const ChartCellCollection &allChartCells)
- :m_transOpt(transOpt)
-{
- const WordConsumed *wordsConsumed = &transOpt.GetLastWordConsumed();
- CreateChildEntry(wordsConsumed, allChartCells);
- CalcScore();
-}
-
-void QueueEntry::CreateChildEntry(const Moses::WordConsumed *wordsConsumed, const ChartCellCollection &allChartCells)
-{
- // recursvile do the 1st first
- const WordConsumed *prevWordsConsumed = wordsConsumed->GetPrevWordsConsumed();
- if (prevWordsConsumed)
- CreateChildEntry(prevWordsConsumed, allChartCells);
-
- if (wordsConsumed->IsNonTerminal()) {
- // non-term
- const WordsRange &childRange = wordsConsumed->GetWordsRange();
- const ChartCell &childCell = allChartCells.Get(childRange);
- const Word &headWord = wordsConsumed->GetSourceWord();
-
- assert(!childCell.GetSortedHypotheses(headWord).empty());
-
- const Moses::Word &nonTerm = wordsConsumed->GetSourceWord();
- assert(nonTerm.IsNonTerminal());
- ChildEntry childEntry(0, childCell.GetSortedHypotheses(nonTerm), nonTerm);
- m_childEntries.push_back(childEntry);
- }
-}
-
-QueueEntry::QueueEntry(const QueueEntry &copy, size_t childEntryIncr)
- :m_transOpt(copy.m_transOpt)
- ,m_childEntries(copy.m_childEntries)
-{
- ChildEntry &childEntry = m_childEntries[childEntryIncr];
- childEntry.IncrementPos();
- CalcScore();
-}
-
-QueueEntry::~QueueEntry()
-{
- //Moses::RemoveAllInColl(m_childEntries);
-}
-
-void QueueEntry::CreateDeviants(Cube &cube) const
-{
- for (size_t ind = 0; ind < m_childEntries.size(); ind++) {
- const ChildEntry &childEntry = m_childEntries[ind];
-
- if (childEntry.HasMoreHypo()) {
- QueueEntry *newEntry = new QueueEntry(*this, ind);
- cube.Add(newEntry);
- }
- }
-}
-
-void QueueEntry::CalcScore()
-{
- m_combinedScore = m_transOpt.GetTotalScore();
- for (size_t ind = 0; ind < m_childEntries.size(); ind++) {
- const ChildEntry &childEntry = m_childEntries[ind];
-
- const Hypothesis *hypo = childEntry.GetHypothesis();
- m_combinedScore += hypo->GetTotalScore();
- }
-
-}
-
-bool QueueEntry::operator<(const QueueEntry &compare) const
-{
- if (&m_transOpt != &compare.m_transOpt)
- return &m_transOpt < &compare.m_transOpt;
-
- bool ret = m_childEntries < compare.m_childEntries;
- return ret;
-}
-
-#ifdef HAVE_BOOST
-std::size_t hash_value(const ChildEntry & entry)
-{
- boost::hash<const Hypothesis*> hasher;
- return hasher(entry.GetHypothesis());
-}
-
-#endif
-std::ostream& operator<<(std::ostream &out, const ChildEntry &entry)
-{
- out << *entry.GetHypothesis();
- return out;
-}
-
-std::ostream& operator<<(std::ostream &out, const QueueEntry &entry)
-{
- out << entry.GetTranslationOption() << endl;
- std::vector<ChildEntry>::const_iterator iter;
- for (iter = entry.GetChildEntries().begin(); iter != entry.GetChildEntries().end(); ++iter) {
- out << *iter << endl;
- }
- return out;
-}
-
-}
-
diff --git a/moses-chart/src/QueueEntry.h b/moses-chart/src/QueueEntry.h
deleted file mode 100644
index e7abba67b..000000000
--- a/moses-chart/src/QueueEntry.h
+++ /dev/null
@@ -1,133 +0,0 @@
-// $Id$
-// vim:tabstop=2
-/***********************************************************************
- Moses - factored phrase-based language decoder
- Copyright (C) 2010 Hieu Hoang
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- ***********************************************************************/
-
-#pragma once
-
-#include <vector>
-#include <map>
-#include <queue>
-#include <set>
-#include <iostream>
-#include "../../moses/src/WordsRange.h"
-#include "../../moses/src/Word.h"
-#include "ChartHypothesis.h"
-
-namespace Moses
-{
-class WordConsumed;
-class ChartTranslationOption;
-extern bool g_debug;
-};
-
-namespace MosesChart
-{
-
-class TranslationOptionCollection;
-class TranslationOptionList;
-class ChartCell;
-class ChartCellCollection;
-class QueueEntry;
-class Cube;
-
-typedef std::vector<const Hypothesis*> HypoList;
-
-// wrapper around list of hypothese for a particular non-term of a trans opt
-class ChildEntry
-{
- friend std::ostream& operator<<(std::ostream&, const ChildEntry&);
-
-protected:
- size_t m_pos;
- const HypoList *m_orderedHypos;
-
-public:
- ChildEntry(size_t pos, const HypoList &orderedHypos, const Moses::Word & /*headWord*/ )
- :m_pos(pos)
- ,m_orderedHypos(&orderedHypos)
- //,m_headWord(headWord)
- {}
-
- size_t IncrementPos() {
- return m_pos++;
- }
-
- bool HasMoreHypo() const {
- return m_pos + 1 < m_orderedHypos->size();
- }
-
- const Hypothesis *GetHypothesis() const {
- return (*m_orderedHypos)[m_pos];
- }
-
- //const Moses::Word &GetHeadWord() const
- //{ return m_headWord; }
-
- //! transitive comparison used for adding objects into FactorCollection
- bool operator<(const ChildEntry &compare) const {
- return GetHypothesis() < compare.GetHypothesis();
- }
-
- bool operator==(const ChildEntry & compare) const {
- return GetHypothesis() == compare.GetHypothesis();
- }
-};
-
-// entry in the cub of 1 trans opt and all the hypotheses that goes with each non term.
-class QueueEntry
-{
- friend std::ostream& operator<<(std::ostream&, const QueueEntry&);
-protected:
- const Moses::ChartTranslationOption &m_transOpt;
- std::vector<ChildEntry> m_childEntries;
-
- float m_combinedScore;
-
- QueueEntry(const QueueEntry &copy, size_t childEntryIncr);
- void CreateChildEntry(const Moses::WordConsumed *wordsConsumed, const ChartCellCollection &allChartCells);
-
- void CalcScore();
-
-public:
- QueueEntry(const Moses::ChartTranslationOption &transOpt
- , const ChartCellCollection &allChartCells);
- ~QueueEntry();
-
- const Moses::ChartTranslationOption &GetTranslationOption() const {
- return m_transOpt;
- }
- const std::vector<ChildEntry> &GetChildEntries() const {
- return m_childEntries;
- }
- float GetCombinedScore() const {
- return m_combinedScore;
- }
-
- void CreateDeviants(Cube &) const;
-
- bool operator<(const QueueEntry &compare) const;
-
-};
-
-#ifdef HAVE_BOOST
-std::size_t hash_value(const ChildEntry &);
-#endif
-
-}
diff --git a/moses-cmd/moses-cmd.vcproj b/moses-cmd/moses-cmd.vcproj
deleted file mode 100644
index 1cbc9b805..000000000
--- a/moses-cmd/moses-cmd.vcproj
+++ /dev/null
@@ -1,224 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="moses-cmd"
- ProjectGUID="{E2233DB1-5592-46FE-9420-E529420612FA}"
- RootNamespace="mosescmd"
- Keyword="Win32Proj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="&quot;../moses/src&quot;"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="zlib.lib &quot;$(OutDir)\moses.lib&quot; &quot;$(OutDir)\OnDiskPt.lib&quot;"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="0"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="&quot;../moses/src&quot;"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="zlib.lib &quot;$(OutDir)\moses.lib&quot; &quot;$(OutDir)\OnDiskPt.lib&quot;"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="0"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath=".\src\IOWrapper.h"
- >
- </File>
- <File
- RelativePath=".\src\LatticeMBR.h"
- >
- </File>
- <File
- RelativePath=".\src\Main.h"
- >
- </File>
- <File
- RelativePath=".\src\mbr.h"
- >
- </File>
- <File
- RelativePath=".\src\TranslationAnalysis.h"
- >
- </File>
- </Filter>
- <File
- RelativePath=".\src\IOWrapper.cpp"
- >
- </File>
- <File
- RelativePath=".\src\LatticeMBR.cpp"
- >
- </File>
- <File
- RelativePath=".\src\Main.cpp"
- >
- </File>
- <File
- RelativePath=".\src\mbr.cpp"
- >
- </File>
- <File
- RelativePath=".\src\TranslationAnalysis.cpp"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/moses-cmd/moses-cmd.vcxproj b/moses-cmd/moses-cmd.vcxproj
new file mode 100644
index 000000000..4dd1a2b93
--- /dev/null
+++ b/moses-cmd/moses-cmd.vcxproj
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{E2233DB1-5592-46FE-9420-E529420612FA}</ProjectGuid>
+ <RootNamespace>mosescmd</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../moses/src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>zlib.lib;$(OutDir)moses.lib;$(OutDir)OnDiskPt.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>../moses/src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>zlib.lib;$(OutDir)moses.lib;$(OutDir)OnDiskPt.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClInclude Include="src\IOWrapper.h" />
+ <ClInclude Include="src\LatticeMBR.h" />
+ <ClInclude Include="src\Main.h" />
+ <ClInclude Include="src\mbr.h" />
+ <ClInclude Include="src\TranslationAnalysis.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="src\IOWrapper.cpp" />
+ <ClCompile Include="src\LatticeMBR.cpp" />
+ <ClCompile Include="src\Main.cpp" />
+ <ClCompile Include="src\mbr.cpp" />
+ <ClCompile Include="src\TranslationAnalysis.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\moses\moses.vcxproj">
+ <Project>{8122157a-0de5-44ff-8e5b-024ed6ace7af}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ <ProjectReference Include="..\OnDiskPt\OnDiskPt.vcxproj">
+ <Project>{8b07671b-cbaf-4514-affd-ce238cd427e9}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/moses-cmd/src/LatticeMBR.cpp b/moses-cmd/src/LatticeMBR.cpp
index cb7e3e1ca..24b9fd6d6 100644
--- a/moses-cmd/src/LatticeMBR.cpp
+++ b/moses-cmd/src/LatticeMBR.cpp
@@ -36,7 +36,7 @@ void extract_ngrams(const vector<Word >& sentence, map < Phrase, int > & allngr
{
for (int k = 0; k < (int)bleu_order; k++) {
for(int i =0; i < max((int)sentence.size()-k,0); i++) {
- Phrase ngram(Output);
+ Phrase ngram(Output, k+1);
for ( int j = i; j<= i+k; j++) {
ngram.AddWord(sentence[j]);
}
@@ -402,7 +402,7 @@ const NgramHistory& Edge::GetNgrams(map<const Hypothesis*, vector<Edge> > & inco
for (size_t start = 0; start < currPhrase.GetSize(); ++start) {
for (size_t end = start; end < start + bleu_order; ++end) {
if (end < currPhrase.GetSize()) {
- Phrase edgeNgram(Output);
+ Phrase edgeNgram(Output, end-start+1);
for (size_t index = start; index <= end; ++index) {
edgeNgram.AddWord(currPhrase.GetWord(index));
}
@@ -433,8 +433,8 @@ const NgramHistory& Edge::GetNgrams(map<const Hypothesis*, vector<Edge> > & inco
cerr << "edgeInNgram: " << edgeIncomingNgram << endl;
}
- Phrase edgeSuffix(Output);
- Phrase ngramSuffix(Output);
+ Phrase edgeSuffix(Output, ARRAY_SIZE_INCR);
+ Phrase ngramSuffix(Output, ARRAY_SIZE_INCR);
GetPhraseSuffix(edgeWords,back,edgeSuffix);
GetPhraseSuffix(edgeIncomingNgram,back,ngramSuffix);
diff --git a/moses-cmd/src/Main.cpp b/moses-cmd/src/Main.cpp
index 85fbc07ce..a49e872b9 100644
--- a/moses-cmd/src/Main.cpp
+++ b/moses-cmd/src/Main.cpp
@@ -29,7 +29,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#ifdef WIN32
// Include Visual Leak Detector
-#include <vld.h>
+//#include <vld.h>
#endif
#include "Hypothesis.h"
@@ -50,6 +50,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
using namespace std;
using namespace Moses;
+// output floats with three significant digits
static const size_t PRECISION = 3;
/** Enforce rounding */
@@ -59,8 +60,10 @@ void fix(std::ostream& stream, size_t size)
stream.precision(size);
}
-/**
- * Translates a sentence.
+/** Translates a sentence.
+ * - calls the search (Manager)
+ * - applies the decision rule
+ * - outputs best translation and additional reporting
**/
class TranslationTask : public Task
{
@@ -78,17 +81,29 @@ public:
m_detailedTranslationCollector(detailedTranslationCollector),
m_alignmentInfoCollector(alignmentInfoCollector) {}
+ /** Translate one sentence
+ * gets called by main function implemented at end of this source file */
void Run() {
+
+ // report thread number
#ifdef BOOST_HAS_PTHREADS
TRACE_ERR("Translating line " << m_lineNumber << " in thread id " << pthread_self() << std::endl);
#endif
+
+ // shorthand for "global data"
const StaticData &staticData = StaticData::Instance();
+ // input sentence
Sentence sentence(Input);
+ // set translation system
const TranslationSystem& system = staticData.GetTranslationSystem(TranslationSystem::DEFAULT);
+
+ // execute the translation
+ // note: this executes the search, resulting in a search graph
+ // we still need to apply the decision rule (MAP, MBR, ...)
Manager manager(*m_source,staticData.GetSearchAlgorithm(), &system);
manager.ProcessSentence();
- //Word Graph
+ // output word graph
if (m_wordGraphCollector) {
ostringstream out;
fix(out,PRECISION);
@@ -96,7 +111,7 @@ public:
m_wordGraphCollector->Write(m_lineNumber, out.str());
}
- //Search Graph
+ // output search graph
if (m_searchGraphCollector) {
ostringstream out;
fix(out,PRECISION);
@@ -113,23 +128,23 @@ public:
manager.SerializeSearchGraphPB(m_lineNumber, output);
}
#endif
- }
-
-
+ }
+ // apply decision rule and output best translation(s)
if (m_outputCollector) {
ostringstream out;
ostringstream debug;
fix(debug,PRECISION);
- //All derivations - send them to debug stream
+ // all derivations - send them to debug stream
if (staticData.PrintAllDerivations()) {
manager.PrintAllDerivations(m_lineNumber, debug);
}
- //Best hypothesis
+ // MAP decoding: best hypothesis
const Hypothesis* bestHypo = NULL;
- if (!staticData.UseMBR()) {
+ if (!staticData.UseMBR())
+ {
bestHypo = manager.GetBestHypothesis();
if (bestHypo) {
if (staticData.IsPathRecoveryEnabled()) {
@@ -148,7 +163,12 @@ public:
}
}
out << endl;
- } else {
+ }
+
+ // MBR decoding (n-best MBR, lattice MBR, consensus)
+ else
+ {
+ // we first need the n-best translations
size_t nBestSize = staticData.GetMBRSize();
if (nBestSize <= 0) {
cerr << "ERROR: negative size for number of MBR candidate translations not allowed (option mbr-size)" << endl;
@@ -161,6 +181,7 @@ public:
PrintUserTime("calculated n-best list for (L)MBR decoding");
}
+ // lattice MBR
if (staticData.UseLatticeMBR()) {
if (m_nbestCollector) {
//lattice mbr nbest
@@ -179,7 +200,10 @@ public:
PrintUserTime("finished Lattice MBR decoding");
}
}
- } else if (staticData.UseConsensusDecoding()) {
+ }
+
+ // consensus decoding
+ else if (staticData.UseConsensusDecoding()) {
const TrellisPath &conBestHypo = doConsensusDecoding(manager,nBestList);
OutputBestHypo(conBestHypo, m_lineNumber,
staticData.GetReportSegmentation(),
@@ -188,8 +212,10 @@ public:
IFVERBOSE(2) {
PrintUserTime("finished Consensus decoding");
}
- } else {
- //MBR decoding
+ }
+
+ // n-best MBR decoding
+ else {
const Moses::TrellisPath &mbrBestHypo = doMBR(nBestList);
OutputBestHypo(mbrBestHypo, m_lineNumber,
staticData.GetReportSegmentation(),
@@ -198,11 +224,14 @@ public:
IFVERBOSE(2) {
PrintUserTime("finished MBR decoding");
}
-
}
}
+
+ // report best translation to output collector
m_outputCollector->Write(m_lineNumber,out.str(),debug.str());
}
+
+ // output n-best list
if (m_nbestCollector && !staticData.UseLatticeMBR()) {
TrellisPathList nBestList;
ostringstream out;
@@ -211,7 +240,7 @@ public:
m_nbestCollector->Write(m_lineNumber, out.str());
}
- //detailed translation reporting
+ // detailed translation reporting
if (m_detailedTranslationCollector) {
ostringstream out;
fix(out,PRECISION);
@@ -219,10 +248,10 @@ public:
m_detailedTranslationCollector->Write(m_lineNumber,out.str());
}
+ // report additional statistics
IFVERBOSE(2) {
PrintUserTime("Sentence Decoding Time:");
}
-
manager.CalcDecoderStatistics();
}
@@ -285,29 +314,36 @@ static void ShowWeights()
}
}
+/** main function of the command line version of the decoder **/
int main(int argc, char** argv)
{
#ifdef HAVE_PROTOBUF
GOOGLE_PROTOBUF_VERIFY_VERSION;
#endif
+
+ // echo command line, if verbose
IFVERBOSE(1) {
TRACE_ERR("command: ");
for(int i=0; i<argc; ++i) TRACE_ERR(argv[i]<<" ");
TRACE_ERR(endl);
}
+ // set number of significant decimals in output
fix(cout,PRECISION);
fix(cerr,PRECISION);
-
+ // load all the settings into the Parameter class
+ // (stores them as strings, or array of strings)
Parameter* params = new Parameter();
if (!params->LoadParam(argc,argv)) {
params->Explain();
exit(1);
}
- //create threadpool, if necessary
+ // create threadpool, if using multi-threaded decoding
+ // note: multi-threading is done on sentence-level,
+ // each thread translates one sentence
int threadcount = (params->GetParam("threads").size() > 0) ?
Scan<size_t>(params->GetParam("threads")[0]) : 1;
@@ -324,20 +360,23 @@ int main(int argc, char** argv)
}
#endif
-
+ // initialize all "global" variables, which are stored in StaticData
+ // note: this also loads models such as the language model, etc.
if (!StaticData::LoadDataStatic(params)) {
exit(1);
}
+ // setting "-show-weights" -> just dump out weights and exit
if (params->isParamSpecified("show-weights")) {
ShowWeights();
exit(0);
}
+ // shorthand for accessing information in StaticData
const StaticData& staticData = StaticData::Instance();
+
// set up read/writing class
IOWrapper* ioWrapper = GetIODevice(staticData);
-
if (!ioWrapper) {
cerr << "Error; Failed to create IO object" << endl;
exit(1);
@@ -351,20 +390,20 @@ int main(int argc, char** argv)
TRACE_ERR("\n");
}
-
- InputType* source = NULL;
- size_t lineCount = 0;
- auto_ptr<OutputCollector> outputCollector;//for translations
- auto_ptr<OutputCollector> nbestCollector;
+ // initialize output streams
+ // note: we can't just write to STDOUT or files
+ // because multithreading may return sentences in shuffled order
+ auto_ptr<OutputCollector> outputCollector; // for translations
+ auto_ptr<OutputCollector> nbestCollector; // for n-best lists
auto_ptr<ofstream> nbestOut;
size_t nbestSize = staticData.GetNBestSize();
string nbestFile = staticData.GetNBestFilePath();
if (nbestSize) {
if (nbestFile == "-" || nbestFile == "/dev/stdout") {
- //nbest to stdout, no 1-best
+ // nbest to stdout, no 1-best
nbestCollector.reset(new OutputCollector());
} else {
- //nbest to file, 1-best to stdout
+ // nbest to file, 1-best to stdout
nbestOut.reset(new ofstream(nbestFile.c_str()));
assert(nbestOut->good());
nbestCollector.reset(new OutputCollector(nbestOut.get()));
@@ -374,44 +413,57 @@ int main(int argc, char** argv)
outputCollector.reset(new OutputCollector());
}
+ // initialize stream for word graph (aka: output lattice)
auto_ptr<OutputCollector> wordGraphCollector;
if (staticData.GetOutputWordGraph()) {
wordGraphCollector.reset(new OutputCollector(&(ioWrapper->GetOutputWordGraphStream())));
}
+ // initialize stream for search graph
+ // note: this is essentially the same as above, but in a different format
auto_ptr<OutputCollector> searchGraphCollector;
if (staticData.GetOutputSearchGraph()) {
searchGraphCollector.reset(new OutputCollector(&(ioWrapper->GetOutputSearchGraphStream())));
}
+ // initialize stram for details about the decoder run
auto_ptr<OutputCollector> detailedTranslationCollector;
if (staticData.IsDetailedTranslationReportingEnabled()) {
detailedTranslationCollector.reset(new OutputCollector(&(ioWrapper->GetDetailedTranslationReportingStream())));
}
+
+ // initialize stram for word alignment between input and output
auto_ptr<OutputCollector> alignmentInfoCollector;
if (!staticData.GetAlignmentOutputFile().empty()) {
alignmentInfoCollector.reset(new OutputCollector(ioWrapper->GetAlignmentOutputStream()));
}
+ // main loop over set of input sentences
+ InputType* source = NULL;
+ size_t lineCount = 0;
while(ReadInput(*ioWrapper,staticData.GetInputType(),source)) {
IFVERBOSE(1) {
ResetUserTime();
}
+ // set up task of translating one sentence
TranslationTask* task =
new TranslationTask(lineCount,source, outputCollector.get(),
nbestCollector.get(), wordGraphCollector.get(),
searchGraphCollector.get(),
detailedTranslationCollector.get(),
alignmentInfoCollector.get() );
+ // execute task
#ifdef WITH_THREADS
pool.Submit(task);
-
#else
task->Run();
#endif
+
source = NULL; //make sure it doesn't get deleted
++lineCount;
}
+
+ // we are done, finishing up
#ifdef WITH_THREADS
pool.Stop(true); //flush remaining jobs
#endif
diff --git a/moses-cmd/src/TranslationAnalysis.cpp b/moses-cmd/src/TranslationAnalysis.cpp
index 5255a3005..a7795a27b 100644
--- a/moses-cmd/src/TranslationAnalysis.cpp
+++ b/moses-cmd/src/TranslationAnalysis.cpp
@@ -16,14 +16,17 @@ void PrintTranslationAnalysis(const TranslationSystem* system, std::ostream &os,
{
os << std::endl << "TRANSLATION HYPOTHESIS DETAILS:" << std::endl;
std::vector<const Hypothesis*> translationPath;
+
while (hypo) {
translationPath.push_back(hypo);
hypo = hypo->GetPrevHypo();
}
- std::reverse(translationPath.begin(), translationPath.end());
+ std::reverse(translationPath.begin(), translationPath.end());
std::vector<std::string> droppedWords;
std::vector<const Hypothesis*>::iterator tpi = translationPath.begin();
+ if(tpi == translationPath.end())
+ return;
++tpi; // skip initial translation state
std::vector<std::string> sourceMap;
std::vector<std::string> targetMap;
@@ -39,9 +42,7 @@ void PrintTranslationAnalysis(const TranslationSystem* system, std::ostream &os,
std::string source = (*tpi)->GetSourcePhraseStringRep();
WordsRange twr = (*tpi)->GetCurrTargetWordsRange();
WordsRange swr = (*tpi)->GetCurrSourceWordsRange();
-
const AlignmentInfo &alignmentInfo = (*tpi)->GetCurrTargetPhrase().GetAlignmentInfo();
-
// language model backoff stats,
if (doLMStats) {
std::vector<std::vector<unsigned int> >& lmstats = *(*tpi)->GetLMStats();
@@ -56,7 +57,7 @@ void PrintTranslationAnalysis(const TranslationSystem* system, std::ostream &os,
}
}
}
-
+
bool epsilon = false;
if (target == "") {
target="<EPSILON>";
diff --git a/moses.sln b/moses.sln
index ceb2a237c..d545554d2 100644
--- a/moses.sln
+++ b/moses.sln
@@ -1,43 +1,29 @@

-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual C++ Express 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "processLexicalTable", "misc\processLexicalTable.vcproj", "{9834EABB-2033-4607-9DAC-36D16E0725B5}"
- ProjectSection(ProjectDependencies) = postProject
- {8B07671B-CBAF-4514-AFFD-CE238CD427E9} = {8B07671B-CBAF-4514-AFFD-CE238CD427E9}
- {8122157A-0DE5-44FF-8E5B-024ED6ACE7AF} = {8122157A-0DE5-44FF-8E5B-024ED6ACE7AF}
- EndProjectSection
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual C++ Express 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "processLexicalTable", "misc\processLexicalTable.vcxproj", "{9834EABB-2033-4607-9DAC-36D16E0725B5}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "processPhraseTable", "misc\processPhraseTable.vcproj", "{AA230564-6DF1-4662-9BF9-7AD73DE53B76}"
- ProjectSection(ProjectDependencies) = postProject
- {8B07671B-CBAF-4514-AFFD-CE238CD427E9} = {8B07671B-CBAF-4514-AFFD-CE238CD427E9}
- {8122157A-0DE5-44FF-8E5B-024ED6ACE7AF} = {8122157A-0DE5-44FF-8E5B-024ED6ACE7AF}
- EndProjectSection
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "processPhraseTable", "misc\processPhraseTable.vcxproj", "{AA230564-6DF1-4662-9BF9-7AD73DE53B76}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "moses", "moses\moses.vcproj", "{8122157A-0DE5-44FF-8E5B-024ED6ACE7AF}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "moses", "moses\moses.vcxproj", "{8122157A-0DE5-44FF-8E5B-024ED6ACE7AF}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "moses-chart", "moses-chart\moses-chart.vcproj", "{C877DCA8-B4C0-4357-B6AE-34575B3D3328}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "moses-chart-cmd", "moses-chart-cmd\moses-chart-cmd.vcxproj", "{C3AF5C05-D4EC-41D2-8319-D1E69B9B5820}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "moses-chart-cmd", "moses-chart-cmd\moses-chart-cmd.vcproj", "{C3AF5C05-D4EC-41D2-8319-D1E69B9B5820}"
- ProjectSection(ProjectDependencies) = postProject
- {8B07671B-CBAF-4514-AFFD-CE238CD427E9} = {8B07671B-CBAF-4514-AFFD-CE238CD427E9}
- {8122157A-0DE5-44FF-8E5B-024ED6ACE7AF} = {8122157A-0DE5-44FF-8E5B-024ED6ACE7AF}
- {C877DCA8-B4C0-4357-B6AE-34575B3D3328} = {C877DCA8-B4C0-4357-B6AE-34575B3D3328}
- EndProjectSection
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "moses-cmd", "moses-cmd\moses-cmd.vcxproj", "{E2233DB1-5592-46FE-9420-E529420612FA}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "moses-cmd", "moses-cmd\moses-cmd.vcproj", "{E2233DB1-5592-46FE-9420-E529420612FA}"
- ProjectSection(ProjectDependencies) = postProject
- {8B07671B-CBAF-4514-AFFD-CE238CD427E9} = {8B07671B-CBAF-4514-AFFD-CE238CD427E9}
- {8122157A-0DE5-44FF-8E5B-024ED6ACE7AF} = {8122157A-0DE5-44FF-8E5B-024ED6ACE7AF}
- EndProjectSection
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OnDiskPt", "OnDiskPt\OnDiskPt.vcxproj", "{8B07671B-CBAF-4514-AFFD-CE238CD427E9}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OnDiskPt", "OnDiskPt\OnDiskPt.vcproj", "{8B07671B-CBAF-4514-AFFD-CE238CD427E9}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CreateOnDisk", "CreateOnDisk\CreateOnDisk.vcxproj", "{88AE90C9-72D2-42ED-8389-770ACDCD4308}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CreateOnDisk", "CreateOnDisk\CreateOnDisk.vcproj", "{88AE90C9-72D2-42ED-8389-770ACDCD4308}"
- ProjectSection(ProjectDependencies) = postProject
- {8B07671B-CBAF-4514-AFFD-CE238CD427E9} = {8B07671B-CBAF-4514-AFFD-CE238CD427E9}
- {8122157A-0DE5-44FF-8E5B-024ED6ACE7AF} = {8122157A-0DE5-44FF-8E5B-024ED6ACE7AF}
- {C877DCA8-B4C0-4357-B6AE-34575B3D3328} = {C877DCA8-B4C0-4357-B6AE-34575B3D3328}
- EndProjectSection
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "consolidate", "scripts\training\phrase-extract\consolidate.vcxproj", "{45410EFE-65C0-4078-82E4-D636258F9225}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "consolidate-direct", "scripts\training\phrase-extract\consolidate-direct.vcxproj", "{33775109-60CF-4C1C-A869-5450B3DD88B3}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "extract", "scripts\training\phrase-extract\extract.vcxproj", "{2475F8E8-A5C9-4785-8B09-5F4E120FC518}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "extract-rules", "scripts\training\phrase-extract\extract-rules.vcxproj", "{3C5CFAEC-6830-4491-9008-1C9E8C381C50}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "score", "scripts\training\phrase-extract\score.vcxproj", "{34AC84C7-62A1-4BBE-BCA9-4E95B2341039}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -81,18 +67,6 @@ Global
{8122157A-0DE5-44FF-8E5B-024ED6ACE7AF}.ReleaseNoObjPool|Win32.Build.0 = Release|Win32
{8122157A-0DE5-44FF-8E5B-024ED6ACE7AF}.Release-withSRILM|Win32.ActiveCfg = Release|Win32
{8122157A-0DE5-44FF-8E5B-024ED6ACE7AF}.Release-withSRILM|Win32.Build.0 = Release|Win32
- {C877DCA8-B4C0-4357-B6AE-34575B3D3328}.Debug|Win32.ActiveCfg = Debug|Win32
- {C877DCA8-B4C0-4357-B6AE-34575B3D3328}.Debug|Win32.Build.0 = Debug|Win32
- {C877DCA8-B4C0-4357-B6AE-34575B3D3328}.DebugNoObjPool|Win32.ActiveCfg = Debug|Win32
- {C877DCA8-B4C0-4357-B6AE-34575B3D3328}.DebugNoObjPool|Win32.Build.0 = Debug|Win32
- {C877DCA8-B4C0-4357-B6AE-34575B3D3328}.Debug-withSRILM|Win32.ActiveCfg = Debug|Win32
- {C877DCA8-B4C0-4357-B6AE-34575B3D3328}.Debug-withSRILM|Win32.Build.0 = Debug|Win32
- {C877DCA8-B4C0-4357-B6AE-34575B3D3328}.Release|Win32.ActiveCfg = Release|Win32
- {C877DCA8-B4C0-4357-B6AE-34575B3D3328}.Release|Win32.Build.0 = Release|Win32
- {C877DCA8-B4C0-4357-B6AE-34575B3D3328}.ReleaseNoObjPool|Win32.ActiveCfg = Release|Win32
- {C877DCA8-B4C0-4357-B6AE-34575B3D3328}.ReleaseNoObjPool|Win32.Build.0 = Release|Win32
- {C877DCA8-B4C0-4357-B6AE-34575B3D3328}.Release-withSRILM|Win32.ActiveCfg = Release|Win32
- {C877DCA8-B4C0-4357-B6AE-34575B3D3328}.Release-withSRILM|Win32.Build.0 = Release|Win32
{C3AF5C05-D4EC-41D2-8319-D1E69B9B5820}.Debug|Win32.ActiveCfg = Debug|Win32
{C3AF5C05-D4EC-41D2-8319-D1E69B9B5820}.Debug|Win32.Build.0 = Debug|Win32
{C3AF5C05-D4EC-41D2-8319-D1E69B9B5820}.DebugNoObjPool|Win32.ActiveCfg = Debug|Win32
@@ -141,6 +115,66 @@ Global
{88AE90C9-72D2-42ED-8389-770ACDCD4308}.ReleaseNoObjPool|Win32.Build.0 = Release|Win32
{88AE90C9-72D2-42ED-8389-770ACDCD4308}.Release-withSRILM|Win32.ActiveCfg = Release|Win32
{88AE90C9-72D2-42ED-8389-770ACDCD4308}.Release-withSRILM|Win32.Build.0 = Release|Win32
+ {45410EFE-65C0-4078-82E4-D636258F9225}.Debug|Win32.ActiveCfg = Debug|Win32
+ {45410EFE-65C0-4078-82E4-D636258F9225}.Debug|Win32.Build.0 = Debug|Win32
+ {45410EFE-65C0-4078-82E4-D636258F9225}.DebugNoObjPool|Win32.ActiveCfg = Debug|Win32
+ {45410EFE-65C0-4078-82E4-D636258F9225}.DebugNoObjPool|Win32.Build.0 = Debug|Win32
+ {45410EFE-65C0-4078-82E4-D636258F9225}.Debug-withSRILM|Win32.ActiveCfg = Debug|Win32
+ {45410EFE-65C0-4078-82E4-D636258F9225}.Debug-withSRILM|Win32.Build.0 = Debug|Win32
+ {45410EFE-65C0-4078-82E4-D636258F9225}.Release|Win32.ActiveCfg = Release|Win32
+ {45410EFE-65C0-4078-82E4-D636258F9225}.Release|Win32.Build.0 = Release|Win32
+ {45410EFE-65C0-4078-82E4-D636258F9225}.ReleaseNoObjPool|Win32.ActiveCfg = Release|Win32
+ {45410EFE-65C0-4078-82E4-D636258F9225}.ReleaseNoObjPool|Win32.Build.0 = Release|Win32
+ {45410EFE-65C0-4078-82E4-D636258F9225}.Release-withSRILM|Win32.ActiveCfg = Release|Win32
+ {45410EFE-65C0-4078-82E4-D636258F9225}.Release-withSRILM|Win32.Build.0 = Release|Win32
+ {33775109-60CF-4C1C-A869-5450B3DD88B3}.Debug|Win32.ActiveCfg = Debug|Win32
+ {33775109-60CF-4C1C-A869-5450B3DD88B3}.Debug|Win32.Build.0 = Debug|Win32
+ {33775109-60CF-4C1C-A869-5450B3DD88B3}.DebugNoObjPool|Win32.ActiveCfg = Debug|Win32
+ {33775109-60CF-4C1C-A869-5450B3DD88B3}.DebugNoObjPool|Win32.Build.0 = Debug|Win32
+ {33775109-60CF-4C1C-A869-5450B3DD88B3}.Debug-withSRILM|Win32.ActiveCfg = Debug|Win32
+ {33775109-60CF-4C1C-A869-5450B3DD88B3}.Debug-withSRILM|Win32.Build.0 = Debug|Win32
+ {33775109-60CF-4C1C-A869-5450B3DD88B3}.Release|Win32.ActiveCfg = Release|Win32
+ {33775109-60CF-4C1C-A869-5450B3DD88B3}.Release|Win32.Build.0 = Release|Win32
+ {33775109-60CF-4C1C-A869-5450B3DD88B3}.ReleaseNoObjPool|Win32.ActiveCfg = Release|Win32
+ {33775109-60CF-4C1C-A869-5450B3DD88B3}.ReleaseNoObjPool|Win32.Build.0 = Release|Win32
+ {33775109-60CF-4C1C-A869-5450B3DD88B3}.Release-withSRILM|Win32.ActiveCfg = Release|Win32
+ {33775109-60CF-4C1C-A869-5450B3DD88B3}.Release-withSRILM|Win32.Build.0 = Release|Win32
+ {2475F8E8-A5C9-4785-8B09-5F4E120FC518}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2475F8E8-A5C9-4785-8B09-5F4E120FC518}.Debug|Win32.Build.0 = Debug|Win32
+ {2475F8E8-A5C9-4785-8B09-5F4E120FC518}.DebugNoObjPool|Win32.ActiveCfg = Debug|Win32
+ {2475F8E8-A5C9-4785-8B09-5F4E120FC518}.DebugNoObjPool|Win32.Build.0 = Debug|Win32
+ {2475F8E8-A5C9-4785-8B09-5F4E120FC518}.Debug-withSRILM|Win32.ActiveCfg = Debug|Win32
+ {2475F8E8-A5C9-4785-8B09-5F4E120FC518}.Debug-withSRILM|Win32.Build.0 = Debug|Win32
+ {2475F8E8-A5C9-4785-8B09-5F4E120FC518}.Release|Win32.ActiveCfg = Release|Win32
+ {2475F8E8-A5C9-4785-8B09-5F4E120FC518}.Release|Win32.Build.0 = Release|Win32
+ {2475F8E8-A5C9-4785-8B09-5F4E120FC518}.ReleaseNoObjPool|Win32.ActiveCfg = Release|Win32
+ {2475F8E8-A5C9-4785-8B09-5F4E120FC518}.ReleaseNoObjPool|Win32.Build.0 = Release|Win32
+ {2475F8E8-A5C9-4785-8B09-5F4E120FC518}.Release-withSRILM|Win32.ActiveCfg = Release|Win32
+ {2475F8E8-A5C9-4785-8B09-5F4E120FC518}.Release-withSRILM|Win32.Build.0 = Release|Win32
+ {3C5CFAEC-6830-4491-9008-1C9E8C381C50}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3C5CFAEC-6830-4491-9008-1C9E8C381C50}.Debug|Win32.Build.0 = Debug|Win32
+ {3C5CFAEC-6830-4491-9008-1C9E8C381C50}.DebugNoObjPool|Win32.ActiveCfg = Debug|Win32
+ {3C5CFAEC-6830-4491-9008-1C9E8C381C50}.DebugNoObjPool|Win32.Build.0 = Debug|Win32
+ {3C5CFAEC-6830-4491-9008-1C9E8C381C50}.Debug-withSRILM|Win32.ActiveCfg = Debug|Win32
+ {3C5CFAEC-6830-4491-9008-1C9E8C381C50}.Debug-withSRILM|Win32.Build.0 = Debug|Win32
+ {3C5CFAEC-6830-4491-9008-1C9E8C381C50}.Release|Win32.ActiveCfg = Release|Win32
+ {3C5CFAEC-6830-4491-9008-1C9E8C381C50}.Release|Win32.Build.0 = Release|Win32
+ {3C5CFAEC-6830-4491-9008-1C9E8C381C50}.ReleaseNoObjPool|Win32.ActiveCfg = Release|Win32
+ {3C5CFAEC-6830-4491-9008-1C9E8C381C50}.ReleaseNoObjPool|Win32.Build.0 = Release|Win32
+ {3C5CFAEC-6830-4491-9008-1C9E8C381C50}.Release-withSRILM|Win32.ActiveCfg = Release|Win32
+ {3C5CFAEC-6830-4491-9008-1C9E8C381C50}.Release-withSRILM|Win32.Build.0 = Release|Win32
+ {34AC84C7-62A1-4BBE-BCA9-4E95B2341039}.Debug|Win32.ActiveCfg = Debug|Win32
+ {34AC84C7-62A1-4BBE-BCA9-4E95B2341039}.Debug|Win32.Build.0 = Debug|Win32
+ {34AC84C7-62A1-4BBE-BCA9-4E95B2341039}.DebugNoObjPool|Win32.ActiveCfg = Debug|Win32
+ {34AC84C7-62A1-4BBE-BCA9-4E95B2341039}.DebugNoObjPool|Win32.Build.0 = Debug|Win32
+ {34AC84C7-62A1-4BBE-BCA9-4E95B2341039}.Debug-withSRILM|Win32.ActiveCfg = Debug|Win32
+ {34AC84C7-62A1-4BBE-BCA9-4E95B2341039}.Debug-withSRILM|Win32.Build.0 = Debug|Win32
+ {34AC84C7-62A1-4BBE-BCA9-4E95B2341039}.Release|Win32.ActiveCfg = Release|Win32
+ {34AC84C7-62A1-4BBE-BCA9-4E95B2341039}.Release|Win32.Build.0 = Release|Win32
+ {34AC84C7-62A1-4BBE-BCA9-4E95B2341039}.ReleaseNoObjPool|Win32.ActiveCfg = Release|Win32
+ {34AC84C7-62A1-4BBE-BCA9-4E95B2341039}.ReleaseNoObjPool|Win32.Build.0 = Release|Win32
+ {34AC84C7-62A1-4BBE-BCA9-4E95B2341039}.Release-withSRILM|Win32.ActiveCfg = Release|Win32
+ {34AC84C7-62A1-4BBE-BCA9-4E95B2341039}.Release-withSRILM|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/moses/moses.vcproj b/moses/moses.vcproj
deleted file mode 100755
index 30f503e03..000000000
--- a/moses/moses.vcproj
+++ /dev/null
@@ -1,1166 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="moses"
- ProjectGUID="{8122157A-0DE5-44FF-8E5B-024ED6ACE7AF}"
- RootNamespace="moses"
- Keyword="Win32Proj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="4"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="&quot;$(SolutionDir)..\mysqlpp\lib&quot;;&quot;$(SolutionDir)..\irstlm\src&quot;;&quot;$(SolutionDir)..\srilm\src&quot;"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;LM_INTERNAL;TRACE_ENABLE;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="$(OutDir)\$(ProjectName).lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="4"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- InlineFunctionExpansion="2"
- EnableIntrinsicFunctions="true"
- FavorSizeOrSpeed="1"
- AdditionalIncludeDirectories="&quot;$(SolutionDir)..\mysqlpp\lib&quot;;&quot;$(SolutionDir)..\irstlm\src&quot;;&quot;$(SolutionDir)..\srilm\src&quot;"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;LM_INTERNAL;TRACE_ENABLE;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="$(OutDir)\$(ProjectName).lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release-withSRILM|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="4"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- InlineFunctionExpansion="2"
- EnableIntrinsicFunctions="true"
- FavorSizeOrSpeed="1"
- AdditionalIncludeDirectories="&quot;$(SolutionDir)..\mysqlpp\lib&quot;;&quot;$(SolutionDir)..\irstlm\src&quot;;&quot;$(SolutionDir)..\srilm\src&quot;"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;LM_INTERNAL;LM_SRI;TRACE_ENABLE;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE"
- RuntimeLibrary="0"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="$(OutDir)\$(ProjectName).lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug-withSRILM|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="4"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="&quot;$(SolutionDir)..\mysqlpp\lib&quot;;&quot;$(SolutionDir)..\irstlm\src&quot;;&quot;$(SolutionDir)..\srilm\src&quot;"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;LM_INTERNAL;LM_SRI;TRACE_ENABLE;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="$(OutDir)\$(ProjectName).lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\src\AlignmentInfo.cpp"
- >
- </File>
- <File
- RelativePath=".\src\BitmapContainer.cpp"
- >
- </File>
- <File
- RelativePath=".\src\ChartTranslationOption.cpp"
- >
- </File>
- <File
- RelativePath=".\src\ChartTranslationOptionList.cpp"
- >
- </File>
- <File
- RelativePath=".\src\ConfusionNet.cpp"
- >
- </File>
- <File
- RelativePath=".\src\DecodeFeature.cpp"
- >
- </File>
- <File
- RelativePath=".\src\DecodeGraph.cpp"
- >
- </File>
- <File
- RelativePath=".\src\DecodeStep.cpp"
- >
- </File>
- <File
- RelativePath=".\src\DecodeStepGeneration.cpp"
- >
- </File>
- <File
- RelativePath=".\src\DecodeStepTranslation.cpp"
- >
- </File>
- <File
- RelativePath=".\src\Dictionary.cpp"
- >
- </File>
- <File
- RelativePath=".\src\DotChart.cpp"
- >
- </File>
- <File
- RelativePath=".\src\DotChartOnDisk.cpp"
- >
- </File>
- <File
- RelativePath=".\src\DummyScoreProducers.cpp"
- >
- </File>
- <File
- RelativePath=".\src\Factor.cpp"
- >
- </File>
- <File
- RelativePath=".\src\FactorCollection.cpp"
- >
- </File>
- <File
- RelativePath=".\src\FactorTypeSet.cpp"
- >
- </File>
- <File
- RelativePath=".\src\FeatureFunction.cpp"
- >
- </File>
- <File
- RelativePath=".\src\FFState.cpp"
- >
- </File>
- <File
- RelativePath=".\src\FloydWarshall.cpp"
- >
- </File>
- <File
- RelativePath=".\src\GenerationDictionary.cpp"
- >
- </File>
- <File
- RelativePath=".\src\GlobalLexicalModel.cpp"
- >
- </File>
- <File
- RelativePath=".\src\hash.cpp"
- >
- </File>
- <File
- RelativePath=".\src\Hypothesis.cpp"
- >
- </File>
- <File
- RelativePath=".\src\HypothesisStack.cpp"
- >
- </File>
- <File
- RelativePath=".\src\HypothesisStackCubePruning.cpp"
- >
- </File>
- <File
- RelativePath=".\src\HypothesisStackNormal.cpp"
- >
- </File>
- <File
- RelativePath=".\src\InputFileStream.cpp"
- >
- </File>
- <File
- RelativePath=".\src\InputType.cpp"
- >
- </File>
- <File
- RelativePath=".\src\LanguageModel.cpp"
- >
- </File>
- <File
- RelativePath=".\src\LanguageModelFactory.cpp"
- >
- </File>
- <File
- RelativePath=".\src\LanguageModelImplementation.cpp"
- >
- </File>
- <File
- RelativePath=".\src\LanguageModelInternal.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release-withSRILM|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug-withSRILM|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\src\LanguageModelJoint.cpp"
- >
- </File>
- <File
- RelativePath=".\src\LanguageModelMultiFactor.cpp"
- >
- </File>
- <File
- RelativePath=".\src\LanguageModelSingleFactor.cpp"
- >
- </File>
- <File
- RelativePath=".\src\LanguageModelSkip.cpp"
- >
- </File>
- <File
- RelativePath=".\src\LanguageModelSRI.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\src\LexicalReordering.cpp"
- >
- </File>
- <File
- RelativePath=".\src\LexicalReorderingState.cpp"
- >
- </File>
- <File
- RelativePath=".\src\LexicalReorderingTable.cpp"
- >
- </File>
- <File
- RelativePath=".\src\LMList.cpp"
- >
- </File>
- <File
- RelativePath=".\src\LVoc.cpp"
- >
- </File>
- <File
- RelativePath=".\src\Manager.cpp"
- >
- </File>
- <File
- RelativePath=".\src\NGramCollection.cpp"
- >
- </File>
- <File
- RelativePath=".\src\NGramNode.cpp"
- >
- </File>
- <File
- RelativePath=".\src\Parameter.cpp"
- >
- </File>
- <File
- RelativePath=".\src\PartialTranslOptColl.cpp"
- >
- </File>
- <File
- RelativePath=".\src\PCNTools.cpp"
- >
- </File>
- <File
- RelativePath=".\src\Phrase.cpp"
- >
- </File>
- <File
- RelativePath=".\src\PhraseDictionary.cpp"
- >
- </File>
- <File
- RelativePath=".\src\PhraseDictionaryMemory.cpp"
- >
- </File>
- <File
- RelativePath=".\src\PhraseDictionaryNode.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release-withSRILM|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug-withSRILM|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)1.obj"
- XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\src\PhraseDictionaryNodeSCFG.cpp"
- >
- </File>
- <File
- RelativePath=".\src\PhraseDictionaryOnDisk.cpp"
- >
- </File>
- <File
- RelativePath=".\src\PhraseDictionaryOnDiskChart.cpp"
- >
- </File>
- <File
- RelativePath=".\src\PhraseDictionarySCFG.cpp"
- >
- </File>
- <File
- RelativePath=".\src\PhraseDictionarySCFGChart.cpp"
- >
- </File>
- <File
- RelativePath=".\src\PhraseDictionaryTree.cpp"
- >
- </File>
- <File
- RelativePath=".\src\PhraseDictionaryTreeAdaptor.cpp"
- >
- </File>
- <File
- RelativePath=".\src\PrefixTreeMap.cpp"
- >
- </File>
- <File
- RelativePath=".\src\ReorderingConstraint.cpp"
- >
- </File>
- <File
- RelativePath=".\src\ReorderingStack.cpp"
- >
- </File>
- <File
- RelativePath=".\src\ScoreComponentCollection.cpp"
- >
- </File>
- <File
- RelativePath=".\src\ScoreIndexManager.cpp"
- >
- </File>
- <File
- RelativePath=".\src\ScoreProducer.cpp"
- >
- </File>
- <File
- RelativePath=".\src\Search.cpp"
- >
- </File>
- <File
- RelativePath=".\src\SearchCubePruning.cpp"
- >
- </File>
- <File
- RelativePath=".\src\SearchNormal.cpp"
- >
- </File>
- <File
- RelativePath=".\src\Sentence.cpp"
- >
- </File>
- <File
- RelativePath=".\src\SentenceStats.cpp"
- >
- </File>
- <File
- RelativePath=".\src\SquareMatrix.cpp"
- >
- </File>
- <File
- RelativePath=".\src\StaticData.cpp"
- >
- </File>
- <File
- RelativePath=".\src\TargetPhrase.cpp"
- >
- </File>
- <File
- RelativePath=".\src\TargetPhraseCollection.cpp"
- >
- </File>
- <File
- RelativePath=".\src\Timer.cpp"
- >
- </File>
- <File
- RelativePath=".\src\TranslationOption.cpp"
- >
- </File>
- <File
- RelativePath=".\src\TranslationOptionCollection.cpp"
- >
- </File>
- <File
- RelativePath=".\src\TranslationOptionCollectionConfusionNet.cpp"
- >
- </File>
- <File
- RelativePath=".\src\TranslationOptionCollectionText.cpp"
- >
- </File>
- <File
- RelativePath=".\src\TranslationOptionList.cpp"
- >
- </File>
- <File
- RelativePath=".\src\TranslationSystem.cpp"
- >
- </File>
- <File
- RelativePath=".\src\TreeInput.cpp"
- >
- </File>
- <File
- RelativePath=".\src\TrellisPath.cpp"
- >
- </File>
- <File
- RelativePath=".\src\TrellisPathCollection.cpp"
- >
- </File>
- <File
- RelativePath=".\src\UserMessage.cpp"
- >
- </File>
- <File
- RelativePath=".\src\Util.cpp"
- >
- </File>
- <File
- RelativePath=".\src\Word.cpp"
- >
- </File>
- <File
- RelativePath=".\src\WordConsumed.cpp"
- >
- </File>
- <File
- RelativePath=".\src\WordLattice.cpp"
- >
- </File>
- <File
- RelativePath=".\src\WordsBitmap.cpp"
- >
- </File>
- <File
- RelativePath=".\src\WordsRange.cpp"
- >
- </File>
- <File
- RelativePath=".\src\XmlOption.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath=".\src\AlignmentInfo.h"
- >
- </File>
- <File
- RelativePath=".\src\BitmapContainer.h"
- >
- </File>
- <File
- RelativePath=".\src\CellCollection.h"
- >
- </File>
- <File
- RelativePath=".\src\ChartTranslationOption.h"
- >
- </File>
- <File
- RelativePath=".\src\ChartTranslationOptionList.h"
- >
- </File>
- <File
- RelativePath=".\src\ConfusionNet.h"
- >
- </File>
- <File
- RelativePath=".\src\DecodeFeature.h"
- >
- </File>
- <File
- RelativePath=".\src\DecodeGraph.h"
- >
- </File>
- <File
- RelativePath=".\src\DecodeStep.h"
- >
- </File>
- <File
- RelativePath=".\src\DecodeStepGeneration.h"
- >
- </File>
- <File
- RelativePath=".\src\DecodeStepTranslation.h"
- >
- </File>
- <File
- RelativePath=".\src\Dictionary.h"
- >
- </File>
- <File
- RelativePath=".\src\DotChart.h"
- >
- </File>
- <File
- RelativePath=".\src\DotChartOnDisk.h"
- >
- </File>
- <File
- RelativePath=".\src\DummyScoreProducers.h"
- >
- </File>
- <File
- RelativePath=".\src\Factor.h"
- >
- </File>
- <File
- RelativePath=".\src\FactorCollection.h"
- >
- </File>
- <File
- RelativePath=".\src\FactorTypeSet.h"
- >
- </File>
- <File
- RelativePath=".\src\FeatureFunction.h"
- >
- </File>
- <File
- RelativePath=".\src\FFState.h"
- >
- </File>
- <File
- RelativePath=".\src\File.h"
- >
- </File>
- <File
- RelativePath=".\src\FilePtr.h"
- >
- </File>
- <File
- RelativePath=".\src\GenerationDictionary.h"
- >
- </File>
- <File
- RelativePath=".\src\GlobalLexicalModel.h"
- >
- </File>
- <File
- RelativePath=".\src\gzfilebuf.h"
- >
- </File>
- <File
- RelativePath=".\src\hash.h"
- >
- </File>
- <File
- RelativePath=".\src\Hypothesis.h"
- >
- </File>
- <File
- RelativePath=".\src\HypothesisStack.h"
- >
- </File>
- <File
- RelativePath=".\src\HypothesisStackCubePruning.h"
- >
- </File>
- <File
- RelativePath=".\src\HypothesisStackNormal.h"
- >
- </File>
- <File
- RelativePath=".\src\InputFileStream.h"
- >
- </File>
- <File
- RelativePath=".\src\InputType.h"
- >
- </File>
- <File
- RelativePath=".\src\LanguageModel.h"
- >
- </File>
- <File
- RelativePath=".\src\LanguageModelDelegate.h"
- >
- </File>
- <File
- RelativePath=".\src\LanguageModelFactory.h"
- >
- </File>
- <File
- RelativePath=".\src\LanguageModelImplementation.h"
- >
- </File>
- <File
- RelativePath=".\src\LanguageModelInternal.h"
- >
- </File>
- <File
- RelativePath=".\src\LanguageModelJoint.h"
- >
- </File>
- <File
- RelativePath=".\src\LanguageModelMultiFactor.h"
- >
- </File>
- <File
- RelativePath=".\src\LanguageModelSingleFactor.h"
- >
- </File>
- <File
- RelativePath=".\src\LanguageModelSkip.h"
- >
- </File>
- <File
- RelativePath=".\src\LanguageModelSRI.h"
- >
- </File>
- <File
- RelativePath=".\src\LexicalReordering.h"
- >
- </File>
- <File
- RelativePath=".\src\LexicalReorderingState.h"
- >
- </File>
- <File
- RelativePath=".\src\LexicalReorderingTable.h"
- >
- </File>
- <File
- RelativePath=".\src\LMList.h"
- >
- </File>
- <File
- RelativePath=".\src\LVoc.h"
- >
- </File>
- <File
- RelativePath=".\src\Manager.h"
- >
- </File>
- <File
- RelativePath=".\src\NGramCollection.h"
- >
- </File>
- <File
- RelativePath=".\src\NGramNode.h"
- >
- </File>
- <File
- RelativePath=".\src\ObjectPool.h"
- >
- </File>
- <File
- RelativePath=".\src\Parameter.h"
- >
- </File>
- <File
- RelativePath=".\src\PartialTranslOptColl.h"
- >
- </File>
- <File
- RelativePath=".\src\PCNTools.h"
- >
- </File>
- <File
- RelativePath=".\src\PDTAimp.h"
- >
- </File>
- <File
- RelativePath=".\src\Phrase.h"
- >
- </File>
- <File
- RelativePath=".\src\PhraseDictionary.h"
- >
- </File>
- <File
- RelativePath=".\src\PhraseDictionaryDynSuffixArray.h"
- >
- </File>
- <File
- RelativePath=".\src\PhraseDictionaryMemory.h"
- >
- </File>
- <File
- RelativePath=".\src\PhraseDictionaryNode.h"
- >
- </File>
- <File
- RelativePath=".\src\PhraseDictionaryNodeSCFG.h"
- >
- </File>
- <File
- RelativePath=".\src\PhraseDictionaryOnDisk.h"
- >
- </File>
- <File
- RelativePath=".\src\PhraseDictionarySCFG.h"
- >
- </File>
- <File
- RelativePath=".\src\PhraseDictionaryTree.h"
- >
- </File>
- <File
- RelativePath=".\src\PhraseDictionaryTreeAdaptor.h"
- >
- </File>
- <File
- RelativePath=".\src\PrefixTree.h"
- >
- </File>
- <File
- RelativePath=".\src\PrefixTreeMap.h"
- >
- </File>
- <File
- RelativePath=".\src\ReorderingConstraint.h"
- >
- </File>
- <File
- RelativePath=".\src\ReorderingStack.h"
- >
- </File>
- <File
- RelativePath=".\src\ScoreComponentCollection.h"
- >
- </File>
- <File
- RelativePath=".\src\ScoreIndexManager.h"
- >
- </File>
- <File
- RelativePath=".\src\ScoreProducer.h"
- >
- </File>
- <File
- RelativePath=".\src\Search.h"
- >
- </File>
- <File
- RelativePath=".\src\SearchCubePruning.h"
- >
- </File>
- <File
- RelativePath=".\src\SearchNormal.h"
- >
- </File>
- <File
- RelativePath=".\src\Sentence.h"
- >
- </File>
- <File
- RelativePath=".\src\SentenceStats.h"
- >
- </File>
- <File
- RelativePath=".\src\SquareMatrix.h"
- >
- </File>
- <File
- RelativePath=".\src\StaticData.h"
- >
- </File>
- <File
- RelativePath=".\src\TargetPhrase.h"
- >
- </File>
- <File
- RelativePath=".\src\TargetPhraseCollection.h"
- >
- </File>
- <File
- RelativePath=".\src\Timer.h"
- >
- </File>
- <File
- RelativePath=".\src\TranslationOption.h"
- >
- </File>
- <File
- RelativePath=".\src\TranslationOptionCollection.h"
- >
- </File>
- <File
- RelativePath=".\src\TranslationOptionCollectionConfusionNet.h"
- >
- </File>
- <File
- RelativePath=".\src\TranslationOptionCollectionText.h"
- >
- </File>
- <File
- RelativePath=".\src\TranslationOptionList.h"
- >
- </File>
- <File
- RelativePath=".\src\TranslationSystem.h"
- >
- </File>
- <File
- RelativePath=".\src\TreeInput.h"
- >
- </File>
- <File
- RelativePath=".\src\TrellisPath.h"
- >
- </File>
- <File
- RelativePath=".\src\TrellisPathCollection.h"
- >
- </File>
- <File
- RelativePath=".\src\TrellisPathList.h"
- >
- </File>
- <File
- RelativePath=".\src\TypeDef.h"
- >
- </File>
- <File
- RelativePath=".\src\UserMessage.h"
- >
- </File>
- <File
- RelativePath=".\src\Util.h"
- >
- </File>
- <File
- RelativePath=".\src\Word.h"
- >
- </File>
- <File
- RelativePath=".\src\WordConsumed.h"
- >
- </File>
- <File
- RelativePath=".\src\WordLattice.h"
- >
- </File>
- <File
- RelativePath=".\src\WordsBitmap.h"
- >
- </File>
- <File
- RelativePath=".\src\WordsRange.h"
- >
- </File>
- <File
- RelativePath=".\src\XmlOption.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/moses/moses.vcxproj b/moses/moses.vcxproj
new file mode 100644
index 000000000..6b02aed09
--- /dev/null
+++ b/moses/moses.vcxproj
@@ -0,0 +1,408 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug-withSRILM|Win32">
+ <Configuration>Debug-withSRILM</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release-withSRILM|Win32">
+ <Configuration>Release-withSRILM</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{8122157A-0DE5-44FF-8E5B-024ED6ACE7AF}</ProjectGuid>
+ <RootNamespace>moses</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-withSRILM|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-withSRILM|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-withSRILM|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-withSRILM|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release-withSRILM|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release-withSRILM|Win32'">$(Configuration)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug-withSRILM|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug-withSRILM|Win32'">$(Configuration)\</IntDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>$(SolutionDir)..\mysqlpp\lib;$(SolutionDir)..\irstlm\src;$(SolutionDir)..\srilm\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;LM_INTERNAL;TRACE_ENABLE;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Lib>
+ <OutputFile>$(OutDir)$(ProjectName).lib</OutputFile>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <AdditionalIncludeDirectories>$(SolutionDir)..\mysqlpp\lib;$(SolutionDir)..\irstlm\src;$(SolutionDir)..\srilm\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;LM_INTERNAL;TRACE_ENABLE;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Lib>
+ <OutputFile>$(OutDir)$(ProjectName).lib</OutputFile>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-withSRILM|Win32'">
+ <ClCompile>
+ <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <AdditionalIncludeDirectories>$(SolutionDir)..\mysqlpp\lib;$(SolutionDir)..\irstlm\src;$(SolutionDir)..\srilm\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;LM_INTERNAL;LM_SRI;TRACE_ENABLE;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Lib>
+ <OutputFile>$(OutDir)$(ProjectName).lib</OutputFile>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-withSRILM|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>$(SolutionDir)..\mysqlpp\lib;$(SolutionDir)..\irstlm\src;$(SolutionDir)..\srilm\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;LM_INTERNAL;LM_SRI;TRACE_ENABLE;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Lib>
+ <OutputFile>$(OutDir)$(ProjectName).lib</OutputFile>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="src\AlignmentInfo.cpp" />
+ <ClCompile Include="src\AlignmentInfoCollection.cpp" />
+ <ClCompile Include="src\BitmapContainer.cpp" />
+ <ClCompile Include="src\ChartCell.cpp" />
+ <ClCompile Include="src\ChartCellCollection.cpp" />
+ <ClCompile Include="src\ChartHypothesis.cpp" />
+ <ClCompile Include="src\ChartHypothesisCollection.cpp" />
+ <ClCompile Include="src\ChartManager.cpp" />
+ <ClCompile Include="src\ChartRuleLookupManagerMemory.cpp" />
+ <ClCompile Include="src\ChartRuleLookupManagerOnDisk.cpp" />
+ <ClCompile Include="src\ChartTranslationOption.cpp" />
+ <ClCompile Include="src\ChartTranslationOptionCollection.cpp" />
+ <ClCompile Include="src\ChartTranslationOptionList.cpp" />
+ <ClCompile Include="src\ChartTrellisNode.cpp" />
+ <ClCompile Include="src\ChartTrellisPath.cpp" />
+ <ClCompile Include="src\ChartTrellisPathCollection.cpp" />
+ <ClCompile Include="src\ChartTrellisPathList.cpp" />
+ <ClCompile Include="src\ConfusionNet.cpp" />
+ <ClCompile Include="src\DecodeFeature.cpp" />
+ <ClCompile Include="src\DecodeGraph.cpp" />
+ <ClCompile Include="src\DecodeStep.cpp" />
+ <ClCompile Include="src\DecodeStepGeneration.cpp" />
+ <ClCompile Include="src\DecodeStepTranslation.cpp" />
+ <ClCompile Include="src\Dictionary.cpp" />
+ <ClCompile Include="src\DotChart.cpp" />
+ <ClCompile Include="src\DotChartInMemory.cpp" />
+ <ClCompile Include="src\DotChartOnDisk.cpp" />
+ <ClCompile Include="src\DummyScoreProducers.cpp" />
+ <ClCompile Include="src\Factor.cpp" />
+ <ClCompile Include="src\FactorCollection.cpp" />
+ <ClCompile Include="src\FactorTypeSet.cpp" />
+ <ClCompile Include="src\FeatureFunction.cpp" />
+ <ClCompile Include="src\FFState.cpp" />
+ <ClCompile Include="src\File.cpp" />
+ <ClCompile Include="src\FloydWarshall.cpp" />
+ <ClCompile Include="src\GenerationDictionary.cpp" />
+ <ClCompile Include="src\GlobalLexicalModel.cpp" />
+ <ClCompile Include="src\hash.cpp" />
+ <ClCompile Include="src\Hypothesis.cpp" />
+ <ClCompile Include="src\HypothesisStack.cpp" />
+ <ClCompile Include="src\HypothesisStackCubePruning.cpp" />
+ <ClCompile Include="src\HypothesisStackNormal.cpp" />
+ <ClCompile Include="src\InputFileStream.cpp" />
+ <ClCompile Include="src\InputType.cpp" />
+ <ClCompile Include="src\LanguageModel.cpp" />
+ <ClCompile Include="src\LanguageModelFactory.cpp" />
+ <ClCompile Include="src\LanguageModelImplementation.cpp" />
+ <ClCompile Include="src\LanguageModelInternal.cpp">
+ <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug-withSRILM|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+ <XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Debug-withSRILM|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
+ <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+ <XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
+ <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release-withSRILM|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+ <XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release-withSRILM|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
+ <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+ <XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
+ </ClCompile>
+ <ClCompile Include="src\LanguageModelJoint.cpp" />
+ <ClCompile Include="src\LanguageModelMultiFactor.cpp" />
+ <ClCompile Include="src\LanguageModelSingleFactor.cpp" />
+ <ClCompile Include="src\LanguageModelSkip.cpp" />
+ <ClCompile Include="src\LanguageModelSRI.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="src\LexicalReordering.cpp" />
+ <ClCompile Include="src\LexicalReorderingState.cpp" />
+ <ClCompile Include="src\LexicalReorderingTable.cpp" />
+ <ClCompile Include="src\LMList.cpp" />
+ <ClCompile Include="src\LVoc.cpp" />
+ <ClCompile Include="src\Manager.cpp" />
+ <ClCompile Include="src\NGramCollection.cpp" />
+ <ClCompile Include="src\NGramNode.cpp" />
+ <ClCompile Include="src\Parameter.cpp" />
+ <ClCompile Include="src\PartialTranslOptColl.cpp" />
+ <ClCompile Include="src\PCNTools.cpp" />
+ <ClCompile Include="src\Phrase.cpp" />
+ <ClCompile Include="src\PhraseDictionary.cpp" />
+ <ClCompile Include="src\PhraseDictionaryMemory.cpp" />
+ <ClCompile Include="src\PhraseDictionaryNode.cpp">
+ <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug-withSRILM|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+ <XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Debug-withSRILM|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
+ <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+ <XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
+ <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release-withSRILM|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+ <XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release-withSRILM|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
+ <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
+ <XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
+ </ClCompile>
+ <ClCompile Include="src\PhraseDictionaryNodeSCFG.cpp" />
+ <ClCompile Include="src\PhraseDictionaryOnDisk.cpp" />
+ <ClCompile Include="src\PhraseDictionarySCFG.cpp" />
+ <ClCompile Include="src\PhraseDictionaryTree.cpp" />
+ <ClCompile Include="src\PhraseDictionaryTreeAdaptor.cpp" />
+ <ClCompile Include="src\PrefixTreeMap.cpp" />
+ <ClCompile Include="src\ReorderingConstraint.cpp" />
+ <ClCompile Include="src\ReorderingStack.cpp" />
+ <ClCompile Include="src\RuleCube.cpp" />
+ <ClCompile Include="src\RuleCubeItem.cpp" />
+ <ClCompile Include="src\RuleCubeQueue.cpp" />
+ <ClCompile Include="src\ScoreComponentCollection.cpp" />
+ <ClCompile Include="src\ScoreIndexManager.cpp" />
+ <ClCompile Include="src\ScoreProducer.cpp" />
+ <ClCompile Include="src\Search.cpp" />
+ <ClCompile Include="src\SearchCubePruning.cpp" />
+ <ClCompile Include="src\SearchNormal.cpp" />
+ <ClCompile Include="src\Sentence.cpp" />
+ <ClCompile Include="src\SentenceStats.cpp" />
+ <ClCompile Include="src\SquareMatrix.cpp" />
+ <ClCompile Include="src\StaticData.cpp" />
+ <ClCompile Include="src\TargetPhrase.cpp" />
+ <ClCompile Include="src\TargetPhraseCollection.cpp" />
+ <ClCompile Include="src\ThreadPool.cpp" />
+ <ClCompile Include="src\Timer.cpp" />
+ <ClCompile Include="src\TranslationOption.cpp" />
+ <ClCompile Include="src\TranslationOptionCollection.cpp" />
+ <ClCompile Include="src\TranslationOptionCollectionConfusionNet.cpp" />
+ <ClCompile Include="src\TranslationOptionCollectionText.cpp" />
+ <ClCompile Include="src\TranslationOptionList.cpp" />
+ <ClCompile Include="src\TranslationSystem.cpp" />
+ <ClCompile Include="src\TreeInput.cpp" />
+ <ClCompile Include="src\TrellisPath.cpp" />
+ <ClCompile Include="src\TrellisPathCollection.cpp" />
+ <ClCompile Include="src\UserMessage.cpp" />
+ <ClCompile Include="src\Util.cpp" />
+ <ClCompile Include="src\Word.cpp" />
+ <ClCompile Include="src\WordLattice.cpp" />
+ <ClCompile Include="src\WordsBitmap.cpp" />
+ <ClCompile Include="src\WordsRange.cpp" />
+ <ClCompile Include="src\XmlOption.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="src\AlignmentInfo.h" />
+ <ClInclude Include="src\AlignmentInfoCollection.h" />
+ <ClInclude Include="src\BilingualDynSuffixArray.h" />
+ <ClInclude Include="src\BitmapContainer.h" />
+ <ClInclude Include="src\CellCollection.h" />
+ <ClInclude Include="src\ChartCell.h" />
+ <ClInclude Include="src\ChartCellCollection.h" />
+ <ClInclude Include="src\ChartHypothesis.h" />
+ <ClInclude Include="src\ChartHypothesisCollection.h" />
+ <ClInclude Include="src\ChartManager.h" />
+ <ClInclude Include="src\ChartRuleLookupManager.h" />
+ <ClInclude Include="src\ChartRuleLookupManagerMemory.h" />
+ <ClInclude Include="src\ChartRuleLookupManagerOnDisk.h" />
+ <ClInclude Include="src\ChartTranslationOption.h" />
+ <ClInclude Include="src\ChartTranslationOptionCollection.h" />
+ <ClInclude Include="src\ChartTranslationOptionList.h" />
+ <ClInclude Include="src\ChartTrellisNode.h" />
+ <ClInclude Include="src\ChartTrellisPath.h" />
+ <ClInclude Include="src\ChartTrellisPathCollection.h" />
+ <ClInclude Include="src\ChartTrellisPathList.h" />
+ <ClInclude Include="src\ConfusionNet.h" />
+ <ClInclude Include="src\DecodeFeature.h" />
+ <ClInclude Include="src\DecodeGraph.h" />
+ <ClInclude Include="src\DecodeStep.h" />
+ <ClInclude Include="src\DecodeStepGeneration.h" />
+ <ClInclude Include="src\DecodeStepTranslation.h" />
+ <ClInclude Include="src\Dictionary.h" />
+ <ClInclude Include="src\DotChart.h" />
+ <ClInclude Include="src\DotChartInMemory.h" />
+ <ClInclude Include="src\DotChartOnDisk.h" />
+ <ClInclude Include="src\DummyScoreProducers.h" />
+ <ClInclude Include="src\DynSuffixArray.h" />
+ <ClInclude Include="src\Factor.h" />
+ <ClInclude Include="src\FactorCollection.h" />
+ <ClInclude Include="src\FactorTypeSet.h" />
+ <ClInclude Include="src\FeatureFunction.h" />
+ <ClInclude Include="src\FFState.h" />
+ <ClInclude Include="src\File.h" />
+ <ClInclude Include="src\FilePtr.h" />
+ <ClInclude Include="src\FloydWarshall.h" />
+ <ClInclude Include="src\GenerationDictionary.h" />
+ <ClInclude Include="src\GlobalLexicalModel.h" />
+ <ClInclude Include="src\gzfilebuf.h" />
+ <ClInclude Include="src\hash.h" />
+ <ClInclude Include="src\Hypothesis.h" />
+ <ClInclude Include="src\HypothesisStack.h" />
+ <ClInclude Include="src\HypothesisStackCubePruning.h" />
+ <ClInclude Include="src\HypothesisStackNormal.h" />
+ <ClInclude Include="src\InputFileStream.h" />
+ <ClInclude Include="src\InputType.h" />
+ <ClInclude Include="src\LanguageModel.h" />
+ <ClInclude Include="src\LanguageModelDelegate.h" />
+ <ClInclude Include="src\LanguageModelFactory.h" />
+ <ClInclude Include="src\LanguageModelImplementation.h" />
+ <ClInclude Include="src\LanguageModelInternal.h" />
+ <ClInclude Include="src\LanguageModelIRST.h" />
+ <ClInclude Include="src\LanguageModelJoint.h" />
+ <ClInclude Include="src\LanguageModelKen.h" />
+ <ClInclude Include="src\LanguageModelMultiFactor.h" />
+ <ClInclude Include="src\LanguageModelParallelBackoff.h" />
+ <ClInclude Include="src\LanguageModelRandLM.h" />
+ <ClInclude Include="src\LanguageModelRemote.h" />
+ <ClInclude Include="src\LanguageModelSingleFactor.h" />
+ <ClInclude Include="src\LanguageModelSkip.h" />
+ <ClInclude Include="src\LanguageModelSRI.h" />
+ <ClInclude Include="src\LexicalReordering.h" />
+ <ClInclude Include="src\LexicalReorderingState.h" />
+ <ClInclude Include="src\LexicalReorderingTable.h" />
+ <ClInclude Include="src\LMList.h" />
+ <ClInclude Include="src\LVoc.h" />
+ <ClInclude Include="src\Manager.h" />
+ <ClInclude Include="src\NGramCollection.h" />
+ <ClInclude Include="src\NGramNode.h" />
+ <ClInclude Include="src\NonTerminal.h" />
+ <ClInclude Include="src\ObjectPool.h" />
+ <ClInclude Include="src\OutputCollector.h" />
+ <ClInclude Include="src\Parameter.h" />
+ <ClInclude Include="src\PartialTranslOptColl.h" />
+ <ClInclude Include="src\PCNTools.h" />
+ <ClInclude Include="src\PDTAimp.h" />
+ <ClInclude Include="src\Phrase.h" />
+ <ClInclude Include="src\PhraseDictionary.h" />
+ <ClInclude Include="src\PhraseDictionaryDynSuffixArray.h" />
+ <ClInclude Include="src\PhraseDictionaryMemory.h" />
+ <ClInclude Include="src\PhraseDictionaryNode.h" />
+ <ClInclude Include="src\PhraseDictionaryNodeSCFG.h" />
+ <ClInclude Include="src\PhraseDictionaryOnDisk.h" />
+ <ClInclude Include="src\PhraseDictionarySCFG.h" />
+ <ClInclude Include="src\PhraseDictionaryTree.h" />
+ <ClInclude Include="src\PhraseDictionaryTreeAdaptor.h" />
+ <ClInclude Include="src\PrefixTree.h" />
+ <ClInclude Include="src\PrefixTreeMap.h" />
+ <ClInclude Include="src\ReorderingConstraint.h" />
+ <ClInclude Include="src\ReorderingStack.h" />
+ <ClInclude Include="src\RuleCube.h" />
+ <ClInclude Include="src\RuleCubeItem.h" />
+ <ClInclude Include="src\RuleCubeQueue.h" />
+ <ClInclude Include="src\ScoreComponentCollection.h" />
+ <ClInclude Include="src\ScoreIndexManager.h" />
+ <ClInclude Include="src\ScoreProducer.h" />
+ <ClInclude Include="src\Search.h" />
+ <ClInclude Include="src\SearchCubePruning.h" />
+ <ClInclude Include="src\SearchNormal.h" />
+ <ClInclude Include="src\Sentence.h" />
+ <ClInclude Include="src\SentenceStats.h" />
+ <ClInclude Include="src\SquareMatrix.h" />
+ <ClInclude Include="src\StaticData.h" />
+ <ClInclude Include="src\TargetPhrase.h" />
+ <ClInclude Include="src\TargetPhraseCollection.h" />
+ <ClInclude Include="src\ThreadPool.h" />
+ <ClInclude Include="src\Timer.h" />
+ <ClInclude Include="src\TranslationOption.h" />
+ <ClInclude Include="src\TranslationOptionCollection.h" />
+ <ClInclude Include="src\TranslationOptionCollectionConfusionNet.h" />
+ <ClInclude Include="src\TranslationOptionCollectionText.h" />
+ <ClInclude Include="src\TranslationOptionList.h" />
+ <ClInclude Include="src\TranslationSystem.h" />
+ <ClInclude Include="src\TreeInput.h" />
+ <ClInclude Include="src\TrellisPath.h" />
+ <ClInclude Include="src\TrellisPathCollection.h" />
+ <ClInclude Include="src\TrellisPathList.h" />
+ <ClInclude Include="src\TypeDef.h" />
+ <ClInclude Include="src\UniqueObject.h" />
+ <ClInclude Include="src\UserMessage.h" />
+ <ClInclude Include="src\Util.h" />
+ <ClInclude Include="src\Word.h" />
+ <ClInclude Include="src\WordConsumed.h" />
+ <ClInclude Include="src\WordLattice.h" />
+ <ClInclude Include="src\WordsBitmap.h" />
+ <ClInclude Include="src\WordsRange.h" />
+ <ClInclude Include="src\XmlOption.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/moses/moses.xcodeproj/project.pbxproj b/moses/moses.xcodeproj/project.pbxproj
index 6f9750a32..b985886e1 100644
--- a/moses/moses.xcodeproj/project.pbxproj
+++ b/moses/moses.xcodeproj/project.pbxproj
@@ -7,15 +7,57 @@
objects = {
/* Begin PBXBuildFile section */
- 1E1C589412F310A70067DEB7 /* ChartRuleLookupManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E1C588F12F310A70067DEB7 /* ChartRuleLookupManager.h */; };
+ 1E07291F13B3854D004454FD /* AlignmentInfoCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E07291D13B3854D004454FD /* AlignmentInfoCollection.cpp */; };
+ 1E07292013B3854D004454FD /* AlignmentInfoCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E07291E13B3854D004454FD /* AlignmentInfoCollection.h */; };
1E1C589512F310A70067DEB7 /* ChartRuleLookupManagerMemory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E1C589012F310A70067DEB7 /* ChartRuleLookupManagerMemory.cpp */; };
1E1C589612F310A70067DEB7 /* ChartRuleLookupManagerMemory.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E1C589112F310A70067DEB7 /* ChartRuleLookupManagerMemory.h */; };
1E1C589712F310A70067DEB7 /* ChartRuleLookupManagerOnDisk.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E1C589212F310A70067DEB7 /* ChartRuleLookupManagerOnDisk.cpp */; };
1E1C589812F310A70067DEB7 /* ChartRuleLookupManagerOnDisk.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E1C589312F310A70067DEB7 /* ChartRuleLookupManagerOnDisk.h */; };
1E2B861D12555F25000770D6 /* LanguageModelRandLM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2B861B12555F25000770D6 /* LanguageModelRandLM.cpp */; };
1E2B861E12555F25000770D6 /* LanguageModelRandLM.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2B861C12555F25000770D6 /* LanguageModelRandLM.h */; };
+ 1E2E161A132A890D00ED4085 /* ChartCell.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2E1604132A890D00ED4085 /* ChartCell.cpp */; };
+ 1E2E161B132A890D00ED4085 /* ChartCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2E1605132A890D00ED4085 /* ChartCell.h */; };
+ 1E2E161C132A890D00ED4085 /* ChartCellCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2E1606132A890D00ED4085 /* ChartCellCollection.cpp */; };
+ 1E2E161D132A890D00ED4085 /* ChartCellCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2E1607132A890D00ED4085 /* ChartCellCollection.h */; };
+ 1E2E161E132A890D00ED4085 /* ChartHypothesis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2E1608132A890D00ED4085 /* ChartHypothesis.cpp */; };
+ 1E2E161F132A890D00ED4085 /* ChartHypothesis.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2E1609132A890D00ED4085 /* ChartHypothesis.h */; };
+ 1E2E1620132A890D00ED4085 /* ChartHypothesisCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2E160A132A890D00ED4085 /* ChartHypothesisCollection.cpp */; };
+ 1E2E1621132A890D00ED4085 /* ChartHypothesisCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2E160B132A890D00ED4085 /* ChartHypothesisCollection.h */; };
+ 1E2E1622132A890D00ED4085 /* ChartManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2E160C132A890D00ED4085 /* ChartManager.cpp */; };
+ 1E2E1623132A890D00ED4085 /* ChartManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2E160D132A890D00ED4085 /* ChartManager.h */; };
+ 1E2E1624132A890D00ED4085 /* ChartTranslationOptionCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2E160E132A890D00ED4085 /* ChartTranslationOptionCollection.cpp */; };
+ 1E2E1625132A890D00ED4085 /* ChartTranslationOptionCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2E160F132A890D00ED4085 /* ChartTranslationOptionCollection.h */; };
+ 1E2E1626132A890D00ED4085 /* ChartTrellisNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2E1610132A890D00ED4085 /* ChartTrellisNode.cpp */; };
+ 1E2E1627132A890D00ED4085 /* ChartTrellisNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2E1611132A890D00ED4085 /* ChartTrellisNode.h */; };
+ 1E2E1628132A890D00ED4085 /* ChartTrellisPath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2E1612132A890D00ED4085 /* ChartTrellisPath.cpp */; };
+ 1E2E1629132A890D00ED4085 /* ChartTrellisPath.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2E1613132A890D00ED4085 /* ChartTrellisPath.h */; };
+ 1E2E162A132A890D00ED4085 /* ChartTrellisPathCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2E1614132A890D00ED4085 /* ChartTrellisPathCollection.cpp */; };
+ 1E2E162B132A890D00ED4085 /* ChartTrellisPathCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2E1615132A890D00ED4085 /* ChartTrellisPathCollection.h */; };
+ 1E2E162C132A890D00ED4085 /* ChartTrellisPathList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2E1616132A890D00ED4085 /* ChartTrellisPathList.cpp */; };
+ 1E2E162D132A890D00ED4085 /* ChartTrellisPathList.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2E1617132A890D00ED4085 /* ChartTrellisPathList.h */; };
+ 1E2E1639132A892800ED4085 /* OutputCollector.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2E1632132A892800ED4085 /* OutputCollector.h */; };
+ 1E2E163A132A892800ED4085 /* RuleCube.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2E1633132A892800ED4085 /* RuleCube.cpp */; };
+ 1E2E163B132A892800ED4085 /* RuleCube.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2E1634132A892800ED4085 /* RuleCube.h */; };
+ 1E2E163C132A892800ED4085 /* RuleCubeQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2E1635132A892800ED4085 /* RuleCubeQueue.cpp */; };
+ 1E2E163D132A892800ED4085 /* RuleCubeQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2E1636132A892800ED4085 /* RuleCubeQueue.h */; };
+ 1E2E163E132A892800ED4085 /* ThreadPool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2E1637132A892800ED4085 /* ThreadPool.cpp */; };
+ 1E2E163F132A892800ED4085 /* ThreadPool.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2E1638132A892800ED4085 /* ThreadPool.h */; };
+ 1E46B5A613BA5C7F0084F898 /* RuleCubeItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E46B5A413BA5C7F0084F898 /* RuleCubeItem.cpp */; };
+ 1E46B5A713BA5C7F0084F898 /* RuleCubeItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E46B5A513BA5C7F0084F898 /* RuleCubeItem.h */; };
+ 1E528B9913A12ACC00E9A67E /* LanguageModelORLM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E528B9813A12ACC00E9A67E /* LanguageModelORLM.cpp */; };
+ 1E528B9D13A12B2D00E9A67E /* params.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E528B9B13A12B2D00E9A67E /* params.cpp */; };
+ 1E528B9E13A12B2D00E9A67E /* SyntacticLanguageModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E528B9C13A12B2D00E9A67E /* SyntacticLanguageModel.cpp */; };
1E5AAF1512B25C9E0071864D /* LanguageModelImplementation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E5AAF1312B25C9E0071864D /* LanguageModelImplementation.cpp */; };
1E5AAF1612B25C9E0071864D /* LanguageModelImplementation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E5AAF1412B25C9E0071864D /* LanguageModelImplementation.h */; };
+ 1EA6AB4A13BCC838004465AF /* ChartRuleLookupManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EA6AB4813BCC838004465AF /* ChartRuleLookupManager.cpp */; };
+ 1EA6AB4B13BCC838004465AF /* ChartRuleLookupManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EA6AB4913BCC838004465AF /* ChartRuleLookupManager.h */; };
+ 1EBB262913A12DB500B51840 /* hash.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EBB262213A12DB500B51840 /* hash.h */; };
+ 1EBB262A13A12DB500B51840 /* onlineRLM.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EBB262313A12DB500B51840 /* onlineRLM.h */; };
+ 1EBB262B13A12DB500B51840 /* params.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EBB262413A12DB500B51840 /* params.h */; };
+ 1EBB262C13A12DB500B51840 /* perfectHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EBB262513A12DB500B51840 /* perfectHash.h */; };
+ 1EBB262D13A12DB500B51840 /* quantizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EBB262613A12DB500B51840 /* quantizer.h */; };
+ 1EBB262E13A12DB500B51840 /* RandLMCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EBB262713A12DB500B51840 /* RandLMCache.h */; };
+ 1EBB262F13A12DB500B51840 /* RandLMFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EBB262813A12DB500B51840 /* RandLMFilter.h */; };
1ED00036124BC2690029177F /* ChartTranslationOption.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED00034124BC2690029177F /* ChartTranslationOption.cpp */; };
1ED00037124BC2690029177F /* ChartTranslationOption.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED00035124BC2690029177F /* ChartTranslationOption.h */; };
1ED0FE2A124BB9380029177F /* AlignmentInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED0FD4C124BB9380029177F /* AlignmentInfo.cpp */; };
@@ -215,8 +257,6 @@
1ED0FEF6124BB9380029177F /* Util.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED0FE1D124BB9380029177F /* Util.h */; };
1ED0FEF7124BB9380029177F /* Word.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED0FE1E124BB9380029177F /* Word.cpp */; };
1ED0FEF8124BB9380029177F /* Word.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED0FE1F124BB9380029177F /* Word.h */; };
- 1ED0FEF9124BB9380029177F /* WordConsumed.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED0FE20124BB9380029177F /* WordConsumed.cpp */; };
- 1ED0FEFA124BB9380029177F /* WordConsumed.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED0FE21124BB9380029177F /* WordConsumed.h */; };
1ED0FEFB124BB9380029177F /* WordLattice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED0FE22124BB9380029177F /* WordLattice.cpp */; };
1ED0FEFC124BB9380029177F /* WordLattice.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED0FE23124BB9380029177F /* WordLattice.h */; };
1ED0FEFD124BB9380029177F /* WordsBitmap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED0FE24124BB9380029177F /* WordsBitmap.cpp */; };
@@ -227,19 +267,65 @@
1ED0FF02124BB9380029177F /* XmlOption.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED0FE29124BB9380029177F /* XmlOption.h */; };
1ED0FFD3124BC0BF0029177F /* ChartTranslationOptionList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED0FFD1124BC0BF0029177F /* ChartTranslationOptionList.cpp */; };
1ED0FFD4124BC0BF0029177F /* ChartTranslationOptionList.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED0FFD2124BC0BF0029177F /* ChartTranslationOptionList.h */; };
+ 1ED22EE513DD96B0000DE8C9 /* DotChartInMemory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ED22EE313DD96B0000DE8C9 /* DotChartInMemory.cpp */; };
+ 1ED22EE613DD96B0000DE8C9 /* DotChartInMemory.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED22EE413DD96B0000DE8C9 /* DotChartInMemory.h */; };
+ 1EE58D9F133726C700D93158 /* NonTerminal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EE58D9D133726C700D93158 /* NonTerminal.cpp */; };
+ 1EE58DA0133726C700D93158 /* NonTerminal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EE58D9E133726C700D93158 /* NonTerminal.h */; };
1EEB43EE1264A6F200739BA5 /* PhraseDictionarySCFG.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EEB43ED1264A6F200739BA5 /* PhraseDictionarySCFG.h */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
- 1E1C588F12F310A70067DEB7 /* ChartRuleLookupManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartRuleLookupManager.h; path = src/ChartRuleLookupManager.h; sourceTree = "<group>"; };
+ 1E07291D13B3854D004454FD /* AlignmentInfoCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AlignmentInfoCollection.cpp; path = src/AlignmentInfoCollection.cpp; sourceTree = "<group>"; };
+ 1E07291E13B3854D004454FD /* AlignmentInfoCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AlignmentInfoCollection.h; path = src/AlignmentInfoCollection.h; sourceTree = "<group>"; };
1E1C589012F310A70067DEB7 /* ChartRuleLookupManagerMemory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartRuleLookupManagerMemory.cpp; path = src/ChartRuleLookupManagerMemory.cpp; sourceTree = "<group>"; };
1E1C589112F310A70067DEB7 /* ChartRuleLookupManagerMemory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartRuleLookupManagerMemory.h; path = src/ChartRuleLookupManagerMemory.h; sourceTree = "<group>"; };
1E1C589212F310A70067DEB7 /* ChartRuleLookupManagerOnDisk.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartRuleLookupManagerOnDisk.cpp; path = src/ChartRuleLookupManagerOnDisk.cpp; sourceTree = "<group>"; };
1E1C589312F310A70067DEB7 /* ChartRuleLookupManagerOnDisk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartRuleLookupManagerOnDisk.h; path = src/ChartRuleLookupManagerOnDisk.h; sourceTree = "<group>"; };
1E2B861B12555F25000770D6 /* LanguageModelRandLM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LanguageModelRandLM.cpp; path = src/LanguageModelRandLM.cpp; sourceTree = "<group>"; };
1E2B861C12555F25000770D6 /* LanguageModelRandLM.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LanguageModelRandLM.h; path = src/LanguageModelRandLM.h; sourceTree = "<group>"; };
+ 1E2E1604132A890D00ED4085 /* ChartCell.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartCell.cpp; path = src/ChartCell.cpp; sourceTree = "<group>"; };
+ 1E2E1605132A890D00ED4085 /* ChartCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartCell.h; path = src/ChartCell.h; sourceTree = "<group>"; };
+ 1E2E1606132A890D00ED4085 /* ChartCellCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartCellCollection.cpp; path = src/ChartCellCollection.cpp; sourceTree = "<group>"; };
+ 1E2E1607132A890D00ED4085 /* ChartCellCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartCellCollection.h; path = src/ChartCellCollection.h; sourceTree = "<group>"; };
+ 1E2E1608132A890D00ED4085 /* ChartHypothesis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartHypothesis.cpp; path = src/ChartHypothesis.cpp; sourceTree = "<group>"; };
+ 1E2E1609132A890D00ED4085 /* ChartHypothesis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartHypothesis.h; path = src/ChartHypothesis.h; sourceTree = "<group>"; };
+ 1E2E160A132A890D00ED4085 /* ChartHypothesisCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartHypothesisCollection.cpp; path = src/ChartHypothesisCollection.cpp; sourceTree = "<group>"; };
+ 1E2E160B132A890D00ED4085 /* ChartHypothesisCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartHypothesisCollection.h; path = src/ChartHypothesisCollection.h; sourceTree = "<group>"; };
+ 1E2E160C132A890D00ED4085 /* ChartManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartManager.cpp; path = src/ChartManager.cpp; sourceTree = "<group>"; };
+ 1E2E160D132A890D00ED4085 /* ChartManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartManager.h; path = src/ChartManager.h; sourceTree = "<group>"; };
+ 1E2E160E132A890D00ED4085 /* ChartTranslationOptionCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartTranslationOptionCollection.cpp; path = src/ChartTranslationOptionCollection.cpp; sourceTree = "<group>"; };
+ 1E2E160F132A890D00ED4085 /* ChartTranslationOptionCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartTranslationOptionCollection.h; path = src/ChartTranslationOptionCollection.h; sourceTree = "<group>"; };
+ 1E2E1610132A890D00ED4085 /* ChartTrellisNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartTrellisNode.cpp; path = src/ChartTrellisNode.cpp; sourceTree = "<group>"; };
+ 1E2E1611132A890D00ED4085 /* ChartTrellisNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartTrellisNode.h; path = src/ChartTrellisNode.h; sourceTree = "<group>"; };
+ 1E2E1612132A890D00ED4085 /* ChartTrellisPath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartTrellisPath.cpp; path = src/ChartTrellisPath.cpp; sourceTree = "<group>"; };
+ 1E2E1613132A890D00ED4085 /* ChartTrellisPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartTrellisPath.h; path = src/ChartTrellisPath.h; sourceTree = "<group>"; };
+ 1E2E1614132A890D00ED4085 /* ChartTrellisPathCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartTrellisPathCollection.cpp; path = src/ChartTrellisPathCollection.cpp; sourceTree = "<group>"; };
+ 1E2E1615132A890D00ED4085 /* ChartTrellisPathCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartTrellisPathCollection.h; path = src/ChartTrellisPathCollection.h; sourceTree = "<group>"; };
+ 1E2E1616132A890D00ED4085 /* ChartTrellisPathList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartTrellisPathList.cpp; path = src/ChartTrellisPathList.cpp; sourceTree = "<group>"; };
+ 1E2E1617132A890D00ED4085 /* ChartTrellisPathList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartTrellisPathList.h; path = src/ChartTrellisPathList.h; sourceTree = "<group>"; };
+ 1E2E1632132A892800ED4085 /* OutputCollector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OutputCollector.h; path = src/OutputCollector.h; sourceTree = "<group>"; };
+ 1E2E1633132A892800ED4085 /* RuleCube.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RuleCube.cpp; path = src/RuleCube.cpp; sourceTree = "<group>"; };
+ 1E2E1634132A892800ED4085 /* RuleCube.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RuleCube.h; path = src/RuleCube.h; sourceTree = "<group>"; };
+ 1E2E1635132A892800ED4085 /* RuleCubeQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RuleCubeQueue.cpp; path = src/RuleCubeQueue.cpp; sourceTree = "<group>"; };
+ 1E2E1636132A892800ED4085 /* RuleCubeQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RuleCubeQueue.h; path = src/RuleCubeQueue.h; sourceTree = "<group>"; };
+ 1E2E1637132A892800ED4085 /* ThreadPool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ThreadPool.cpp; path = src/ThreadPool.cpp; sourceTree = "<group>"; };
+ 1E2E1638132A892800ED4085 /* ThreadPool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ThreadPool.h; path = src/ThreadPool.h; sourceTree = "<group>"; };
+ 1E46B5A413BA5C7F0084F898 /* RuleCubeItem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RuleCubeItem.cpp; path = src/RuleCubeItem.cpp; sourceTree = "<group>"; };
+ 1E46B5A513BA5C7F0084F898 /* RuleCubeItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RuleCubeItem.h; path = src/RuleCubeItem.h; sourceTree = "<group>"; };
+ 1E528B9813A12ACC00E9A67E /* LanguageModelORLM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LanguageModelORLM.cpp; path = src/LanguageModelORLM.cpp; sourceTree = "<group>"; };
+ 1E528B9B13A12B2D00E9A67E /* params.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = params.cpp; path = src/DynSAInclude/params.cpp; sourceTree = "<group>"; };
+ 1E528B9C13A12B2D00E9A67E /* SyntacticLanguageModel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SyntacticLanguageModel.cpp; path = src/SyntacticLanguageModel.cpp; sourceTree = "<group>"; };
1E5AAF1312B25C9E0071864D /* LanguageModelImplementation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LanguageModelImplementation.cpp; path = src/LanguageModelImplementation.cpp; sourceTree = "<group>"; };
1E5AAF1412B25C9E0071864D /* LanguageModelImplementation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LanguageModelImplementation.h; path = src/LanguageModelImplementation.h; sourceTree = "<group>"; };
+ 1EA6AB4813BCC838004465AF /* ChartRuleLookupManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartRuleLookupManager.cpp; path = src/ChartRuleLookupManager.cpp; sourceTree = "<group>"; };
+ 1EA6AB4913BCC838004465AF /* ChartRuleLookupManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartRuleLookupManager.h; path = src/ChartRuleLookupManager.h; sourceTree = "<group>"; };
+ 1EBB262213A12DB500B51840 /* hash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hash.h; path = src/DynSAInclude/hash.h; sourceTree = "<group>"; };
+ 1EBB262313A12DB500B51840 /* onlineRLM.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = onlineRLM.h; path = src/DynSAInclude/onlineRLM.h; sourceTree = "<group>"; };
+ 1EBB262413A12DB500B51840 /* params.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = params.h; path = src/DynSAInclude/params.h; sourceTree = "<group>"; };
+ 1EBB262513A12DB500B51840 /* perfectHash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = perfectHash.h; path = src/DynSAInclude/perfectHash.h; sourceTree = "<group>"; };
+ 1EBB262613A12DB500B51840 /* quantizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = quantizer.h; path = src/DynSAInclude/quantizer.h; sourceTree = "<group>"; };
+ 1EBB262713A12DB500B51840 /* RandLMCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RandLMCache.h; path = src/DynSAInclude/RandLMCache.h; sourceTree = "<group>"; };
+ 1EBB262813A12DB500B51840 /* RandLMFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RandLMFilter.h; path = src/DynSAInclude/RandLMFilter.h; sourceTree = "<group>"; };
1ED00034124BC2690029177F /* ChartTranslationOption.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartTranslationOption.cpp; path = src/ChartTranslationOption.cpp; sourceTree = "<group>"; };
1ED00035124BC2690029177F /* ChartTranslationOption.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartTranslationOption.h; path = src/ChartTranslationOption.h; sourceTree = "<group>"; };
1ED0FD4C124BB9380029177F /* AlignmentInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AlignmentInfo.cpp; path = src/AlignmentInfo.cpp; sourceTree = "<group>"; };
@@ -441,8 +527,6 @@
1ED0FE1D124BB9380029177F /* Util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Util.h; path = src/Util.h; sourceTree = "<group>"; };
1ED0FE1E124BB9380029177F /* Word.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Word.cpp; path = src/Word.cpp; sourceTree = "<group>"; };
1ED0FE1F124BB9380029177F /* Word.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Word.h; path = src/Word.h; sourceTree = "<group>"; };
- 1ED0FE20124BB9380029177F /* WordConsumed.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WordConsumed.cpp; path = src/WordConsumed.cpp; sourceTree = "<group>"; };
- 1ED0FE21124BB9380029177F /* WordConsumed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WordConsumed.h; path = src/WordConsumed.h; sourceTree = "<group>"; };
1ED0FE22124BB9380029177F /* WordLattice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WordLattice.cpp; path = src/WordLattice.cpp; sourceTree = "<group>"; };
1ED0FE23124BB9380029177F /* WordLattice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WordLattice.h; path = src/WordLattice.h; sourceTree = "<group>"; };
1ED0FE24124BB9380029177F /* WordsBitmap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WordsBitmap.cpp; path = src/WordsBitmap.cpp; sourceTree = "<group>"; };
@@ -453,6 +537,10 @@
1ED0FE29124BB9380029177F /* XmlOption.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XmlOption.h; path = src/XmlOption.h; sourceTree = "<group>"; };
1ED0FFD1124BC0BF0029177F /* ChartTranslationOptionList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ChartTranslationOptionList.cpp; path = src/ChartTranslationOptionList.cpp; sourceTree = "<group>"; };
1ED0FFD2124BC0BF0029177F /* ChartTranslationOptionList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChartTranslationOptionList.h; path = src/ChartTranslationOptionList.h; sourceTree = "<group>"; };
+ 1ED22EE313DD96B0000DE8C9 /* DotChartInMemory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DotChartInMemory.cpp; path = src/DotChartInMemory.cpp; sourceTree = "<group>"; };
+ 1ED22EE413DD96B0000DE8C9 /* DotChartInMemory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DotChartInMemory.h; path = src/DotChartInMemory.h; sourceTree = "<group>"; };
+ 1EE58D9D133726C700D93158 /* NonTerminal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NonTerminal.cpp; path = src/NonTerminal.cpp; sourceTree = "<group>"; };
+ 1EE58D9E133726C700D93158 /* NonTerminal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NonTerminal.h; path = src/NonTerminal.h; sourceTree = "<group>"; };
1EEB43ED1264A6F200739BA5 /* PhraseDictionarySCFG.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PhraseDictionarySCFG.h; path = src/PhraseDictionarySCFG.h; sourceTree = "<group>"; };
D2AAC046055464E500DB518D /* libmoses.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libmoses.a; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
@@ -483,20 +571,43 @@
children = (
1ED0FD4C124BB9380029177F /* AlignmentInfo.cpp */,
1ED0FD4D124BB9380029177F /* AlignmentInfo.h */,
+ 1E07291D13B3854D004454FD /* AlignmentInfoCollection.cpp */,
+ 1E07291E13B3854D004454FD /* AlignmentInfoCollection.h */,
1ED0FD4E124BB9380029177F /* BilingualDynSuffixArray.cpp */,
1ED0FD4F124BB9380029177F /* BilingualDynSuffixArray.h */,
1ED0FD50124BB9380029177F /* BitmapContainer.cpp */,
1ED0FD51124BB9380029177F /* BitmapContainer.h */,
1ED0FD52124BB9380029177F /* CellCollection.h */,
- 1E1C588F12F310A70067DEB7 /* ChartRuleLookupManager.h */,
+ 1E2E1604132A890D00ED4085 /* ChartCell.cpp */,
+ 1E2E1605132A890D00ED4085 /* ChartCell.h */,
+ 1E2E1606132A890D00ED4085 /* ChartCellCollection.cpp */,
+ 1E2E1607132A890D00ED4085 /* ChartCellCollection.h */,
+ 1E2E1608132A890D00ED4085 /* ChartHypothesis.cpp */,
+ 1E2E1609132A890D00ED4085 /* ChartHypothesis.h */,
+ 1E2E160A132A890D00ED4085 /* ChartHypothesisCollection.cpp */,
+ 1E2E160B132A890D00ED4085 /* ChartHypothesisCollection.h */,
+ 1E2E160C132A890D00ED4085 /* ChartManager.cpp */,
+ 1E2E160D132A890D00ED4085 /* ChartManager.h */,
+ 1EA6AB4813BCC838004465AF /* ChartRuleLookupManager.cpp */,
+ 1EA6AB4913BCC838004465AF /* ChartRuleLookupManager.h */,
1E1C589012F310A70067DEB7 /* ChartRuleLookupManagerMemory.cpp */,
1E1C589112F310A70067DEB7 /* ChartRuleLookupManagerMemory.h */,
1E1C589212F310A70067DEB7 /* ChartRuleLookupManagerOnDisk.cpp */,
1E1C589312F310A70067DEB7 /* ChartRuleLookupManagerOnDisk.h */,
1ED00034124BC2690029177F /* ChartTranslationOption.cpp */,
1ED00035124BC2690029177F /* ChartTranslationOption.h */,
+ 1E2E160E132A890D00ED4085 /* ChartTranslationOptionCollection.cpp */,
+ 1E2E160F132A890D00ED4085 /* ChartTranslationOptionCollection.h */,
1ED0FFD1124BC0BF0029177F /* ChartTranslationOptionList.cpp */,
1ED0FFD2124BC0BF0029177F /* ChartTranslationOptionList.h */,
+ 1E2E1610132A890D00ED4085 /* ChartTrellisNode.cpp */,
+ 1E2E1611132A890D00ED4085 /* ChartTrellisNode.h */,
+ 1E2E1612132A890D00ED4085 /* ChartTrellisPath.cpp */,
+ 1E2E1613132A890D00ED4085 /* ChartTrellisPath.h */,
+ 1E2E1614132A890D00ED4085 /* ChartTrellisPathCollection.cpp */,
+ 1E2E1615132A890D00ED4085 /* ChartTrellisPathCollection.h */,
+ 1E2E1616132A890D00ED4085 /* ChartTrellisPathList.cpp */,
+ 1E2E1617132A890D00ED4085 /* ChartTrellisPathList.h */,
1ED0FD57124BB9380029177F /* ConfusionNet.cpp */,
1ED0FD58124BB9380029177F /* ConfusionNet.h */,
1ED0FD59124BB9380029177F /* DecodeFeature.cpp */,
@@ -513,14 +624,17 @@
1ED0FD64124BB9380029177F /* Dictionary.h */,
1ED0FD65124BB9380029177F /* DotChart.cpp */,
1ED0FD66124BB9380029177F /* DotChart.h */,
+ 1ED22EE313DD96B0000DE8C9 /* DotChartInMemory.cpp */,
+ 1ED22EE413DD96B0000DE8C9 /* DotChartInMemory.h */,
1ED0FD67124BB9380029177F /* DotChartOnDisk.cpp */,
1ED0FD68124BB9380029177F /* DotChartOnDisk.h */,
1ED0FD69124BB9380029177F /* DummyScoreProducers.cpp */,
1ED0FD6A124BB9380029177F /* DummyScoreProducers.h */,
1ED0FD6B124BB9380029177F /* DynSAInclude */,
- 1ED4FC7C11BDC0D2004E826A /* DynSAInclude */,
1ED0FD73124BB9380029177F /* DynSuffixArray.cpp */,
1ED0FD74124BB9380029177F /* DynSuffixArray.h */,
+ 1ED0FD7D124BB9380029177F /* FFState.cpp */,
+ 1ED0FD7E124BB9380029177F /* FFState.h */,
1ED0FD75124BB9380029177F /* Factor.cpp */,
1ED0FD76124BB9380029177F /* Factor.h */,
1ED0FD77124BB9380029177F /* FactorCollection.cpp */,
@@ -529,8 +643,6 @@
1ED0FD7A124BB9380029177F /* FactorTypeSet.h */,
1ED0FD7B124BB9380029177F /* FeatureFunction.cpp */,
1ED0FD7C124BB9380029177F /* FeatureFunction.h */,
- 1ED0FD7D124BB9380029177F /* FFState.cpp */,
- 1ED0FD7E124BB9380029177F /* FFState.h */,
1ED0FD7F124BB9380029177F /* File.cpp */,
1ED0FD80124BB9380029177F /* File.h */,
1ED0FD81124BB9380029177F /* FilePtr.h */,
@@ -540,10 +652,6 @@
1ED0FD85124BB9380029177F /* GenerationDictionary.h */,
1ED0FD86124BB9380029177F /* GlobalLexicalModel.cpp */,
1ED0FD87124BB9380029177F /* GlobalLexicalModel.h */,
- 1ED0FD88124BB9380029177F /* gzfilebuf.h */,
- 1ED0FD89124BB9380029177F /* hash.cpp */,
- 1ED0FD8A124BB9380029177F /* hash.h */,
- 1ED0FD8B124BB9380029177F /* hypergraph.proto */,
1ED0FD8C124BB9380029177F /* Hypothesis.cpp */,
1ED0FD8D124BB9380029177F /* Hypothesis.h */,
1ED0FD8E124BB9380029177F /* HypothesisStack.cpp */,
@@ -556,58 +664,62 @@
1ED0FD95124BB9380029177F /* InputFileStream.h */,
1ED0FD96124BB9380029177F /* InputType.cpp */,
1ED0FD97124BB9380029177F /* InputType.h */,
+ 1ED0FDB9124BB9380029177F /* LMList.cpp */,
+ 1ED0FDBA124BB9380029177F /* LMList.h */,
+ 1ED0FDBB124BB9380029177F /* LVoc.cpp */,
+ 1ED0FDBC124BB9380029177F /* LVoc.h */,
1ED0FD98124BB9380029177F /* LanguageModel.cpp */,
1ED0FD99124BB9380029177F /* LanguageModel.h */,
1ED0FD9B124BB9380029177F /* LanguageModelFactory.cpp */,
1ED0FD9C124BB9380029177F /* LanguageModelFactory.h */,
+ 1ED0FD9F124BB9380029177F /* LanguageModelIRST.cpp */,
+ 1ED0FDA0124BB9380029177F /* LanguageModelIRST.h */,
1E5AAF1312B25C9E0071864D /* LanguageModelImplementation.cpp */,
1E5AAF1412B25C9E0071864D /* LanguageModelImplementation.h */,
1ED0FD9D124BB9380029177F /* LanguageModelInternal.cpp */,
1ED0FD9E124BB9380029177F /* LanguageModelInternal.h */,
- 1ED0FD9F124BB9380029177F /* LanguageModelIRST.cpp */,
- 1ED0FDA0124BB9380029177F /* LanguageModelIRST.h */,
1ED0FDA1124BB9380029177F /* LanguageModelJoint.cpp */,
1ED0FDA2124BB9380029177F /* LanguageModelJoint.h */,
1ED0FDA3124BB9380029177F /* LanguageModelKen.cpp */,
1ED0FDA4124BB9380029177F /* LanguageModelKen.h */,
1ED0FDA5124BB9380029177F /* LanguageModelMultiFactor.cpp */,
1ED0FDA6124BB9380029177F /* LanguageModelMultiFactor.h */,
+ 1E528B9813A12ACC00E9A67E /* LanguageModelORLM.cpp */,
1ED0FDA7124BB9380029177F /* LanguageModelParallelBackoff.cpp */,
1ED0FDA8124BB9380029177F /* LanguageModelParallelBackoff.h */,
1E2B861B12555F25000770D6 /* LanguageModelRandLM.cpp */,
1E2B861C12555F25000770D6 /* LanguageModelRandLM.h */,
1ED0FDAB124BB9380029177F /* LanguageModelRemote.cpp */,
1ED0FDAC124BB9380029177F /* LanguageModelRemote.h */,
+ 1ED0FDB1124BB9380029177F /* LanguageModelSRI.cpp */,
+ 1ED0FDB2124BB9380029177F /* LanguageModelSRI.h */,
1ED0FDAD124BB9380029177F /* LanguageModelSingleFactor.cpp */,
1ED0FDAE124BB9380029177F /* LanguageModelSingleFactor.h */,
1ED0FDAF124BB9380029177F /* LanguageModelSkip.cpp */,
1ED0FDB0124BB9380029177F /* LanguageModelSkip.h */,
- 1ED0FDB1124BB9380029177F /* LanguageModelSRI.cpp */,
- 1ED0FDB2124BB9380029177F /* LanguageModelSRI.h */,
1ED0FDB3124BB9380029177F /* LexicalReordering.cpp */,
1ED0FDB4124BB9380029177F /* LexicalReordering.h */,
1ED0FDB5124BB9380029177F /* LexicalReorderingState.cpp */,
1ED0FDB6124BB9380029177F /* LexicalReorderingState.h */,
1ED0FDB7124BB9380029177F /* LexicalReorderingTable.cpp */,
1ED0FDB8124BB9380029177F /* LexicalReorderingTable.h */,
- 1ED0FDB9124BB9380029177F /* LMList.cpp */,
- 1ED0FDBA124BB9380029177F /* LMList.h */,
- 1ED0FDBB124BB9380029177F /* LVoc.cpp */,
- 1ED0FDBC124BB9380029177F /* LVoc.h */,
1ED0FDC0124BB9380029177F /* Manager.cpp */,
1ED0FDC1124BB9380029177F /* Manager.h */,
1ED0FDC2124BB9380029177F /* NGramCollection.cpp */,
1ED0FDC3124BB9380029177F /* NGramCollection.h */,
1ED0FDC4124BB9380029177F /* NGramNode.cpp */,
1ED0FDC5124BB9380029177F /* NGramNode.h */,
+ 1EE58D9D133726C700D93158 /* NonTerminal.cpp */,
+ 1EE58D9E133726C700D93158 /* NonTerminal.h */,
1ED0FDC6124BB9380029177F /* ObjectPool.h */,
+ 1E2E1632132A892800ED4085 /* OutputCollector.h */,
+ 1ED0FDCB124BB9380029177F /* PCNTools.cpp */,
+ 1ED0FDCC124BB9380029177F /* PCNTools.h */,
+ 1ED0FDCD124BB9380029177F /* PDTAimp.h */,
1ED0FDC7124BB9380029177F /* Parameter.cpp */,
1ED0FDC8124BB9380029177F /* Parameter.h */,
1ED0FDC9124BB9380029177F /* PartialTranslOptColl.cpp */,
1ED0FDCA124BB9380029177F /* PartialTranslOptColl.h */,
- 1ED0FDCB124BB9380029177F /* PCNTools.cpp */,
- 1ED0FDCC124BB9380029177F /* PCNTools.h */,
- 1ED0FDCD124BB9380029177F /* PDTAimp.h */,
1ED0FDCE124BB9380029177F /* Phrase.cpp */,
1ED0FDCF124BB9380029177F /* Phrase.h */,
1ED0FDD0124BB9380029177F /* PhraseDictionary.cpp */,
@@ -631,11 +743,18 @@
1ED0FDE3124BB9380029177F /* PrefixTree.h */,
1ED0FDE4124BB9380029177F /* PrefixTreeMap.cpp */,
1ED0FDE5124BB9380029177F /* PrefixTreeMap.h */,
+ 1EBB262713A12DB500B51840 /* RandLMCache.h */,
+ 1EBB262813A12DB500B51840 /* RandLMFilter.h */,
1ED0FDE6124BB9380029177F /* ReorderingConstraint.cpp */,
1ED0FDE7124BB9380029177F /* ReorderingConstraint.h */,
1ED0FDE8124BB9380029177F /* ReorderingStack.cpp */,
1ED0FDE9124BB9380029177F /* ReorderingStack.h */,
- 1ED0FDEA124BB9380029177F /* rule.proto */,
+ 1E2E1633132A892800ED4085 /* RuleCube.cpp */,
+ 1E2E1634132A892800ED4085 /* RuleCube.h */,
+ 1E46B5A413BA5C7F0084F898 /* RuleCubeItem.cpp */,
+ 1E46B5A513BA5C7F0084F898 /* RuleCubeItem.h */,
+ 1E2E1635132A892800ED4085 /* RuleCubeQueue.cpp */,
+ 1E2E1636132A892800ED4085 /* RuleCubeQueue.h */,
1ED0FDEB124BB9380029177F /* ScoreComponentCollection.cpp */,
1ED0FDEC124BB9380029177F /* ScoreComponentCollection.h */,
1ED0FDED124BB9380029177F /* ScoreIndexManager.cpp */,
@@ -656,10 +775,13 @@
1ED0FDFC124BB9380029177F /* SquareMatrix.h */,
1ED0FDFD124BB9380029177F /* StaticData.cpp */,
1ED0FDFE124BB9380029177F /* StaticData.h */,
+ 1E528B9C13A12B2D00E9A67E /* SyntacticLanguageModel.cpp */,
1ED0FDFF124BB9380029177F /* TargetPhrase.cpp */,
1ED0FE00124BB9380029177F /* TargetPhrase.h */,
1ED0FE01124BB9380029177F /* TargetPhraseCollection.cpp */,
1ED0FE02124BB9380029177F /* TargetPhraseCollection.h */,
+ 1E2E1637132A892800ED4085 /* ThreadPool.cpp */,
+ 1E2E1638132A892800ED4085 /* ThreadPool.h */,
1ED0FE03124BB9380029177F /* Timer.cpp */,
1ED0FE04124BB9380029177F /* Timer.h */,
1ED0FE05124BB9380029177F /* TranslationOption.cpp */,
@@ -689,8 +811,6 @@
1ED0FE1D124BB9380029177F /* Util.h */,
1ED0FE1E124BB9380029177F /* Word.cpp */,
1ED0FE1F124BB9380029177F /* Word.h */,
- 1ED0FE20124BB9380029177F /* WordConsumed.cpp */,
- 1ED0FE21124BB9380029177F /* WordConsumed.h */,
1ED0FE22124BB9380029177F /* WordLattice.cpp */,
1ED0FE23124BB9380029177F /* WordLattice.h */,
1ED0FE24124BB9380029177F /* WordsBitmap.cpp */,
@@ -699,6 +819,17 @@
1ED0FE27124BB9380029177F /* WordsRange.h */,
1ED0FE28124BB9380029177F /* XmlOption.cpp */,
1ED0FE29124BB9380029177F /* XmlOption.h */,
+ 1ED0FD88124BB9380029177F /* gzfilebuf.h */,
+ 1ED0FD89124BB9380029177F /* hash.cpp */,
+ 1EBB262213A12DB500B51840 /* hash.h */,
+ 1ED0FD8A124BB9380029177F /* hash.h */,
+ 1ED0FD8B124BB9380029177F /* hypergraph.proto */,
+ 1EBB262313A12DB500B51840 /* onlineRLM.h */,
+ 1E528B9B13A12B2D00E9A67E /* params.cpp */,
+ 1EBB262413A12DB500B51840 /* params.h */,
+ 1EBB262513A12DB500B51840 /* perfectHash.h */,
+ 1EBB262613A12DB500B51840 /* quantizer.h */,
+ 1ED0FDEA124BB9380029177F /* rule.proto */,
);
name = Source;
sourceTree = "<group>";
@@ -726,14 +857,6 @@
path = src/DynSAInclude;
sourceTree = "<group>";
};
- 1ED4FC7C11BDC0D2004E826A /* DynSAInclude */ = {
- isa = PBXGroup;
- children = (
- );
- name = DynSAInclude;
- path = src/DynSAInclude;
- sourceTree = "<group>";
- };
C6A0FF2B0290797F04C91782 /* Documentation */ = {
isa = PBXGroup;
children = (
@@ -852,7 +975,6 @@
1ED0FEF4124BB9380029177F /* UserMessage.h in Headers */,
1ED0FEF6124BB9380029177F /* Util.h in Headers */,
1ED0FEF8124BB9380029177F /* Word.h in Headers */,
- 1ED0FEFA124BB9380029177F /* WordConsumed.h in Headers */,
1ED0FEFC124BB9380029177F /* WordLattice.h in Headers */,
1ED0FEFE124BB9380029177F /* WordsBitmap.h in Headers */,
1ED0FF00124BB9380029177F /* WordsRange.h in Headers */,
@@ -862,9 +984,34 @@
1E2B861E12555F25000770D6 /* LanguageModelRandLM.h in Headers */,
1EEB43EE1264A6F200739BA5 /* PhraseDictionarySCFG.h in Headers */,
1E5AAF1612B25C9E0071864D /* LanguageModelImplementation.h in Headers */,
- 1E1C589412F310A70067DEB7 /* ChartRuleLookupManager.h in Headers */,
1E1C589612F310A70067DEB7 /* ChartRuleLookupManagerMemory.h in Headers */,
1E1C589812F310A70067DEB7 /* ChartRuleLookupManagerOnDisk.h in Headers */,
+ 1E2E161B132A890D00ED4085 /* ChartCell.h in Headers */,
+ 1E2E161D132A890D00ED4085 /* ChartCellCollection.h in Headers */,
+ 1E2E161F132A890D00ED4085 /* ChartHypothesis.h in Headers */,
+ 1E2E1621132A890D00ED4085 /* ChartHypothesisCollection.h in Headers */,
+ 1E2E1623132A890D00ED4085 /* ChartManager.h in Headers */,
+ 1E2E1625132A890D00ED4085 /* ChartTranslationOptionCollection.h in Headers */,
+ 1E2E1627132A890D00ED4085 /* ChartTrellisNode.h in Headers */,
+ 1E2E1629132A890D00ED4085 /* ChartTrellisPath.h in Headers */,
+ 1E2E162B132A890D00ED4085 /* ChartTrellisPathCollection.h in Headers */,
+ 1E2E162D132A890D00ED4085 /* ChartTrellisPathList.h in Headers */,
+ 1E2E1639132A892800ED4085 /* OutputCollector.h in Headers */,
+ 1E2E163B132A892800ED4085 /* RuleCube.h in Headers */,
+ 1E2E163D132A892800ED4085 /* RuleCubeQueue.h in Headers */,
+ 1E2E163F132A892800ED4085 /* ThreadPool.h in Headers */,
+ 1EE58DA0133726C700D93158 /* NonTerminal.h in Headers */,
+ 1EBB262913A12DB500B51840 /* hash.h in Headers */,
+ 1EBB262A13A12DB500B51840 /* onlineRLM.h in Headers */,
+ 1EBB262B13A12DB500B51840 /* params.h in Headers */,
+ 1EBB262C13A12DB500B51840 /* perfectHash.h in Headers */,
+ 1EBB262D13A12DB500B51840 /* quantizer.h in Headers */,
+ 1EBB262E13A12DB500B51840 /* RandLMCache.h in Headers */,
+ 1EBB262F13A12DB500B51840 /* RandLMFilter.h in Headers */,
+ 1E07292013B3854D004454FD /* AlignmentInfoCollection.h in Headers */,
+ 1E46B5A713BA5C7F0084F898 /* RuleCubeItem.h in Headers */,
+ 1EA6AB4B13BCC838004465AF /* ChartRuleLookupManager.h in Headers */,
+ 1ED22EE613DD96B0000DE8C9 /* DotChartInMemory.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1010,7 +1157,6 @@
1ED0FEF3124BB9380029177F /* UserMessage.cpp in Sources */,
1ED0FEF5124BB9380029177F /* Util.cpp in Sources */,
1ED0FEF7124BB9380029177F /* Word.cpp in Sources */,
- 1ED0FEF9124BB9380029177F /* WordConsumed.cpp in Sources */,
1ED0FEFB124BB9380029177F /* WordLattice.cpp in Sources */,
1ED0FEFD124BB9380029177F /* WordsBitmap.cpp in Sources */,
1ED0FEFF124BB9380029177F /* WordsRange.cpp in Sources */,
@@ -1021,6 +1167,27 @@
1E5AAF1512B25C9E0071864D /* LanguageModelImplementation.cpp in Sources */,
1E1C589512F310A70067DEB7 /* ChartRuleLookupManagerMemory.cpp in Sources */,
1E1C589712F310A70067DEB7 /* ChartRuleLookupManagerOnDisk.cpp in Sources */,
+ 1E2E161A132A890D00ED4085 /* ChartCell.cpp in Sources */,
+ 1E2E161C132A890D00ED4085 /* ChartCellCollection.cpp in Sources */,
+ 1E2E161E132A890D00ED4085 /* ChartHypothesis.cpp in Sources */,
+ 1E2E1620132A890D00ED4085 /* ChartHypothesisCollection.cpp in Sources */,
+ 1E2E1622132A890D00ED4085 /* ChartManager.cpp in Sources */,
+ 1E2E1624132A890D00ED4085 /* ChartTranslationOptionCollection.cpp in Sources */,
+ 1E2E1626132A890D00ED4085 /* ChartTrellisNode.cpp in Sources */,
+ 1E2E1628132A890D00ED4085 /* ChartTrellisPath.cpp in Sources */,
+ 1E2E162A132A890D00ED4085 /* ChartTrellisPathCollection.cpp in Sources */,
+ 1E2E162C132A890D00ED4085 /* ChartTrellisPathList.cpp in Sources */,
+ 1E2E163A132A892800ED4085 /* RuleCube.cpp in Sources */,
+ 1E2E163C132A892800ED4085 /* RuleCubeQueue.cpp in Sources */,
+ 1E2E163E132A892800ED4085 /* ThreadPool.cpp in Sources */,
+ 1EE58D9F133726C700D93158 /* NonTerminal.cpp in Sources */,
+ 1E528B9913A12ACC00E9A67E /* LanguageModelORLM.cpp in Sources */,
+ 1E528B9D13A12B2D00E9A67E /* params.cpp in Sources */,
+ 1E528B9E13A12B2D00E9A67E /* SyntacticLanguageModel.cpp in Sources */,
+ 1E07291F13B3854D004454FD /* AlignmentInfoCollection.cpp in Sources */,
+ 1E46B5A613BA5C7F0084F898 /* RuleCubeItem.cpp in Sources */,
+ 1EA6AB4A13BCC838004465AF /* ChartRuleLookupManager.cpp in Sources */,
+ 1ED22EE513DD96B0000DE8C9 /* DotChartInMemory.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1036,6 +1203,26 @@
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_MODEL_TUNING = G5;
GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ TRACE_ENABLE,
+ LM_SRI,
+ LM_IRST,
+ LM_INTERNAL,
+ LM_KEN,
+ LM_IRST,
+ LM_RAND,
+ HAVE_CONFIG_H,
+ );
+ HEADER_SEARCH_PATHS = (
+ ../irstlm/include,
+ ../srilm/include,
+ ../kenlm,
+ ../randlm/include,
+ ../,
+ /usr/local/include,
+ ../synlm/hhmm/wsjparse/include,
+ ../synlm/hhmm/rvtl/include/,
+ );
INSTALL_PATH = /usr/local/lib;
PRODUCT_NAME = moses;
};
@@ -1047,6 +1234,26 @@
ALWAYS_SEARCH_USER_PATHS = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_MODEL_TUNING = G5;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ TRACE_ENABLE,
+ LM_SRI,
+ LM_IRST,
+ LM_INTERNAL,
+ LM_KEN,
+ LM_IRST,
+ LM_RAND,
+ HAVE_CONFIG_H,
+ );
+ HEADER_SEARCH_PATHS = (
+ ../irstlm/include,
+ ../srilm/include,
+ ../kenlm,
+ ../randlm/include,
+ ../,
+ /usr/local/include,
+ ../synlm/hhmm/wsjparse/include,
+ ../synlm/hhmm/rvtl/include/,
+ );
INSTALL_PATH = /usr/local/lib;
PRODUCT_NAME = moses;
};
diff --git a/moses/src/AlignmentInfo.cpp b/moses/src/AlignmentInfo.cpp
index abb9de331..4b5c5fbe4 100644
--- a/moses/src/AlignmentInfo.cpp
+++ b/moses/src/AlignmentInfo.cpp
@@ -1,27 +1,48 @@
-// $Id$
/***********************************************************************
- Moses - factored phrase-based language decoder
- Copyright (C) 2010 Hieu Hoang
-
+ Moses - statistical machine translation system
+ Copyright (C) 2006-2011 University of Edinburgh
+
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
-
+
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
-
+
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- ***********************************************************************/
+***********************************************************************/
+
#include "AlignmentInfo.h"
+#include "TypeDef.h"
+
namespace Moses
{
+void AlignmentInfo::BuildNonTermIndexMap()
+{
+ if (m_collection.empty()) {
+ return;
+ }
+ const_iterator p = begin();
+ size_t maxIndex = p->second;
+ for (++p; p != end(); ++p) {
+ if (p->second > maxIndex) {
+ maxIndex = p->second;
+ }
+ }
+ m_nonTermIndexMap.resize(maxIndex+1, NOT_FOUND);
+ size_t i = 0;
+ for (p = begin(); p != end(); ++p) {
+ m_nonTermIndexMap[p->second] = i++;
+ }
+}
+
std::ostream& operator<<(std::ostream &out, const AlignmentInfo &alignmentInfo)
{
AlignmentInfo::const_iterator iter;
@@ -31,11 +52,4 @@ std::ostream& operator<<(std::ostream &out, const AlignmentInfo &alignmentInfo)
return out;
}
-void AlignmentInfo::AddAlignment(const std::list<std::pair<size_t,size_t> > &alignmentPairs)
-{
- m_collection = alignmentPairs;
- m_collection.sort();
}
-
-}
-
diff --git a/moses/src/AlignmentInfo.h b/moses/src/AlignmentInfo.h
index b330bb491..ef439a59d 100644
--- a/moses/src/AlignmentInfo.h
+++ b/moses/src/AlignmentInfo.h
@@ -1,51 +1,77 @@
-// $Id$
/***********************************************************************
- Moses - factored phrase-based language decoder
- Copyright (C) 2010 Hieu Hoang
-
+ Moses - statistical machine translation system
+ Copyright (C) 2006-2011 University of Edinburgh
+
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
-
+
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
-
+
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- ***********************************************************************/
+***********************************************************************/
+
#pragma once
-#include <list>
#include <ostream>
+#include <set>
+#include <vector>
namespace Moses
{
-// Collection of alignment pairs, ordered by source index
+class AlignmentInfoCollection;
+
+// Collection of non-terminal alignment pairs, ordered by source index.
class AlignmentInfo
{
- friend std::ostream& operator<<(std::ostream&, const AlignmentInfo&);
+ typedef std::set<std::pair<size_t,size_t> > CollType;
-protected:
- typedef std::list<std::pair<size_t,size_t> > CollType;
- CollType m_collection;
+ friend std::ostream& operator<<(std::ostream &, const AlignmentInfo &);
+ friend struct AlignmentInfoOrderer;
+ friend class AlignmentInfoCollection;
-public:
- typedef CollType::iterator iterator;
+ public:
+ typedef std::vector<size_t> NonTermIndexMap;
typedef CollType::const_iterator const_iterator;
- const_iterator begin() const {
- return m_collection.begin();
+
+ const_iterator begin() const { return m_collection.begin(); }
+ const_iterator end() const { return m_collection.end(); }
+
+ // Provides a map from target-side to source-side non-terminal indices.
+ // The target-side index should be the rule symbol index (counting terminals).
+ // The index returned is the rule non-terminal index (ignoring terminals).
+ const NonTermIndexMap &GetNonTermIndexMap() const {
+ return m_nonTermIndexMap;
}
- const_iterator end() const {
- return m_collection.end();
+
+ private:
+ // AlignmentInfo objects should only be created by an AlignmentInfoCollection
+ explicit AlignmentInfo(const std::set<std::pair<size_t,size_t> > &pairs)
+ : m_collection(pairs)
+ {
+ BuildNonTermIndexMap();
}
- void AddAlignment(const std::list<std::pair<size_t,size_t> > &alignmentList);
+ void BuildNonTermIndexMap();
+
+ CollType m_collection;
+ NonTermIndexMap m_nonTermIndexMap;
};
+// Define an arbitrary strict weak ordering between AlignmentInfo objects
+// for use by AlignmentInfoCollection.
+struct AlignmentInfoOrderer
+{
+ bool operator()(const AlignmentInfo &a, const AlignmentInfo &b) const {
+ return a.m_collection < b.m_collection;
+ }
};
+}
diff --git a/moses/src/AlignmentInfoCollection.cpp b/moses/src/AlignmentInfoCollection.cpp
new file mode 100644
index 000000000..f871383c8
--- /dev/null
+++ b/moses/src/AlignmentInfoCollection.cpp
@@ -0,0 +1,46 @@
+/***********************************************************************
+ Moses - statistical machine translation system
+ Copyright (C) 2006-2011 University of Edinburgh
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+***********************************************************************/
+
+#include "AlignmentInfoCollection.h"
+
+namespace Moses
+{
+
+AlignmentInfoCollection AlignmentInfoCollection::s_instance;
+
+AlignmentInfoCollection::AlignmentInfoCollection()
+{
+ std::set<std::pair<size_t,size_t> > pairs;
+ m_emptyAlignmentInfo = Add(pairs);
+}
+
+const AlignmentInfo &AlignmentInfoCollection::GetEmptyAlignmentInfo() const
+{
+ return *m_emptyAlignmentInfo;
+}
+
+const AlignmentInfo *AlignmentInfoCollection::Add(
+ const std::set<std::pair<size_t,size_t> > &pairs)
+{
+ std::pair<AlignmentInfoSet::iterator, bool> ret =
+ m_collection.insert(AlignmentInfo(pairs));
+ return &(*ret.first);
+}
+
+}
diff --git a/moses/src/AlignmentInfoCollection.h b/moses/src/AlignmentInfoCollection.h
new file mode 100644
index 000000000..1a6f4549d
--- /dev/null
+++ b/moses/src/AlignmentInfoCollection.h
@@ -0,0 +1,55 @@
+/***********************************************************************
+ Moses - statistical machine translation system
+ Copyright (C) 2006-2011 University of Edinburgh
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+***********************************************************************/
+
+#pragma once
+
+#include "AlignmentInfo.h"
+
+#include <set>
+
+namespace Moses
+{
+
+// Singleton collection of all AlignmentInfo objects.
+class AlignmentInfoCollection
+{
+ public:
+ static AlignmentInfoCollection &Instance() { return s_instance; }
+
+ // Returns a pointer to an AlignmentInfo object with the same source-target
+ // alignment pairs as given in the argument. If the collection already
+ // contains such an object then returns a pointer to it; otherwise a new
+ // one is inserted.
+ const AlignmentInfo *Add(const std::set<std::pair<size_t,size_t> > &);
+
+ // Returns a pointer to an empty AlignmentInfo object.
+ const AlignmentInfo &GetEmptyAlignmentInfo() const;
+
+ private:
+ typedef std::set<AlignmentInfo, AlignmentInfoOrderer> AlignmentInfoSet;
+
+ // Only a single static variable should be created.
+ AlignmentInfoCollection();
+
+ static AlignmentInfoCollection s_instance;
+ AlignmentInfoSet m_collection;
+ const AlignmentInfo *m_emptyAlignmentInfo;
+};
+
+}
diff --git a/moses/src/BilingualDynSuffixArray.cpp b/moses/src/BilingualDynSuffixArray.cpp
index 9a44c7ab3..b1be289a9 100644
--- a/moses/src/BilingualDynSuffixArray.cpp
+++ b/moses/src/BilingualDynSuffixArray.cpp
@@ -7,529 +7,586 @@
using namespace std;
-namespace Moses
-{
+namespace Moses {
BilingualDynSuffixArray::BilingualDynSuffixArray():
- m_maxPhraseLength(StaticData::Instance().GetMaxPhraseLength()),
- m_maxSampleSize(500)
-{
- m_srcSA = 0;
- m_trgSA = 0;
- m_srcCorpus = new std::vector<wordID_t>();
- m_trgCorpus = new std::vector<wordID_t>();
- m_srcVocab = new Vocab(false);
- m_trgVocab = new Vocab(false);
- m_scoreCmp = 0;
+ m_maxPhraseLength(StaticData::Instance().GetMaxPhraseLength()),
+ m_maxSampleSize(20)
+{
+ m_srcSA = 0;
+ m_trgSA = 0;
+ m_srcCorpus = new std::vector<wordID_t>();
+ m_trgCorpus = new std::vector<wordID_t>();
+ m_srcVocab = new Vocab(false);
+ m_trgVocab = new Vocab(false);
+ m_scoreCmp = 0;
}
-BilingualDynSuffixArray::~BilingualDynSuffixArray()
+BilingualDynSuffixArray::~BilingualDynSuffixArray()
{
- if(m_srcSA) delete m_srcSA;
- if(m_trgSA) delete m_trgSA;
- if(m_srcVocab) delete m_srcVocab;
- if(m_trgVocab) delete m_trgVocab;
- if(m_srcCorpus) delete m_srcCorpus;
- if(m_trgCorpus) delete m_trgCorpus;
- if(m_scoreCmp) delete m_scoreCmp;
+ if(m_srcSA) delete m_srcSA;
+ if(m_trgSA) delete m_trgSA;
+ if(m_srcVocab) delete m_srcVocab;
+ if(m_trgVocab) delete m_trgVocab;
+ if(m_srcCorpus) delete m_srcCorpus;
+ if(m_trgCorpus) delete m_trgCorpus;
+ if(m_scoreCmp) delete m_scoreCmp;
}
bool BilingualDynSuffixArray::Load(
- const std::vector<FactorType>& inputFactors,
- const std::vector<FactorType>& outputFactors,
- std::string source, std::string target, std::string alignments,
- const std::vector<float> &weight)
+ const std::vector<FactorType>& inputFactors,
+ const std::vector<FactorType>& outputFactors,
+ std::string source, std::string target, std::string alignments,
+ const std::vector<float> &weight)
{
m_inputFactors = inputFactors;
m_outputFactors = outputFactors;
- m_scoreCmp = new ScoresComp(weight);
- InputFileStream sourceStrme(source);
- InputFileStream targetStrme(target);
- cerr << "Loading source corpus...\n";
- LoadCorpus(sourceStrme, m_inputFactors, Input, *m_srcCorpus, m_srcSntBreaks, m_srcVocab);
- cerr << "Loading target corpus...\n";
- LoadCorpus(targetStrme, m_outputFactors, Output, *m_trgCorpus, m_trgSntBreaks, m_trgVocab);
- assert(m_srcSntBreaks.size() == m_trgSntBreaks.size());
-
- // build suffix arrays and auxilliary arrays
- cerr << "Building Source Suffix Array...\n";
- m_srcSA = new DynSuffixArray(m_srcCorpus);
- if(!m_srcSA) return false;
- cerr << "Building Target Suffix Array...\n";
- m_trgSA = new DynSuffixArray(m_trgCorpus);
- if(!m_trgSA) return false;
-
- InputFileStream alignStrme(alignments);
- cerr << "Loading Alignment File...\n";
- LoadRawAlignments(alignStrme);
- //LoadAlignments(alignStrme);
- return true;
+ m_scoreCmp = new ScoresComp(weight);
+ InputFileStream sourceStrme(source);
+ InputFileStream targetStrme(target);
+ cerr << "Loading source corpus...\n";
+ LoadCorpus(sourceStrme, m_inputFactors, Input, *m_srcCorpus, m_srcSntBreaks, m_srcVocab);
+ cerr << "Loading target corpus...\n";
+ LoadCorpus(targetStrme, m_outputFactors, Output, *m_trgCorpus, m_trgSntBreaks, m_trgVocab);
+ assert(m_srcSntBreaks.size() == m_trgSntBreaks.size());
+
+ // build suffix arrays and auxilliary arrays
+ cerr << "Building Source Suffix Array...\n";
+ m_srcSA = new DynSuffixArray(m_srcCorpus);
+ if(!m_srcSA) return false;
+ cerr << "Building Target Suffix Array...\n";
+ //m_trgSA = new DynSuffixArray(m_trgCorpus);
+ //if(!m_trgSA) return false;
+ cerr << "\t(Skipped. Not used)\n";
+
+ InputFileStream alignStrme(alignments);
+ cerr << "Loading Alignment File...\n";
+ LoadRawAlignments(alignStrme);
+ //LoadAlignments(alignStrme);
+ cerr << "Building frequent word cache...\n";
+ CacheFreqWords();
+ return true;
}
-int BilingualDynSuffixArray::LoadRawAlignments(InputFileStream& align)
+int BilingualDynSuffixArray::LoadRawAlignments(InputFileStream& align)
{
- // stores the alignments in the raw file format
- std::string line;
- std::vector<int> vtmp;
- while(getline(align, line)) {
- Utils::splitToInt(line, vtmp, "- ");
- assert(vtmp.size() % 2 == 0);
- std::vector<short> vAlgn; // store as short ints for memory
- for (std::vector<int>::const_iterator itr = vtmp.begin();
- itr != vtmp.end(); ++itr) {
- vAlgn.push_back(short(*itr));
- }
- m_rawAlignments.push_back(vAlgn);
- }
- return m_rawAlignments.size();
+ // stores the alignments in the raw file format
+ std::string line;
+ std::vector<int> vtmp;
+ while(getline(align, line)) {
+ Utils::splitToInt(line, vtmp, "- ");
+ assert(vtmp.size() % 2 == 0);
+ std::vector<short> vAlgn; // store as short ints for memory
+ for (std::vector<int>::const_iterator itr = vtmp.begin();
+ itr != vtmp.end(); ++itr) {
+ vAlgn.push_back(short(*itr));
+ }
+ m_rawAlignments.push_back(vAlgn);
+ }
+ return m_rawAlignments.size();
}
-int BilingualDynSuffixArray::LoadRawAlignments(string& align)
-{
- // stores the alignments in the raw file format
+int BilingualDynSuffixArray::LoadRawAlignments(string& align) {
+ // stores the alignments in the raw file format
vector<int> vtmp;
Utils::splitToInt(align, vtmp, "- ");
assert(vtmp.size() % 2 == 0);
vector<short> vAlgn; // store as short ints for memory
for (std::vector<int>::const_iterator itr = vtmp.begin();
- itr != vtmp.end(); ++itr) {
- vAlgn.push_back(short(*itr));
+ itr != vtmp.end(); ++itr) {
+ vAlgn.push_back(short(*itr));
}
m_rawAlignments.push_back(vAlgn);
return m_rawAlignments.size();
}
-int BilingualDynSuffixArray::LoadAlignments(InputFileStream& align)
+int BilingualDynSuffixArray::LoadAlignments(InputFileStream& align)
{
- std::string line;
- std::vector<int> vtmp;
- int sntIndex(0);
-
- while(getline(align, line)) {
- Utils::splitToInt(line, vtmp, "- ");
- assert(vtmp.size() % 2 == 0);
-
- int sourceSize = GetSourceSentenceSize(sntIndex);
- int targetSize = GetTargetSentenceSize(sntIndex);
-
- SentenceAlignment curSnt(sntIndex, sourceSize, targetSize); // initialize empty sentence
- for(int i=0; i < (int)vtmp.size(); i+=2) {
- int sourcePos = vtmp[i];
- int targetPos = vtmp[i+1];
- assert(sourcePos < sourceSize);
- assert(targetPos < targetSize);
-
- curSnt.alignedList[sourcePos].push_back(targetPos); // list of target nodes for each source word
- curSnt.numberAligned[targetPos]++; // cnt of how many source words connect to this target word
- }
- curSnt.srcSnt = m_srcCorpus + sntIndex; // point source and target sentence
- curSnt.trgSnt = m_trgCorpus + sntIndex;
- m_alignments.push_back(curSnt);
-
- sntIndex++;
- }
- return m_alignments.size();
+ std::string line;
+ std::vector<int> vtmp;
+ int sntIndex(0);
+
+ while(getline(align, line)) {
+ Utils::splitToInt(line, vtmp, "- ");
+ assert(vtmp.size() % 2 == 0);
+
+ int sourceSize = GetSourceSentenceSize(sntIndex);
+ int targetSize = GetTargetSentenceSize(sntIndex);
+
+ SentenceAlignment curSnt(sntIndex, sourceSize, targetSize); // initialize empty sentence
+ for(int i=0; i < (int)vtmp.size(); i+=2) {
+ int sourcePos = vtmp[i];
+ int targetPos = vtmp[i+1];
+ assert(sourcePos < sourceSize);
+ assert(targetPos < targetSize);
+
+ curSnt.alignedList[sourcePos].push_back(targetPos); // list of target nodes for each source word
+ curSnt.numberAligned[targetPos]++; // cnt of how many source words connect to this target word
+ }
+ curSnt.srcSnt = m_srcCorpus + sntIndex; // point source and target sentence
+ curSnt.trgSnt = m_trgCorpus + sntIndex;
+ m_alignments.push_back(curSnt);
+
+ sntIndex++;
+ }
+ return m_alignments.size();
}
-SentenceAlignment BilingualDynSuffixArray::GetSentenceAlignment(const int sntIndex, bool trg2Src) const
+SentenceAlignment BilingualDynSuffixArray::GetSentenceAlignment(const int sntIndex, bool trg2Src) const
{
- // retrieves the alignments in the format used by SentenceAlignment.Extract()
- int sntGiven = trg2Src ? GetTargetSentenceSize(sntIndex) : GetSourceSentenceSize(sntIndex);
- int sntExtract = trg2Src ? GetSourceSentenceSize(sntIndex) : GetTargetSentenceSize(sntIndex);
- std::vector<short> alignment = m_rawAlignments.at(sntIndex);
- SentenceAlignment curSnt(sntIndex, sntGiven, sntExtract); // initialize empty sentence
- for(size_t i=0; i < alignment.size(); i+=2) {
- int sourcePos = alignment[i];
- int targetPos = alignment[i+1];
- if(trg2Src) {
- curSnt.alignedList[targetPos].push_back(sourcePos); // list of target nodes for each source word
- curSnt.numberAligned[sourcePos]++; // cnt of how many source words connect to this target word
- } else {
- curSnt.alignedList[sourcePos].push_back(targetPos); // list of target nodes for each source word
- curSnt.numberAligned[targetPos]++; // cnt of how many source words connect to this target word
- }
- }
- curSnt.srcSnt = m_srcCorpus + sntIndex; // point source and target sentence
- curSnt.trgSnt = m_trgCorpus + sntIndex;
-
- return curSnt;
+ // retrieves the alignments in the format used by SentenceAlignment.Extract()
+ int sntGiven = trg2Src ? GetTargetSentenceSize(sntIndex) : GetSourceSentenceSize(sntIndex);
+ int sntExtract = trg2Src ? GetSourceSentenceSize(sntIndex) : GetTargetSentenceSize(sntIndex);
+ std::vector<short> alignment = m_rawAlignments.at(sntIndex);
+ SentenceAlignment curSnt(sntIndex, sntGiven, sntExtract); // initialize empty sentence
+ for(size_t i=0; i < alignment.size(); i+=2) {
+ int sourcePos = alignment[i];
+ int targetPos = alignment[i+1];
+ if(trg2Src) {
+ curSnt.alignedList[targetPos].push_back(sourcePos); // list of target nodes for each source word
+ curSnt.numberAligned[sourcePos]++; // cnt of how many source words connect to this target word
+ }
+ else {
+ curSnt.alignedList[sourcePos].push_back(targetPos); // list of target nodes for each source word
+ curSnt.numberAligned[targetPos]++; // cnt of how many source words connect to this target word
+ }
+ }
+ curSnt.srcSnt = m_srcCorpus + sntIndex; // point source and target sentence
+ curSnt.trgSnt = m_trgCorpus + sntIndex;
+
+ return curSnt;
}
-bool BilingualDynSuffixArray::ExtractPhrases(const int& sntIndex, const int& wordIndex,
- const int& sourceSize, std::vector<PhrasePair*>& phrasePairs, bool trg2Src) const
+bool BilingualDynSuffixArray::ExtractPhrases(const int& sntIndex, const int& wordIndex,
+ const int& sourceSize, std::vector<PhrasePair*>& phrasePairs, bool trg2Src) const
{
- /* ExtractPhrases() can extract the matching phrases for both directions by using the trg2Src
- * parameter */
- SentenceAlignment curSnt = GetSentenceAlignment(sntIndex, trg2Src);
- // get span of phrase in source sentence
- int beginSentence = m_srcSntBreaks[sntIndex];
- int rightIdx = wordIndex - beginSentence
- ,leftIdx = rightIdx - sourceSize + 1;
- return curSnt.Extract(m_maxPhraseLength, phrasePairs, leftIdx, rightIdx); // extract all phrase Alignments in sentence
+ /* ExtractPhrases() can extract the matching phrases for both directions by using the trg2Src
+ * parameter */
+ SentenceAlignment curSnt = GetSentenceAlignment(sntIndex, trg2Src);
+ // get span of phrase in source sentence
+ int beginSentence = m_srcSntBreaks[sntIndex];
+ int rightIdx = wordIndex - beginSentence
+ ,leftIdx = rightIdx - sourceSize + 1;
+ return curSnt.Extract(m_maxPhraseLength, phrasePairs, leftIdx, rightIdx); // extract all phrase Alignments in sentence
}
-void BilingualDynSuffixArray::CleanUp()
+void BilingualDynSuffixArray::CleanUp()
{
- m_wordPairCache.clear();
+ //m_wordPairCache.clear();
}
int BilingualDynSuffixArray::LoadCorpus(InputFileStream& corpus, const FactorList& factors,
- const FactorDirection& direction, std::vector<wordID_t>& cArray, std::vector<wordID_t>& sntArray,
- Vocab* vocab)
+ const FactorDirection& direction, std::vector<wordID_t>& cArray, std::vector<wordID_t>& sntArray,
+ Vocab* vocab)
{
- std::string line, word;
- int sntIdx(0);
- corpus.seekg(0);
- const std::string& factorDelimiter = StaticData::Instance().GetFactorDelimiter();
- while(getline(corpus, line)) {
- sntArray.push_back(sntIdx);
- Phrase phrase(direction);
- // parse phrase
- phrase.CreateFromString( factors, line, factorDelimiter);
- // store words in vocabulary and corpus
- for( size_t i = 0; i < phrase.GetSize(); ++i) {
- cArray.push_back( vocab->GetWordID(phrase.GetWord(i)) );
- }
- sntIdx += phrase.GetSize();
- }
- //cArray.push_back(vocab->GetkOOVWordID); // signify end of corpus
+ std::string line, word;
+ int sntIdx(0);
+// corpus.seekg(0); Seems needless -> commented out to allow loading of gzipped corpora (gzfilebuf doesn't support seeking).
+ const std::string& factorDelimiter = StaticData::Instance().GetFactorDelimiter();
+ while(getline(corpus, line)) {
+ sntArray.push_back(sntIdx);
+ Phrase phrase(direction, ARRAY_SIZE_INCR);
+ // parse phrase
+ phrase.CreateFromString( factors, line, factorDelimiter);
+ // store words in vocabulary and corpus
+ for( size_t i = 0; i < phrase.GetSize(); ++i) {
+ cArray.push_back( vocab->GetWordID(phrase.GetWord(i)) );
+ }
+ sntIdx += phrase.GetSize();
+ }
+ //cArray.push_back(vocab->GetkOOVWordID); // signify end of corpus
vocab->MakeClosed(); // avoid adding words
- return cArray.size();
+ return cArray.size();
}
-bool BilingualDynSuffixArray::GetLocalVocabIDs(const Phrase& src, SAPhrase &output) const
+bool BilingualDynSuffixArray::GetLocalVocabIDs(const Phrase& src, SAPhrase &output) const
{
- // looks up the SA vocab ids for the current src phrase
- size_t phraseSize = src.GetSize();
- for (size_t pos = 0; pos < phraseSize; ++pos) {
- const Word &word = src.GetWord(pos);
- wordID_t arrayId = m_srcVocab->GetWordID(word);
- if (arrayId == m_srcVocab->GetkOOVWordID()) {
- // oov
- return false;
- } else {
- output.SetId(pos, arrayId);
- //cerr << arrayId << " ";
- }
- }
- return true;
+ // looks up the SA vocab ids for the current src phrase
+ size_t phraseSize = src.GetSize();
+ for (size_t pos = 0; pos < phraseSize; ++pos) {
+ const Word &word = src.GetWord(pos);
+ wordID_t arrayId = m_srcVocab->GetWordID(word);
+ if (arrayId == m_srcVocab->GetkOOVWordID())
+ { // oov
+ return false;
+ }
+ else
+ {
+ output.SetId(pos, arrayId);
+ //cerr << arrayId << " ";
+ }
+ }
+ return true;
}
-pair<float, float> BilingualDynSuffixArray::GetLexicalWeight(const PhrasePair& phrasepair) const
+pair<float, float> BilingualDynSuffixArray::GetLexicalWeight(const PhrasePair& phrasepair) const
{
- float srcLexWeight(1.0), trgLexWeight(1.0);
- std::map<pair<wordID_t, wordID_t>, float> targetProbs; // collect sum of target probs given source words
- //const SentenceAlignment& alignment = m_alignments[phrasepair.m_sntIndex];
- const SentenceAlignment& alignment = GetSentenceAlignment(phrasepair.m_sntIndex);
- std::map<pair<wordID_t, wordID_t>, pair<float, float> >::const_iterator itrCache;
- // for each source word
- for(int srcIdx = phrasepair.m_startSource; srcIdx <= phrasepair.m_endSource; ++srcIdx) {
- float srcSumPairProbs(0);
- wordID_t srcWord = m_srcCorpus->at(srcIdx + m_srcSntBreaks[phrasepair.m_sntIndex]); // localIDs
- const std::vector<int>& srcWordAlignments = alignment.alignedList.at(srcIdx);
- if(srcWordAlignments.size() == 0) { // get p(NULL|src)
- pair<wordID_t, wordID_t> wordpair = std::make_pair(srcWord, m_srcVocab->GetkOOVWordID());
- itrCache = m_wordPairCache.find(wordpair);
- if(itrCache == m_wordPairCache.end()) { // if not in cache
- CacheWordProbs(srcWord);
- itrCache = m_wordPairCache.find(wordpair); // search cache again
- }
- assert(itrCache != m_wordPairCache.end());
- srcSumPairProbs += itrCache->second.first;
- targetProbs[wordpair] = itrCache->second.second;
- } else { // extract p(trg|src)
- for(size_t i = 0; i < srcWordAlignments.size(); ++i) { // for each aligned word
- int trgIdx = srcWordAlignments[i];
- wordID_t trgWord = m_trgCorpus->at(trgIdx + m_trgSntBreaks[phrasepair.m_sntIndex]);
- // get probability of this source->target word pair
- pair<wordID_t, wordID_t> wordpair = std::make_pair(srcWord, trgWord);
- itrCache = m_wordPairCache.find(wordpair);
- if(itrCache == m_wordPairCache.end()) { // if not in cache
+ //return pair<float, float>(1, 1);
+ float srcLexWeight(1.0), trgLexWeight(1.0);
+ std::map<pair<wordID_t, wordID_t>, float> targetProbs; // collect sum of target probs given source words
+ //const SentenceAlignment& alignment = m_alignments[phrasepair.m_sntIndex];
+ const SentenceAlignment& alignment = GetSentenceAlignment(phrasepair.m_sntIndex);
+ std::map<pair<wordID_t, wordID_t>, pair<float, float> >::const_iterator itrCache;
+ // for each source word
+ for(int srcIdx = phrasepair.m_startSource; srcIdx <= phrasepair.m_endSource; ++srcIdx) {
+ float srcSumPairProbs(0);
+ wordID_t srcWord = m_srcCorpus->at(srcIdx + m_srcSntBreaks[phrasepair.m_sntIndex]); // localIDs
+ const std::vector<int>& srcWordAlignments = alignment.alignedList.at(srcIdx);
+ // for each target word aligned to this source word in this alignment
+ if(srcWordAlignments.size() == 0) { // get p(NULL|src)
+ pair<wordID_t, wordID_t> wordpair = make_pair(srcWord, m_srcVocab->GetkOOVWordID());
+ itrCache = m_wordPairCache.find(wordpair);
+ if(itrCache == m_wordPairCache.end()) { // if not in cache
+ CacheWordProbs(srcWord);
+ itrCache = m_wordPairCache.find(wordpair); // search cache again
+ }
+ assert(itrCache != m_wordPairCache.end());
+ srcSumPairProbs += itrCache->second.first;
+ targetProbs[wordpair] = itrCache->second.second;
+ }
+ else { // extract p(trg|src)
+ for(size_t i = 0; i < srcWordAlignments.size(); ++i) { // for each aligned word
+ int trgIdx = srcWordAlignments[i];
+ wordID_t trgWord = m_trgCorpus->at(trgIdx + m_trgSntBreaks[phrasepair.m_sntIndex]);
+ // get probability of this source->target word pair
+ pair<wordID_t, wordID_t> wordpair = make_pair(srcWord, trgWord);
+ itrCache = m_wordPairCache.find(wordpair);
+ if(itrCache == m_wordPairCache.end()) { // if not in cache
CacheWordProbs(srcWord);
- itrCache = m_wordPairCache.find(wordpair); // search cache again
+ itrCache = m_wordPairCache.find(wordpair); // search cache again
+ }
+ assert(itrCache != m_wordPairCache.end());
+ srcSumPairProbs += itrCache->second.first;
+ targetProbs[wordpair] = itrCache->second.second;
+ }
+ }
+ float srcNormalizer = srcWordAlignments.size() < 2 ? 1.0 : 1.0 / float(srcWordAlignments.size());
+ srcLexWeight *= (srcNormalizer * srcSumPairProbs);
+ } // end for each source word
+ for(int trgIdx = phrasepair.m_startTarget; trgIdx <= phrasepair.m_endTarget; ++trgIdx) {
+ float trgSumPairProbs(0);
+ wordID_t trgWord = m_trgCorpus->at(trgIdx + m_trgSntBreaks[phrasepair.m_sntIndex]);
+ for (std::map<pair<wordID_t, wordID_t>, float>::const_iterator trgItr
+ = targetProbs.begin(); trgItr != targetProbs.end(); ++trgItr) {
+ if(trgItr->first.second == trgWord)
+ trgSumPairProbs += trgItr->second;
}
- assert(itrCache != m_wordPairCache.end());
- srcSumPairProbs += itrCache->second.first;
- targetProbs[wordpair] = itrCache->second.second;
- }
- }
- float srcNormalizer = srcWordAlignments.size() < 2 ? 1.0 : 1.0 / float(srcWordAlignments.size());
- srcLexWeight *= (srcNormalizer * srcSumPairProbs);
- } // end for each source word
- for(int trgIdx = phrasepair.m_startTarget; trgIdx <= phrasepair.m_endTarget; ++trgIdx) {
- float trgSumPairProbs(0);
- wordID_t trgWord = m_trgCorpus->at(trgIdx + m_trgSntBreaks[phrasepair.m_sntIndex]);
- for (std::map<pair<wordID_t, wordID_t>, float>::const_iterator trgItr
- = targetProbs.begin(); trgItr != targetProbs.end(); ++trgItr) {
- if(trgItr->first.second == trgWord)
- trgSumPairProbs += trgItr->second;
- }
- if(trgSumPairProbs == 0) continue; // currently don't store target-side SA
- int noAligned = alignment.numberAligned.at(trgIdx);
- float trgNormalizer = noAligned < 2 ? 1.0 : 1.0 / float(noAligned);
- trgLexWeight *= (trgNormalizer * trgSumPairProbs);
- }
- // TODO::Need to get p(NULL|trg)
- return pair<float, float>(srcLexWeight, trgLexWeight);
+ if(trgSumPairProbs == 0) continue; // currently don't store target-side SA
+ int noAligned = alignment.numberAligned.at(trgIdx);
+ float trgNormalizer = noAligned < 2 ? 1.0 : 1.0 / float(noAligned);
+ trgLexWeight *= (trgNormalizer * trgSumPairProbs);
+ }
+ // TODO::Need to get p(NULL|trg)
+ return pair<float, float>(srcLexWeight, trgLexWeight);
}
-
-void BilingualDynSuffixArray::CacheWordProbs(wordID_t srcWord) const
-{
- std::map<wordID_t, int> counts;
- std::vector<wordID_t> vword(1, srcWord), wrdIndices;
- bool ret = m_srcSA->GetCorpusIndex(&vword, &wrdIndices);
- assert(ret);
- std::vector<int> sntIndexes = GetSntIndexes(wrdIndices, 1);
- float denom(0);
- // for each occurrence of this word
- for(size_t snt = 0; snt < sntIndexes.size(); ++snt) {
- int sntIdx = sntIndexes.at(snt); // get corpus index for sentence
- assert(sntIdx != -1);
- int srcWrdSntIdx = wrdIndices.at(snt) - m_srcSntBreaks.at(sntIdx); // get word index in sentence
- const std::vector<int> srcAlg = GetSentenceAlignment(sntIdx).alignedList.at(srcWrdSntIdx); // list of target words for this source word
- //const std::vector<int>& srcAlg = m_alignments.at(sntIdx).alignedList.at(srcWrdSntIdx); // list of target words for this source word
- if(srcAlg.size() == 0) {
- ++counts[m_srcVocab->GetkOOVWordID()]; // if not alligned then align to NULL word
- ++denom;
- } else { //get target words aligned to srcword in this sentence
- for(size_t i=0; i < srcAlg.size(); ++i) {
- wordID_t trgWord = m_trgCorpus->at(srcAlg[i] + m_trgSntBreaks[sntIdx]);
- ++counts[trgWord];
- ++denom;
- }
+void BilingualDynSuffixArray::CacheFreqWords() const {
+ std::multimap<int, wordID_t> wordCnts;
+ // for each source word in vocab
+ Vocab::Word2Id::const_iterator it;
+ for(it = m_srcVocab->VocabStart(); it != m_srcVocab->VocabEnd(); ++it) {
+ // get its frequency
+ wordID_t srcWord = it->second;
+ std::vector<wordID_t> sword(1, srcWord), wrdIndices;
+ m_srcSA->GetCorpusIndex(&sword, &wrdIndices);
+ if(wrdIndices.size() >= 1000) { // min count
+ wordCnts.insert(make_pair(wrdIndices.size(), srcWord));
}
}
- // now we've gotten counts of all target words aligned to this source word
- // get probs and cache all pairs
- for(std::map<wordID_t, int>::const_iterator itrCnt = counts.begin();
- itrCnt != counts.end(); ++itrCnt) {
- pair<wordID_t, wordID_t> wordPair = std::make_pair(srcWord, itrCnt->first);
- float srcTrgPrb = float(itrCnt->second) / float(denom); // gives p(src->trg)
- float trgSrcPrb = float(itrCnt->second) / float(counts.size()); // gives p(trg->src)
- m_wordPairCache[wordPair] = pair<float, float>(srcTrgPrb, trgSrcPrb);
+ int numSoFar(0);
+ std::multimap<int, wordID_t>::reverse_iterator ritr;
+ for(ritr = wordCnts.rbegin(); ritr != wordCnts.rend(); ++ritr) {
+ m_freqWordsCached.insert(ritr->second);
+ CacheWordProbs(ritr->second);
+ if(++numSoFar == 50) break; // get top counts
}
+ cerr << "\tCached " << m_freqWordsCached.size() << " source words\n";
}
-
-SAPhrase BilingualDynSuffixArray::TrgPhraseFromSntIdx(const PhrasePair& phrasepair) const
+void BilingualDynSuffixArray::CacheWordProbs(wordID_t srcWord) const
{
- // takes sentence indexes and looks up vocab IDs
- SAPhrase phraseIds(phrasepair.GetTargetSize());
- int sntIndex = phrasepair.m_sntIndex;
- int id(-1), pos(0);
- for(int i=phrasepair.m_startTarget; i <= phrasepair.m_endTarget; ++i) { // look up trg words
- id = m_trgCorpus->at(m_trgSntBreaks[sntIndex] + i);
- phraseIds.SetId(pos++, id);
- }
- return phraseIds;
+ std::map<wordID_t, int> counts;
+ std::vector<wordID_t> sword(1, srcWord), wrdIndices;
+ bool ret = m_srcSA->GetCorpusIndex(&sword, &wrdIndices);
+ assert(ret);
+ std::vector<int> sntIndexes = GetSntIndexes(wrdIndices, 1, m_srcSntBreaks);
+ float denom(0);
+ // for each occurrence of this word
+ for(size_t snt = 0; snt < sntIndexes.size(); ++snt) {
+ int sntIdx = sntIndexes.at(snt); // get corpus index for sentence
+ assert(sntIdx != -1);
+ int srcWrdSntIdx = wrdIndices.at(snt) - m_srcSntBreaks.at(sntIdx); // get word index in sentence
+ const std::vector<int> srcAlg = GetSentenceAlignment(sntIdx).alignedList.at(srcWrdSntIdx); // list of target words for this source word
+ if(srcAlg.size() == 0) {
+ ++counts[m_srcVocab->GetkOOVWordID()]; // if not alligned then align to NULL word
+ ++denom;
+ }
+ else { //get target words aligned to srcword in this sentence
+ for(size_t i=0; i < srcAlg.size(); ++i) {
+ wordID_t trgWord = m_trgCorpus->at(srcAlg[i] + m_trgSntBreaks[sntIdx]);
+ ++counts[trgWord];
+ ++denom;
+ }
+ }
+ }
+ // now we've gotten counts of all target words aligned to this source word
+ // get probs and cache all pairs
+ for(std::map<wordID_t, int>::const_iterator itrCnt = counts.begin();
+ itrCnt != counts.end(); ++itrCnt) {
+ pair<wordID_t, wordID_t> wordPair = make_pair(srcWord, itrCnt->first);
+ float srcTrgPrb = float(itrCnt->second) / float(denom); // gives p(src->trg)
+ float trgSrcPrb = float(itrCnt->second) / float(counts.size()); // gives p(trg->src)
+ m_wordPairCache[wordPair] = pair<float, float>(srcTrgPrb, trgSrcPrb);
+ }
}
-TargetPhrase* BilingualDynSuffixArray::GetMosesFactorIDs(const SAPhrase& phrase) const
+SAPhrase BilingualDynSuffixArray::TrgPhraseFromSntIdx(const PhrasePair& phrasepair) const
{
- TargetPhrase* targetPhrase = new TargetPhrase(Output);
- for(size_t i=0; i < phrase.words.size(); ++i) { // look up trg words
- Word& word = m_trgVocab->GetWord( phrase.words[i]);
- assert(word != m_trgVocab->GetkOOVWord());
- targetPhrase->AddWord(word);
- }
- // scoring
- return targetPhrase;
+ // takes sentence indexes and looks up vocab IDs
+ SAPhrase phraseIds(phrasepair.GetTargetSize());
+ int sntIndex = phrasepair.m_sntIndex;
+ int id(-1), pos(0);
+ for(int i=phrasepair.m_startTarget; i <= phrasepair.m_endTarget; ++i) { // look up trg words
+ id = m_trgCorpus->at(m_trgSntBreaks[sntIndex] + i);
+ phraseIds.SetId(pos++, id);
+ }
+ return phraseIds;
}
-
-void BilingualDynSuffixArray::GetTargetPhrasesByLexicalWeight(const Phrase& src, std::vector< std::pair<Scores, TargetPhrase*> > & target) const
+
+TargetPhrase* BilingualDynSuffixArray::GetMosesFactorIDs(const SAPhrase& phrase) const
{
- size_t sourceSize = src.GetSize();
- SAPhrase localIDs(sourceSize);
- if(!GetLocalVocabIDs(src, localIDs)) return;
- float totalTrgPhrases(0);
- std::map<SAPhrase, int> phraseCounts;
- std::map<SAPhrase, pair<float, float> > lexicalWeights;
- std::map<SAPhrase, pair<float, float> >::iterator itrLexW;
- std::vector<unsigned> wrdIndices(0);
- // extract sentence IDs from SA and return rightmost index of phrases
- if(!m_srcSA->GetCorpusIndex(&(localIDs.words), &wrdIndices)) return;
- if(wrdIndices.size() > m_maxSampleSize)
- wrdIndices = SampleSelection(wrdIndices);
- std::vector<int> sntIndexes = GetSntIndexes(wrdIndices, sourceSize);
- // for each sentence with this phrase
- for(size_t snt = 0; snt < sntIndexes.size(); ++snt) {
- std::vector<PhrasePair*> phrasePairs; // to store all phrases possible from current sentence
- int sntIndex = sntIndexes.at(snt); // get corpus index for sentence
- if(sntIndex == -1) continue; // bad flag set by GetSntIndexes()
- ExtractPhrases(sntIndex, wrdIndices[snt], sourceSize, phrasePairs);
- //cerr << "extracted " << phrasePairs.size() << endl;
- totalTrgPhrases += phrasePairs.size(); // keep track of count of each extracted phrase pair
- std::vector<PhrasePair*>::iterator iterPhrasePair;
- for (iterPhrasePair = phrasePairs.begin(); iterPhrasePair != phrasePairs.end(); ++iterPhrasePair) {
- SAPhrase phrase = TrgPhraseFromSntIdx(**iterPhrasePair);
- phraseCounts[phrase]++; // count each unique phrase
- pair<float, float> lexWeight = GetLexicalWeight(**iterPhrasePair); // get lexical weighting for this phrase pair
- itrLexW = lexicalWeights.find(phrase); // check if phrase already has lexical weight attached
- if((itrLexW != lexicalWeights.end()) && (itrLexW->second.first < lexWeight.first))
- itrLexW->second = lexWeight; // if this lex weight is greater save it
- else lexicalWeights[phrase] = lexWeight; // else save
- }
- // done with sentence. delete SA phrase pairs
- RemoveAllInColl(phrasePairs);
- } // done with all sentences
- // convert to moses phrase pairs
- const size_t maxReturn = 20;
- std::map<SAPhrase, int>::const_iterator iterPhrases;
- std::multimap<Scores, const SAPhrase*, ScoresComp> phraseScores (*m_scoreCmp);
- // get scores of all phrases
- for(iterPhrases = phraseCounts.begin(); iterPhrases != phraseCounts.end(); ++iterPhrases) {
- float trg2SrcMLE = float(iterPhrases->second) / totalTrgPhrases;
- itrLexW = lexicalWeights.find(iterPhrases->first);
- assert(itrLexW != lexicalWeights.end());
- Scores scoreVector(3);
- scoreVector[0] = trg2SrcMLE;
- scoreVector[1] = itrLexW->second.first;
- scoreVector[2] = 2.718; // exp(1);
- phraseScores.insert(pair<Scores, const SAPhrase*>(scoreVector, &iterPhrases->first));
- }
- // return top scoring phrases
- std::multimap<Scores, const SAPhrase*, ScoresComp>::reverse_iterator ritr;
- for(ritr = phraseScores.rbegin(); ritr != phraseScores.rend(); ++ritr) {
- Scores scoreVector = ritr->first;
- TargetPhrase *targetPhrase = GetMosesFactorIDs(*ritr->second);
- //cerr << *targetPhrase << endl;
- target.push_back( make_pair( scoreVector, targetPhrase));
-
- if(target.size() == maxReturn) break;
- }
- return;
+ TargetPhrase* targetPhrase = new TargetPhrase(Output);
+ for(size_t i=0; i < phrase.words.size(); ++i) { // look up trg words
+ Word& word = m_trgVocab->GetWord( phrase.words[i]);
+ assert(word != m_trgVocab->GetkOOVWord());
+ targetPhrase->AddWord(word);
+ }
+ // scoring
+ return targetPhrase;
}
-std::vector<int> BilingualDynSuffixArray::GetSntIndexes(std::vector<unsigned>& wrdIndices,
- const int sourceSize) const
+void BilingualDynSuffixArray::GetTargetPhrasesByLexicalWeight(const Phrase& src, std::vector< std::pair<Scores, TargetPhrase*> > & target) const
{
- std::vector<unsigned>::const_iterator vit;
- std::vector<int> sntIndexes;
- for(size_t i=0; i < wrdIndices.size(); ++i) {
- vit = std::upper_bound(m_srcSntBreaks.begin(), m_srcSntBreaks.end(), wrdIndices[i]);
- int index = int(vit - m_srcSntBreaks.begin()) - 1;
- // check for phrases that cross sentence boundaries
- if(wrdIndices[i] - sourceSize + 1 < m_srcSntBreaks.at(index))
- sntIndexes.push_back(-1); // set bad flag
- else
- sntIndexes.push_back(index); // store the index of the sentence in the corpus
- }
- return sntIndexes;
+ //cerr << "phrase is \"" << src << endl;
+ size_t sourceSize = src.GetSize();
+ SAPhrase localIDs(sourceSize);
+ if(!GetLocalVocabIDs(src, localIDs)) return;
+ float totalTrgPhrases(0);
+ std::map<SAPhrase, int> phraseCounts;
+ //std::map<SAPhrase, PhrasePair> phraseColl; // (one of) the word indexes this phrase was taken from
+ std::map<SAPhrase, pair<float, float> > lexicalWeights;
+ std::map<SAPhrase, pair<float, float> >::iterator itrLexW;
+ std::vector<unsigned> wrdIndices;
+ // extract sentence IDs from SA and return rightmost index of phrases
+ if(!m_srcSA->GetCorpusIndex(&(localIDs.words), &wrdIndices)) return;
+ SampleSelection(wrdIndices);
+ std::vector<int> sntIndexes = GetSntIndexes(wrdIndices, sourceSize, m_srcSntBreaks);
+ // for each sentence with this phrase
+ for(size_t snt = 0; snt < sntIndexes.size(); ++snt) {
+ std::vector<PhrasePair*> phrasePairs; // to store all phrases possible from current sentence
+ int sntIndex = sntIndexes.at(snt); // get corpus index for sentence
+ if(sntIndex == -1) continue; // bad flag set by GetSntIndexes()
+ ExtractPhrases(sntIndex, wrdIndices[snt], sourceSize, phrasePairs);
+ //cerr << "extracted " << phrasePairs.size() << endl;
+ totalTrgPhrases += phrasePairs.size(); // keep track of count of each extracted phrase pair
+ std::vector<PhrasePair*>::iterator iterPhrasePair;
+ for (iterPhrasePair = phrasePairs.begin(); iterPhrasePair != phrasePairs.end(); ++iterPhrasePair) {
+ SAPhrase phrase = TrgPhraseFromSntIdx(**iterPhrasePair);
+ phraseCounts[phrase]++; // count each unique phrase
+ // NOTE::Correct but slow to extract lexical weight here. could do
+ // it later for only the top phrases chosen by phrase prob p(e|f)
+ pair<float, float> lexWeight = GetLexicalWeight(**iterPhrasePair); // get lexical weighting for this phrase pair
+ itrLexW = lexicalWeights.find(phrase); // check if phrase already has lexical weight attached
+ if((itrLexW != lexicalWeights.end()) && (itrLexW->second.first < lexWeight.first))
+ itrLexW->second = lexWeight; // if this lex weight is greater save it
+ else lexicalWeights[phrase] = lexWeight; // else save
+ }
+ // done with sentence. delete SA phrase pairs
+ RemoveAllInColl(phrasePairs);
+ } // done with all sentences
+ // convert to moses phrase pairs
+ std::map<SAPhrase, int>::const_iterator iterPhrases;
+ std::multimap<Scores, const SAPhrase*, ScoresComp> phraseScores (*m_scoreCmp);
+ // get scores of all phrases
+ for(iterPhrases = phraseCounts.begin(); iterPhrases != phraseCounts.end(); ++iterPhrases) {
+ float trg2SrcMLE = float(iterPhrases->second) / totalTrgPhrases;
+ itrLexW = lexicalWeights.find(iterPhrases->first);
+ assert(itrLexW != lexicalWeights.end());
+ Scores scoreVector(3);
+ scoreVector[0] = trg2SrcMLE;
+ scoreVector[1] = itrLexW->second.first;
+ scoreVector[2] = 2.718; // exp(1);
+ phraseScores.insert(make_pair(scoreVector, &iterPhrases->first));
+ }
+ // return top scoring phrases
+ std::multimap<Scores, const SAPhrase*, ScoresComp>::reverse_iterator ritr;
+ for(ritr = phraseScores.rbegin(); ritr != phraseScores.rend(); ++ritr) {
+ Scores scoreVector = ritr->first;
+ TargetPhrase *targetPhrase = GetMosesFactorIDs(*ritr->second);
+ target.push_back(make_pair( scoreVector, targetPhrase));
+ if(target.size() == m_maxSampleSize) break;
+ }
}
-std::vector<unsigned> BilingualDynSuffixArray::SampleSelection(std::vector<unsigned> sample) const
+std::vector<int> BilingualDynSuffixArray::GetSntIndexes(std::vector<unsigned>& wrdIndices,
+ const int sourceSize, const std::vector<unsigned>& sntBreaks) const
{
- int size = sample.size();
- //if(size < m_maxSampleSize) return sample;
- std::vector<unsigned> subSample;
- int jump = size / m_maxSampleSize;
- for(int i=0; i < size; i+=jump)
- subSample.push_back(sample.at(i));
- return subSample;
+ std::vector<unsigned>::const_iterator vit;
+ std::vector<int> sntIndexes;
+ for(size_t i=0; i < wrdIndices.size(); ++i) {
+ vit = std::upper_bound(sntBreaks.begin(), sntBreaks.end(), wrdIndices[i]);
+ int index = int(vit - sntBreaks.begin()) - 1;
+ // check for phrases that cross sentence boundaries
+ if(wrdIndices[i] - sourceSize + 1 < sntBreaks.at(index))
+ sntIndexes.push_back(-1); // set bad flag
+ else
+ sntIndexes.push_back(index); // store the index of the sentence in the corpus
+ }
+ return sntIndexes;
}
-void BilingualDynSuffixArray::addSntPair(string& source, string& target, string& alignment)
+int BilingualDynSuffixArray::SampleSelection(std::vector<unsigned>& sample,
+ int sampleSize) const
{
+ // only use top 'sampleSize' number of samples
+ if(sample.size() > sampleSize)
+ sample.erase(sample.begin()+sampleSize, sample.end());
+ return sample.size();
+}
+
+void BilingualDynSuffixArray::addSntPair(string& source, string& target, string& alignment) {
vuint_t srcFactor, trgFactor;
cerr << "source, target, alignment = " << source << ", " << target << ", " << alignment << endl;
- const std::string& factorDelimiter = StaticData::Instance().GetFactorDelimiter();
+ const std::string& factorDelimiter = StaticData::Instance().GetFactorDelimiter();
const unsigned oldSrcCrpSize = m_srcCorpus->size(), oldTrgCrpSize = m_trgCorpus->size();
cerr << "old source corpus size = " << oldSrcCrpSize << "\told target size = " << oldTrgCrpSize << endl;
- Phrase sphrase(Input);
+ Phrase sphrase(Input, ARRAY_SIZE_INCR);
sphrase.CreateFromString(m_inputFactors, source, factorDelimiter);
m_srcVocab->MakeOpen();
+ wordID_t sIDs[sphrase.GetSize()];
// store words in vocabulary and corpus
+ for(int i = sphrase.GetSize()-1; i >= 0; --i) {
+ sIDs[i] = m_srcVocab->GetWordID(sphrase.GetWord(i)); // get vocab id backwards
+ }
for(size_t i = 0; i < sphrase.GetSize(); ++i) {
- srcFactor.push_back(m_srcVocab->GetWordID(sphrase.GetWord(i))); // get vocab id
+ srcFactor.push_back(sIDs[i]);
cerr << "srcFactor[" << (srcFactor.size() - 1) << "] = " << srcFactor.back() << endl;
m_srcCorpus->push_back(srcFactor.back()); // add word to corpus
}
- m_srcSntBreaks.push_back(oldSrcCrpSize); // former end of corpus is index of new sentence
+ m_srcSntBreaks.push_back(oldSrcCrpSize); // former end of corpus is index of new sentence
m_srcVocab->MakeClosed();
- Phrase tphrase(Output);
+ Phrase tphrase(Output, ARRAY_SIZE_INCR);
tphrase.CreateFromString(m_outputFactors, target, factorDelimiter);
m_trgVocab->MakeOpen();
+ wordID_t tIDs[tphrase.GetSize()];
+ for(int i = tphrase.GetSize()-1; i >= 0; --i) {
+ tIDs[i] = m_trgVocab->GetWordID(tphrase.GetWord(i)); // get vocab id
+ }
for(size_t i = 0; i < tphrase.GetSize(); ++i) {
- trgFactor.push_back(m_trgVocab->GetWordID(tphrase.GetWord(i))); // get vocab id
+ trgFactor.push_back(tIDs[i]);
cerr << "trgFactor[" << (trgFactor.size() - 1) << "] = " << trgFactor.back() << endl;
m_trgCorpus->push_back(trgFactor.back());
}
+ cerr << "gets to 1\n";
m_trgSntBreaks.push_back(oldTrgCrpSize);
+ cerr << "gets to 2\n";
m_srcSA->Insert(&srcFactor, oldSrcCrpSize);
- m_trgSA->Insert(&trgFactor, oldTrgCrpSize);
+ cerr << "gets to 3\n";
+ //m_trgSA->Insert(&trgFactor, oldTrgCrpSize);
LoadRawAlignments(alignment);
m_trgVocab->MakeClosed();
+ //for(size_t i=0; i < sphrase.GetSize(); ++i)
+ //ClearWordInCache(sIDs[i]);
+
}
-SentenceAlignment::SentenceAlignment(int sntIndex, int sourceSize, int targetSize)
- :m_sntIndex(sntIndex)
- ,numberAligned(targetSize, 0)
- ,alignedList(sourceSize)
-{
- for(int i=0; i < sourceSize; ++i) {
- std::vector<int> trgWrd;
- alignedList[i] = trgWrd;
+void BilingualDynSuffixArray::ClearWordInCache(wordID_t srcWord) {
+ if(m_freqWordsCached.find(srcWord) != m_freqWordsCached.end())
+ return;
+ std::map<std::pair<wordID_t, wordID_t>, std::pair<float, float> >::iterator it,
+ first, last;
+ for(it = m_wordPairCache.begin(); it != m_wordPairCache.end(); ++it) {
+ if(it->first.first == srcWord) { // all source words grouped
+ first = it; // copy first entry of srcWord
+ last = it++;
+ while(it != m_wordPairCache.end() && (it->first.first == srcWord)) {
+ last = it++;
+ }
+ }
+ m_wordPairCache.erase(first, last);
}
}
+SentenceAlignment::SentenceAlignment(int sntIndex, int sourceSize, int targetSize)
+ :m_sntIndex(sntIndex)
+ ,numberAligned(targetSize, 0)
+ ,alignedList(sourceSize)
+{
+ for(int i=0; i < sourceSize; ++i) {
+ std::vector<int> trgWrd;
+ alignedList[i] = trgWrd;
+ }
+}
bool SentenceAlignment::Extract(int maxPhraseLength, std::vector<PhrasePair*> &ret, int startSource, int endSource) const
{
- // foreign = target, F=T
- // english = source, E=S
- int countTarget = numberAligned.size();
-
- int minTarget = 9999;
- int maxTarget = -1;
- std::vector< int > usedTarget = numberAligned;
- for(int sourcePos = startSource; sourcePos <= endSource; sourcePos++) {
- for(int ind=0; ind < (int)alignedList[sourcePos].size(); ind++) {
- int targetPos = alignedList[sourcePos][ind];
- // cout << "point (" << targetPos << ", " << sourcePos << ")\n";
- if (targetPos<minTarget) {
- minTarget = targetPos;
- }
- if (targetPos>maxTarget) {
- maxTarget = targetPos;
- }
- usedTarget[ targetPos ]--;
- } // for(int ind=0;ind<sentence
- } // for(int sourcePos=startSource
-
- // cout << "f projected ( " << minTarget << "-" << maxTarget << ", " << startSource << "," << endSource << ")\n";
-
- if (maxTarget >= 0 && // aligned to any foreign words at all
- maxTarget-minTarget < maxPhraseLength) {
- // foreign phrase within limits
-
- // check if foreign words are aligned to out of bound english words
- bool out_of_bounds = false;
- for(int targetPos=minTarget; targetPos <= maxTarget && !out_of_bounds; targetPos++) {
- if (usedTarget[targetPos]>0) {
- // cout << "ouf of bounds: " << targetPos << "\n";
- out_of_bounds = true;
- }
- }
-
- // cout << "doing if for ( " << minTarget << "-" << maxTarget << ", " << startSource << "," << endSource << ")\n";
- if (!out_of_bounds) {
- // start point of foreign phrase may retreat over unaligned
- for(int startTarget = minTarget;
- (startTarget >= 0 &&
- startTarget > maxTarget-maxPhraseLength && // within length limit
- (startTarget==minTarget || numberAligned[startTarget]==0)); // unaligned
- startTarget--) {
- // end point of foreign phrase may advance over unaligned
- for (int endTarget=maxTarget;
- (endTarget<countTarget &&
- endTarget<startTarget+maxPhraseLength && // within length limit
- (endTarget==maxTarget || numberAligned[endTarget]==0)); // unaligned
- endTarget++) {
- PhrasePair *phrasePair = new PhrasePair(startTarget,endTarget,startSource,endSource, m_sntIndex);
- ret.push_back(phrasePair);
- } // for (int endTarget=maxTarget;
- } // for(int startTarget=minTarget;
- } // if (!out_of_bounds)
- } // if (maxTarget >= 0 &&
- return (ret.size() > 0);
-
+ // foreign = target, F=T
+ // english = source, E=S
+ int countTarget = numberAligned.size();
+
+ int minTarget = 9999;
+ int maxTarget = -1;
+ std::vector< int > usedTarget = numberAligned;
+ for(int sourcePos = startSource; sourcePos <= endSource; sourcePos++)
+ {
+ for(int ind=0; ind < (int)alignedList[sourcePos].size();ind++)
+ {
+ int targetPos = alignedList[sourcePos][ind];
+ // cout << "point (" << targetPos << ", " << sourcePos << ")\n";
+ if (targetPos<minTarget) { minTarget = targetPos; }
+ if (targetPos>maxTarget) { maxTarget = targetPos; }
+ usedTarget[ targetPos ]--;
+ } // for(int ind=0;ind<sentence
+ } // for(int sourcePos=startSource
+
+ // cout << "f projected ( " << minTarget << "-" << maxTarget << ", " << startSource << "," << endSource << ")\n";
+
+ if (maxTarget >= 0 && // aligned to any foreign words at all
+ maxTarget-minTarget < maxPhraseLength)
+ { // foreign phrase within limits
+
+ // check if foreign words are aligned to out of bound english words
+ bool out_of_bounds = false;
+ for(int targetPos=minTarget; targetPos <= maxTarget && !out_of_bounds; targetPos++)
+ {
+ if (usedTarget[targetPos]>0)
+ {
+ // cout << "ouf of bounds: " << targetPos << "\n";
+ out_of_bounds = true;
+ }
+ }
+
+ // cout << "doing if for ( " << minTarget << "-" << maxTarget << ", " << startSource << "," << endSource << ")\n";
+ if (!out_of_bounds)
+ {
+ // start point of foreign phrase may retreat over unaligned
+ for(int startTarget = minTarget;
+ (startTarget >= 0 &&
+ startTarget > maxTarget-maxPhraseLength && // within length limit
+ (startTarget==minTarget || numberAligned[startTarget]==0)); // unaligned
+ startTarget--)
+ {
+ // end point of foreign phrase may advance over unaligned
+ for (int endTarget=maxTarget;
+ (endTarget<countTarget &&
+ endTarget<startTarget+maxPhraseLength && // within length limit
+ (endTarget==maxTarget || numberAligned[endTarget]==0)); // unaligned
+ endTarget++)
+ {
+ PhrasePair *phrasePair = new PhrasePair(startTarget,endTarget,startSource,endSource, m_sntIndex);
+ ret.push_back(phrasePair);
+ } // for (int endTarget=maxTarget;
+ } // for(int startTarget=minTarget;
+ } // if (!out_of_bounds)
+ } // if (maxTarget >= 0 &&
+ return (ret.size() > 0);
+
}
}// end namepsace
diff --git a/moses/src/BilingualDynSuffixArray.h b/moses/src/BilingualDynSuffixArray.h
index 1470a373b..6f33911b9 100644
--- a/moses/src/BilingualDynSuffixArray.h
+++ b/moses/src/BilingualDynSuffixArray.h
@@ -2,142 +2,144 @@
#define moses_BilingualDynSuffixArray_h
#include "TargetPhrase.h"
-#include "DynSuffixArray.h"
+#include "DynSuffixArray.h"
#include "DynSAInclude/vocab.h"
#include "DynSAInclude/types.h"
#include "DynSAInclude/utils.h"
#include "InputFileStream.h"
#include "FactorTypeSet.h"
-namespace Moses
-{
+namespace Moses {
class SAPhrase
{
public:
- std::vector<wordID_t> words;
-
- SAPhrase(size_t phraseSize)
- :words(phraseSize)
- {}
-
- void SetId(size_t pos, wordID_t id) {
+ std::vector<wordID_t> words;
+
+ SAPhrase(size_t phraseSize)
+ :words(phraseSize)
+ {}
+
+ void SetId(size_t pos, wordID_t id)
+ {
assert(pos < words.size());
- words[pos] = id;
- }
- bool operator<(const SAPhrase& phr2) const {
- return words < phr2.words;
- }
+ words[pos] = id;
+ }
+ bool operator<(const SAPhrase& phr2) const
+ { return words < phr2.words; }
};
class PhrasePair
{
public:
- int m_startTarget, m_endTarget, m_startSource, m_endSource, m_sntIndex;
- PhrasePair(int startTarget, int endTarget, int startSource, int endSource, int sntIndex)
- : m_startTarget(startTarget)
- , m_endTarget(endTarget)
- , m_startSource(startSource)
- , m_endSource(endSource)
- , m_sntIndex(sntIndex)
- {}
-
- size_t GetTargetSize() const {
- return m_endTarget - m_startTarget + 1;
- }
+ int m_startTarget, m_endTarget, m_startSource, m_endSource, m_sntIndex;
+ PhrasePair(int startTarget, int endTarget, int startSource, int endSource, int sntIndex)
+ : m_startTarget(startTarget)
+ , m_endTarget(endTarget)
+ , m_startSource(startSource)
+ , m_endSource(endSource)
+ , m_sntIndex(sntIndex)
+ {}
+
+ size_t GetTargetSize() const
+ { return m_endTarget - m_startTarget + 1; }
};
-
-class SentenceAlignment
+
+class SentenceAlignment
{
public:
- SentenceAlignment(int sntIndex, int sourceSize, int targetSize);
- int m_sntIndex;
- std::vector<wordID_t>* trgSnt;
- std::vector<wordID_t>* srcSnt;
- std::vector<int> numberAligned;
- std::vector< std::vector<int> > alignedList;
- bool Extract(int maxPhraseLength, std::vector<PhrasePair*> &ret, int startSource, int endSource) const;
+ SentenceAlignment(int sntIndex, int sourceSize, int targetSize);
+ int m_sntIndex;
+ std::vector<wordID_t>* trgSnt;
+ std::vector<wordID_t>* srcSnt;
+ std::vector<int> numberAligned;
+ std::vector< std::vector<int> > alignedList;
+ bool Extract(int maxPhraseLength, std::vector<PhrasePair*> &ret, int startSource, int endSource) const;
};
-class ScoresComp
-{
-public:
+class ScoresComp {
+public:
ScoresComp(const std::vector<float>& weights): m_weights(weights) {}
- bool operator()(const Scores& s1, const Scores& s2) const {
- float score1(1), score2(1);
+ bool operator()(const Scores& s1, const Scores& s2) const {
+ return s1[0] < s2[0]; // just p(e|f) as approximation
+ /*float score1(0), score2(0);
int idx1(0), idx2(0);
- for (Scores::const_iterator itr = s1.begin();
- itr != s1.end(); ++itr) {
- (*itr * m_weights.at(idx1++));
+ for (Scores::const_iterator itr = s1.begin();
+ itr != s1.end(); ++itr) {
+ score1 += log(*itr * m_weights.at(idx1++));
}
for (Scores::const_iterator itr = s2.begin();
- itr != s2.end(); ++itr) {
- (*itr * m_weights.at(idx2++));
+ itr != s2.end(); ++itr) {
+ score2 += log(*itr * m_weights.at(idx2++));
}
- return score1 < score2;
+ return score1 < score2;*/
}
-private:
+private:
const std::vector<float>& m_weights;
};
-
-class BilingualDynSuffixArray
-{
-public:
- BilingualDynSuffixArray();
- ~BilingualDynSuffixArray();
- bool Load( const std::vector<FactorType>& inputFactors,
- const std::vector<FactorType>& outputTactors,
- std::string source, std::string target, std::string alignments,
- const std::vector<float> &weight);
- void GetTargetPhrasesByLexicalWeight(const Phrase& src, std::vector< std::pair<Scores, TargetPhrase*> >& target) const;
- void CleanUp();
+
+class BilingualDynSuffixArray {
+public:
+ BilingualDynSuffixArray();
+ ~BilingualDynSuffixArray();
+ bool Load( const std::vector<FactorType>& inputFactors,
+ const std::vector<FactorType>& outputTactors,
+ std::string source, std::string target, std::string alignments,
+ const std::vector<float> &weight);
+ void GetTargetPhrasesByLexicalWeight(const Phrase& src, std::vector< std::pair<Scores, TargetPhrase*> >& target) const;
+ void CleanUp();
void addSntPair(string& source, string& target, string& alignment);
private:
- DynSuffixArray* m_srcSA;
- DynSuffixArray* m_trgSA;
- std::vector<wordID_t>* m_srcCorpus;
- std::vector<wordID_t>* m_trgCorpus;
+ DynSuffixArray* m_srcSA;
+ DynSuffixArray* m_trgSA;
+ std::vector<wordID_t>* m_srcCorpus;
+ std::vector<wordID_t>* m_trgCorpus;
std::vector<FactorType> m_inputFactors;
std::vector<FactorType> m_outputFactors;
- std::vector<unsigned> m_srcSntBreaks, m_trgSntBreaks;
-
- Vocab* m_srcVocab, *m_trgVocab;
- ScoresComp* m_scoreCmp;
-
- std::vector<SentenceAlignment> m_alignments;
- std::vector<std::vector<short> > m_rawAlignments;
-
- mutable std::map<std::pair<wordID_t, wordID_t>, std::pair<float, float> > m_wordPairCache;
- const size_t m_maxPhraseLength, m_maxSampleSize;
-
- int LoadCorpus(InputFileStream&, const std::vector<FactorType>& factors,
- const FactorDirection& direction, std::vector<wordID_t>&, std::vector<wordID_t>&,
- Vocab*);
- int LoadAlignments(InputFileStream& aligs);
- int LoadRawAlignments(InputFileStream& aligs);
- int LoadRawAlignments(string& aligs);
-
- bool ExtractPhrases(const int&, const int&, const int&, std::vector<PhrasePair*>&, bool=false) const;
- SentenceAlignment GetSentenceAlignment(const int, bool=false) const;
- std::vector<unsigned> SampleSelection(std::vector<unsigned>) const;
-
- std::vector<int> GetSntIndexes(std::vector<unsigned>&, const int) const;
- TargetPhrase* GetMosesFactorIDs(const SAPhrase&) const;
- SAPhrase TrgPhraseFromSntIdx(const PhrasePair&) const;
- bool GetLocalVocabIDs(const Phrase&, SAPhrase &) const;
- void CacheWordProbs(wordID_t) const;
- std::pair<float, float> GetLexicalWeight(const PhrasePair&) const;
-
- int GetSourceSentenceSize(size_t sentenceId) const {
- return (sentenceId==m_srcSntBreaks.size()-1) ?
- m_srcCorpus->size() - m_srcSntBreaks.at(sentenceId) :
- m_srcSntBreaks.at(sentenceId+1) - m_srcSntBreaks.at(sentenceId);
- }
- int GetTargetSentenceSize(size_t sentenceId) const {
- return (sentenceId==m_trgSntBreaks.size()-1) ?
- m_trgCorpus->size() - m_trgSntBreaks.at(sentenceId) :
- m_trgSntBreaks.at(sentenceId+1) - m_trgSntBreaks.at(sentenceId);
- }
+ std::vector<unsigned> m_srcSntBreaks, m_trgSntBreaks;
+
+ Vocab* m_srcVocab, *m_trgVocab;
+ ScoresComp* m_scoreCmp;
+
+ std::vector<SentenceAlignment> m_alignments;
+ std::vector<std::vector<short> > m_rawAlignments;
+
+ mutable std::map<std::pair<wordID_t, wordID_t>, std::pair<float, float> > m_wordPairCache;
+ mutable std::set<wordID_t> m_freqWordsCached;
+ const size_t m_maxPhraseLength, m_maxSampleSize;
+
+ int LoadCorpus(InputFileStream&, const std::vector<FactorType>& factors,
+ const FactorDirection& direction, std::vector<wordID_t>&, std::vector<wordID_t>&,
+ Vocab*);
+ int LoadAlignments(InputFileStream& aligs);
+ int LoadRawAlignments(InputFileStream& aligs);
+ int LoadRawAlignments(string& aligs);
+
+ bool ExtractPhrases(const int&, const int&, const int&, std::vector<PhrasePair*>&, bool=false) const;
+ SentenceAlignment GetSentenceAlignment(const int, bool=false) const;
+ int SampleSelection(std::vector<unsigned>&, int = 300) const;
+
+ std::vector<int> GetSntIndexes(std::vector<unsigned>&, int, const std::vector<unsigned>&) const;
+ TargetPhrase* GetMosesFactorIDs(const SAPhrase&) const;
+ SAPhrase TrgPhraseFromSntIdx(const PhrasePair&) const;
+ bool GetLocalVocabIDs(const Phrase&, SAPhrase &) const;
+ void CacheWordProbs(wordID_t) const;
+ void CacheFreqWords() const;
+ void ClearWordInCache(wordID_t);
+ std::pair<float, float> GetLexicalWeight(const PhrasePair&) const;
+
+ int GetSourceSentenceSize(size_t sentenceId) const
+ {
+ return (sentenceId==m_srcSntBreaks.size()-1) ?
+ m_srcCorpus->size() - m_srcSntBreaks.at(sentenceId) :
+ m_srcSntBreaks.at(sentenceId+1) - m_srcSntBreaks.at(sentenceId);
+ }
+ int GetTargetSentenceSize(size_t sentenceId) const
+ {
+ return (sentenceId==m_trgSntBreaks.size()-1) ?
+ m_trgCorpus->size() - m_trgSntBreaks.at(sentenceId) :
+ m_trgSntBreaks.at(sentenceId+1) - m_trgSntBreaks.at(sentenceId);
+ }
};
} // end namespace
#endif
diff --git a/moses/src/BleuScoreFeature.cpp b/moses/src/BleuScoreFeature.cpp
index c432a947e..a119814fa 100644
--- a/moses/src/BleuScoreFeature.cpp
+++ b/moses/src/BleuScoreFeature.cpp
@@ -8,7 +8,7 @@ namespace Moses {
size_t BleuScoreState::bleu_order = 4;
-BleuScoreState::BleuScoreState(): m_words(Output),
+BleuScoreState::BleuScoreState(): m_words(Output,1),
m_source_length(0),
m_target_length(0),
m_scaled_ref_length(0),
@@ -93,7 +93,7 @@ void BleuScoreFeature::LoadReferences(const std::vector< std::vector< std::strin
ref_pair.first = refTokens.size();
for (size_t order = 1; order <= BleuScoreState::bleu_order; order++) {
for (size_t end_idx = order; end_idx <= refTokens.size(); end_idx++) {
- Phrase ngram(Output);
+ Phrase ngram(Output,1);
for (size_t s_idx = end_idx - order; s_idx < end_idx; s_idx++) {
const Factor* f = fc.AddFactor(Output, 0, refTokens[s_idx]);
Word w;
diff --git a/moses/src/BleuScoreFeature.h b/moses/src/BleuScoreFeature.h
index 20d5cfdee..0a62910c2 100644
--- a/moses/src/BleuScoreFeature.h
+++ b/moses/src/BleuScoreFeature.h
@@ -98,6 +98,13 @@ public:
FFState* Evaluate( const Hypothesis& cur_hypo,
const FFState* prev_state,
ScoreComponentCollection* accumulator) const;
+ virtual FFState* EvaluateChart( const ChartHypothesis& /* cur_hypo */,
+ int /* featureID */,
+ ScoreComponentCollection* ) const
+ {
+ /* Not implemented */
+ assert(0);
+ }
float CalculateBleu(BleuScoreState*) const;
const FFState* EmptyHypothesisState(const InputType&) const;
diff --git a/moses/src/CellCollection.h b/moses/src/CellCollection.h
index 9e73e00fa..5b99fe0fe 100644
--- a/moses/src/CellCollection.h
+++ b/moses/src/CellCollection.h
@@ -34,7 +34,6 @@ class CellCollection
public:
virtual ~CellCollection()
{}
- virtual const NonTerminalSet &GetHeadwords(const Moses::WordsRange &coverage) const = 0;
};
}
diff --git a/moses-chart/src/ChartCell.cpp b/moses/src/ChartCell.cpp
index 2774a4dae..67d58c4db 100644
--- a/moses-chart/src/ChartCell.cpp
+++ b/moses/src/ChartCell.cpp
@@ -23,115 +23,121 @@
#include "ChartCell.h"
#include "ChartTranslationOptionCollection.h"
#include "ChartCellCollection.h"
-#include "Cube.h"
-#include "QueueEntry.h"
-#include "../../moses/src/WordsRange.h"
-#include "../../moses/src/Util.h"
-#include "../../moses/src/StaticData.h"
-#include "../../moses/src/ChartTranslationOption.h"
-#include "../../moses/src/ChartTranslationOptionList.h"
+#include "RuleCubeQueue.h"
+#include "RuleCube.h"
+#include "WordsRange.h"
+#include "Util.h"
+#include "StaticData.h"
+#include "ChartTranslationOption.h"
+#include "ChartTranslationOptionList.h"
+#include "ChartManager.h"
using namespace std;
-using namespace Moses;
namespace Moses
{
extern bool g_debug;
-}
-
-namespace MosesChart
-{
-ChartCell::ChartCell(size_t startPos, size_t endPos, Manager &manager)
+ChartCell::ChartCell(size_t startPos, size_t endPos, ChartManager &manager)
:m_coverage(startPos, endPos)
+ ,m_sourceWordLabel(NULL)
+ ,m_targetLabelSet(m_coverage)
,m_manager(manager)
{
const StaticData &staticData = StaticData::Instance();
m_nBestIsEnabled = staticData.IsNBestEnabled();
+ if (startPos == endPos) {
+ const Word &sourceWord = manager.GetSource().GetWord(startPos);
+ m_sourceWordLabel = new ChartCellLabel(m_coverage, sourceWord);
+ }
}
-const HypoList &ChartCell::GetSortedHypotheses(const Moses::Word &headWord) const
+ChartCell::~ChartCell()
{
- std::map<Moses::Word, HypothesisCollection>::const_iterator
- iter = m_hypoColl.find(headWord);
+ delete m_sourceWordLabel;
+}
+
+/** Get all hypotheses in the cell that have the specified constituent label */
+const HypoList &ChartCell::GetSortedHypotheses(const Word &constituentLabel) const
+{
+ std::map<Word, ChartHypothesisCollection>::const_iterator
+ iter = m_hypoColl.find(constituentLabel);
assert(iter != m_hypoColl.end());
return iter->second.GetSortedHypotheses();
}
-bool ChartCell::AddHypothesis(Hypothesis *hypo)
+/** Add the given hypothesis to the cell */
+bool ChartCell::AddHypothesis(ChartHypothesis *hypo)
{
const Word &targetLHS = hypo->GetTargetLHS();
return m_hypoColl[targetLHS].AddHypothesis(hypo, m_manager);
}
+/** Pruning */
void ChartCell::PruneToSize()
{
- std::map<Moses::Word, HypothesisCollection>::iterator iter;
+ std::map<Word, ChartHypothesisCollection>::iterator iter;
for (iter = m_hypoColl.begin(); iter != m_hypoColl.end(); ++iter) {
- HypothesisCollection &coll = iter->second;
+ ChartHypothesisCollection &coll = iter->second;
coll.PruneToSize(m_manager);
}
}
+/** Decoding at span level: fill chart cell with hypotheses
+ * (implementation of cube pruning)
+ * \param transOptList list of applicable rules to create hypotheses for the cell
+ * \param allChartCells entire chart - needed to look up underlying hypotheses
+ */
void ChartCell::ProcessSentence(const ChartTranslationOptionList &transOptList
, const ChartCellCollection &allChartCells)
{
const StaticData &staticData = StaticData::Instance();
- Cube cube;
+ // priority queue for applicable rules with selected hypotheses
+ RuleCubeQueue queue(m_manager);
// add all trans opt into queue. using only 1st child node.
ChartTranslationOptionList::const_iterator iterList;
- for (iterList = transOptList.begin(); iterList != transOptList.end(); ++iterList) {
+ for (iterList = transOptList.begin(); iterList != transOptList.end(); ++iterList)
+ {
const ChartTranslationOption &transOpt = **iterList;
- QueueEntry *queueEntry = new QueueEntry(transOpt, allChartCells);
- cube.Add(queueEntry);
+ RuleCube *ruleCube = new RuleCube(transOpt, allChartCells, m_manager);
+ queue.Add(ruleCube);
}
// pluck things out of queue and add to hypo collection
const size_t popLimit = staticData.GetCubePruningPopLimit();
-
- for (size_t numPops = 0; numPops < popLimit && !cube.IsEmpty(); ++numPops) {
- QueueEntry *queueEntry = cube.Pop();
-
- queueEntry->GetTranslationOption().GetTotalScore();
- Hypothesis *hypo = new Hypothesis(*queueEntry, m_manager);
- assert(hypo);
-
- hypo->CalcScore();
-
+ for (size_t numPops = 0; numPops < popLimit && !queue.IsEmpty(); ++numPops)
+ {
+ ChartHypothesis *hypo = queue.Pop();
AddHypothesis(hypo);
-
- // Expand queue entry
- queueEntry->CreateDeviants(cube);
}
}
void ChartCell::SortHypotheses()
{
// sort each mini cells & fill up target lhs list
- assert(m_headWords.empty());
- std::map<Moses::Word, HypothesisCollection>::iterator iter;
+ assert(m_targetLabelSet.Empty());
+ std::map<Word, ChartHypothesisCollection>::iterator iter;
for (iter = m_hypoColl.begin(); iter != m_hypoColl.end(); ++iter) {
- m_headWords.insert(iter->first);
-
- HypothesisCollection &coll = iter->second;
+ ChartHypothesisCollection &coll = iter->second;
+ m_targetLabelSet.AddConstituent(iter->first, coll);
coll.SortHypotheses();
}
}
-const Hypothesis *ChartCell::GetBestHypothesis() const
+/** Return the highest scoring hypothesis in the cell */
+const ChartHypothesis *ChartCell::GetBestHypothesis() const
{
- const Hypothesis *ret = NULL;
+ const ChartHypothesis *ret = NULL;
float bestScore = -std::numeric_limits<float>::infinity();
-
- std::map<Moses::Word, HypothesisCollection>::const_iterator iter;
+ std::map<Word, ChartHypothesisCollection>::const_iterator iter;
for (iter = m_hypoColl.begin(); iter != m_hypoColl.end(); ++iter) {
const HypoList &sortedList = iter->second.GetSortedHypotheses();
assert(sortedList.size() > 0);
- const Hypothesis *hypo = sortedList[0];
+ const ChartHypothesis *hypo = sortedList[0];
if (hypo->GetTotalScore() > bestScore) {
bestScore = hypo->GetTotalScore();
ret = hypo;
@@ -141,31 +147,24 @@ const Hypothesis *ChartCell::GetBestHypothesis() const
return ret;
}
-bool ChartCell::HeadwordExists(const Moses::Word &headWord) const
-{
- std::map<Moses::Word, HypothesisCollection>::const_iterator iter;
- iter = m_hypoColl.find(headWord);
- return (iter != m_hypoColl.end());
-}
-
void ChartCell::CleanupArcList()
{
// only necessary if n-best calculations are enabled
if (!m_nBestIsEnabled) return;
- std::map<Moses::Word, HypothesisCollection>::iterator iter;
+ std::map<Word, ChartHypothesisCollection>::iterator iter;
for (iter = m_hypoColl.begin(); iter != m_hypoColl.end(); ++iter) {
- HypothesisCollection &coll = iter->second;
+ ChartHypothesisCollection &coll = iter->second;
coll.CleanupArcList();
}
}
void ChartCell::OutputSizes(std::ostream &out) const
{
- std::map<Moses::Word, HypothesisCollection>::const_iterator iter;
+ std::map<Word, ChartHypothesisCollection>::const_iterator iter;
for (iter = m_hypoColl.begin(); iter != m_hypoColl.end(); ++iter) {
- const Moses::Word &targetLHS = iter->first;
- const HypothesisCollection &coll = iter->second;
+ const Word &targetLHS = iter->first;
+ const ChartHypothesisCollection &coll = iter->second;
out << targetLHS << "=" << coll.GetSize() << " ";
}
@@ -174,9 +173,9 @@ void ChartCell::OutputSizes(std::ostream &out) const
size_t ChartCell::GetSize() const
{
size_t ret = 0;
- std::map<Moses::Word, HypothesisCollection>::const_iterator iter;
+ std::map<Word, ChartHypothesisCollection>::const_iterator iter;
for (iter = m_hypoColl.begin(); iter != m_hypoColl.end(); ++iter) {
- const HypothesisCollection &coll = iter->second;
+ const ChartHypothesisCollection &coll = iter->second;
ret += coll.GetSize();
}
@@ -184,24 +183,24 @@ size_t ChartCell::GetSize() const
return ret;
}
-void ChartCell::GetSearchGraph(long translationId, std::ostream &outputSearchGraphStream) const
+void ChartCell::GetSearchGraph(long translationId, std::ostream &outputSearchGraphStream, const std::map<int,bool> &reachable) const
{
- std::map<Moses::Word, HypothesisCollection>::const_iterator iterOutside;
+ std::map<Word, ChartHypothesisCollection>::const_iterator iterOutside;
for (iterOutside = m_hypoColl.begin(); iterOutside != m_hypoColl.end(); ++iterOutside) {
- const HypothesisCollection &coll = iterOutside->second;
- coll.GetSearchGraph(translationId, outputSearchGraphStream);
+ const ChartHypothesisCollection &coll = iterOutside->second;
+ coll.GetSearchGraph(translationId, outputSearchGraphStream, reachable);
}
}
std::ostream& operator<<(std::ostream &out, const ChartCell &cell)
{
- std::map<Moses::Word, HypothesisCollection>::const_iterator iterOutside;
+ std::map<Word, ChartHypothesisCollection>::const_iterator iterOutside;
for (iterOutside = cell.m_hypoColl.begin(); iterOutside != cell.m_hypoColl.end(); ++iterOutside) {
- const Moses::Word &targetLHS = iterOutside->first;
+ const Word &targetLHS = iterOutside->first;
cerr << targetLHS << ":" << endl;
- const HypothesisCollection &coll = iterOutside->second;
+ const ChartHypothesisCollection &coll = iterOutside->second;
cerr << coll;
}
@@ -209,7 +208,7 @@ std::ostream& operator<<(std::ostream &out, const ChartCell &cell)
ChartCell::HCType::const_iterator iter;
for (iter = cell.m_hypos.begin(); iter != cell.m_hypos.end(); ++iter)
{
- const Hypothesis &hypo = **iter;
+ const ChartHypothesis &hypo = **iter;
out << hypo << endl;
}
*/
@@ -218,5 +217,3 @@ std::ostream& operator<<(std::ostream &out, const ChartCell &cell)
}
} // namespace
-
-
diff --git a/moses-chart/src/ChartCell.h b/moses/src/ChartCell.h
index c35a54971..1e852d686 100644
--- a/moses-chart/src/ChartCell.h
+++ b/moses/src/ChartCell.h
@@ -25,26 +25,20 @@
#include <queue>
#include <map>
#include <vector>
-#include "../../moses/src/Word.h"
-#include "../../moses/src/WordsRange.h"
-#include "../../moses/src/NonTerminal.h"
+#include "Word.h"
+#include "WordsRange.h"
+#include "NonTerminal.h"
#include "ChartHypothesis.h"
#include "ChartHypothesisCollection.h"
-#include "QueueEntry.h"
+#include "RuleCube.h"
+#include "ChartCellLabelSet.h"
namespace Moses
{
class ChartTranslationOptionList;
-}
-
-namespace MosesChart
-{
-
-class TranslationOptionCollection;
-class TranslationOptionList;
-class TranslationOption;
+class ChartTranslationOptionCollection;
class ChartCellCollection;
-class Manager;
+class ChartManager;
class ChartCell
{
@@ -52,31 +46,38 @@ class ChartCell
public:
protected:
- std::map<Moses::Word, HypothesisCollection> m_hypoColl;
- Moses::NonTerminalSet m_headWords;
+ std::map<Word, ChartHypothesisCollection> m_hypoColl;
- Moses::WordsRange m_coverage;
+ WordsRange m_coverage;
+
+ ChartCellLabel *m_sourceWordLabel;
+ ChartCellLabelSet m_targetLabelSet;
bool m_nBestIsEnabled; /**< flag to determine whether to keep track of old arcs */
- Manager &m_manager;
+ ChartManager &m_manager;
public:
- ChartCell(size_t startPos, size_t endPos, Manager &manager);
+ ChartCell(size_t startPos, size_t endPos, ChartManager &manager);
+ ~ChartCell();
- void ProcessSentence(const Moses::ChartTranslationOptionList &transOptList
+ void ProcessSentence(const ChartTranslationOptionList &transOptList
,const ChartCellCollection &allChartCells);
- const HypoList &GetSortedHypotheses(const Moses::Word &headWord) const;
- bool AddHypothesis(Hypothesis *hypo);
+ const HypoList &GetSortedHypotheses(const Word &constituentLabel) const;
+ bool AddHypothesis(ChartHypothesis *hypo);
void SortHypotheses();
void PruneToSize();
- const Hypothesis *GetBestHypothesis() const;
+ const ChartHypothesis *GetBestHypothesis() const;
+
+ const ChartCellLabel &GetSourceWordLabel() const {
+ assert(m_coverage.GetNumWordsCovered() == 1);
+ return *m_sourceWordLabel;
+ }
- bool HeadwordExists(const Moses::Word &headWord) const;
- const Moses::NonTerminalSet &GetHeadwords() const {
- return m_headWords;
+ const ChartCellLabelSet &GetTargetLabelSet() const {
+ return m_targetLabelSet;
}
void CleanupArcList();
@@ -89,7 +90,7 @@ public:
return m_coverage < compare.m_coverage;
}
- void GetSearchGraph(long translationId, std::ostream &outputSearchGraphStream) const;
+ void GetSearchGraph(long translationId, std::ostream &outputSearchGraphStream, const std::map<int,bool> &reachable) const;
};
diff --git a/moses-chart/src/ChartCellCollection.cpp b/moses/src/ChartCellCollection.cpp
index 1f996944e..894bb352c 100644
--- a/moses-chart/src/ChartCellCollection.cpp
+++ b/moses/src/ChartCellCollection.cpp
@@ -20,12 +20,12 @@
***********************************************************************/
#include "ChartCellCollection.h"
-#include "../../moses/src/InputType.h"
-#include "../../moses/src/WordsRange.h"
+#include "InputType.h"
+#include "WordsRange.h"
-namespace MosesChart
+namespace Moses
{
-ChartCellCollection::ChartCellCollection(const Moses::InputType &input, Manager &manager)
+ChartCellCollection::ChartCellCollection(const InputType &input, ChartManager &manager)
:m_hypoStackColl(input.GetSize())
{
size_t size = input.GetSize();
@@ -47,7 +47,7 @@ ChartCellCollection::~ChartCellCollection()
OuterCollType::iterator iter;
for (iter = m_hypoStackColl.begin(); iter != m_hypoStackColl.end(); ++iter) {
InnerCollType &inner = *iter;
- Moses::RemoveAllInColl(inner);
+ RemoveAllInColl(inner);
}
}
diff --git a/moses-chart/src/ChartCellCollection.h b/moses/src/ChartCellCollection.h
index d9e2952fc..6627b6b67 100644
--- a/moses-chart/src/ChartCellCollection.h
+++ b/moses/src/ChartCellCollection.h
@@ -21,19 +21,15 @@
#pragma once
#include "ChartCell.h"
-#include "../../moses/src/WordsRange.h"
-#include "../../moses/src/CellCollection.h"
+#include "WordsRange.h"
+#include "CellCollection.h"
namespace Moses
{
class InputType;
-}
-
-namespace MosesChart
-{
-class Manager;
+class ChartManager;
-class ChartCellCollection : public Moses::CellCollection
+class ChartCellCollection : public CellCollection
{
public:
typedef std::vector<ChartCell*> InnerCollType;
@@ -43,20 +39,15 @@ protected:
OuterCollType m_hypoStackColl;
public:
- ChartCellCollection(const Moses::InputType &input, Manager &manager);
+ ChartCellCollection(const InputType &input, ChartManager &manager);
~ChartCellCollection();
- ChartCell &Get(const Moses::WordsRange &coverage) {
+ ChartCell &Get(const WordsRange &coverage) {
return *m_hypoStackColl[coverage.GetStartPos()][coverage.GetEndPos() - coverage.GetStartPos()];
}
- const ChartCell &Get(const Moses::WordsRange &coverage) const {
+ const ChartCell &Get(const WordsRange &coverage) const {
return *m_hypoStackColl[coverage.GetStartPos()][coverage.GetEndPos() - coverage.GetStartPos()];
}
-
- const Moses::NonTerminalSet &GetHeadwords(const Moses::WordsRange &coverage) const {
- const ChartCell &cell = Get(coverage);
- return cell.GetHeadwords();
- }
};
}
diff --git a/moses/src/ChartCellLabel.h b/moses/src/ChartCellLabel.h
new file mode 100644
index 000000000..4feeac322
--- /dev/null
+++ b/moses/src/ChartCellLabel.h
@@ -0,0 +1,65 @@
+/***********************************************************************
+ Moses - statistical machine translation system
+ Copyright (C) 2006-2011 University of Edinburgh
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ ***********************************************************************/
+
+#pragma once
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "Word.h"
+#include "WordsRange.h"
+
+namespace Moses
+{
+
+class ChartHypothesisCollection;
+class Word;
+
+class ChartCellLabel
+{
+ public:
+ ChartCellLabel(const WordsRange &coverage, const Word &label,
+ const ChartHypothesisCollection *stack=NULL)
+ : m_coverage(coverage)
+ , m_label(label)
+ , m_stack(stack)
+ {}
+
+ const WordsRange &GetCoverage() const { return m_coverage; }
+ const Word &GetLabel() const { return m_label; }
+ const ChartHypothesisCollection *GetStack() const { return m_stack; }
+
+ bool operator<(const ChartCellLabel &other) const
+ {
+ // m_coverage and m_label uniquely identify a ChartCellLabel, so don't
+ // need to compare m_stack.
+ if (m_coverage == other.m_coverage) {
+ return m_label < other.m_label;
+ }
+ return m_coverage < other.m_coverage;
+ }
+
+ private:
+ const WordsRange &m_coverage;
+ const Word &m_label;
+ const ChartHypothesisCollection *m_stack;
+};
+
+}
diff --git a/moses/src/ChartCellLabelSet.h b/moses/src/ChartCellLabelSet.h
new file mode 100644
index 000000000..2a359758d
--- /dev/null
+++ b/moses/src/ChartCellLabelSet.h
@@ -0,0 +1,75 @@
+/***********************************************************************
+ Moses - statistical machine translation system
+ Copyright (C) 2006-2011 University of Edinburgh
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ ***********************************************************************/
+
+#pragma once
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "ChartCellLabel.h"
+
+#include <set>
+
+namespace Moses
+{
+
+class ChartHypothesisCollection;
+
+class ChartCellLabelSet
+{
+ private:
+ typedef std::set<ChartCellLabel> SetType;
+
+ public:
+ typedef SetType::const_iterator const_iterator;
+
+ ChartCellLabelSet(const WordsRange &coverage) : m_coverage(coverage) {}
+
+ const_iterator begin() const { return m_set.begin(); }
+ const_iterator end() const { return m_set.end(); }
+
+ void AddWord(const Word &w)
+ {
+ ChartCellLabel cellLabel(m_coverage, w);
+ m_set.insert(cellLabel);
+ }
+
+ void AddConstituent(const Word &w, const ChartHypothesisCollection &stack)
+ {
+ ChartCellLabel cellLabel(m_coverage, w, &stack);
+ m_set.insert(cellLabel);
+ }
+
+ bool Empty() const { return m_set.empty(); }
+
+ size_t GetSize() const { return m_set.size(); }
+
+ const ChartCellLabel *Find(const Word &w) const
+ {
+ SetType::const_iterator p = m_set.find(ChartCellLabel(m_coverage, w));
+ return p == m_set.end() ? 0 : &(*p);
+ }
+
+ private:
+ const WordsRange &m_coverage;
+ SetType m_set;
+};
+
+}
diff --git a/moses-chart/src/ChartHypothesis.cpp b/moses/src/ChartHypothesis.cpp
index bd5a32c44..ee701576b 100644
--- a/moses-chart/src/ChartHypothesis.cpp
+++ b/moses/src/ChartHypothesis.cpp
@@ -22,66 +22,78 @@
#include <algorithm>
#include <vector>
#include "ChartHypothesis.h"
-#include "QueueEntry.h"
+#include "RuleCubeItem.h"
#include "ChartCell.h"
#include "ChartManager.h"
-#include "../../moses/src/TargetPhrase.h"
-#include "../../moses/src/Phrase.h"
-#include "../../moses/src/StaticData.h"
-#include "../../moses/src/DummyScoreProducers.h"
-#include "../../moses/src/LMList.h"
-#include "../../moses/src/ChartTranslationOption.h"
-
-using namespace std;
-using namespace Moses;
-
-namespace MosesChart
+#include "TargetPhrase.h"
+#include "Phrase.h"
+#include "StaticData.h"
+#include "DummyScoreProducers.h"
+#include "LMList.h"
+#include "ChartTranslationOption.h"
+#include "FFState.h"
+
+namespace Moses
{
-unsigned int Hypothesis::s_HypothesesCreated = 0;
+unsigned int ChartHypothesis::s_HypothesesCreated = 0;
#ifdef USE_HYPO_POOL
-ObjectPool<Hypothesis> Hypothesis::s_objectPool("Hypothesis", 300000);
+ObjectPool<ChartHypothesis> ChartHypothesis::s_objectPool("ChartHypothesis", 300000);
#endif
-Hypothesis::Hypothesis(const QueueEntry &queueEntry, Manager &manager)
- :m_transOpt(queueEntry.GetTranslationOption())
- ,m_wordsConsumedTargetOrder(queueEntry.GetTranslationOption().GetWordsConsumedTargetOrder())
- ,m_id(++s_HypothesesCreated)
- ,m_currSourceWordsRange(queueEntry.GetTranslationOption().GetSourceWordsRange())
+/** Create a hypothesis from a rule */
+ChartHypothesis::ChartHypothesis(const ChartTranslationOption &transOpt,
+ const RuleCubeItem &item,
+ ChartManager &manager)
+ :m_id(++s_HypothesesCreated)
+ ,m_targetPhrase(*(item.GetTranslationDimension().GetTargetPhrase()))
+ ,m_transOpt(transOpt)
,m_contextPrefix(Output, manager.GetTranslationSystem()->GetLanguageModels().GetMaxNGramOrder())
,m_contextSuffix(Output, manager.GetTranslationSystem()->GetLanguageModels().GetMaxNGramOrder())
+ ,m_currSourceWordsRange(transOpt.GetSourceWordsRange())
+ ,m_ffStates(manager.GetTranslationSystem()->GetStatefulFeatureFunctions().size())
,m_arcList(NULL)
+ ,m_winningHypo(NULL)
,m_manager(manager)
{
- assert(GetCurrTargetPhrase().GetSize() == m_wordsConsumedTargetOrder.size());
- //TRACE_ERR(m_targetPhrase << endl);
-
+ // underlying hypotheses for sub-spans
m_numTargetTerminals = GetCurrTargetPhrase().GetNumTerminals();
+ const std::vector<HypothesisDimension> &childEntries = item.GetHypothesisDimensions();
- const std::vector<ChildEntry> &childEntries = queueEntry.GetChildEntries();
+ // ... are stored
assert(m_prevHypos.empty());
m_prevHypos.reserve(childEntries.size());
- vector<ChildEntry>::const_iterator iter;
- for (iter = childEntries.begin(); iter != childEntries.end(); ++iter) {
- const ChildEntry &childEntry = *iter;
- const Hypothesis *prevHypo = childEntry.GetHypothesis();
+ std::vector<HypothesisDimension>::const_iterator iter;
+ for (iter = childEntries.begin(); iter != childEntries.end(); ++iter)
+ {
+ const HypothesisDimension &dimension = *iter;
+ const ChartHypothesis *prevHypo = dimension.GetHypothesis();
+
+ // keep count of words (= length of generated string)
m_numTargetTerminals += prevHypo->GetNumTargetTerminals();
m_prevHypos.push_back(prevHypo);
}
+ // compute the relevant context for language model scoring (prefix and suffix strings)
size_t maxNGram = manager.GetTranslationSystem()->GetLanguageModels().GetMaxNGramOrder();
CalcPrefix(m_contextPrefix, maxNGram - 1);
CalcSuffix(m_contextSuffix, maxNGram - 1);
}
-Hypothesis::~Hypothesis()
+ChartHypothesis::~ChartHypothesis()
{
+ // delete feature function states
+ for (unsigned i = 0; i < m_ffStates.size(); ++i) {
+ delete m_ffStates[i];
+ }
+
+ // delete hypotheses that are not in the chart (recombined away)
if (m_arcList) {
- ArcList::iterator iter;
+ ChartArcList::iterator iter;
for (iter = m_arcList->begin() ; iter != m_arcList->end() ; ++iter) {
- Hypothesis *hypo = *iter;
+ ChartHypothesis *hypo = *iter;
Delete(hypo);
}
m_arcList->clear();
@@ -90,42 +102,62 @@ Hypothesis::~Hypothesis()
}
}
-void Hypothesis::CreateOutputPhrase(Phrase &outPhrase) const
+/** Create full output phrase that is contained in the hypothesis (and its children)
+ * \param outPhrase full output phrase
+ */
+void ChartHypothesis::CreateOutputPhrase(Phrase &outPhrase) const
{
+ const AlignmentInfo::NonTermIndexMap &nonTermIndexMap =
+ GetCurrTargetPhrase().GetAlignmentInfo().GetNonTermIndexMap();
+
for (size_t pos = 0; pos < GetCurrTargetPhrase().GetSize(); ++pos) {
const Word &word = GetCurrTargetPhrase().GetWord(pos);
if (word.IsNonTerminal()) {
// non-term. fill out with prev hypo
- size_t nonTermInd = m_wordsConsumedTargetOrder[pos];
- const Hypothesis *prevHypo = m_prevHypos[nonTermInd];
+ size_t nonTermInd = nonTermIndexMap[pos];
+ const ChartHypothesis *prevHypo = m_prevHypos[nonTermInd];
prevHypo->CreateOutputPhrase(outPhrase);
- } else {
+ }
+ else {
outPhrase.AddWord(word);
}
}
}
-Phrase Hypothesis::GetOutputPhrase() const
+/** Return full output phrase */
+Phrase ChartHypothesis::GetOutputPhrase() const
{
- Phrase outPhrase(Output);
+ Phrase outPhrase(Output, ARRAY_SIZE_INCR);
CreateOutputPhrase(outPhrase);
return outPhrase;
}
-size_t Hypothesis::CalcPrefix(Phrase &ret, size_t size) const
+/** Construct the prefix string of up to specified size
+ * \param ret prefix string
+ * \param size maximum size (typically max lm context window)
+ */
+size_t ChartHypothesis::CalcPrefix(Phrase &ret, size_t size) const
{
+ const AlignmentInfo::NonTermIndexMap &nonTermIndexMap =
+ GetCurrTargetPhrase().GetAlignmentInfo().GetNonTermIndexMap();
+
+ // loop over the rule that is being applied
for (size_t pos = 0; pos < GetCurrTargetPhrase().GetSize(); ++pos) {
const Word &word = GetCurrTargetPhrase().GetWord(pos);
+ // for non-terminals, retrieve it from underlying hypothesis
if (word.IsNonTerminal()) {
- size_t nonTermInd = m_wordsConsumedTargetOrder[pos];
- const Hypothesis *prevHypo = m_prevHypos[nonTermInd];
+ size_t nonTermInd = nonTermIndexMap[pos];
+ const ChartHypothesis *prevHypo = m_prevHypos[nonTermInd];
size = prevHypo->CalcPrefix(ret, size);
- } else {
+ }
+ // for words, add word
+ else {
ret.AddWord(GetCurrTargetPhrase().GetWord(pos));
size--;
}
+ // finish when maximum length reached
if (size==0)
break;
}
@@ -133,14 +165,20 @@ size_t Hypothesis::CalcPrefix(Phrase &ret, size_t size) const
return size;
}
-size_t Hypothesis::CalcSuffix(Phrase &ret, size_t size) const
+/** Construct the suffix phrase of up to specified size
+ * will always be called after the construction of prefix phrase
+ * \param ret suffix phrase
+ * \param size maximum size of suffix
+ */
+size_t ChartHypothesis::CalcSuffix(Phrase &ret, size_t size) const
{
assert(m_contextPrefix.GetSize() <= m_numTargetTerminals);
+ // special handling for small hypotheses
+ // does the prefix match the entire hypothesis string? -> just copy prefix
if (m_contextPrefix.GetSize() == m_numTargetTerminals) {
- // small hypo. the prefix will contains the whole hypo
- size_t maxCount = min(m_contextPrefix.GetSize(), size)
- , pos = m_contextPrefix.GetSize() - 1;
+ size_t maxCount = std::min(m_contextPrefix.GetSize(), size);
+ size_t pos= m_contextPrefix.GetSize() - 1;
for (size_t ind = 0; ind < maxCount; ++ind) {
const Word &word = m_contextPrefix.GetWord(pos);
@@ -150,15 +188,20 @@ size_t Hypothesis::CalcSuffix(Phrase &ret, size_t size) const
size -= maxCount;
return size;
- } else {
+ }
+ // construct suffix analogous to prefix
+ else {
+ const AlignmentInfo::NonTermIndexMap &nonTermIndexMap =
+ GetCurrTargetPhrase().GetAlignmentInfo().GetNonTermIndexMap();
for (int pos = (int) GetCurrTargetPhrase().GetSize() - 1; pos >= 0 ; --pos) {
const Word &word = GetCurrTargetPhrase().GetWord(pos);
if (word.IsNonTerminal()) {
- size_t nonTermInd = m_wordsConsumedTargetOrder[pos];
- const Hypothesis *prevHypo = m_prevHypos[nonTermInd];
+ size_t nonTermInd = nonTermIndexMap[pos];
+ const ChartHypothesis *prevHypo = m_prevHypos[nonTermInd];
size = prevHypo->CalcSuffix(ret, size);
- } else {
+ }
+ else {
ret.PrependWord(GetCurrTargetPhrase().GetWord(pos));
size--;
}
@@ -171,33 +214,38 @@ size_t Hypothesis::CalcSuffix(Phrase &ret, size_t size) const
}
}
-int Hypothesis::LMContextCompare(const Hypothesis &other) const
+/** check, if two hypothesis can be recombined.
+ this is actually a sorting function that allows us to
+ keep an ordered list of hypotheses. This makes recombination
+ much quicker.
+*/
+int ChartHypothesis::RecombineCompare(const ChartHypothesis &compare) const
{
- // prefix
- if (m_currSourceWordsRange.GetStartPos() > 0) {
- int ret = GetPrefix().Compare(other.GetPrefix());
- if (ret != 0)
- return ret;
- }
-
- // suffix
- size_t inputSize = m_manager.GetSource().GetSize();
- if (m_currSourceWordsRange.GetEndPos() < inputSize - 1) {
- int ret = GetSuffix().Compare(other.GetSuffix());
- if (ret != 0)
- return ret;
+ int comp = 0;
+ // -1 = this < compare
+ // +1 = this > compare
+ // 0 = this ==compare
+
+ for (unsigned i = 0; i < m_ffStates.size(); ++i)
+ {
+ if (m_ffStates[i] == NULL || compare.m_ffStates[i] == NULL)
+ comp = m_ffStates[i] - compare.m_ffStates[i];
+ else
+ comp = m_ffStates[i]->Compare(*compare.m_ffStates[i]);
+
+ if (comp != 0)
+ return comp;
}
- // they're the same
return 0;
}
-void Hypothesis::CalcScore()
+void ChartHypothesis::CalcScore()
{
// total scores from prev hypos
- std::vector<const Hypothesis*>::iterator iter;
+ std::vector<const ChartHypothesis*>::iterator iter;
for (iter = m_prevHypos.begin(); iter != m_prevHypos.end(); ++iter) {
- const Hypothesis &prevHypo = **iter;
+ const ChartHypothesis &prevHypo = **iter;
const ScoreComponentCollection &scoreBreakdown = prevHypo.GetScoreBreakdown();
m_scoreBreakdown.PlusEquals(scoreBreakdown);
@@ -207,104 +255,40 @@ void Hypothesis::CalcScore()
const ScoreComponentCollection &scoreBreakdown = GetCurrTargetPhrase().GetScoreBreakdown();
m_scoreBreakdown.PlusEquals(scoreBreakdown);
- CalcLMScore();
+ // compute values of stateless feature functions that were not
+ // cached in the translation option-- there is no principled distinction
- m_totalScore = m_scoreBreakdown.GetWeightedScore();
-}
-
-void Hypothesis::CalcLMScore()
-{
- const LMList& lmList = m_manager.GetTranslationSystem()->GetLanguageModels();
- assert(m_lmNGram.GetWeightedScore() == 0);
+ //const vector<const StatelessFeatureFunction*>& sfs =
+ // m_manager.GetTranslationSystem()->GetStatelessFeatureFunctions();
+ // TODO!
+ //for (unsigned i = 0; i < sfs.size(); ++i) {
+ // sfs[i]->ChartEvaluate(m_targetPhrase, &m_scoreBreakdown);
+ //}
- m_scoreBreakdown.ZeroAllLM(lmList);
-
- Phrase outPhrase(Output); // = GetOutputPhrase();
- bool calcNow = false, firstPhrase = true;
-
- for (size_t targetPhrasePos = 0; targetPhrasePos < GetCurrTargetPhrase().GetSize(); ++targetPhrasePos) {
- const Word &targetWord = GetCurrTargetPhrase().GetWord(targetPhrasePos);
- if (!targetWord.IsNonTerminal()) {
- // just a word, add to phrase for lm scoring
- outPhrase.AddWord(targetWord);
- } else {
- size_t nonTermInd = m_wordsConsumedTargetOrder[targetPhrasePos];
- const Hypothesis *prevHypo = m_prevHypos[nonTermInd];
- size_t numTargetTerminals = prevHypo->GetNumTargetTerminals();
-
- if (numTargetTerminals >= lmList.GetMaxNGramOrder() - 1) {
- // large hypo (for trigram lm, another hypo equal or over 2 words). just take the prefix & suffix
- m_lmNGram.PlusEqualsAllLM(lmList, prevHypo->m_lmNGram);
-
- // calc & add overlapping lm scores
- // prefix
- outPhrase.Append(prevHypo->GetPrefix());
- calcNow = true;
- } else {
- // small hypo (for trigram lm, 1-word hypos).
- // add target phrase to temp phrase and continue, but don't score yet
- outPhrase.Append(prevHypo->GetPrefix());
- }
+ const std::vector<const StatefulFeatureFunction*>& ffs =
+ m_manager.GetTranslationSystem()->GetStatefulFeatureFunctions();
+ for (unsigned i = 0; i < ffs.size(); ++i) {
+ m_ffStates[i] = ffs[i]->EvaluateChart(*this,i,&m_scoreBreakdown);
+ }
- if (calcNow) {
- if (targetPhrasePos == 0 && numTargetTerminals >= lmList.GetMaxNGramOrder() - 1) {
- // get from other prev hypo. faster
- m_lmPrefix = prevHypo->m_lmPrefix;
- m_lmNGram = prevHypo->m_lmNGram;
- } else {
- // calc
- lmList.CalcAllLMScores(outPhrase
- , m_lmNGram
- , (firstPhrase) ? &m_lmPrefix : NULL);
- }
-
- // create new phrase from suffix. score later when appended with next words
- outPhrase.Clear();
- outPhrase.Append(prevHypo->GetSuffix());
-
- firstPhrase = false;
- calcNow = false;
- }
- } // if (!targetWord.IsNonTerminal())
- } // for (size_t targetPhrasePos
-
- lmList.CalcAllLMScores(outPhrase
- , m_lmNGram
- , (firstPhrase) ? &m_lmPrefix : NULL);
-
- m_scoreBreakdown.PlusEqualsAllLM(lmList, m_lmPrefix);
- m_scoreBreakdown.PlusEqualsAllLM(lmList, m_lmNGram);
-
- /*
- // lazy way. keep for comparison
- Phrase outPhrase = GetOutputPhrase();
- // cerr << outPhrase << " ";
-
- float retFullScore, retNGramScore;
- StaticData::Instance().GetAllLM().CalcScore(outPhrase
- , retFullScore
- , retNGramScore
- , m_scoreBreakdown
- , &m_lmNGram
- , false);
- */
+ m_totalScore = m_scoreBreakdown.GetWeightedScore();
}
-void Hypothesis::AddArc(Hypothesis *loserHypo)
+void ChartHypothesis::AddArc(ChartHypothesis *loserHypo)
{
if (!m_arcList) {
if (loserHypo->m_arcList) { // we don't have an arcList, but loser does
this->m_arcList = loserHypo->m_arcList; // take ownership, we'll delete
loserHypo->m_arcList = 0; // prevent a double deletion
} else {
- this->m_arcList = new ArcList();
+ this->m_arcList = new ChartArcList();
}
} else {
if (loserHypo->m_arcList) { // both have an arc list: merge. delete loser
size_t my_size = m_arcList->size();
size_t add_size = loserHypo->m_arcList->size();
this->m_arcList->resize(my_size + add_size, 0);
- std::memcpy(&(*m_arcList)[0] + my_size, &(*loserHypo->m_arcList)[0], add_size * sizeof(Hypothesis *));
+ std::memcpy(&(*m_arcList)[0] + my_size, &(*loserHypo->m_arcList)[0], add_size * sizeof(ChartHypothesis *));
delete loserHypo->m_arcList;
loserHypo->m_arcList = 0;
} else { // loserHypo doesn't have any arcs
@@ -315,13 +299,13 @@ void Hypothesis::AddArc(Hypothesis *loserHypo)
}
// sorting helper
-struct CompareChartHypothesisTotalScore {
- bool operator()(const Hypothesis* hypo1, const Hypothesis* hypo2) const {
+struct CompareChartChartHypothesisTotalScore {
+ bool operator()(const ChartHypothesis* hypo1, const ChartHypothesis* hypo2) const {
return hypo1->GetTotalScore() > hypo2->GetTotalScore();
}
};
-void Hypothesis::CleanupArcList()
+void ChartHypothesis::CleanupArcList()
{
// point this hypo's main hypo to itself
m_winningHypo = this;
@@ -341,29 +325,29 @@ void Hypothesis::CleanupArcList()
nth_element(m_arcList->begin()
, m_arcList->begin() + nBestSize - 1
, m_arcList->end()
- , CompareChartHypothesisTotalScore());
+ , CompareChartChartHypothesisTotalScore());
// delete bad ones
- ArcList::iterator iter;
+ ChartArcList::iterator iter;
for (iter = m_arcList->begin() + nBestSize ; iter != m_arcList->end() ; ++iter) {
- Hypothesis *arc = *iter;
- Hypothesis::Delete(arc);
+ ChartHypothesis *arc = *iter;
+ ChartHypothesis::Delete(arc);
}
m_arcList->erase(m_arcList->begin() + nBestSize
, m_arcList->end());
}
// set all arc's main hypo variable to this hypo
- ArcList::iterator iter = m_arcList->begin();
+ ChartArcList::iterator iter = m_arcList->begin();
for (; iter != m_arcList->end() ; ++iter) {
- Hypothesis *arc = *iter;
+ ChartHypothesis *arc = *iter;
arc->SetWinningHypo(this);
}
//cerr << m_arcList->size() << " ";
}
-void Hypothesis::SetWinningHypo(const Hypothesis *hypo)
+void ChartHypothesis::SetWinningHypo(const ChartHypothesis *hypo)
{
m_winningHypo = hypo;
@@ -372,24 +356,28 @@ void Hypothesis::SetWinningHypo(const Hypothesis *hypo)
m_contextSuffix.Clear();
}
-TO_STRING_BODY(Hypothesis)
+TO_STRING_BODY(ChartHypothesis)
// friend
-ostream& operator<<(ostream& out, const Hypothesis& hypo)
+std::ostream& operator<<(std::ostream& out, const ChartHypothesis& hypo)
{
- //Phrase outPhrase(Output);
- //hypo.CreateOutputPhrase(outPhrase);
- // words bitmap
- out << " " << hypo.GetId()
- << " " << hypo.GetCurrTargetPhrase()
+ out << hypo.GetId();
+
+ // recombination
+ if (hypo.GetWinningHypothesis() != NULL &&
+ hypo.GetWinningHypothesis()->GetId() != hypo.GetId())
+ {
+ out << "->" << hypo.GetWinningHypothesis()->GetId();
+ }
+
+ out << " " << hypo.GetCurrTargetPhrase()
//<< " " << outPhrase
<< " " << hypo.GetCurrSourceRange();
- //<< " " << hypo.m_currSourceWordsRange
HypoList::const_iterator iter;
for (iter = hypo.GetPrevHypos().begin(); iter != hypo.GetPrevHypos().end(); ++iter) {
- const Hypothesis &prevHypo = **iter;
+ const ChartHypothesis &prevHypo = **iter;
out << " " << prevHypo.GetId();
}
@@ -402,4 +390,3 @@ ostream& operator<<(ostream& out, const Hypothesis& hypo)
}
}
-
diff --git a/moses/src/ChartHypothesis.h b/moses/src/ChartHypothesis.h
new file mode 100644
index 000000000..983213752
--- /dev/null
+++ b/moses/src/ChartHypothesis.h
@@ -0,0 +1,177 @@
+// $Id$
+// vim:tabstop=2
+/***********************************************************************
+ Moses - factored phrase-based language decoder
+ Copyright (C) 2010 Hieu Hoang
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ ***********************************************************************/
+
+#pragma once
+
+#include <vector>
+#include "Util.h"
+#include "WordsRange.h"
+#include "ScoreComponentCollection.h"
+#include "Phrase.h"
+#include "ChartTranslationOption.h"
+#include "ObjectPool.h"
+
+namespace Moses
+{
+
+class ChartHypothesis;
+class ChartManager;
+class RuleCubeItem;
+
+typedef std::vector<ChartHypothesis*> ChartArcList;
+
+class ChartHypothesis
+{
+ friend std::ostream& operator<<(std::ostream&, const ChartHypothesis&);
+
+protected:
+
+#ifdef USE_HYPO_POOL
+ static ObjectPool<ChartHypothesis> s_objectPool;
+#endif
+
+ static unsigned int s_HypothesesCreated;
+
+ int m_id; /**< numeric ID of this hypothesis, used for logging */
+ const TargetPhrase &m_targetPhrase;
+ const ChartTranslationOption &m_transOpt;
+
+ Phrase m_contextPrefix, m_contextSuffix;
+ WordsRange m_currSourceWordsRange;
+ std::vector<const FFState*> m_ffStates; /*! stateful feature function states */
+ ScoreComponentCollection m_scoreBreakdown /*! detailed score break-down by components (for instance language model, word penalty, etc) */
+ ,m_lmNGram
+ ,m_lmPrefix;
+ float m_totalScore;
+ size_t m_numTargetTerminals;
+
+ ChartArcList *m_arcList; /*! all arcs that end at the same trellis point as this hypothesis */
+ const ChartHypothesis *m_winningHypo;
+
+ std::vector<const ChartHypothesis*> m_prevHypos;
+
+ ChartManager& m_manager;
+
+ size_t CalcPrefix(Phrase &ret, size_t size) const;
+ size_t CalcSuffix(Phrase &ret, size_t size) const;
+
+ ChartHypothesis(); // not implemented
+ ChartHypothesis(const ChartHypothesis &copy); // not implemented
+
+public:
+ static void ResetHypoCount() {
+ s_HypothesesCreated = 0;
+ }
+ static unsigned int GetHypoCount() {
+ return s_HypothesesCreated;
+ }
+
+#ifdef USE_HYPO_POOL
+ void *operator new(size_t /* num_bytes */) {
+ void *ptr = s_objectPool.getPtr();
+ return ptr;
+ }
+
+ static void Delete(ChartHypothesis *hypo) {
+ s_objectPool.freeObject(hypo);
+ }
+#else
+ static void Delete(ChartHypothesis *hypo) {
+ delete hypo;
+ }
+#endif
+
+ ChartHypothesis(const ChartTranslationOption &, const RuleCubeItem &item,
+ ChartManager &manager);
+
+ ~ChartHypothesis();
+
+ int GetId()const {
+ return m_id;
+ }
+ const ChartTranslationOption &GetTranslationOption()const {
+ return m_transOpt;
+ }
+ const TargetPhrase &GetCurrTargetPhrase()const {
+ return m_targetPhrase;
+ }
+ const WordsRange &GetCurrSourceRange()const {
+ return m_currSourceWordsRange;
+ }
+ inline const ChartArcList* GetArcList() const {
+ return m_arcList;
+ }
+ inline const FFState* GetFFState( size_t featureID ) const {
+ return m_ffStates[ featureID ];
+ }
+ inline const ChartManager& GetManager() const { return m_manager; }
+
+ void CreateOutputPhrase(Phrase &outPhrase) const;
+ Phrase GetOutputPhrase() const;
+
+ int RecombineCompare(const ChartHypothesis &compare) const;
+
+ const Phrase &GetPrefix() const {
+ return m_contextPrefix;
+ }
+ const Phrase &GetSuffix() const {
+ return m_contextSuffix;
+ }
+
+ void CalcScore();
+
+ void AddArc(ChartHypothesis *loserHypo);
+ void CleanupArcList();
+ void SetWinningHypo(const ChartHypothesis *hypo);
+
+ const ScoreComponentCollection &GetScoreBreakdown() const {
+ return m_scoreBreakdown;
+ }
+ float GetTotalScore() const {
+ return m_totalScore;
+ }
+
+ const std::vector<const ChartHypothesis*> &GetPrevHypos() const {
+ return m_prevHypos;
+ }
+
+ const ChartHypothesis* GetPrevHypo(size_t pos) const {
+ return m_prevHypos[pos];
+ }
+
+ const Word &GetTargetLHS() const {
+ return GetCurrTargetPhrase().GetTargetLHS();
+ }
+
+ size_t GetNumTargetTerminals() const {
+ return m_numTargetTerminals;
+ }
+
+ const ChartHypothesis* GetWinningHypothesis() const {
+ return m_winningHypo;
+ }
+
+ TO_STRING();
+
+}; // class ChartHypothesis
+
+}
+
diff --git a/moses-chart/src/ChartHypothesisCollection.cpp b/moses/src/ChartHypothesisCollection.cpp
index 89bf6cf51..a6fe3fd41 100644
--- a/moses-chart/src/ChartHypothesisCollection.cpp
+++ b/moses/src/ChartHypothesisCollection.cpp
@@ -20,7 +20,7 @@
***********************************************************************/
#include <algorithm>
-#include "../../moses/src/StaticData.h"
+#include "StaticData.h"
#include "ChartHypothesisCollection.h"
#include "ChartHypothesis.h"
#include "ChartManager.h"
@@ -28,10 +28,10 @@
using namespace std;
using namespace Moses;
-namespace MosesChart
+namespace Moses
{
-HypothesisCollection::HypothesisCollection()
+ChartHypothesisCollection::ChartHypothesisCollection()
{
const StaticData &staticData = StaticData::Instance();
@@ -41,28 +41,30 @@ HypothesisCollection::HypothesisCollection()
m_bestScore = -std::numeric_limits<float>::infinity();
}
-HypothesisCollection::~HypothesisCollection()
+ChartHypothesisCollection::~ChartHypothesisCollection()
{
HCType::iterator iter;
for (iter = m_hypos.begin() ; iter != m_hypos.end() ; ++iter) {
- Hypothesis *hypo = *iter;
- Hypothesis::Delete(hypo);
+ ChartHypothesis *hypo = *iter;
+ ChartHypothesis::Delete(hypo);
}
- //Moses::RemoveAllInColl(m_hypos);
+ //RemoveAllInColl(m_hypos);
}
-bool HypothesisCollection::AddHypothesis(Hypothesis *hypo, Manager &manager)
+bool ChartHypothesisCollection::AddHypothesis(ChartHypothesis *hypo, ChartManager &manager)
{
if (hypo->GetTotalScore() < m_bestScore + m_beamWidth) {
// really bad score. don't bother adding hypo into collection
manager.GetSentenceStats().AddDiscarded();
VERBOSE(3,"discarded, too bad for stack" << std::endl);
- Hypothesis::Delete(hypo);
+ ChartHypothesis::Delete(hypo);
return false;
}
// over threshold, try to add to collection
std::pair<HCType::iterator, bool> addRet = Add(hypo, manager);
+
+ // does it have the same state as an existing hypothesis?
if (addRet.second) {
// nothing found. add to collection
return true;
@@ -70,7 +72,7 @@ bool HypothesisCollection::AddHypothesis(Hypothesis *hypo, Manager &manager)
// equiv hypo exists, recombine with other hypo
HCType::iterator &iterExisting = addRet.first;
- Hypothesis *hypoExisting = *iterExisting;
+ ChartHypothesis *hypoExisting = *iterExisting;
assert(iterExisting != m_hypos.end());
//StaticData::Instance().GetSentenceStats().AddRecombination(*hypo, **iterExisting);
@@ -99,14 +101,15 @@ bool HypothesisCollection::AddHypothesis(Hypothesis *hypo, Manager &manager)
VERBOSE(3,"worse than matching hyp " << hypoExisting->GetId() << ", recombining" << std::endl)
if (m_nBestIsEnabled) {
hypoExisting->AddArc(hypo);
- } else {
- Hypothesis::Delete(hypo);
+ }
+ else {
+ ChartHypothesis::Delete(hypo);
}
return false;
}
}
-pair<HypothesisCollection::HCType::iterator, bool> HypothesisCollection::Add(Hypothesis *hypo, Manager &manager)
+pair<ChartHypothesisCollection::HCType::iterator, bool> ChartHypothesisCollection::Add(ChartHypothesis *hypo, ChartManager &manager)
{
std::pair<HCType::iterator, bool> ret = m_hypos.insert(hypo);
if (ret.second) {
@@ -132,14 +135,14 @@ pair<HypothesisCollection::HCType::iterator, bool> HypothesisCollection::Add(Hyp
}
/** Remove hypothesis pointed to by iterator but don't delete the object. */
-void HypothesisCollection::Detach(const HCType::iterator &iter)
+void ChartHypothesisCollection::Detach(const HCType::iterator &iter)
{
m_hypos.erase(iter);
}
-void HypothesisCollection::Remove(const HCType::iterator &iter)
+void ChartHypothesisCollection::Remove(const HCType::iterator &iter)
{
- Hypothesis *h = *iter;
+ ChartHypothesis *h = *iter;
/*
stringstream strme("");
@@ -155,10 +158,10 @@ void HypothesisCollection::Remove(const HCType::iterator &iter)
*/
Detach(iter);
- Hypothesis::Delete(h);
+ ChartHypothesis::Delete(h);
}
-void HypothesisCollection::PruneToSize(Manager &manager)
+void ChartHypothesisCollection::PruneToSize(ChartManager &manager)
{
if (GetSize() > m_maxHypoStackSize) { // ok, if not over the limit
priority_queue<float> bestScores;
@@ -168,7 +171,7 @@ void HypothesisCollection::PruneToSize(Manager &manager)
HCType::iterator iter = m_hypos.begin();
float score = 0;
while (iter != m_hypos.end()) {
- Hypothesis *hypo = *iter;
+ ChartHypothesis *hypo = *iter;
score = hypo->GetTotalScore();
if (score > m_bestScore+m_beamWidth) {
bestScores.push(score);
@@ -188,7 +191,7 @@ void HypothesisCollection::PruneToSize(Manager &manager)
// delete all hypos under score threshold
iter = m_hypos.begin();
while (iter != m_hypos.end()) {
- Hypothesis *hypo = *iter;
+ ChartHypothesis *hypo = *iter;
float score = hypo->GetTotalScore();
if (score < scoreThreshold) {
HCType::iterator iterRemove = iter++;
@@ -203,7 +206,7 @@ void HypothesisCollection::PruneToSize(Manager &manager)
IFVERBOSE(3) {
TRACE_ERR("stack now contains: ");
for(iter = m_hypos.begin(); iter != m_hypos.end(); iter++) {
- Hypothesis *hypo = *iter;
+ ChartHypothesis *hypo = *iter;
TRACE_ERR( hypo->GetId() << " (" << hypo->GetTotalScore() << ") ");
}
TRACE_ERR( endl);
@@ -211,16 +214,16 @@ void HypothesisCollection::PruneToSize(Manager &manager)
// desperation pruning
if (m_hypos.size() > m_maxHypoStackSize * 2) {
- std::vector<Hypothesis*> hyposOrdered;
+ std::vector<ChartHypothesis*> hyposOrdered;
// sort hypos
std::copy(m_hypos.begin(), m_hypos.end(), std::inserter(hyposOrdered, hyposOrdered.end()));
std::sort(hyposOrdered.begin(), hyposOrdered.end(), ChartHypothesisScoreOrderer());
//keep only |size|. delete the rest
- std::vector<Hypothesis*>::iterator iter;
+ std::vector<ChartHypothesis*>::iterator iter;
for (iter = hyposOrdered.begin() + (m_maxHypoStackSize * 2); iter != hyposOrdered.end(); ++iter) {
- Hypothesis *hypo = *iter;
+ ChartHypothesis *hypo = *iter;
HCType::iterator iterFindHypo = m_hypos.find(hypo);
assert(iterFindHypo != m_hypos.end());
Remove(iterFindHypo);
@@ -229,7 +232,7 @@ void HypothesisCollection::PruneToSize(Manager &manager)
}
}
-void HypothesisCollection::SortHypotheses()
+void ChartHypothesisCollection::SortHypotheses()
{
assert(m_hyposOrdered.empty());
if (!m_hypos.empty()) {
@@ -242,39 +245,42 @@ void HypothesisCollection::SortHypotheses()
}
}
-void HypothesisCollection::CleanupArcList()
+void ChartHypothesisCollection::CleanupArcList()
{
HCType::iterator iter;
for (iter = m_hypos.begin() ; iter != m_hypos.end() ; ++iter) {
- Hypothesis *mainHypo = *iter;
+ ChartHypothesis *mainHypo = *iter;
mainHypo->CleanupArcList();
}
}
-void HypothesisCollection::GetSearchGraph(long translationId, std::ostream &outputSearchGraphStream) const
+void ChartHypothesisCollection::GetSearchGraph(long translationId, std::ostream &outputSearchGraphStream, const std::map<int,bool> &reachable) const
{
HCType::const_iterator iter;
for (iter = m_hypos.begin() ; iter != m_hypos.end() ; ++iter) {
- Hypothesis &mainHypo = **iter;
- outputSearchGraphStream << translationId << " " << mainHypo << endl;
+ ChartHypothesis &mainHypo = **iter;
+ if (reachable.find(mainHypo.GetId()) != reachable.end()) {
+ outputSearchGraphStream << translationId << " " << mainHypo << endl;
+ }
- const ArcList *arcList = mainHypo.GetArcList();
+ const ChartArcList *arcList = mainHypo.GetArcList();
if (arcList) {
- ArcList::const_iterator iterArc;
+ ChartArcList::const_iterator iterArc;
for (iterArc = arcList->begin(); iterArc != arcList->end(); ++iterArc) {
- const Hypothesis &arc = **iterArc;
- outputSearchGraphStream << translationId << " " << arc << endl;
+ const ChartHypothesis &arc = **iterArc;
+ if (reachable.find(arc.GetId()) != reachable.end()) {
+ outputSearchGraphStream << translationId << " " << arc << endl;
+ }
}
}
-
}
}
-std::ostream& operator<<(std::ostream &out, const HypothesisCollection &coll)
+std::ostream& operator<<(std::ostream &out, const ChartHypothesisCollection &coll)
{
HypoList::const_iterator iterInside;
for (iterInside = coll.m_hyposOrdered.begin(); iterInside != coll.m_hyposOrdered.end(); ++iterInside) {
- const Hypothesis &hypo = **iterInside;
+ const ChartHypothesis &hypo = **iterInside;
out << hypo << endl;
}
diff --git a/moses-chart/src/ChartHypothesisCollection.h b/moses/src/ChartHypothesisCollection.h
index 6a55d42c1..f0fcaa69f 100644
--- a/moses-chart/src/ChartHypothesisCollection.h
+++ b/moses/src/ChartHypothesisCollection.h
@@ -22,40 +22,34 @@
#include <set>
#include "ChartHypothesis.h"
-#include "QueueEntry.h"
+#include "RuleCube.h"
-namespace MosesChart
+namespace Moses
{
// order by descending score
class ChartHypothesisScoreOrderer
{
public:
- bool operator()(const Hypothesis* hypoA, const Hypothesis* hypoB) const {
+ bool operator()(const ChartHypothesis* hypoA, const ChartHypothesis* hypoB) const {
return hypoA->GetTotalScore() > hypoB->GetTotalScore();
}
};
-class HypothesisRecombinationOrderer
+class ChartHypothesisRecombinationOrderer
{
public:
- bool operator()(const Hypothesis* hypoA, const Hypothesis* hypoB) const {
+ bool operator()(const ChartHypothesis* hypoA, const ChartHypothesis* hypoB) const {
// assert in same cell
- const Moses::WordsRange &rangeA = hypoA->GetCurrSourceRange()
+ const WordsRange &rangeA = hypoA->GetCurrSourceRange()
, &rangeB = hypoB->GetCurrSourceRange();
assert(rangeA == rangeB);
- /*
- int ret = Moses::Word::Compare(hypoA->GetTargetLHS(), hypoB->GetTargetLHS());
- if (ret != 0)
- return (ret < 0);
- */
-
// shouldn't be mixing hypos with different lhs
assert(hypoA->GetTargetLHS() == hypoB->GetTargetLHS());
- int ret = hypoA->LMContextCompare(*hypoB);
+ int ret = hypoA->RecombineCompare(*hypoB);
if (ret != 0)
return (ret < 0);
@@ -63,22 +57,13 @@ public:
}
};
-// order by descending score
-class HypothesisScoreOrderer
-{
-public:
- bool operator()(const Hypothesis* hypoA, const Hypothesis* hypoB) const {
- return hypoA->GetTotalScore() > hypoB->GetTotalScore();
- }
-};
-
// 1 of these for each target LHS in each cell
-class HypothesisCollection
+class ChartHypothesisCollection
{
- friend std::ostream& operator<<(std::ostream&, const HypothesisCollection&);
+ friend std::ostream& operator<<(std::ostream&, const ChartHypothesisCollection&);
protected:
- typedef std::set<Hypothesis*, HypothesisRecombinationOrderer> HCType;
+ typedef std::set<ChartHypothesis*, ChartHypothesisRecombinationOrderer> HCType;
HCType m_hypos;
HypoList m_hyposOrdered;
@@ -90,7 +75,7 @@ protected:
/** add hypothesis to stack. Prune if necessary.
* Returns false if equiv hypo exists in collection, otherwise returns true
*/
- std::pair<HCType::iterator, bool> Add(Hypothesis *hypo, Manager &manager);
+ std::pair<HCType::iterator, bool> Add(ChartHypothesis *hypo, ChartManager &manager);
public:
typedef HCType::iterator iterator;
@@ -103,16 +88,16 @@ public:
return m_hypos.end();
}
- HypothesisCollection();
- ~HypothesisCollection();
- bool AddHypothesis(Hypothesis *hypo, Manager &manager);
+ ChartHypothesisCollection();
+ ~ChartHypothesisCollection();
+ bool AddHypothesis(ChartHypothesis *hypo, ChartManager &manager);
//! remove hypothesis pointed to by iterator but don't delete the object
void Detach(const HCType::iterator &iter);
/** destroy Hypothesis pointed to by iterator (object pool version) */
void Remove(const HCType::iterator &iter);
- void PruneToSize(Manager &manager);
+ void PruneToSize(ChartManager &manager);
size_t GetSize() const {
return m_hypos.size();
@@ -128,7 +113,9 @@ public:
return m_hyposOrdered;
}
- void GetSearchGraph(long translationId, std::ostream &outputSearchGraphStream) const;
+ float GetBestScore() const { return m_bestScore; }
+
+ void GetSearchGraph(long translationId, std::ostream &outputSearchGraphStream, const std::map<int,bool> &reachable) const;
};
diff --git a/moses-chart/src/ChartManager.cpp b/moses/src/ChartManager.cpp
index cab415a98..c3806f9b4 100644
--- a/moses-chart/src/ChartManager.cpp
+++ b/moses/src/ChartManager.cpp
@@ -26,8 +26,8 @@
#include "ChartTrellisPath.h"
#include "ChartTrellisPathList.h"
#include "ChartTrellisPathCollection.h"
-#include "../../moses/src/StaticData.h"
-#include "../../moses/src/DecodeStep.h"
+#include "StaticData.h"
+#include "DecodeStep.h"
using namespace std;
using namespace Moses;
@@ -35,12 +35,8 @@ using namespace Moses;
namespace Moses
{
extern bool g_debug;
-}
-
-namespace MosesChart
-{
-Manager::Manager(InputType const& source, const TranslationSystem* system)
+ChartManager::ChartManager(InputType const& source, const TranslationSystem* system)
:m_source(source)
,m_hypoStackColl(source, *this)
,m_transOptColl(source, system, m_hypoStackColl, m_ruleLookupManagers)
@@ -59,7 +55,7 @@ Manager::Manager(InputType const& source, const TranslationSystem* system)
}
}
-Manager::~Manager()
+ChartManager::~ChartManager()
{
m_system->CleanUpAfterSentenceProcessing();
@@ -72,14 +68,14 @@ Manager::~Manager()
}
-void Manager::ProcessSentence()
+void ChartManager::ProcessSentence()
{
VERBOSE(1,"Translating: " << m_source << endl);
ResetSentenceStats(m_source);
VERBOSE(2,"Decoding: " << endl);
- //Hypothesis::ResetHypoCount();
+ //ChartHypothesis::ResetHypoCount();
// MAIN LOOP
size_t size = m_source.GetSize();
@@ -110,7 +106,7 @@ void Manager::ProcessSentence()
}
IFVERBOSE(1) {
- cerr << "Num of hypo = " << Hypothesis::GetHypoCount() << " --- cells:" << endl;
+ cerr << "Num of hypo = " << ChartHypothesis::GetHypoCount() << " --- cells:" << endl;
for (size_t startPos = 0; startPos < size; ++startPos) {
cerr.width(3);
@@ -131,7 +127,7 @@ void Manager::ProcessSentence()
}
}
-const Hypothesis *Manager::GetBestHypothesis() const
+const ChartHypothesis *ChartManager::GetBestHypothesis() const
{
size_t size = m_source.GetSize();
@@ -144,26 +140,26 @@ const Hypothesis *Manager::GetBestHypothesis() const
}
}
-void Manager::CalcNBest(size_t count, TrellisPathList &ret,bool onlyDistinct) const
+void ChartManager::CalcNBest(size_t count, ChartTrellisPathList &ret,bool onlyDistinct) const
{
size_t size = m_source.GetSize();
if (count == 0 || size == 0)
return;
- TrellisPathCollection contenders;
+ ChartTrellisPathCollection contenders;
set<Phrase> distinctHyps;
// add all pure paths
WordsRange range(0, size-1);
const ChartCell &lastCell = m_hypoStackColl.Get(range);
- const Hypothesis *hypo = lastCell.GetBestHypothesis();
+ const ChartHypothesis *hypo = lastCell.GetBestHypothesis();
if (hypo == NULL) {
// no hypothesis
return;
}
- MosesChart::TrellisPath *purePath = new TrellisPath(hypo);
+ ChartTrellisPath *purePath = new ChartTrellisPath(hypo);
contenders.Add(purePath);
// factor defines stopping point for distinct n-best list if too many candidates identical
@@ -173,7 +169,7 @@ void Manager::CalcNBest(size_t count, TrellisPathList &ret,bool onlyDistinct) co
// MAIN loop
for (size_t iteration = 0 ; (onlyDistinct ? distinctHyps.size() : ret.GetSize()) < count && contenders.GetSize() > 0 && (iteration < count * nBestFactor) ; iteration++) {
// get next best from list of contenders
- TrellisPath *path = contenders.pop();
+ ChartTrellisPath *path = contenders.pop();
assert(path);
// create deviations from current best
@@ -196,25 +192,63 @@ void Manager::CalcNBest(size_t count, TrellisPathList &ret,bool onlyDistinct) co
}
}
-void Manager::CalcDecoderStatistics() const
+void ChartManager::CalcDecoderStatistics() const
{
}
-void Manager::GetSearchGraph(long translationId, std::ostream &outputSearchGraphStream) const
+void ChartManager::GetSearchGraph(long translationId, std::ostream &outputSearchGraphStream) const
{
size_t size = m_source.GetSize();
+
+ // which hypotheses are reachable?
+ std::map<int,bool> reachable;
+ WordsRange fullRange(0, size-1);
+ const ChartCell &lastCell = m_hypoStackColl.Get(fullRange);
+ const ChartHypothesis *hypo = lastCell.GetBestHypothesis();
+
+ if (hypo == NULL) {
+ // no hypothesis
+ return;
+ }
+ FindReachableHypotheses( hypo, reachable);
+
for (size_t width = 1; width <= size; ++width) {
for (size_t startPos = 0; startPos <= size-width; ++startPos) {
size_t endPos = startPos + width - 1;
WordsRange range(startPos, endPos);
TRACE_ERR(" " << range << "=");
-
const ChartCell &cell = m_hypoStackColl.Get(range);
- cell.GetSearchGraph(translationId, outputSearchGraphStream);
+ cell.GetSearchGraph(translationId, outputSearchGraphStream, reachable);
}
}
+}
+void ChartManager::FindReachableHypotheses( const ChartHypothesis *hypo, std::map<int,bool> &reachable ) const
+{
+ // do not recurse, if already visited
+ if (reachable.find(hypo->GetId()) != reachable.end())
+ {
+ return;
+ }
+
+ // recurse
+ reachable[ hypo->GetId() ] = true;
+ const std::vector<const ChartHypothesis*> &previous = hypo->GetPrevHypos();
+ for(std::vector<const ChartHypothesis*>::const_iterator i = previous.begin(); i != previous.end(); ++i)
+ {
+ FindReachableHypotheses( *i, reachable );
+ }
+
+ // also loop over recombined hypotheses (arcs)
+ const ChartArcList *arcList = hypo->GetArcList();
+ if (arcList) {
+ ChartArcList::const_iterator iterArc;
+ for (iterArc = arcList->begin(); iterArc != arcList->end(); ++iterArc) {
+ const ChartHypothesis &arc = **iterArc;
+ FindReachableHypotheses( &arc, reachable );
+ }
+ }
}
} // namespace
diff --git a/moses-chart/src/ChartManager.h b/moses/src/ChartManager.h
index 85ddf1eb6..f399886c9 100644
--- a/moses-chart/src/ChartManager.h
+++ b/moses/src/ChartManager.h
@@ -25,55 +25,56 @@
#include "ChartCell.h"
#include "ChartTranslationOptionCollection.h"
#include "ChartCellCollection.h"
-#include "../../moses/src/InputType.h"
-#include "../../moses/src/WordsRange.h"
-#include "../../moses/src/TrellisPathList.h"
-#include "../../moses/src/SentenceStats.h"
-#include "../../moses/src/TranslationSystem.h"
-#include "../../moses/src/ChartRuleLookupManager.h"
+#include "InputType.h"
+#include "WordsRange.h"
+#include "ChartTrellisPathList.h"
+#include "SentenceStats.h"
+#include "TranslationSystem.h"
+#include "ChartRuleLookupManager.h"
-namespace MosesChart
+namespace Moses
{
-class Hypothesis;
-class TrellisPathList;
+class ChartHypothesis;
+class ChartTrellisPathList;
-class Manager
+class ChartManager
{
protected:
- Moses::InputType const& m_source; /**< source sentence to be translated */
+ InputType const& m_source; /**< source sentence to be translated */
ChartCellCollection m_hypoStackColl;
- TranslationOptionCollection m_transOptColl; /**< pre-computed list of translation options for the phrases in this sentence */
- std::auto_ptr<Moses::SentenceStats> m_sentenceStats;
- const Moses::TranslationSystem* m_system;
+ ChartTranslationOptionCollection m_transOptColl; /**< pre-computed list of translation options for the phrases in this sentence */
+ std::auto_ptr<SentenceStats> m_sentenceStats;
+ const TranslationSystem* m_system;
clock_t m_start; /**< starting time, used for logging */
- std::vector<Moses::ChartRuleLookupManager*> m_ruleLookupManagers;
+ std::vector<ChartRuleLookupManager*> m_ruleLookupManagers;
public:
- Manager(Moses::InputType const& source, const Moses::TranslationSystem* system);
- ~Manager();
+ ChartManager(InputType const& source, const TranslationSystem* system);
+ ~ChartManager();
void ProcessSentence();
- const Hypothesis *GetBestHypothesis() const;
- void CalcNBest(size_t count, MosesChart::TrellisPathList &ret,bool onlyDistinct=0) const;
+ const ChartHypothesis *GetBestHypothesis() const;
+ void CalcNBest(size_t count, ChartTrellisPathList &ret,bool onlyDistinct=0) const;
void GetSearchGraph(long translationId, std::ostream &outputSearchGraphStream) const;
+ void FindReachableHypotheses( const ChartHypothesis *hypo, std::map<int,bool> &reachable ) const; /* auxilliary function for GetSearchGraph */
- const Moses::InputType& GetSource() const {
+ const InputType& GetSource() const {
return m_source;
}
- const Moses::TranslationSystem* GetTranslationSystem() const {
+ const TranslationSystem* GetTranslationSystem() const {
return m_system;
}
- Moses::SentenceStats& GetSentenceStats() const {
+ SentenceStats& GetSentenceStats() const {
return *m_sentenceStats;
}
/***
* to be called after processing a sentence (which may consist of more than just calling ProcessSentence() )
*/
void CalcDecoderStatistics() const;
- void ResetSentenceStats(const Moses::InputType& source) {
- m_sentenceStats = std::auto_ptr<Moses::SentenceStats>(new Moses::SentenceStats(source));
+ void ResetSentenceStats(const InputType& source) {
+ m_sentenceStats = std::auto_ptr<SentenceStats>(new SentenceStats(source));
}
};
diff --git a/moses/src/ChartRuleLookupManager.cpp b/moses/src/ChartRuleLookupManager.cpp
new file mode 100644
index 000000000..63e941429
--- /dev/null
+++ b/moses/src/ChartRuleLookupManager.cpp
@@ -0,0 +1,18 @@
+//
+// ChartRuleLookupManager.cpp
+// moses
+//
+// Created by Hieu Hoang on 30/06/2011.
+// Copyright 2011 __MyCompanyName__. All rights reserved.
+//
+
+#include "ChartRuleLookupManager.h"
+#include "StaticData.h"
+#include "DotChart.h"
+
+namespace Moses
+{
+
+
+}
+
diff --git a/moses/src/ChartRuleLookupManager.h b/moses/src/ChartRuleLookupManager.h
index 2cedf7660..2166f28f5 100644
--- a/moses/src/ChartRuleLookupManager.h
+++ b/moses/src/ChartRuleLookupManager.h
@@ -21,7 +21,7 @@
#ifndef moses_ChartRuleLookupManager_h
#define moses_ChartRuleLookupManager_h
-#include "CellCollection.h"
+#include "ChartCellCollection.h"
#include "InputType.h"
namespace Moses
@@ -39,7 +39,7 @@ class ChartRuleLookupManager
{
public:
ChartRuleLookupManager(const InputType &sentence,
- const CellCollection &cellColl)
+ const ChartCellCollection &cellColl)
: m_sentence(sentence)
, m_cellCollection(cellColl) {}
@@ -48,7 +48,7 @@ public:
const InputType &GetSentence() const {
return m_sentence;
}
- const CellCollection &GetCellCollection() const {
+ const ChartCellCollection &GetCellCollection() const {
return m_cellCollection;
}
@@ -63,7 +63,7 @@ private:
ChartRuleLookupManager &operator=(const ChartRuleLookupManager &);
const InputType &m_sentence;
- const CellCollection &m_cellCollection;
+ const ChartCellCollection &m_cellCollection;
};
} // namespace Moses
diff --git a/moses/src/ChartRuleLookupManagerMemory.cpp b/moses/src/ChartRuleLookupManagerMemory.cpp
index e2fce87ce..d49248dbc 100644
--- a/moses/src/ChartRuleLookupManagerMemory.cpp
+++ b/moses/src/ChartRuleLookupManagerMemory.cpp
@@ -23,44 +23,45 @@
#include "InputType.h"
#include "ChartTranslationOptionList.h"
#include "CellCollection.h"
-#include "DotChart.h"
+#include "DotChartInMemory.h"
#include "StaticData.h"
#include "NonTerminal.h"
+#include "ChartCellCollection.h"
namespace Moses
{
ChartRuleLookupManagerMemory::ChartRuleLookupManagerMemory(
const InputType &src,
- const CellCollection &cellColl,
+ const ChartCellCollection &cellColl,
const PhraseDictionarySCFG &ruleTable)
: ChartRuleLookupManager(src, cellColl)
, m_ruleTable(ruleTable)
{
- assert(m_processedRuleColls.size() == 0);
+ assert(m_dottedRuleColls.size() == 0);
size_t sourceSize = src.GetSize();
- m_processedRuleColls.resize(sourceSize);
+ m_dottedRuleColls.resize(sourceSize);
const PhraseDictionaryNodeSCFG &rootNode = m_ruleTable.GetRootNode();
- for (size_t ind = 0; ind < m_processedRuleColls.size(); ++ind) {
+ for (size_t ind = 0; ind < m_dottedRuleColls.size(); ++ind) {
#ifdef USE_BOOST_POOL
- ProcessedRule *initProcessedRule = m_processedRulePool.malloc();
- new (initProcessedRule) ProcessedRule(rootNode);
+ DottedRuleInMemory *initDottedRule = m_dottedRulePool.malloc();
+ new (initDottedRule) DottedRuleInMemory(rootNode);
#else
- ProcessedRule *initProcessedRule = new ProcessedRule(rootNode);
+ DottedRuleInMemory *initDottedRule = new DottedRuleInMemory(rootNode);
#endif
- ProcessedRuleColl *processedRuleColl = new ProcessedRuleColl(sourceSize - ind + 1);
- processedRuleColl->Add(0, initProcessedRule); // init rule. stores the top node in tree
+ DottedRuleColl *dottedRuleColl = new DottedRuleColl(sourceSize - ind + 1);
+ dottedRuleColl->Add(0, initDottedRule); // init rule. stores the top node in tree
- m_processedRuleColls[ind] = processedRuleColl;
+ m_dottedRuleColls[ind] = dottedRuleColl;
}
}
ChartRuleLookupManagerMemory::~ChartRuleLookupManagerMemory()
{
- RemoveAllInColl(m_processedRuleColls);
+ RemoveAllInColl(m_dottedRuleColls);
}
void ChartRuleLookupManagerMemory::GetChartRuleCollection(
@@ -73,79 +74,102 @@ void ChartRuleLookupManagerMemory::GetChartRuleCollection(
// MAIN LOOP. create list of nodes of target phrases
- ProcessedRuleColl &processedRuleCol = *m_processedRuleColls[range.GetStartPos()];
- const ProcessedRuleList &runningNodes = processedRuleCol.GetRunningNodes();
- // Note that runningNodes can be expanded as the loop runs (through calls to
- // ExtendPartialRuleApplication()).
- for (size_t ind = 0; ind < runningNodes.size(); ++ind) {
- const ProcessedRule &prevProcessedRule = *runningNodes[ind];
- const PhraseDictionaryNodeSCFG &prevNode = prevProcessedRule.GetLastNode();
- const WordConsumed *prevWordConsumed = prevProcessedRule.GetLastWordConsumed();
- size_t startPos = (prevWordConsumed == NULL) ? range.GetStartPos() : prevWordConsumed->GetWordsRange().GetEndPos() + 1;
+ // get list of all rules that apply to spans at same starting position
+ DottedRuleColl &dottedRuleCol = *m_dottedRuleColls[range.GetStartPos()];
+ const DottedRuleList &expandableDottedRuleList = dottedRuleCol.GetExpandableDottedRuleList();
+
+ const ChartCellLabel &sourceWordLabel = GetCellCollection().Get(WordsRange(absEndPos, absEndPos)).GetSourceWordLabel();
+
+ // loop through the rules
+ // (note that expandableDottedRuleList can be expanded as the loop runs
+ // through calls to ExtendPartialRuleApplication())
+ for (size_t ind = 0; ind < expandableDottedRuleList.size(); ++ind) {
+ // rule we are about to extend
+ const DottedRuleInMemory &prevDottedRule = *expandableDottedRuleList[ind];
+ // we will now try to extend it, starting after where it ended
+ size_t startPos = prevDottedRule.IsRoot()
+ ? range.GetStartPos()
+ : prevDottedRule.GetWordsRange().GetEndPos() + 1;
// search for terminal symbol
+ // (if only one more word position needs to be covered)
if (startPos == absEndPos) {
- const Word &sourceWord = GetSentence().GetWord(absEndPos);
- const PhraseDictionaryNodeSCFG *node = prevNode.GetChild(sourceWord);
+
+ // look up in rule dictionary, if the current rule can be extended
+ // with the source word in the last position
+ const Word &sourceWord = sourceWordLabel.GetLabel();
+ const PhraseDictionaryNodeSCFG *node = prevDottedRule.GetLastNode().GetChild(sourceWord);
+
+ // if we found a new rule -> create it and add it to the list
if (node != NULL) {
+ // create the rule
#ifdef USE_BOOST_POOL
- WordConsumed *newWordConsumed = m_wordConsumedPool.malloc();
- new (newWordConsumed) WordConsumed(absEndPos, absEndPos, sourceWord,
- prevWordConsumed);
- ProcessedRule *processedRule = m_processedRulePool.malloc();
- new (processedRule) ProcessedRule(*node, newWordConsumed);
+ DottedRuleInMemory *dottedRule = m_dottedRulePool.malloc();
+ new (dottedRule) DottedRuleInMemory(*node, sourceWordLabel,
+ prevDottedRule);
#else
- WordConsumed *newWordConsumed = new WordConsumed(absEndPos, absEndPos,
- sourceWord,
- prevWordConsumed);
- ProcessedRule *processedRule = new ProcessedRule(*node,
- newWordConsumed);
+ DottedRuleInMemory *dottedRule = new DottedRuleInMemory(*node,
+ sourceWordLabel,
+ prevDottedRule);
#endif
- processedRuleCol.Add(relEndPos+1, processedRule);
+ dottedRuleCol.Add(relEndPos+1, dottedRule);
}
}
// search for non-terminals
size_t endPos, stackInd;
+
+ // span is already complete covered? nothing can be done
if (startPos > absEndPos)
continue;
+
else if (startPos == range.GetStartPos() && range.GetEndPos() > range.GetStartPos()) {
- // start.
+ // We're at the root of the prefix tree so won't try to cover the full
+ // span (i.e. we don't allow non-lexical unary rules). However, we need
+ // to match non-unary rules that begin with a non-terminal child, so we
+ // do that in two steps: during this iteration we search for non-terminals
+ // that cover all but the last source word in the span (there won't
+ // already be running nodes for these because that would have required a
+ // non-lexical unary rule match for an earlier span). Any matches will
+ // result in running nodes being appended to the list and on subsequent
+ // iterations (for this same span), we'll extend them to cover the final
+ // word.
endPos = absEndPos - 1;
stackInd = relEndPos;
- } else {
+ }
+ else
+ {
endPos = absEndPos;
stackInd = relEndPos + 1;
}
- const NonTerminalSet &sourceNonTerms =
- GetSentence().GetLabelSet(startPos, endPos);
-
- const NonTerminalSet &targetNonTerms =
- GetCellCollection().GetHeadwords(WordsRange(startPos, endPos));
- ExtendPartialRuleApplication(prevNode, prevWordConsumed, startPos,
- endPos, stackInd, sourceNonTerms,
- targetNonTerms, processedRuleCol);
+ ExtendPartialRuleApplication(prevDottedRule, startPos, endPos, stackInd,
+ dottedRuleCol);
}
- // return list of target phrases
- ProcessedRuleList &nodes = processedRuleCol.Get(relEndPos + 1);
+ // list of rules that that cover the entire span
+ DottedRuleList &rules = dottedRuleCol.Get(relEndPos + 1);
+ // look up target sides for the rules
size_t rulesLimit = StaticData::Instance().GetRuleLimit();
- ProcessedRuleList::const_iterator iterNode;
- for (iterNode = nodes.begin(); iterNode != nodes.end(); ++iterNode) {
- const ProcessedRule &processedRule = **iterNode;
- const PhraseDictionaryNodeSCFG &node = processedRule.GetLastNode();
- const WordConsumed *wordConsumed = processedRule.GetLastWordConsumed();
- assert(wordConsumed);
+ DottedRuleList::const_iterator iterRule;
+ for (iterRule = rules.begin(); iterRule != rules.end(); ++iterRule) {
+ const DottedRuleInMemory &dottedRule = **iterRule;
+ const PhraseDictionaryNodeSCFG &node = dottedRule.GetLastNode();
+ // look up target sides
const TargetPhraseCollection *targetPhraseCollection = node.GetTargetPhraseCollection();
+ // add the fully expanded rule (with lexical target side)
if (targetPhraseCollection != NULL) {
- outColl.Add(*targetPhraseCollection, *wordConsumed, adhereTableLimit, rulesLimit);
+ outColl.Add(*targetPhraseCollection, dottedRule,
+ GetCellCollection(), adhereTableLimit, rulesLimit);
}
}
+
+ dottedRuleCol.Clear(relEndPos+1);
+
outColl.CreateChartRules(rulesLimit);
}
@@ -154,15 +178,23 @@ void ChartRuleLookupManagerMemory::GetChartRuleCollection(
// determines the full or partial rule applications that can be produced through
// extending the current rule application by a single non-terminal.
void ChartRuleLookupManagerMemory::ExtendPartialRuleApplication(
- const PhraseDictionaryNodeSCFG & node,
- const WordConsumed *prevWordConsumed,
+ const DottedRuleInMemory &prevDottedRule,
size_t startPos,
size_t endPos,
size_t stackInd,
- const NonTerminalSet & sourceNonTerms,
- const NonTerminalSet & targetNonTerms,
- ProcessedRuleColl & processedRuleColl)
+ DottedRuleColl & dottedRuleColl)
{
+ // source non-terminal labels for the remainder
+ const NonTerminalSet &sourceNonTerms =
+ GetSentence().GetLabelSet(startPos, endPos);
+
+ // target non-terminal labels for the remainder
+ const ChartCellLabelSet &targetNonTerms =
+ GetCellCollection().Get(WordsRange(startPos, endPos)).GetTargetLabelSet();
+
+ // note where it was found in the prefix tree of the rule dictionary
+ const PhraseDictionaryNodeSCFG &node = prevDottedRule.GetLastNode();
+
const PhraseDictionaryNodeSCFG::NonTerminalMap & nonTermMap =
node.GetNonTerminalMap();
@@ -171,7 +203,7 @@ void ChartRuleLookupManagerMemory::ExtendPartialRuleApplication(
return;
}
const size_t numSourceNonTerms = sourceNonTerms.size();
- const size_t numTargetNonTerms = targetNonTerms.size();
+ const size_t numTargetNonTerms = targetNonTerms.GetSize();
const size_t numCombinations = numSourceNonTerms * numTargetNonTerms;
// We can search by either:
@@ -182,62 +214,69 @@ void ChartRuleLookupManagerMemory::ExtendPartialRuleApplication(
// for each source and target NT in the span's sets.
// We'll do whichever minimises the number of lookups:
if (numCombinations <= numChildren*2) {
+
+ // loop over possible source non-terminal labels (as found in input tree)
NonTerminalSet::const_iterator p = sourceNonTerms.begin();
NonTerminalSet::const_iterator sEnd = sourceNonTerms.end();
for (; p != sEnd; ++p) {
const Word & sourceNonTerm = *p;
- NonTerminalSet::const_iterator q = targetNonTerms.begin();
- NonTerminalSet::const_iterator tEnd = targetNonTerms.end();
+
+ // loop over possible target non-terminal labels (as found in chart)
+ ChartCellLabelSet::const_iterator q = targetNonTerms.begin();
+ ChartCellLabelSet::const_iterator tEnd = targetNonTerms.end();
for (; q != tEnd; ++q) {
- const Word & targetNonTerm = *q;
+ const ChartCellLabel &cellLabel = *q;
+
+ // try to match both source and target non-terminal
const PhraseDictionaryNodeSCFG * child =
- node.GetChild(sourceNonTerm, targetNonTerm);
+ node.GetChild(sourceNonTerm, cellLabel.GetLabel());
+
+ // nothing found? then we are done
if (child == NULL) {
continue;
}
+
+ // create new rule
#ifdef USE_BOOST_POOL
- WordConsumed *wc = m_wordConsumedPool.malloc();
- new (wc) WordConsumed(startPos, endPos, targetNonTerm,
- prevWordConsumed);
- ProcessedRule *rule = m_processedRulePool.malloc();
- new (rule) ProcessedRule(*child, wc);
+ DottedRuleInMemory *rule = m_dottedRulePool.malloc();
+ new (rule) DottedRuleInMemory(*child, cellLabel, prevDottedRule);
#else
- WordConsumed * wc = new WordConsumed(startPos, endPos,
- targetNonTerm,
- prevWordConsumed);
- ProcessedRule * rule = new ProcessedRule(*child, wc);
+ DottedRuleInMemory *rule = new DottedRuleInMemory(*child, cellLabel,
+ prevDottedRule);
#endif
- processedRuleColl.Add(stackInd, rule);
+ dottedRuleColl.Add(stackInd, rule);
}
}
- } else {
+ }
+ else
+ {
+ // loop over possible expansions of the rule
PhraseDictionaryNodeSCFG::NonTerminalMap::const_iterator p;
PhraseDictionaryNodeSCFG::NonTerminalMap::const_iterator end =
nonTermMap.end();
for (p = nonTermMap.begin(); p != end; ++p) {
- const PhraseDictionaryNodeSCFG::NonTerminalMapKey & key = p->first;
- const Word & sourceNonTerm = key.first;
+ // does it match possible source and target non-terminals?
+ const PhraseDictionaryNodeSCFG::NonTerminalMapKey &key = p->first;
+ const Word &sourceNonTerm = key.first;
if (sourceNonTerms.find(sourceNonTerm) == sourceNonTerms.end()) {
continue;
}
- const Word & targetNonTerm = key.second;
- if (targetNonTerms.find(targetNonTerm) == targetNonTerms.end()) {
+ const Word &targetNonTerm = key.second;
+ const ChartCellLabel *cellLabel = targetNonTerms.Find(targetNonTerm);
+ if (!cellLabel) {
continue;
}
- const PhraseDictionaryNodeSCFG & child = p->second;
+
+ // create new rule
+ const PhraseDictionaryNodeSCFG &child = p->second;
#ifdef USE_BOOST_POOL
- WordConsumed *wc = m_wordConsumedPool.malloc();
- new (wc) WordConsumed(startPos, endPos, targetNonTerm,
- prevWordConsumed);
- ProcessedRule *rule = m_processedRulePool.malloc();
- new (rule) ProcessedRule(child, wc);
+ DottedRuleInMemory *rule = m_dottedRulePool.malloc();
+ new (rule) DottedRuleInMemory(child, *cellLabel, prevDottedRule);
#else
- WordConsumed * wc = new WordConsumed(startPos, endPos,
- targetNonTerm,
- prevWordConsumed);
- ProcessedRule * rule = new ProcessedRule(child, wc);
+ DottedRuleInMemory *rule = new DottedRuleInMemory(child, *cellLabel,
+ prevDottedRule);
#endif
- processedRuleColl.Add(stackInd, rule);
+ dottedRuleColl.Add(stackInd, rule);
}
}
}
diff --git a/moses/src/ChartRuleLookupManagerMemory.h b/moses/src/ChartRuleLookupManagerMemory.h
index 2c9798990..a9273499c 100644
--- a/moses/src/ChartRuleLookupManagerMemory.h
+++ b/moses/src/ChartRuleLookupManagerMemory.h
@@ -31,17 +31,16 @@
#endif
#include "ChartRuleLookupManager.h"
-#include "DotChart.h"
+#include "DotChartInMemory.h"
#include "NonTerminal.h"
#include "PhraseDictionaryNodeSCFG.h"
#include "PhraseDictionarySCFG.h"
-#include "WordConsumed.h"
namespace Moses
{
class ChartTranslationOptionList;
-class ProcessedRuleColl;
+class DottedRuleColl;
class WordsRange;
// Implementation of ChartRuleLookupManager for in-memory rule tables.
@@ -49,7 +48,7 @@ class ChartRuleLookupManagerMemory : public ChartRuleLookupManager
{
public:
ChartRuleLookupManagerMemory(const InputType &sentence,
- const CellCollection &cellColl,
+ const ChartCellCollection &cellColl,
const PhraseDictionarySCFG &ruleTable);
~ChartRuleLookupManagerMemory();
@@ -61,23 +60,19 @@ public:
private:
void ExtendPartialRuleApplication(
- const PhraseDictionaryNodeSCFG &node,
- const WordConsumed *prevWordConsumed,
+ const DottedRuleInMemory &prevDottedRule,
size_t startPos,
size_t endPos,
size_t stackInd,
- const NonTerminalSet &sourceNonTerms,
- const NonTerminalSet &targetNonTerms,
- ProcessedRuleColl &processedRuleColl);
+ DottedRuleColl &dottedRuleColl);
- std::vector<ProcessedRuleColl*> m_processedRuleColls;
+ std::vector<DottedRuleColl*> m_dottedRuleColls;
const PhraseDictionarySCFG &m_ruleTable;
#ifdef USE_BOOST_POOL
- // Use object pools to allocate the ProcessedRule and WordConsumed objects
- // for this sentence. We allocate a lot of them and this has been seen to
- // significantly improve performance, especially for multithreaded decoding.
- boost::object_pool<ProcessedRule> m_processedRulePool;
- boost::object_pool<WordConsumed> m_wordConsumedPool;
+ // Use an object pool to allocate the dotted rules for this sentence. We
+ // allocate a lot of them and this has been seen to significantly improve
+ // performance, especially for multithreaded decoding.
+ boost::object_pool<DottedRuleInMemory> m_dottedRulePool;
#endif
};
diff --git a/moses/src/ChartRuleLookupManagerOnDisk.cpp b/moses/src/ChartRuleLookupManagerOnDisk.cpp
index da4e2ff74..f450a3ecb 100644
--- a/moses/src/ChartRuleLookupManagerOnDisk.cpp
+++ b/moses/src/ChartRuleLookupManagerOnDisk.cpp
@@ -24,7 +24,6 @@
#include "PhraseDictionaryOnDisk.h"
#include "StaticData.h"
#include "DotChartOnDisk.h"
-#include "CellCollection.h"
#include "ChartTranslationOptionList.h"
#include "../../OnDiskPt/src/TargetPhraseCollection.h"
@@ -35,7 +34,7 @@ namespace Moses
ChartRuleLookupManagerOnDisk::ChartRuleLookupManagerOnDisk(
const InputType &sentence,
- const CellCollection &cellColl,
+ const ChartCellCollection &cellColl,
const PhraseDictionaryOnDisk &dictionary,
OnDiskPt::OnDiskWrapper &dbWrapper,
const LMList *languageModels,
@@ -54,17 +53,17 @@ ChartRuleLookupManagerOnDisk::ChartRuleLookupManagerOnDisk(
, m_weight(weight)
, m_filePath(filePath)
{
- assert(m_runningNodesVec.size() == 0);
+ assert(m_expandableDottedRuleListVec.size() == 0);
size_t sourceSize = sentence.GetSize();
- m_runningNodesVec.resize(sourceSize);
+ m_expandableDottedRuleListVec.resize(sourceSize);
- for (size_t ind = 0; ind < m_runningNodesVec.size(); ++ind) {
- ProcessedRuleOnDisk *initProcessedRule = new ProcessedRuleOnDisk(m_dbWrapper.GetRootSourceNode());
+ for (size_t ind = 0; ind < m_expandableDottedRuleListVec.size(); ++ind) {
+ DottedRuleOnDisk *initDottedRule = new DottedRuleOnDisk(m_dbWrapper.GetRootSourceNode());
- ProcessedRuleStackOnDisk *processedStack = new ProcessedRuleStackOnDisk(sourceSize - ind + 1);
- processedStack->Add(0, initProcessedRule); // init rule. stores the top node in tree
+ DottedRuleStackOnDisk *processedStack = new DottedRuleStackOnDisk(sourceSize - ind + 1);
+ processedStack->Add(0, initDottedRule); // init rule. stores the top node in tree
- m_runningNodesVec[ind] = processedStack;
+ m_expandableDottedRuleListVec[ind] = processedStack;
}
}
@@ -76,7 +75,7 @@ ChartRuleLookupManagerOnDisk::~ChartRuleLookupManagerOnDisk()
}
m_cache.clear();
- RemoveAllInColl(m_runningNodesVec);
+ RemoveAllInColl(m_expandableDottedRuleListVec);
RemoveAllInColl(m_sourcePhraseNode);
}
@@ -86,35 +85,32 @@ void ChartRuleLookupManagerOnDisk::GetChartRuleCollection(
ChartTranslationOptionList &outColl)
{
const StaticData &staticData = StaticData::Instance();
- size_t rulesLimit = StaticData::Instance().GetRuleLimit();
+ size_t rulesLimit = staticData.GetRuleLimit();
size_t relEndPos = range.GetEndPos() - range.GetStartPos();
size_t absEndPos = range.GetEndPos();
// MAIN LOOP. create list of nodes of target phrases
- ProcessedRuleStackOnDisk &runningNodes = *m_runningNodesVec[range.GetStartPos()];
+ DottedRuleStackOnDisk &expandableDottedRuleList = *m_expandableDottedRuleListVec[range.GetStartPos()];
// sort save nodes so only do nodes with most counts
- runningNodes.SortSavedNodes();
- size_t numDerivations = 0
- ,maxDerivations = 999999; // staticData.GetMaxDerivations();
- bool overThreshold = true;
+ expandableDottedRuleList.SortSavedNodes();
- const ProcessedRuleStackOnDisk::SavedNodeColl &savedNodeColl = runningNodes.GetSavedNodeColl();
+ const DottedRuleStackOnDisk::SavedNodeColl &savedNodeColl = expandableDottedRuleList.GetSavedNodeColl();
//cerr << "savedNodeColl=" << savedNodeColl.size() << " ";
- for (size_t ind = 0; ind < (savedNodeColl.size()) && ((numDerivations < maxDerivations) || overThreshold) ; ++ind) {
+ const ChartCellLabel &sourceWordLabel = GetCellCollection().Get(WordsRange(absEndPos, absEndPos)).GetSourceWordLabel();
+
+ for (size_t ind = 0; ind < (savedNodeColl.size()) ; ++ind) {
const SavedNodeOnDisk &savedNode = *savedNodeColl[ind];
- const ProcessedRuleOnDisk &prevProcessedRule = savedNode.GetProcessedRule();
- const OnDiskPt::PhraseNode &prevNode = prevProcessedRule.GetLastNode();
- const WordConsumed *prevWordConsumed = prevProcessedRule.GetLastWordConsumed();
- size_t startPos = (prevWordConsumed == NULL) ? range.GetStartPos() : prevWordConsumed->GetWordsRange().GetEndPos() + 1;
+ const DottedRuleOnDisk &prevDottedRule = savedNode.GetDottedRule();
+ const OnDiskPt::PhraseNode &prevNode = prevDottedRule.GetLastNode();
+ size_t startPos = prevDottedRule.IsRoot() ? range.GetStartPos() : prevDottedRule.GetWordsRange().GetEndPos() + 1;
// search for terminal symbol
if (startPos == absEndPos) {
- const Word &sourceWord = GetSentence().GetWord(absEndPos);
- OnDiskPt::Word *sourceWordBerkeleyDb = m_dbWrapper.ConvertFromMoses(Input, m_inputFactorsVec, sourceWord);
+ OnDiskPt::Word *sourceWordBerkeleyDb = m_dbWrapper.ConvertFromMoses(Input, m_inputFactorsVec, sourceWordLabel.GetLabel());
if (sourceWordBerkeleyDb != NULL) {
const OnDiskPt::PhraseNode *node = prevNode.GetChild(*sourceWordBerkeleyDb, m_dbWrapper);
@@ -122,11 +118,8 @@ void ChartRuleLookupManagerOnDisk::GetChartRuleCollection(
// TODO figure out why source word is needed from node, not from sentence
// prob to do with factors or non-term
//const Word &sourceWord = node->GetSourceWord();
- WordConsumed *newWordConsumed = new WordConsumed(absEndPos, absEndPos
- , sourceWord
- , prevWordConsumed);
- ProcessedRuleOnDisk *processedRule = new ProcessedRuleOnDisk(*node, newWordConsumed);
- runningNodes.Add(relEndPos+1, processedRule);
+ DottedRuleOnDisk *dottedRule = new DottedRuleOnDisk(*node, sourceWordLabel, prevDottedRule);
+ expandableDottedRuleList.Add(relEndPos+1, dottedRule);
// cache for cleanup
m_sourcePhraseNode.push_back(node);
@@ -149,13 +142,14 @@ void ChartRuleLookupManagerOnDisk::GetChartRuleCollection(
stackInd = relEndPos + 1;
}
- size_t nonTermNumWordsCovered = endPos - startPos + 1;
+ // size_t nonTermNumWordsCovered = endPos - startPos + 1;
- // get target headwords in this span from chart
- const NonTerminalSet &headWords = GetCellCollection().GetHeadwords(WordsRange(startPos, endPos));
+ // get target nonterminals in this span from chart
+ const ChartCellLabelSet &chartNonTermSet =
+ GetCellCollection().Get(WordsRange(startPos, endPos)).GetTargetLabelSet();
- const Word &defaultSourceNonTerm = staticData.GetInputDefaultNonTerminal()
- ,&defaultTargetNonTerm = staticData.GetOutputDefaultNonTerminal();
+ //const Word &defaultSourceNonTerm = staticData.GetInputDefaultNonTerminal()
+ // ,&defaultTargetNonTerm = staticData.GetOutputDefaultNonTerminal();
// go through each SOURCE lhs
const NonTerminalSet &sourceLHSSet = GetSentence().GetLabelSet(startPos, endPos);
@@ -178,62 +172,55 @@ void ChartRuleLookupManagerOnDisk::GetChartRuleCollection(
continue; // didn't find source node
// go through each TARGET lhs
- NonTerminalSet::const_iterator iterTargetLHS;
- for (iterTargetLHS = headWords.begin(); iterTargetLHS != headWords.end(); ++iterTargetLHS) {
- const Word &targetLHS = *iterTargetLHS;
+ ChartCellLabelSet::const_iterator iterChartNonTerm;
+ for (iterChartNonTerm = chartNonTermSet.begin(); iterChartNonTerm != chartNonTermSet.end(); ++iterChartNonTerm) {
+ const ChartCellLabel &cellLabel = *iterChartNonTerm;
- //cerr << sourceLHS << " " << defaultSourceNonTerm << " " << targetLHS << " " << defaultTargetNonTerm << endl;
+ //cerr << sourceLHS << " " << defaultSourceNonTerm << " " << chartNonTerm << " " << defaultTargetNonTerm << endl;
- //bool isSyntaxNonTerm = (sourceLHS != defaultSourceNonTerm) || (targetLHS != defaultTargetNonTerm);
+ //bool isSyntaxNonTerm = (sourceLHS != defaultSourceNonTerm) || (chartNonTerm != defaultTargetNonTerm);
bool doSearch = true; //isSyntaxNonTerm ? nonTermNumWordsCovered <= maxSyntaxSpan :
// nonTermNumWordsCovered <= maxDefaultSpan;
if (doSearch) {
- OnDiskPt::Word *targetLHSBerkeleyDb = m_dbWrapper.ConvertFromMoses(Output, m_outputFactorsVec, targetLHS);
+ OnDiskPt::Word *chartNonTermBerkeleyDb = m_dbWrapper.ConvertFromMoses(Output, m_outputFactorsVec, cellLabel.GetLabel());
- if (targetLHSBerkeleyDb == NULL)
+ if (chartNonTermBerkeleyDb == NULL)
continue;
- const OnDiskPt::PhraseNode *node = sourceNode->GetChild(*targetLHSBerkeleyDb, m_dbWrapper);
- delete targetLHSBerkeleyDb;
+ const OnDiskPt::PhraseNode *node = sourceNode->GetChild(*chartNonTermBerkeleyDb, m_dbWrapper);
+ delete chartNonTermBerkeleyDb;
if (node == NULL)
continue;
// found matching entry
//const Word &sourceWord = node->GetSourceWord();
- WordConsumed *newWordConsumed = new WordConsumed(startPos, endPos
- , targetLHS
- , prevWordConsumed);
-
- ProcessedRuleOnDisk *processedRule = new ProcessedRuleOnDisk(*node, newWordConsumed);
- runningNodes.Add(stackInd, processedRule);
+ DottedRuleOnDisk *dottedRule = new DottedRuleOnDisk(*node, cellLabel, prevDottedRule);
+ expandableDottedRuleList.Add(stackInd, dottedRule);
m_sourcePhraseNode.push_back(node);
}
- } // for (iterHeadWords
+ } // for (iterChartNonTerm
delete sourceNode;
} // for (iterLabelListf
// return list of target phrases
- ProcessedRuleCollOnDisk &nodes = runningNodes.Get(relEndPos + 1);
+ DottedRuleCollOnDisk &nodes = expandableDottedRuleList.Get(relEndPos + 1);
// source LHS
- ProcessedRuleCollOnDisk::const_iterator iterProcessedRuleColl;
- for (iterProcessedRuleColl = nodes.begin(); iterProcessedRuleColl != nodes.end(); ++iterProcessedRuleColl) {
+ DottedRuleCollOnDisk::const_iterator iterDottedRuleColl;
+ for (iterDottedRuleColl = nodes.begin(); iterDottedRuleColl != nodes.end(); ++iterDottedRuleColl) {
// node of last source word
- const ProcessedRuleOnDisk &prevProcessedRule = **iterProcessedRuleColl;
- if (prevProcessedRule.Done())
+ const DottedRuleOnDisk &prevDottedRule = **iterDottedRuleColl;
+ if (prevDottedRule.Done())
continue;
- prevProcessedRule.Done(true);
-
- const WordConsumed *wordConsumed = prevProcessedRule.GetLastWordConsumed();
- assert(wordConsumed);
+ prevDottedRule.Done(true);
- const OnDiskPt::PhraseNode &prevNode = prevProcessedRule.GetLastNode();
+ const OnDiskPt::PhraseNode &prevNode = prevDottedRule.GetLastNode();
//get node for each source LHS
const NonTerminalSet &lhsSet = GetSentence().GetLabelSet(range.GetStartPos(), range.GetEndPos());
@@ -251,9 +238,6 @@ void ChartRuleLookupManagerOnDisk::GetChartRuleCollection(
UINT64 tpCollFilePos = node->GetValue();
std::map<UINT64, const TargetPhraseCollection*>::const_iterator iterCache = m_cache.find(tpCollFilePos);
if (iterCache == m_cache.end()) {
- // not in case
- overThreshold = node->GetCount(0) > staticData.GetRuleCountThreshold();
- //cerr << node->GetCount(0) << " ";
const OnDiskPt::TargetPhraseCollection *tpcollBerkeleyDb = node->GetTargetPhraseCollection(m_dictionary.GetTableLimit(), m_dbWrapper);
@@ -275,9 +259,10 @@ void ChartRuleLookupManagerOnDisk::GetChartRuleCollection(
}
assert(targetPhraseCollection);
- outColl.Add(*targetPhraseCollection, *wordConsumed, adhereTableLimit, rulesLimit);
-
- numDerivations++;
+ if (!targetPhraseCollection->IsEmpty()) {
+ outColl.Add(*targetPhraseCollection, prevDottedRule,
+ GetCellCollection(), adhereTableLimit, rulesLimit);
+ }
} // if (node)
diff --git a/moses/src/ChartRuleLookupManagerOnDisk.h b/moses/src/ChartRuleLookupManagerOnDisk.h
index b52748af6..5ab2fb74e 100644
--- a/moses/src/ChartRuleLookupManagerOnDisk.h
+++ b/moses/src/ChartRuleLookupManagerOnDisk.h
@@ -23,7 +23,6 @@
#include "../../OnDiskPt/src/OnDiskWrapper.h"
-#include "CellCollection.h"
#include "ChartRuleLookupManager.h"
#include "ChartTranslationOptionList.h"
#include "DotChartOnDisk.h"
@@ -38,7 +37,7 @@ class ChartRuleLookupManagerOnDisk : public ChartRuleLookupManager
{
public:
ChartRuleLookupManagerOnDisk(const InputType &sentence,
- const CellCollection &cellColl,
+ const ChartCellCollection &cellColl,
const PhraseDictionaryOnDisk &dictionary,
OnDiskPt::OnDiskWrapper &dbWrapper,
const LMList *languageModels,
@@ -63,7 +62,7 @@ private:
const std::vector<FactorType> &m_outputFactorsVec;
const std::vector<float> &m_weight;
const std::string &m_filePath;
- std::vector<ProcessedRuleStackOnDisk*> m_runningNodesVec;
+ std::vector<DottedRuleStackOnDisk*> m_expandableDottedRuleListVec;
std::map<UINT64, const TargetPhraseCollection*> m_cache;
std::list<const OnDiskPt::PhraseNode*> m_sourcePhraseNode;
};
diff --git a/moses/src/ChartTranslationOption.cpp b/moses/src/ChartTranslationOption.cpp
index a51bfaf8d..27084f30b 100644
--- a/moses/src/ChartTranslationOption.cpp
+++ b/moses/src/ChartTranslationOption.cpp
@@ -19,42 +19,35 @@
***********************************************************************/
#include "ChartTranslationOption.h"
-#include "TargetPhrase.h"
+
#include "AlignmentInfo.h"
-#include "WordConsumed.h"
+#include "ChartCellCollection.h"
+#include "DotChart.h"
-using namespace std;
+#include <vector>
namespace Moses
{
-void ChartTranslationOption::CreateNonTermIndex()
+void ChartTranslationOption::CalcEstimateOfBestScore(
+ const ChartCellCollection &allChartCells)
{
- m_wordsConsumedTargetOrder.resize(m_targetPhrase.GetSize(), NOT_FOUND);
- const AlignmentInfo &alignInfo = m_targetPhrase.GetAlignmentInfo();
-
- size_t nonTermInd = 0;
- size_t prevSourcePos = 0;
- AlignmentInfo::const_iterator iter;
- for (iter = alignInfo.begin(); iter != alignInfo.end(); ++iter) {
- // alignment pairs must be ordered by source index
- size_t sourcePos = iter->first;
- if (nonTermInd > 0) {
- assert(sourcePos > prevSourcePos);
+ const TargetPhrase &targetPhrase = **(m_targetPhraseCollection.begin());
+ m_estimateOfBestScore = targetPhrase.GetFutureScore();
+
+ const DottedRule *rule = &m_dottedRule;
+
+ // only deal with non-terminals
+ while (!rule->IsRoot()) {
+ if (rule->IsNonTerminal()) {
+ // add the score of the best underlying hypothesis
+ const ChartCellLabel &cellLabel = rule->GetChartCellLabel();
+ const ChartHypothesisCollection *hypoColl = cellLabel.GetStack();
+ assert(hypoColl);
+ m_estimateOfBestScore += hypoColl->GetBestScore();
}
- prevSourcePos = sourcePos;
-
- size_t targetPos = iter->second;
- m_wordsConsumedTargetOrder[targetPos] = nonTermInd;
- nonTermInd++;
+ rule = rule->GetPrev();
}
}
-std::ostream& operator<<(std::ostream &out, const ChartTranslationOption &rule)
-{
- out << rule.m_lastWordConsumed << ": " << rule.m_targetPhrase.GetTargetLHS() << "->" << rule.m_targetPhrase;
- return out;
}
-
-} // namespace
-
diff --git a/moses/src/ChartTranslationOption.h b/moses/src/ChartTranslationOption.h
index ffae271e9..9b2df13de 100644
--- a/moses/src/ChartTranslationOption.h
+++ b/moses/src/ChartTranslationOption.h
@@ -20,67 +20,63 @@
#pragma once
+#include "TargetPhrase.h"
+#include "TargetPhraseCollection.h"
+#include "WordsRange.h"
+
#include <cassert>
#include <vector>
-#include "Word.h"
-#include "WordsRange.h"
-#include "TargetPhrase.h"
namespace Moses
{
-class WordConsumed;
-// basically a phrase translation and the vector of words consumed to map each word
+class DottedRule;
+class ChartCellCollection;
+
+// Similar to a DottedRule, but contains a direct reference to a list
+// of translations and provdes an estimate of the best score.
class ChartTranslationOption
{
- friend std::ostream& operator<<(std::ostream&, const ChartTranslationOption&);
-
-protected:
- const Moses::TargetPhrase &m_targetPhrase;
- const WordConsumed &m_lastWordConsumed;
- /* map each source word in the phrase table to:
- 1. a word in the input sentence, if the pt word is a terminal
- 2. a 1+ phrase in the input sentence, if the pt word is a non-terminal
- */
- std::vector<size_t> m_wordsConsumedTargetOrder;
- /* size is the size of the target phrase.
- Usually filled with NOT_KNOWN, unless the pos is a non-term, in which case its filled
- with its index
- */
- const WordsRange &m_wordsRange;
-
- ChartTranslationOption(const ChartTranslationOption &copy); // not implmenented
-
-public:
- ChartTranslationOption(const TargetPhrase &targetPhrase, const WordConsumed &lastWordConsumed, const WordsRange &wordsRange)
- :m_targetPhrase(targetPhrase)
- ,m_lastWordConsumed(lastWordConsumed)
- ,m_wordsRange(wordsRange)
- {}
- ~ChartTranslationOption()
- {}
-
- const TargetPhrase &GetTargetPhrase() const {
- return m_targetPhrase;
+ public:
+ ChartTranslationOption(const TargetPhraseCollection &targetPhraseColl,
+ const DottedRule &dottedRule,
+ const WordsRange &wordsRange,
+ const ChartCellCollection &allChartCells)
+ : m_dottedRule(dottedRule)
+ , m_targetPhraseCollection(targetPhraseColl)
+ , m_wordsRange(wordsRange)
+ , m_estimateOfBestScore(0)
+ {
+ CalcEstimateOfBestScore(allChartCells);
}
- const WordConsumed &GetLastWordConsumed() const {
- return m_lastWordConsumed;
- }
- const std::vector<size_t> &GetWordsConsumedTargetOrder() const {
- return m_wordsConsumedTargetOrder;
- }
+ ~ChartTranslationOption() {}
- void CreateNonTermIndex();
+ const DottedRule &GetDottedRule() const { return m_dottedRule; }
- const Moses::WordsRange &GetSourceWordsRange() const {
- return m_wordsRange;
+ const TargetPhraseCollection &GetTargetPhraseCollection() const {
+ return m_targetPhraseCollection;
}
- inline float GetTotalScore() const {
- return m_targetPhrase.GetFutureScore();
+ const WordsRange &GetSourceWordsRange() const {
+ return m_wordsRange;
}
+ // return an estimate of the best score possible with this translation option.
+ // the estimate is the sum of the top target phrase's estimated score plus the
+ // scores of the best child hypotheses.
+ inline float GetEstimateOfBestScore() const { return m_estimateOfBestScore; }
+
+ private:
+ // not implemented
+ ChartTranslationOption &operator=(const ChartTranslationOption &);
+
+ void CalcEstimateOfBestScore(const ChartCellCollection &);
+
+ const DottedRule &m_dottedRule;
+ const TargetPhraseCollection &m_targetPhraseCollection;
+ const WordsRange &m_wordsRange;
+ float m_estimateOfBestScore;
};
}
diff --git a/moses-chart/src/ChartTranslationOptionCollection.cpp b/moses/src/ChartTranslationOptionCollection.cpp
index e25f52667..dea904d57 100644
--- a/moses-chart/src/ChartTranslationOptionCollection.cpp
+++ b/moses/src/ChartTranslationOptionCollection.cpp
@@ -22,29 +22,28 @@
#include <cassert>
#include "ChartTranslationOptionCollection.h"
#include "ChartCellCollection.h"
-#include "../../moses/src/InputType.h"
-#include "../../moses/src/StaticData.h"
-#include "../../moses/src/DecodeStep.h"
-#include "../../moses/src/DummyScoreProducers.h"
-#include "../../moses/src/WordConsumed.h"
-#include "../../moses/src/Util.h"
+#include "InputType.h"
+#include "StaticData.h"
+#include "DecodeStep.h"
+#include "DummyScoreProducers.h"
+#include "DotChart.h"
+#include "Util.h"
using namespace std;
-using namespace Moses;
-namespace MosesChart
+namespace Moses
{
-TranslationOptionCollection::TranslationOptionCollection(InputType const& source
- , const Moses::TranslationSystem* system
+ChartTranslationOptionCollection::ChartTranslationOptionCollection(InputType const& source
+ , const TranslationSystem* system
, const ChartCellCollection &hypoStackColl
, const std::vector<ChartRuleLookupManager*> &ruleLookupManagers)
:m_source(source)
,m_system(system)
,m_decodeGraphList(system->GetDecodeGraphs())
,m_hypoStackColl(hypoStackColl)
- ,m_collection(source.GetSize())
,m_ruleLookupManagers(ruleLookupManagers)
+ ,m_collection(source.GetSize())
{
// create 2-d vector
size_t size = source.GetSize();
@@ -56,22 +55,22 @@ TranslationOptionCollection::TranslationOptionCollection(InputType const& source
}
}
-TranslationOptionCollection::~TranslationOptionCollection()
+ChartTranslationOptionCollection::~ChartTranslationOptionCollection()
{
RemoveAllInColl(m_unksrcs);
- RemoveAllInColl(m_cacheTargetPhrase);
+ RemoveAllInColl(m_cacheTargetPhraseCollection);
- std::list<std::vector<Moses::WordConsumed*>* >::iterator iterOuter;
- for (iterOuter = m_cachedWordsConsumed.begin(); iterOuter != m_cachedWordsConsumed.end(); ++iterOuter) {
- std::vector<Moses::WordConsumed*> &inner = **iterOuter;
+ std::list<std::vector<DottedRule*>* >::iterator iterOuter;
+ for (iterOuter = m_dottedRuleCache.begin(); iterOuter != m_dottedRuleCache.end(); ++iterOuter) {
+ std::vector<DottedRule*> &inner = **iterOuter;
RemoveAllInColl(inner);
}
- RemoveAllInColl(m_cachedWordsConsumed);
+ RemoveAllInColl(m_dottedRuleCache);
}
-void TranslationOptionCollection::CreateTranslationOptionsForRange(
+void ChartTranslationOptionCollection::CreateTranslationOptionsForRange(
size_t startPos
, size_t endPos)
{
@@ -100,13 +99,18 @@ void TranslationOptionCollection::CreateTranslationOptionsForRange(
}
//! Force a creation of a translation option where there are none for a particular source position.
-void TranslationOptionCollection::ProcessUnknownWord(size_t startPos, size_t endPos)
+void ChartTranslationOptionCollection::ProcessUnknownWord(size_t startPos, size_t endPos)
{
if (startPos != endPos) {
// only for 1 word phrases
return;
}
+ if (startPos == 0 || startPos == m_source.GetSize() - 1)
+ { // don't create unknown words for <S> or </S> tags. Otherwise they can be moved. Should only be translated by glue rules
+ return;
+ }
+
ChartTranslationOptionList &fullList = GetTranslationOptionList(startPos, startPos);
const WordsRange &wordsRange = fullList.GetSourceRange();
@@ -114,7 +118,7 @@ void TranslationOptionCollection::ProcessUnknownWord(size_t startPos, size_t end
std::vector <DecodeGraph*>::const_iterator iterDecodeGraph;
std::vector <ChartRuleLookupManager*>::const_iterator iterRuleLookupManagers = m_ruleLookupManagers.begin();
for (iterDecodeGraph = m_decodeGraphList.begin(); iterDecodeGraph != m_decodeGraphList.end(); ++iterDecodeGraph, ++iterRuleLookupManagers) {
- const DecodeGraph &decodeGraph = **iterDecodeGraph;
+ //const DecodeGraph &decodeGraph = **iterDecodeGraph;
ChartRuleLookupManager &ruleLookupManager = **iterRuleLookupManagers;
size_t numTransOpt = fullList.GetSize();
if (numTransOpt == 0) {
@@ -130,20 +134,20 @@ void TranslationOptionCollection::ProcessUnknownWord(size_t startPos, size_t end
}
-ChartTranslationOptionList &TranslationOptionCollection::GetTranslationOptionList(size_t startPos, size_t endPos)
+ChartTranslationOptionList &ChartTranslationOptionCollection::GetTranslationOptionList(size_t startPos, size_t endPos)
{
size_t sizeVec = m_collection[startPos].size();
assert(endPos-startPos < sizeVec);
return m_collection[startPos][endPos - startPos];
}
-const ChartTranslationOptionList &TranslationOptionCollection::GetTranslationOptionList(size_t startPos, size_t endPos) const
+const ChartTranslationOptionList &ChartTranslationOptionCollection::GetTranslationOptionList(size_t startPos, size_t endPos) const
{
size_t sizeVec = m_collection[startPos].size();
assert(endPos-startPos < sizeVec);
return m_collection[startPos][endPos - startPos];
}
-std::ostream& operator<<(std::ostream &out, const TranslationOptionCollection &coll)
+std::ostream& operator<<(std::ostream &out, const ChartTranslationOptionCollection &coll)
{
std::vector< std::vector< ChartTranslationOptionList > >::const_iterator iterOuter;
for (iterOuter = coll.m_collection.begin(); iterOuter != coll.m_collection.end(); ++iterOuter) {
@@ -160,24 +164,27 @@ std::ostream& operator<<(std::ostream &out, const TranslationOptionCollection &c
return out;
}
-// taken from TranslationOptionCollectionText.
-void TranslationOptionCollection::ProcessUnknownWord(size_t sourcePos)
+// taken from ChartTranslationOptionCollectionText.
+void ChartTranslationOptionCollection::ProcessUnknownWord(size_t sourcePos)
{
const Word &sourceWord = m_source.GetWord(sourcePos);
ProcessOneUnknownWord(sourceWord,sourcePos);
}
//! special handling of ONE unknown words.
-void TranslationOptionCollection::ProcessOneUnknownWord(const Moses::Word &sourceWord, size_t sourcePos, size_t length)
+void ChartTranslationOptionCollection::ProcessOneUnknownWord(const Word &sourceWord, size_t sourcePos, size_t /* length */)
{
// unknown word, add as trans opt
const StaticData &staticData = StaticData::Instance();
const UnknownWordPenaltyProducer *unknownWordPenaltyProducer = m_system->GetUnknownWordPenaltyProducer();
vector<float> wordPenaltyScore(1, -0.434294482); // TODO what is this number?
- Moses::ChartTranslationOptionList &transOptColl = GetTranslationOptionList(sourcePos, sourcePos);
+ ChartTranslationOptionList &transOptColl = GetTranslationOptionList(sourcePos, sourcePos);
const WordsRange &range = transOptColl.GetSourceRange();
+ const ChartCell &chartCell = m_hypoStackColl.Get(range);
+ const ChartCellLabel &sourceWordLabel = chartCell.GetSourceWordLabel();
+
size_t isDigit = 0;
if (staticData.GetDropUnknown()) {
const Factor *f = sourceWord[0]; // TODO hack. shouldn't know which factor is surface
@@ -190,19 +197,17 @@ void TranslationOptionCollection::ProcessOneUnknownWord(const Moses::Word &sourc
// modify the starting bitmap
}
- Phrase* m_unksrc = new Phrase(Input);
+ Phrase* m_unksrc = new Phrase(Input, 1);
m_unksrc->AddWord() = sourceWord;
m_unksrcs.push_back(m_unksrc);
- TranslationOption *transOpt;
+ //TranslationOption *transOpt;
if (! staticData.GetDropUnknown() || isDigit) {
- // words consumed
- std::vector<WordConsumed*> *wordsConsumed = new std::vector<WordConsumed*>();
- m_cachedWordsConsumed.push_back(wordsConsumed);
-
- WordConsumed *wc = new WordConsumed(sourcePos, sourcePos, sourceWord, NULL);
- wordsConsumed->push_back(wc);
- assert(wordsConsumed->size());
+ // create dotted rules
+ std::vector<DottedRule*> *dottedRuleList = new std::vector<DottedRule*>();
+ m_dottedRuleCache.push_back(dottedRuleList);
+ dottedRuleList->push_back(new DottedRule());
+ dottedRuleList->push_back(new DottedRule(sourceWordLabel, *(dottedRuleList->back())));
// loop
const UnknownLHSList &lhsList = staticData.GetUnknownLHS();
@@ -212,7 +217,7 @@ void TranslationOptionCollection::ProcessOneUnknownWord(const Moses::Word &sourc
float prob = iterLHS->second;
// lhs
- const Word &sourceLHS = staticData.GetInputDefaultNonTerminal();
+ //const Word &sourceLHS = staticData.GetInputDefaultNonTerminal();
Word targetLHS(true);
targetLHS.CreateFromString(Output, staticData.GetOutputFactorOrder(), targetLHSStr, true);
@@ -220,8 +225,10 @@ void TranslationOptionCollection::ProcessOneUnknownWord(const Moses::Word &sourc
// add to dictionary
TargetPhrase *targetPhrase = new TargetPhrase(Output);
+ TargetPhraseCollection *tpc = new TargetPhraseCollection;
+ tpc->Add(targetPhrase);
- m_cacheTargetPhrase.push_back(targetPhrase);
+ m_cacheTargetPhraseCollection.push_back(tpc);
Word &targetWord = targetPhrase->AddWord();
targetWord.CreateUnknownWord(sourceWord);
@@ -235,10 +242,10 @@ void TranslationOptionCollection::ProcessOneUnknownWord(const Moses::Word &sourc
targetPhrase->SetTargetLHS(targetLHS);
// chart rule
- ChartTranslationOption *chartRule = new ChartTranslationOption(*targetPhrase
- , *wordsConsumed->back()
- , range);
- chartRule->CreateNonTermIndex();
+ ChartTranslationOption *chartRule = new ChartTranslationOption(*tpc
+ , *dottedRuleList->back()
+ , range
+ , m_hypoStackColl);
transOptColl.Add(chartRule);
} // for (iterLHS
} else {
@@ -246,58 +253,56 @@ void TranslationOptionCollection::ProcessOneUnknownWord(const Moses::Word &sourc
vector<float> unknownScore(1, FloorScore(-numeric_limits<float>::infinity()));
TargetPhrase *targetPhrase = new TargetPhrase(Output);
+ TargetPhraseCollection *tpc = new TargetPhraseCollection;
+ tpc->Add(targetPhrase);
// loop
const UnknownLHSList &lhsList = staticData.GetUnknownLHS();
UnknownLHSList::const_iterator iterLHS;
for (iterLHS = lhsList.begin(); iterLHS != lhsList.end(); ++iterLHS) {
const string &targetLHSStr = iterLHS->first;
- float prob = iterLHS->second;
+ //float prob = iterLHS->second;
Word targetLHS(true);
targetLHS.CreateFromString(Output, staticData.GetOutputFactorOrder(), targetLHSStr, true);
assert(targetLHS.GetFactor(0) != NULL);
- m_cacheTargetPhrase.push_back(targetPhrase);
targetPhrase->SetSourcePhrase(*m_unksrc);
targetPhrase->SetScore(unknownWordPenaltyProducer, unknownScore);
targetPhrase->SetTargetLHS(targetLHS);
// words consumed
- std::vector<WordConsumed*> *wordsConsumed = new std::vector<WordConsumed*>;
- m_cachedWordsConsumed.push_back(wordsConsumed);
- wordsConsumed->push_back(new WordConsumed(sourcePos, sourcePos, sourceWord, NULL));
+ std::vector<DottedRule*> *dottedRuleList = new std::vector<DottedRule*>();
+ m_dottedRuleCache.push_back(dottedRuleList);
+ dottedRuleList->push_back(new DottedRule());
+ dottedRuleList->push_back(new DottedRule(sourceWordLabel, *(dottedRuleList->back())));
// chart rule
- assert(wordsConsumed->size());
- ChartTranslationOption *chartRule = new ChartTranslationOption(*targetPhrase
- , *wordsConsumed->back()
- , range);
- chartRule->CreateNonTermIndex();
+ ChartTranslationOption *chartRule = new ChartTranslationOption(*tpc
+ , *dottedRuleList->back()
+ , range
+ , m_hypoStackColl);
transOptColl.Add(chartRule);
}
}
}
-void TranslationOptionCollection::Add(ChartTranslationOption *transOpt, size_t pos)
+void ChartTranslationOptionCollection::Add(ChartTranslationOption *transOpt, size_t pos)
{
ChartTranslationOptionList &transOptList = GetTranslationOptionList(pos, pos);
transOptList.Add(transOpt);
}
//! pruning: only keep the top n (m_maxNoTransOptPerCoverage) elements */
-void TranslationOptionCollection::Prune(size_t startPos, size_t endPos)
+void ChartTranslationOptionCollection::Prune(size_t /* startPos */, size_t /* endPos */)
{
}
//! sort all trans opt in each list for cube pruning */
-void TranslationOptionCollection::Sort(size_t startPos, size_t endPos)
+void ChartTranslationOptionCollection::Sort(size_t startPos, size_t endPos)
{
ChartTranslationOptionList &list = GetTranslationOptionList(startPos, endPos);
list.Sort();
}
-
} // namespace
-
-
diff --git a/moses-chart/src/ChartTranslationOptionCollection.h b/moses/src/ChartTranslationOptionCollection.h
index 8734aae2a..e1f3490a9 100644
--- a/moses-chart/src/ChartTranslationOptionCollection.h
+++ b/moses/src/ChartTranslationOptionCollection.h
@@ -22,52 +22,48 @@
#pragma once
#include <vector>
-#include "../../moses/src/InputType.h"
-#include "../../moses/src/DecodeGraph.h"
-#include "../../moses/src/ChartTranslationOptionList.h"
-#include "../../moses/src/ChartRuleLookupManager.h"
+#include "InputType.h"
+#include "DecodeGraph.h"
+#include "ChartTranslationOptionList.h"
+#include "ChartRuleLookupManager.h"
namespace Moses
{
class DecodeGraph;
class Word;
class ChartTranslationOption;
-class WordConsumed;
+class DottedRule;
class WordPenaltyProducer;
-};
-
-namespace MosesChart
-{
class ChartCellCollection;
-class TranslationOptionCollection
+class ChartTranslationOptionCollection
{
- friend std::ostream& operator<<(std::ostream&, const TranslationOptionCollection&);
+ friend std::ostream& operator<<(std::ostream&, const ChartTranslationOptionCollection&);
protected:
- const Moses::InputType &m_source;
- const Moses::TranslationSystem* m_system;
- std::vector <Moses::DecodeGraph*> m_decodeGraphList;
+ const InputType &m_source;
+ const TranslationSystem* m_system;
+ std::vector <DecodeGraph*> m_decodeGraphList;
const ChartCellCollection &m_hypoStackColl;
- const std::vector<Moses::ChartRuleLookupManager*> &m_ruleLookupManagers;
+ const std::vector<ChartRuleLookupManager*> &m_ruleLookupManagers;
- std::vector< std::vector< Moses::ChartTranslationOptionList > > m_collection; /*< contains translation options */
- std::vector<Moses::Phrase*> m_unksrcs;
- std::list<Moses::TargetPhrase*> m_cacheTargetPhrase;
- std::list<std::vector<Moses::WordConsumed*>* > m_cachedWordsConsumed;
+ std::vector< std::vector< ChartTranslationOptionList > > m_collection; /*< contains translation options */
+ std::vector<Phrase*> m_unksrcs;
+ std::list<TargetPhraseCollection*> m_cacheTargetPhraseCollection;
+ std::list<std::vector<DottedRule*>* > m_dottedRuleCache;
// for adding 1 trans opt in unknown word proc
- void Add(Moses::ChartTranslationOption *transOpt, size_t pos);
+ void Add(ChartTranslationOption *transOpt, size_t pos);
- Moses::ChartTranslationOptionList &GetTranslationOptionList(size_t startPos, size_t endPos);
- const Moses::ChartTranslationOptionList &GetTranslationOptionList(size_t startPos, size_t endPos) const;
+ ChartTranslationOptionList &GetTranslationOptionList(size_t startPos, size_t endPos);
+ const ChartTranslationOptionList &GetTranslationOptionList(size_t startPos, size_t endPos) const;
void ProcessUnknownWord(size_t startPos, size_t endPos);
- // taken from TranslationOptionCollectionText.
+ // taken from ChartTranslationOptionCollectionText.
void ProcessUnknownWord(size_t sourcePos);
//! special handling of ONE unknown words.
- virtual void ProcessOneUnknownWord(const Moses::Word &sourceWord
+ virtual void ProcessOneUnknownWord(const Word &sourceWord
, size_t sourcePos, size_t length = 1);
//! pruning: only keep the top n (m_maxNoTransOptPerCoverage) elements */
@@ -77,15 +73,15 @@ protected:
void Sort(size_t startPos, size_t endPos);
public:
- TranslationOptionCollection(Moses::InputType const& source
- , const Moses::TranslationSystem* system
+ ChartTranslationOptionCollection(InputType const& source
+ , const TranslationSystem* system
, const ChartCellCollection &hypoStackColl
- , const std::vector<Moses::ChartRuleLookupManager*> &ruleLookupManagers);
- virtual ~TranslationOptionCollection();
+ , const std::vector<ChartRuleLookupManager*> &ruleLookupManagers);
+ virtual ~ChartTranslationOptionCollection();
void CreateTranslationOptionsForRange(size_t startPos
, size_t endPos);
- const Moses::ChartTranslationOptionList &GetTranslationOptionList(const Moses::WordsRange &range) const {
+ const ChartTranslationOptionList &GetTranslationOptionList(const WordsRange &range) const {
return GetTranslationOptionList(range.GetStartPos(), range.GetEndPos());
}
diff --git a/moses/src/ChartTranslationOptionList.cpp b/moses/src/ChartTranslationOptionList.cpp
index a9aa6f716..100db79b4 100644
--- a/moses/src/ChartTranslationOptionList.cpp
+++ b/moses/src/ChartTranslationOptionList.cpp
@@ -20,16 +20,15 @@
#include <algorithm>
#include <iostream>
-#include "../../moses/src/StaticData.h"
+#include "StaticData.h"
#include "ChartTranslationOptionList.h"
#include "ChartTranslationOption.h"
+#include "ChartCellCollection.h"
#include "WordsRange.h"
-using namespace std;
-using namespace Moses;
-
namespace Moses
{
+
#ifdef USE_HYPO_POOL
ObjectPool<ChartTranslationOptionList> ChartTranslationOptionList::s_objectPool("ChartTranslationOptionList", 3000);
#endif
@@ -46,53 +45,58 @@ ChartTranslationOptionList::~ChartTranslationOptionList()
RemoveAllInColl(m_collection);
}
-
-class ChartRuleOrderer
+class ChartTranslationOptionOrderer
{
public:
bool operator()(const ChartTranslationOption* itemA, const ChartTranslationOption* itemB) const {
- return itemA->GetTargetPhrase().GetFutureScore() > itemB->GetTargetPhrase().GetFutureScore();
+ return itemA->GetEstimateOfBestScore() > itemB->GetEstimateOfBestScore();
}
};
void ChartTranslationOptionList::Add(const TargetPhraseCollection &targetPhraseCollection
- , const WordConsumed &wordConsumed
- , bool adhereTableLimit
+ , const DottedRule &dottedRule
+ , const ChartCellCollection &chartCellColl
+ , bool /* adhereTableLimit */
, size_t ruleLimit)
{
- TargetPhraseCollection::const_iterator iter;
- TargetPhraseCollection::const_iterator iterEnd = targetPhraseCollection.end();
-
- for (iter = targetPhraseCollection.begin(); iter != iterEnd; ++iter) {
- const TargetPhrase &targetPhrase = **iter;
- float score = targetPhrase.GetFutureScore();
-
- if (m_collection.size() < ruleLimit) {
- // not yet filled out quota. add everything
- m_collection.push_back(new ChartTranslationOption(targetPhrase, wordConsumed, m_range));
- m_scoreThreshold = (score < m_scoreThreshold) ? score : m_scoreThreshold;
- } else if (score > m_scoreThreshold) {
- // full but not bursting. add if better than worst score
- m_collection.push_back(new ChartTranslationOption(targetPhrase, wordConsumed, m_range));
- }
+ if (targetPhraseCollection.IsEmpty()) {
+ return;
+ }
- // prune if bursting
- if (m_collection.size() > ruleLimit * 2) {
- std::nth_element(m_collection.begin()
- , m_collection.begin() + ruleLimit
- , m_collection.end()
- , ChartRuleOrderer());
- // delete the bottom half
- for (size_t ind = ruleLimit; ind < m_collection.size(); ++ind) {
- // make the best score of bottom half the score threshold
- const TargetPhrase &targetPhrase = m_collection[ind]->GetTargetPhrase();
- float score = targetPhrase.GetFutureScore();
- m_scoreThreshold = (score > m_scoreThreshold) ? score : m_scoreThreshold;
- delete m_collection[ind];
- }
- m_collection.resize(ruleLimit);
+ if (m_collection.size() < ruleLimit) {
+ // not yet filled out quota. add everything
+ ChartTranslationOption *option = new ChartTranslationOption(
+ targetPhraseCollection, dottedRule, m_range, chartCellColl);
+ m_collection.push_back(option);
+ float score = option->GetEstimateOfBestScore();
+ m_scoreThreshold = (score < m_scoreThreshold) ? score : m_scoreThreshold;
+ }
+ else {
+ // full but not bursting. add if better than worst score
+ ChartTranslationOption option(targetPhraseCollection, dottedRule,
+ m_range, chartCellColl);
+ float score = option.GetEstimateOfBestScore();
+ if (score > m_scoreThreshold) {
+ // dynamic allocation deferred until here on the assumption that most
+ // options will score below the threshold.
+ m_collection.push_back(new ChartTranslationOption(option));
}
+ }
+ // prune if bursting
+ if (m_collection.size() > ruleLimit * 2) {
+ std::nth_element(m_collection.begin()
+ , m_collection.begin() + ruleLimit
+ , m_collection.end()
+ , ChartTranslationOptionOrderer());
+ // delete the bottom half
+ for (size_t ind = ruleLimit; ind < m_collection.size(); ++ind) {
+ // make the best score of bottom half the score threshold
+ float score = m_collection[ind]->GetEstimateOfBestScore();
+ m_scoreThreshold = (score > m_scoreThreshold) ? score : m_scoreThreshold;
+ delete m_collection[ind];
+ }
+ m_collection.resize(ruleLimit);
}
}
@@ -108,7 +112,7 @@ void ChartTranslationOptionList::CreateChartRules(size_t ruleLimit)
std::nth_element(m_collection.begin()
, m_collection.begin() + ruleLimit
, m_collection.end()
- , ChartRuleOrderer());
+ , ChartTranslationOptionOrderer());
// delete the bottom half
for (size_t ind = ruleLimit; ind < m_collection.size(); ++ind) {
@@ -116,29 +120,8 @@ void ChartTranslationOptionList::CreateChartRules(size_t ruleLimit)
}
m_collection.resize(ruleLimit);
}
-
- // finalise creation of chart rules
- for (size_t ind = 0; ind < m_collection.size(); ++ind) {
- ChartTranslationOption &rule = *m_collection[ind];
- rule.CreateNonTermIndex();
- }
}
-// helper class
-class ChartTranslationOptionOrderer
-{
-public:
- bool operator()(const ChartTranslationOption* transOptA, const ChartTranslationOption* transOptB) const {
- /*
- if (transOptA->GetArity() != transOptB->GetArity())
- {
- return transOptA->GetArity() < transOptB->GetArity();
- }
- */
- return transOptA->GetTotalScore() > transOptB->GetTotalScore();
- }
-};
-
void ChartTranslationOptionList::Sort()
{
@@ -148,7 +131,7 @@ void ChartTranslationOptionList::Sort()
CollType::const_iterator iter;
for (iter = m_collection.begin(); iter != m_collection.end(); ++iter) {
const ChartTranslationOption *transOpt = *iter;
- float score = transOpt->GetTotalScore();
+ float score = transOpt->GetEstimateOfBestScore();
scoreThreshold = (score > scoreThreshold) ? score : scoreThreshold;
}
@@ -157,7 +140,7 @@ void ChartTranslationOptionList::Sort()
size_t ind = 0;
while (ind < m_collection.size()) {
const ChartTranslationOption *transOpt = m_collection[ind];
- if (transOpt->GetTotalScore() < scoreThreshold) {
+ if (transOpt->GetEstimateOfBestScore() < scoreThreshold) {
delete transOpt;
m_collection.erase(m_collection.begin() + ind);
} else {
@@ -168,15 +151,4 @@ void ChartTranslationOptionList::Sort()
std::sort(m_collection.begin(), m_collection.end(), ChartTranslationOptionOrderer());
}
-std::ostream& operator<<(std::ostream &out, const ChartTranslationOptionList &coll)
-{
- ChartTranslationOptionList::const_iterator iter;
- for (iter = coll.begin() ; iter != coll.end() ; ++iter) {
- const ChartTranslationOption &rule = **iter;
- out << rule << endl;
- }
- return out;
}
-
-}
-
diff --git a/moses/src/ChartTranslationOptionList.h b/moses/src/ChartTranslationOptionList.h
index cdd351a08..7272a01cf 100644
--- a/moses/src/ChartTranslationOptionList.h
+++ b/moses/src/ChartTranslationOptionList.h
@@ -45,7 +45,7 @@ protected:
typedef std::vector<ChartTranslationOption*> CollType;
CollType m_collection;
float m_scoreThreshold;
- Moses::WordsRange m_range;
+ WordsRange m_range;
public:
// iters
@@ -66,7 +66,7 @@ public:
}
#ifdef USE_HYPO_POOL
- void *operator new(size_t num_bytes) {
+ void *operator new(size_t /* num_bytes */) {
void *ptr = s_objectPool.getPtr();
return ptr;
}
@@ -99,15 +99,16 @@ public:
return m_collection.empty();
}
- void Add(const Moses::TargetPhraseCollection &targetPhraseCollection
- , const WordConsumed &wordConsumed
+ void Add(const TargetPhraseCollection &targetPhraseCollection
+ , const DottedRule &dottedRule
+ , const ChartCellCollection &
, bool ruleLimit
, size_t tableLimit);
void Add(ChartTranslationOption *transOpt);
void CreateChartRules(size_t ruleLimit);
- const Moses::WordsRange &GetSourceRange() const {
+ const WordsRange &GetSourceRange() const {
return m_range;
}
diff --git a/moses-chart/src/ChartTrellisNode.cpp b/moses/src/ChartTrellisNode.cpp
index 696b632c1..eb65120a7 100644
--- a/moses-chart/src/ChartTrellisNode.cpp
+++ b/moses/src/ChartTrellisNode.cpp
@@ -21,33 +21,35 @@
#include "ChartTrellisNode.h"
#include "ChartHypothesis.h"
-#include "../../moses/src/ScoreComponentCollection.h"
+#include "DotChart.h"
+#include "ScoreComponentCollection.h"
+#include "StaticData.h"
using namespace std;
-namespace MosesChart
+namespace Moses
{
-TrellisNode::TrellisNode(const Hypothesis *hypo)
+ChartTrellisNode::ChartTrellisNode(const ChartHypothesis *hypo)
:m_hypo(hypo)
{
- const std::vector<const Hypothesis*> &prevHypos = hypo->GetPrevHypos();
+ const std::vector<const ChartHypothesis*> &prevHypos = hypo->GetPrevHypos();
m_edge.reserve(prevHypos.size());
for (size_t ind = 0; ind < prevHypos.size(); ++ind) {
- const Hypothesis *prevHypo = prevHypos[ind];
- TrellisNode *child = new TrellisNode(prevHypo);
+ const ChartHypothesis *prevHypo = prevHypos[ind];
+ ChartTrellisNode *child = new ChartTrellisNode(prevHypo);
m_edge.push_back(child);
}
assert(m_hypo);
}
-TrellisNode::TrellisNode(const TrellisNode &origNode
- , const TrellisNode &soughtNode
- , const Hypothesis &replacementHypo
- , Moses::ScoreComponentCollection &scoreChange
- , const TrellisNode *&nodeChanged)
+ChartTrellisNode::ChartTrellisNode(const ChartTrellisNode &origNode
+ , const ChartTrellisNode &soughtNode
+ , const ChartHypothesis &replacementHypo
+ , ScoreComponentCollection &scoreChange
+ , const ChartTrellisNode *&nodeChanged)
{
if (&origNode.GetHypothesis() == &soughtNode.GetHypothesis()) {
// this node should be replaced
@@ -61,16 +63,16 @@ TrellisNode::TrellisNode(const TrellisNode &origNode
scoreChange.MinusEquals(origNode.GetHypothesis().GetScoreBreakdown());
float deltaScore = scoreChange.GetWeightedScore();
- assert(deltaScore <= 0.0005);
+ assert(deltaScore <= 0.005);
// follow prev hypos back to beginning
- const std::vector<const Hypothesis*> &prevHypos = replacementHypo.GetPrevHypos();
- vector<const Hypothesis*>::const_iterator iter;
+ const std::vector<const ChartHypothesis*> &prevHypos = replacementHypo.GetPrevHypos();
+ vector<const ChartHypothesis*>::const_iterator iter;
assert(m_edge.empty());
m_edge.reserve(prevHypos.size());
for (iter = prevHypos.begin(); iter != prevHypos.end(); ++iter) {
- const Hypothesis *prevHypo = *iter;
- TrellisNode *prevNode = new TrellisNode(prevHypo);
+ const ChartHypothesis *prevHypo = *iter;
+ ChartTrellisNode *prevNode = new ChartTrellisNode(prevHypo);
m_edge.push_back(prevNode);
}
@@ -81,8 +83,8 @@ TrellisNode::TrellisNode(const TrellisNode &origNode
assert(m_edge.empty());
m_edge.reserve(origNode.m_edge.size());
for (iter = origNode.m_edge.begin(); iter != origNode.m_edge.end(); ++iter) {
- const TrellisNode &prevNode = **iter;
- TrellisNode *newPrevNode = new TrellisNode(prevNode, soughtNode, replacementHypo, scoreChange, nodeChanged);
+ const ChartTrellisNode &prevNode = **iter;
+ ChartTrellisNode *newPrevNode = new ChartTrellisNode(prevNode, soughtNode, replacementHypo, scoreChange, nodeChanged);
m_edge.push_back(newPrevNode);
}
}
@@ -90,24 +92,30 @@ TrellisNode::TrellisNode(const TrellisNode &origNode
assert(m_hypo);
}
-TrellisNode::~TrellisNode()
+ChartTrellisNode::~ChartTrellisNode()
{
- Moses::RemoveAllInColl(m_edge);
+ RemoveAllInColl(m_edge);
}
-Moses::Phrase TrellisNode::GetOutputPhrase() const
+Phrase ChartTrellisNode::GetOutputPhrase() const
{
// exactly like same fn in hypothesis, but use trellis nodes instead of prevHypos pointer
- Moses::Phrase ret(Moses::Output);
+ Phrase ret(Output, ARRAY_SIZE_INCR);
- const Moses::Phrase &currTargetPhrase = m_hypo->GetCurrTargetPhrase();
+ const ChartTranslationOption &transOpt = m_hypo->GetTranslationOption();
+
+ VERBOSE(3, "Trans Opt:" << transOpt.GetDottedRule() << ": " << m_hypo->GetCurrTargetPhrase().GetTargetLHS() << "->" << m_hypo->GetCurrTargetPhrase() << std::endl);
+
+ const Phrase &currTargetPhrase = m_hypo->GetCurrTargetPhrase();
+ const AlignmentInfo::NonTermIndexMap &nonTermIndexMap =
+ m_hypo->GetCurrTargetPhrase().GetAlignmentInfo().GetNonTermIndexMap();
for (size_t pos = 0; pos < currTargetPhrase.GetSize(); ++pos) {
- const Moses::Word &word = currTargetPhrase.GetWord(pos);
+ const Word &word = currTargetPhrase.GetWord(pos);
if (word.IsNonTerminal()) {
// non-term. fill out with prev hypo
- size_t nonTermInd = m_hypo->GetWordsConsumedTargetOrder(pos);
- const TrellisNode &childNode = GetChild(nonTermInd);
- Moses::Phrase childPhrase = childNode.GetOutputPhrase();
+ size_t nonTermInd = nonTermIndexMap[pos];
+ const ChartTrellisNode &childNode = GetChild(nonTermInd);
+ Phrase childPhrase = childNode.GetOutputPhrase();
ret.Append(childPhrase);
} else {
ret.AddWord(word);
@@ -117,11 +125,11 @@ Moses::Phrase TrellisNode::GetOutputPhrase() const
return ret;
}
-std::ostream& operator<<(std::ostream &out, const TrellisNode &node)
+std::ostream& operator<<(std::ostream &out, const ChartTrellisNode &node)
{
out << "* " << node.GetHypothesis() << endl;
- TrellisNode::NodeChildren::const_iterator iter;
+ ChartTrellisNode::NodeChildren::const_iterator iter;
for (iter = node.GetChildren().begin(); iter != node.GetChildren().end(); ++iter) {
out << **iter;
}
diff --git a/moses-chart/src/ChartTrellisNode.h b/moses/src/ChartTrellisNode.h
index aa8814be6..e8d6b55ac 100644
--- a/moses-chart/src/ChartTrellisNode.h
+++ b/moses/src/ChartTrellisNode.h
@@ -22,38 +22,33 @@
#pragma once
#include <vector>
-#include "../../moses/src/Phrase.h"
+#include "Phrase.h"
namespace Moses
{
class ScoreComponentCollection;
-}
+class ChartHypothesis;
-namespace MosesChart
+class ChartTrellisNode
{
-
-class Hypothesis;
-
-class TrellisNode
-{
- friend std::ostream& operator<<(std::ostream&, const TrellisNode&);
+ friend std::ostream& operator<<(std::ostream&, const ChartTrellisNode&);
public:
- typedef std::vector<TrellisNode*> NodeChildren;
+ typedef std::vector<ChartTrellisNode*> NodeChildren;
protected:
- const Hypothesis *m_hypo;
+ const ChartHypothesis *m_hypo;
NodeChildren m_edge;
public:
- TrellisNode(const Hypothesis *hypo);
- TrellisNode(const TrellisNode &origNode
- , const TrellisNode &soughtNode
- , const Hypothesis &replacementHypo
- , Moses::ScoreComponentCollection &scoreChange
- , const TrellisNode *&nodeChanged);
- ~TrellisNode();
-
- const Hypothesis &GetHypothesis() const {
+ ChartTrellisNode(const ChartHypothesis *hypo);
+ ChartTrellisNode(const ChartTrellisNode &origNode
+ , const ChartTrellisNode &soughtNode
+ , const ChartHypothesis &replacementHypo
+ , ScoreComponentCollection &scoreChange
+ , const ChartTrellisNode *&nodeChanged);
+ ~ChartTrellisNode();
+
+ const ChartHypothesis &GetHypothesis() const {
return *m_hypo;
}
@@ -61,11 +56,11 @@ public:
return m_edge;
}
- const TrellisNode &GetChild(size_t ind) const {
+ const ChartTrellisNode &GetChild(size_t ind) const {
return *m_edge[ind];
}
- Moses::Phrase GetOutputPhrase() const;
+ Phrase GetOutputPhrase() const;
};
}
diff --git a/moses-chart/src/ChartTrellisPath.cpp b/moses/src/ChartTrellisPath.cpp
index 60d73026a..f3d488a51 100644
--- a/moses-chart/src/ChartTrellisPath.cpp
+++ b/moses/src/ChartTrellisPath.cpp
@@ -22,16 +22,16 @@
#include "ChartTrellisPath.h"
#include "ChartHypothesis.h"
#include "ChartTrellisPathCollection.h"
-#include "../../moses/src/StaticData.h"
-#include "../../moses/src/Word.h"
+#include "StaticData.h"
+#include "Word.h"
using namespace std;
-namespace MosesChart
+namespace Moses
{
-TrellisPath::TrellisPath(const Hypothesis *hypo)
- :m_finalNode(new TrellisNode(hypo))
+ChartTrellisPath::ChartTrellisPath(const ChartHypothesis *hypo)
+ :m_finalNode(new ChartTrellisNode(hypo))
,m_scoreBreakdown(hypo->GetScoreBreakdown())
,m_totalScore(hypo->GetTotalScore())
,m_prevNodeChanged(NULL)
@@ -39,14 +39,14 @@ TrellisPath::TrellisPath(const Hypothesis *hypo)
{
}
-TrellisPath::TrellisPath(const TrellisPath &origPath
- , const TrellisNode &soughtNode
- , const Hypothesis &replacementHypo
- , Moses::ScoreComponentCollection &scoreChange)
+ChartTrellisPath::ChartTrellisPath(const ChartTrellisPath &origPath
+ , const ChartTrellisNode &soughtNode
+ , const ChartHypothesis &replacementHypo
+ , ScoreComponentCollection &scoreChange)
:m_scoreBreakdown(origPath.GetScoreBreakdown())
,m_prevPath(&origPath)
{
- m_finalNode = new TrellisNode(origPath.GetFinalNode()
+ m_finalNode = new ChartTrellisNode(origPath.GetFinalNode()
, soughtNode
, replacementHypo
, scoreChange
@@ -57,61 +57,61 @@ TrellisPath::TrellisPath(const TrellisPath &origPath
m_totalScore = m_scoreBreakdown.GetWeightedScore();
}
-TrellisPath::~TrellisPath()
+ChartTrellisPath::~ChartTrellisPath()
{
delete m_finalNode;
}
-Moses::Phrase TrellisPath::GetOutputPhrase() const
+Phrase ChartTrellisPath::GetOutputPhrase() const
{
- Moses::Phrase ret = GetFinalNode().GetOutputPhrase();
+ Phrase ret = GetFinalNode().GetOutputPhrase();
return ret;
}
-void TrellisPath::CreateDeviantPaths(TrellisPathCollection &pathColl, const TrellisNode &soughtNode) const
+void ChartTrellisPath::CreateDeviantPaths(ChartTrellisPathCollection &pathColl, const ChartTrellisNode &soughtNode) const
{
// copy this path but replace startHypo with its arc
- const ArcList *arcList = soughtNode.GetHypothesis().GetArcList();
+ const ChartArcList *arcList = soughtNode.GetHypothesis().GetArcList();
if (arcList) {
- ArcList::const_iterator iterArcList;
- for (iterArcList = arcList->begin(); iterArcList != arcList->end(); ++iterArcList) {
- Moses::ScoreComponentCollection scoreChange;
+ ChartArcList::const_iterator iterChartArcList;
+ for (iterChartArcList = arcList->begin(); iterChartArcList != arcList->end(); ++iterChartArcList) {
+ ScoreComponentCollection scoreChange;
- const Hypothesis &replacementHypo = **iterArcList;
- TrellisPath *newPath = new TrellisPath(*this, soughtNode, replacementHypo, scoreChange);
+ const ChartHypothesis &replacementHypo = **iterChartArcList;
+ ChartTrellisPath *newPath = new ChartTrellisPath(*this, soughtNode, replacementHypo, scoreChange);
pathColl.Add(newPath);
}
}
// recusively create deviant paths for child nodes
- const TrellisNode::NodeChildren &children = soughtNode.GetChildren();
+ const ChartTrellisNode::NodeChildren &children = soughtNode.GetChildren();
- TrellisNode::NodeChildren::const_iterator iter;
+ ChartTrellisNode::NodeChildren::const_iterator iter;
for (iter = children.begin(); iter != children.end(); ++iter) {
- const TrellisNode &child = **iter;
+ const ChartTrellisNode &child = **iter;
CreateDeviantPaths(pathColl, child);
}
}
-void TrellisPath::CreateDeviantPaths(TrellisPathCollection &pathColl) const
+void ChartTrellisPath::CreateDeviantPaths(ChartTrellisPathCollection &pathColl) const
{
if (m_prevNodeChanged == NULL) {
// initial enumeration from a pure hypo
CreateDeviantPaths(pathColl, GetFinalNode());
} else {
// don't change m_prevNodeChanged, just its children
- const TrellisNode::NodeChildren &children = m_prevNodeChanged->GetChildren();
+ const ChartTrellisNode::NodeChildren &children = m_prevNodeChanged->GetChildren();
- TrellisNode::NodeChildren::const_iterator iter;
+ ChartTrellisNode::NodeChildren::const_iterator iter;
for (iter = children.begin(); iter != children.end(); ++iter) {
- const TrellisNode &child = **iter;
+ const ChartTrellisNode &child = **iter;
CreateDeviantPaths(pathColl, child);
}
}
}
-std::ostream& operator<<(std::ostream &out, const TrellisPath &path)
+std::ostream& operator<<(std::ostream &out, const ChartTrellisPath &path)
{
out << &path << " " << path.m_prevPath << " " << path.GetOutputPhrase() << endl;
diff --git a/moses-chart/src/ChartTrellisPath.h b/moses/src/ChartTrellisPath.h
index 468436ec4..69aadb15b 100644
--- a/moses-chart/src/ChartTrellisPath.h
+++ b/moses/src/ChartTrellisPath.h
@@ -22,57 +22,57 @@
#pragma once
#include "ChartTrellisNode.h"
-#include "../../moses/src/ScoreComponentCollection.h"
-#include "../../moses/src/Phrase.h"
+#include "ScoreComponentCollection.h"
+#include "Phrase.h"
-namespace MosesChart
+namespace Moses
{
-class Hypothesis;
-class TrellisPathCollection;
+class ChartHypothesis;
+class ChartTrellisPathCollection;
-class TrellisPath
+class ChartTrellisPath
{
- friend std::ostream& operator<<(std::ostream&, const TrellisPath&);
+ friend std::ostream& operator<<(std::ostream&, const ChartTrellisPath&);
protected:
// recursively point backwards
- TrellisNode *m_finalNode;
- const TrellisNode *m_prevNodeChanged;
- const TrellisPath *m_prevPath;
+ ChartTrellisNode *m_finalNode;
+ const ChartTrellisNode *m_prevNodeChanged;
+ const ChartTrellisPath *m_prevPath;
- Moses::ScoreComponentCollection m_scoreBreakdown;
+ ScoreComponentCollection m_scoreBreakdown;
float m_totalScore;
// deviate by 1 hypo
- TrellisPath(const TrellisPath &origPath
- , const TrellisNode &soughtNode
- , const Hypothesis &replacementHypo
- , Moses::ScoreComponentCollection &scoreChange);
+ ChartTrellisPath(const ChartTrellisPath &origPath
+ , const ChartTrellisNode &soughtNode
+ , const ChartHypothesis &replacementHypo
+ , ScoreComponentCollection &scoreChange);
- void CreateDeviantPaths(TrellisPathCollection &pathColl, const TrellisNode &soughtNode) const;
+ void CreateDeviantPaths(ChartTrellisPathCollection &pathColl, const ChartTrellisNode &soughtNode) const;
- const TrellisNode &GetFinalNode() const {
+ const ChartTrellisNode &GetFinalNode() const {
assert (m_finalNode);
return *m_finalNode;
}
public:
- TrellisPath(const Hypothesis *hypo);
- ~TrellisPath();
+ ChartTrellisPath(const ChartHypothesis *hypo);
+ ~ChartTrellisPath();
//! get score for this path throught trellis
inline float GetTotalScore() const {
return m_totalScore;
}
- Moses::Phrase GetOutputPhrase() const;
+ Phrase GetOutputPhrase() const;
/** returns detailed component scores */
- inline const Moses::ScoreComponentCollection &GetScoreBreakdown() const {
+ inline const ScoreComponentCollection &GetScoreBreakdown() const {
return m_scoreBreakdown;
}
- void CreateDeviantPaths(TrellisPathCollection &pathColl) const;
+ void CreateDeviantPaths(ChartTrellisPathCollection &pathColl) const;
};
diff --git a/moses-chart/src/ChartTrellisPathCollection.cpp b/moses/src/ChartTrellisPathCollection.cpp
index 41368f837..5e05d1eaa 100644
--- a/moses-chart/src/ChartTrellisPathCollection.cpp
+++ b/moses/src/ChartTrellisPathCollection.cpp
@@ -22,21 +22,21 @@
#include "ChartTrellisPathCollection.h"
#include "ChartTrellisPath.h"
-namespace MosesChart
+namespace Moses
{
-TrellisPathCollection::~TrellisPathCollection()
+ChartTrellisPathCollection::~ChartTrellisPathCollection()
{
// clean up
- Moses::RemoveAllInColl(m_collection);
+ RemoveAllInColl(m_collection);
}
-void TrellisPathCollection::Add(TrellisPath *path)
+void ChartTrellisPathCollection::Add(ChartTrellisPath *path)
{
m_collection.insert(path);
}
-void TrellisPathCollection::Prune(size_t newSize)
+void ChartTrellisPathCollection::Prune(size_t newSize)
{
size_t currSize = m_collection.size();
@@ -45,7 +45,7 @@ void TrellisPathCollection::Prune(size_t newSize)
CollectionType::reverse_iterator iterRev;
for (iterRev = m_collection.rbegin() ; iterRev != m_collection.rend() ; ++iterRev) {
- TrellisPath *trellisPath = *iterRev;
+ ChartTrellisPath *trellisPath = *iterRev;
delete trellisPath;
currSize--;
diff --git a/moses-chart/src/ChartTrellisPathCollection.h b/moses/src/ChartTrellisPathCollection.h
index e9ce43e12..b1fbd3a65 100644
--- a/moses-chart/src/ChartTrellisPathCollection.h
+++ b/moses/src/ChartTrellisPathCollection.h
@@ -23,35 +23,35 @@
#include <set>
#include "ChartTrellisPath.h"
-namespace MosesChart
+namespace Moses
{
-class TrellisPath;
+class ChartTrellisPath;
-struct CompareTrellisPathCollection {
- bool operator()(const TrellisPath* pathA, const TrellisPath* pathB) const {
+struct CompareChartTrellisPathCollection {
+ bool operator()(const ChartTrellisPath* pathA, const ChartTrellisPath* pathB) const {
return (pathA->GetTotalScore() > pathB->GetTotalScore());
}
};
-class TrellisPathCollection
+class ChartTrellisPathCollection
{
protected:
- typedef std::multiset<TrellisPath*, CompareTrellisPathCollection> CollectionType;
+ typedef std::multiset<ChartTrellisPath*, CompareChartTrellisPathCollection> CollectionType;
CollectionType m_collection;
public:
- ~TrellisPathCollection();
+ ~ChartTrellisPathCollection();
size_t GetSize() const {
return m_collection.size();
}
- void Add(TrellisPath *path);
+ void Add(ChartTrellisPath *path);
void Prune(size_t newSize);
- TrellisPath *pop() {
- TrellisPath *top = *m_collection.begin();
+ ChartTrellisPath *pop() {
+ ChartTrellisPath *top = *m_collection.begin();
// Detach
m_collection.erase(m_collection.begin());
diff --git a/moses-chart/src/ChartTrellisPathList.cpp b/moses/src/ChartTrellisPathList.cpp
index f7ffe9b17..1d76ab21a 100644
--- a/moses-chart/src/ChartTrellisPathList.cpp
+++ b/moses/src/ChartTrellisPathList.cpp
@@ -21,16 +21,16 @@
#include "ChartTrellisPathList.h"
#include "ChartTrellisPath.h"
-#include "../../moses/src/Util.h"
+#include "Util.h"
using namespace std;
-namespace MosesChart
+namespace Moses
{
-TrellisPathList::~TrellisPathList()
+ChartTrellisPathList::~ChartTrellisPathList()
{
// clean up
- Moses::RemoveAllInColl(m_collection);
+ RemoveAllInColl(m_collection);
}
} // namespace
diff --git a/moses-chart/src/ChartTrellisPathList.h b/moses/src/ChartTrellisPathList.h
index 996160389..4f7076366 100644
--- a/moses-chart/src/ChartTrellisPathList.h
+++ b/moses/src/ChartTrellisPathList.h
@@ -23,14 +23,14 @@
#include <vector>
-namespace MosesChart
+namespace Moses
{
-class TrellisPath;
+class ChartTrellisPath;
-class TrellisPathList
+class ChartTrellisPathList
{
protected:
- typedef std::vector<const TrellisPath*> CollType;
+ typedef std::vector<const ChartTrellisPath*> CollType;
CollType m_collection;
public:
@@ -54,14 +54,14 @@ public:
m_collection.clear();
}
- virtual ~TrellisPathList();
+ virtual ~ChartTrellisPathList();
- size_t GetSize() const {
+ std::size_t GetSize() const {
return m_collection.size();
}
//! add a new entry into collection
- void Add(TrellisPath *trellisPath) {
+ void Add(ChartTrellisPath *trellisPath) {
m_collection.push_back(trellisPath);
}
};
diff --git a/moses/src/ConfusionNet.cpp b/moses/src/ConfusionNet.cpp
index 76a9923c9..911ca2836 100644
--- a/moses/src/ConfusionNet.cpp
+++ b/moses/src/ConfusionNet.cpp
@@ -219,7 +219,7 @@ Phrase ConfusionNet::GetSubString(const WordsRange&) const
//return Phrase(Input);
}
-std::string ConfusionNet::GetStringRep(const std::vector<FactorType> factorsToPrint) const //not well defined yet
+std::string ConfusionNet::GetStringRep(const std::vector<FactorType> /* factorsToPrint */) const //not well defined yet
{
TRACE_ERR("ERROR: call to ConfusionNet::GeStringRep\n");
return "";
diff --git a/moses/src/DotChart.cpp b/moses/src/DotChart.cpp
index 54d62c544..c7ba3f43e 100644
--- a/moses/src/DotChart.cpp
+++ b/moses/src/DotChart.cpp
@@ -17,44 +17,21 @@
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
***********************************************************************/
-#include "DotChart.h"
-#include "Util.h"
-
-#include <algorithm>
-using namespace std;
+#include "DotChart.h"
namespace Moses
{
-ProcessedRuleColl::~ProcessedRuleColl()
-{
-#ifdef USE_BOOST_POOL
- // Do nothing. ProcessedRule objects are stored in object pools owned by
- // the sentence-specific ChartRuleLookupManagers.
-#else
- std::for_each(m_coll.begin(), m_coll.end(),
- RemoveAllInColl<CollType::value_type>);
-#endif
-}
-std::ostream& operator<<(std::ostream &out, const ProcessedRule &/*rule*/)
+std::ostream &operator<<(std::ostream &out, const DottedRule &rule)
{
- //const PhraseDictionaryNode &node = rule.GetLastNode();
- //out << node;
-
- return out;
-}
-
-std::ostream& operator<<(std::ostream &out, const ProcessedRuleList &coll)
-{
- ProcessedRuleList::const_iterator iter;
- for (iter = coll.begin(); iter != coll.end(); ++iter) {
- const ProcessedRule &rule = **iter;
- out << rule << endl;
-
+ if (!rule.IsRoot()) {
+ out << rule.GetWordsRange() << "=" << rule.GetSourceWord() << " ";
+ if (!rule.m_prev->IsRoot()) {
+ out << " " << *rule.m_prev;
+ }
}
-
return out;
}
-};
+}
diff --git a/moses/src/DotChart.h b/moses/src/DotChart.h
index e85bea447..b9da12afd 100644
--- a/moses/src/DotChart.h
+++ b/moses/src/DotChart.h
@@ -19,104 +19,40 @@
***********************************************************************/
#pragma once
-#include <vector>
-#include <cassert>
-#include "PhraseDictionaryNodeSCFG.h"
-#include "ChartTranslationOption.h"
-#include "WordConsumed.h"
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "ChartCellLabel.h"
namespace Moses
{
-class ProcessedRule
+class DottedRule
{
- friend std::ostream& operator<<(std::ostream&, const ProcessedRule&);
+ friend std::ostream& operator<<(std::ostream &, const DottedRule &);
-protected:
- const PhraseDictionaryNodeSCFG &m_lastNode;
- const WordConsumed *m_wordsConsumed; // usually contains something, unless its the init processed rule
-public:
+ public:
// used only to init dot stack.
- explicit ProcessedRule(const PhraseDictionaryNodeSCFG &lastNode)
- :m_lastNode(lastNode)
- ,m_wordsConsumed(NULL)
- {}
- ProcessedRule(const PhraseDictionaryNodeSCFG &lastNode, const WordConsumed *wordsConsumed)
- :m_lastNode(lastNode)
- ,m_wordsConsumed(wordsConsumed)
- {}
- ~ProcessedRule() {
-#ifdef USE_BOOST_POOL
- // Do nothing. WordConsumed objects are stored in object pools owned by
- // the sentence-specific ChartRuleLookupManagers.
-#else
- delete m_wordsConsumed;
-#endif
- }
- const PhraseDictionaryNodeSCFG &GetLastNode() const {
- return m_lastNode;
- }
- const WordConsumed *GetLastWordConsumed() const {
- return m_wordsConsumed;
- }
-};
-
-typedef std::vector<const ProcessedRule*> ProcessedRuleList;
-
-// Collection of all ProcessedRules that share a common start point,
-// grouped by end point. Additionally, maintains a list of all
-// ProcessedRules that could be expanded further, i.e. for which the
-// corresponding PhraseDictionaryNodeSCFG is not a leaf.
-class ProcessedRuleColl
-{
-protected:
- typedef std::vector<ProcessedRuleList> CollType;
- CollType m_coll;
- ProcessedRuleList m_runningNodes;
-
-public:
- typedef CollType::iterator iterator;
- typedef CollType::const_iterator const_iterator;
-
- const_iterator begin() const {
- return m_coll.begin();
- }
- const_iterator end() const {
- return m_coll.end();
- }
- iterator begin() {
- return m_coll.begin();
- }
- iterator end() {
- return m_coll.end();
- }
-
- ProcessedRuleColl(size_t size)
- : m_coll(size)
- {}
-
- ~ProcessedRuleColl();
-
- const ProcessedRuleList &Get(size_t pos) const {
- return m_coll[pos];
- }
- ProcessedRuleList &Get(size_t pos) {
- return m_coll[pos];
- }
-
- void Add(size_t pos, const ProcessedRule *processedRule) {
- assert(processedRule);
- m_coll[pos].push_back(processedRule);
- if (!processedRule->GetLastNode().IsLeaf()) {
- m_runningNodes.push_back(processedRule);
- }
- }
-
- const ProcessedRuleList &GetRunningNodes() const {
- return m_runningNodes;
- }
-
+ DottedRule()
+ : m_cellLabel(NULL)
+ , m_prev(NULL) {}
+
+ DottedRule(const ChartCellLabel &ccl, const DottedRule &prev)
+ : m_cellLabel(&ccl)
+ , m_prev(&prev) {}
+
+ const WordsRange &GetWordsRange() const { return m_cellLabel->GetCoverage(); }
+ const Word &GetSourceWord() const { return m_cellLabel->GetLabel(); }
+ bool IsNonTerminal() const { return m_cellLabel->GetLabel().IsNonTerminal(); }
+ const DottedRule *GetPrev() const { return m_prev; }
+ bool IsRoot() const { return m_prev == NULL; }
+ const ChartCellLabel &GetChartCellLabel() const { return *m_cellLabel; }
+
+ private:
+ const ChartCellLabel *m_cellLabel; // usually contains something, unless
+ // it's the init processed rule
+ const DottedRule *m_prev;
};
}
-
diff --git a/moses/src/WordConsumed.cpp b/moses/src/DotChartInMemory.cpp
index 450e06c1c..095e3418f 100644
--- a/moses/src/WordConsumed.cpp
+++ b/moses/src/DotChartInMemory.cpp
@@ -1,37 +1,40 @@
-// $Id$
-// vim:tabstop=2
/***********************************************************************
- Moses - factored phrase-based language decoder
- Copyright (C) 2010 Hieu Hoang
-
+ Moses - statistical machine translation system
+ Copyright (C) 2006-2011 University of Edinburgh
+
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
-
+
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
-
+
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- ***********************************************************************/
+***********************************************************************/
+
+#include "DotChartInMemory.h"
-#include "WordConsumed.h"
+#include "Util.h"
+
+#include <algorithm>
namespace Moses
{
-std::ostream& operator<<(std::ostream &out, const WordConsumed &wordConsumed)
+DottedRuleColl::~DottedRuleColl()
{
- out << wordConsumed.m_coverage << "=" << wordConsumed.m_sourceWord << " ";
- if (wordConsumed.m_prevWordsConsumed)
- out << " " << *wordConsumed.m_prevWordsConsumed;
-
- return out;
+#ifdef USE_BOOST_POOL
+ // Do nothing. DottedRule objects are stored in object pools owned by
+ // the sentence-specific ChartRuleLookupManagers.
+#else
+ std::for_each(m_coll.begin(), m_coll.end(),
+ RemoveAllInColl<CollType::value_type>);
+#endif
}
-
-} // namespace
+}
diff --git a/moses/src/DotChartInMemory.h b/moses/src/DotChartInMemory.h
new file mode 100644
index 000000000..2854a5d0a
--- /dev/null
+++ b/moses/src/DotChartInMemory.h
@@ -0,0 +1,118 @@
+/***********************************************************************
+ Moses - statistical machine translation system
+ Copyright (C) 2006-2011 University of Edinburgh
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ ***********************************************************************/
+
+#pragma once
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "DotChart.h"
+#include "PhraseDictionaryNodeSCFG.h"
+
+#include <cassert>
+#include <vector>
+
+namespace Moses
+{
+
+class DottedRuleInMemory : public DottedRule
+{
+ public:
+ // used only to init dot stack.
+ explicit DottedRuleInMemory(const PhraseDictionaryNodeSCFG &node)
+ : DottedRule()
+ , m_node(node) {}
+
+ DottedRuleInMemory(const PhraseDictionaryNodeSCFG &node,
+ const ChartCellLabel &cellLabel,
+ const DottedRuleInMemory &prev)
+ : DottedRule(cellLabel, prev)
+ , m_node(node) {}
+
+ const PhraseDictionaryNodeSCFG &GetLastNode() const { return m_node; }
+
+ private:
+ const PhraseDictionaryNodeSCFG &m_node;
+};
+
+typedef std::vector<const DottedRuleInMemory*> DottedRuleList;
+
+// Collection of all in-memory DottedRules that share a common start point,
+// grouped by end point. Additionally, maintains a list of all
+// DottedRules that could be expanded further, i.e. for which the
+// corresponding PhraseDictionaryNodeSCFG is not a leaf.
+class DottedRuleColl
+{
+protected:
+ typedef std::vector<DottedRuleList> CollType;
+ CollType m_coll;
+ DottedRuleList m_expandableDottedRuleList;
+
+public:
+ typedef CollType::iterator iterator;
+ typedef CollType::const_iterator const_iterator;
+
+ const_iterator begin() const {
+ return m_coll.begin();
+ }
+ const_iterator end() const {
+ return m_coll.end();
+ }
+ iterator begin() {
+ return m_coll.begin();
+ }
+ iterator end() {
+ return m_coll.end();
+ }
+
+ DottedRuleColl(size_t size)
+ : m_coll(size)
+ {}
+
+ ~DottedRuleColl();
+
+ const DottedRuleList &Get(size_t pos) const {
+ return m_coll[pos];
+ }
+ DottedRuleList &Get(size_t pos) {
+ return m_coll[pos];
+ }
+
+ void Add(size_t pos, const DottedRuleInMemory *dottedRule) {
+ assert(dottedRule);
+ m_coll[pos].push_back(dottedRule);
+ if (!dottedRule->GetLastNode().IsLeaf()) {
+ m_expandableDottedRuleList.push_back(dottedRule);
+ }
+ }
+
+ void Clear(size_t pos) {
+#ifdef USE_BOOST_POOL
+ m_coll[pos].clear();
+#endif
+ }
+
+ const DottedRuleList &GetExpandableDottedRuleList() const {
+ return m_expandableDottedRuleList;
+ }
+
+};
+
+}
diff --git a/moses/src/DotChartOnDisk.cpp b/moses/src/DotChartOnDisk.cpp
index 4fd476790..5144cfc7c 100644
--- a/moses/src/DotChartOnDisk.cpp
+++ b/moses/src/DotChartOnDisk.cpp
@@ -26,15 +26,15 @@ using namespace std;
namespace Moses
{
-ProcessedRuleStackOnDisk::ProcessedRuleStackOnDisk(size_t size)
+DottedRuleStackOnDisk::DottedRuleStackOnDisk(size_t size)
:m_coll(size)
{
for (size_t ind = 0; ind < size; ++ind) {
- m_coll[ind] = new ProcessedRuleCollOnDisk();
+ m_coll[ind] = new DottedRuleCollOnDisk();
}
}
-ProcessedRuleStackOnDisk::~ProcessedRuleStackOnDisk()
+DottedRuleStackOnDisk::~DottedRuleStackOnDisk()
{
RemoveAllInColl(m_coll);
RemoveAllInColl(m_savedNode);
@@ -44,29 +44,21 @@ class SavedNodesOderer
{
public:
bool operator()(const SavedNodeOnDisk* a, const SavedNodeOnDisk* b) const {
- bool ret = a->GetProcessedRule().GetLastNode().GetCount(0) > b->GetProcessedRule().GetLastNode().GetCount(0);
+ bool ret = a->GetDottedRule().GetLastNode().GetCount(0) > b->GetDottedRule().GetLastNode().GetCount(0);
return ret;
}
};
-void ProcessedRuleStackOnDisk::SortSavedNodes()
+void DottedRuleStackOnDisk::SortSavedNodes()
{
sort(m_savedNode.begin(), m_savedNode.end(), SavedNodesOderer());
}
-std::ostream& operator<<(std::ostream &out, const ProcessedRuleOnDisk &rule)
+std::ostream& operator<<(std::ostream &out, const DottedRuleCollOnDisk &coll)
{
- //const MosesBerkeleyPt::SourcePhraseNode &node = rule.GetLastNode();
- //out << node;
-
- return out;
-}
-
-std::ostream& operator<<(std::ostream &out, const ProcessedRuleCollOnDisk &coll)
-{
- ProcessedRuleCollOnDisk::CollType::const_iterator iter;
+ DottedRuleCollOnDisk::CollType::const_iterator iter;
for (iter = coll.begin(); iter != coll.end(); ++iter) {
- const ProcessedRuleOnDisk &rule = **iter;
+ const DottedRuleOnDisk &rule = **iter;
out << rule << endl;
}
diff --git a/moses/src/DotChartOnDisk.h b/moses/src/DotChartOnDisk.h
index 9a80ef4e7..ddf20c2f1 100644
--- a/moses/src/DotChartOnDisk.h
+++ b/moses/src/DotChartOnDisk.h
@@ -21,8 +21,8 @@
#include <vector>
#include <cassert>
-#include "ChartTranslationOption.h"
-#include "WordConsumed.h"
+
+#include "DotChart.h"
namespace OnDiskPt
{
@@ -32,71 +32,38 @@ class PhraseNode;
namespace Moses
{
-class ProcessedRuleOnDisk
+class DottedRuleOnDisk : public DottedRule
{
- friend std::ostream& operator<<(std::ostream&, const ProcessedRuleOnDisk&);
-
-protected:
- const OnDiskPt::PhraseNode &m_lastNode;
- const WordConsumed *m_wordsConsumed; // usually contains something, unless its the init processed rule
- mutable bool m_done;
-public:
+ public:
// used only to init dot stack.
- explicit ProcessedRuleOnDisk(const OnDiskPt::PhraseNode &lastNode)
- :m_lastNode(lastNode)
- ,m_wordsConsumed(NULL)
- ,m_done(false)
- {}
- ProcessedRuleOnDisk(const OnDiskPt::PhraseNode &lastNode, const WordConsumed *wordsConsumed)
- :m_lastNode(lastNode)
- ,m_wordsConsumed(wordsConsumed)
- ,m_done(false)
- {}
- ~ProcessedRuleOnDisk() {
- delete m_wordsConsumed;
- }
- const OnDiskPt::PhraseNode &GetLastNode() const {
- return m_lastNode;
- }
- const WordConsumed *GetLastWordConsumed() const {
- return m_wordsConsumed;
- }
+ explicit DottedRuleOnDisk(const OnDiskPt::PhraseNode &lastNode)
+ : DottedRule()
+ , m_lastNode(lastNode)
+ , m_done(false) {}
- bool IsCurrNonTerminal() const {
- assert(m_wordsConsumed);
- return m_wordsConsumed->IsNonTerminal();
- }
+ DottedRuleOnDisk(const OnDiskPt::PhraseNode &lastNode,
+ const ChartCellLabel &cellLabel,
+ const DottedRuleOnDisk &prev)
+ : DottedRule(cellLabel, prev)
+ , m_lastNode(lastNode)
+ , m_done(false) {}
- bool Done() const {
- return m_done;
- }
- void Done(bool value) const {
- m_done = value;
- }
+ const OnDiskPt::PhraseNode &GetLastNode() const { return m_lastNode; }
- /*
- inline int Compare(const ProcessedRule &compare) const
- {
- if (m_lastNode < compare.m_lastNode)
- return -1;
- if (m_lastNode > compare.m_lastNode)
- return 1;
+ bool Done() const { return m_done; }
+ void Done(bool value) const { m_done = value; }
- return m_wordsConsumed < compare.m_wordsConsumed;
- }
- inline bool operator<(const ProcessedRule &compare) const
- {
- return Compare(compare) < 0;
- }
- */
+ private:
+ const OnDiskPt::PhraseNode &m_lastNode;
+ mutable bool m_done;
};
-class ProcessedRuleCollOnDisk
+class DottedRuleCollOnDisk
{
- friend std::ostream& operator<<(std::ostream&, const ProcessedRuleCollOnDisk&);
+ friend std::ostream& operator<<(std::ostream&, const DottedRuleCollOnDisk&);
protected:
- typedef std::vector<const ProcessedRuleOnDisk*> CollType;
+ typedef std::vector<const DottedRuleOnDisk*> CollType;
CollType m_coll;
public:
@@ -116,12 +83,12 @@ public:
return m_coll.end();
}
- const ProcessedRuleOnDisk &Get(size_t ind) const {
+ const DottedRuleOnDisk &Get(size_t ind) const {
return *m_coll[ind];
}
- void Add(const ProcessedRuleOnDisk *processedRule) {
- m_coll.push_back(processedRule);
+ void Add(const DottedRuleOnDisk *dottedRule) {
+ m_coll.push_back(dottedRule);
}
void Delete(size_t ind) {
//delete m_coll[ind];
@@ -136,31 +103,31 @@ public:
class SavedNodeOnDisk
{
- const ProcessedRuleOnDisk *m_processedRule;
+ const DottedRuleOnDisk *m_dottedRule;
public:
- SavedNodeOnDisk(const ProcessedRuleOnDisk *processedRule)
- :m_processedRule(processedRule) {
- assert(m_processedRule);
+ SavedNodeOnDisk(const DottedRuleOnDisk *dottedRule)
+ :m_dottedRule(dottedRule) {
+ assert(m_dottedRule);
}
~SavedNodeOnDisk() {
- delete m_processedRule;
+ delete m_dottedRule;
}
- const ProcessedRuleOnDisk &GetProcessedRule() const {
- return *m_processedRule;
+ const DottedRuleOnDisk &GetDottedRule() const {
+ return *m_dottedRule;
}
};
-class ProcessedRuleStackOnDisk
+class DottedRuleStackOnDisk
{
// coll of coll of processed rules
public:
typedef std::vector<SavedNodeOnDisk*> SavedNodeColl;
protected:
- typedef std::vector<ProcessedRuleCollOnDisk*> CollType;
+ typedef std::vector<DottedRuleCollOnDisk*> CollType;
CollType m_coll;
SavedNodeColl m_savedNode;
@@ -182,25 +149,25 @@ public:
return m_coll.end();
}
- ProcessedRuleStackOnDisk(size_t size);
- ~ProcessedRuleStackOnDisk();
+ DottedRuleStackOnDisk(size_t size);
+ ~DottedRuleStackOnDisk();
- const ProcessedRuleCollOnDisk &Get(size_t pos) const {
+ const DottedRuleCollOnDisk &Get(size_t pos) const {
return *m_coll[pos];
}
- ProcessedRuleCollOnDisk &Get(size_t pos) {
+ DottedRuleCollOnDisk &Get(size_t pos) {
return *m_coll[pos];
}
- const ProcessedRuleCollOnDisk &back() const {
+ const DottedRuleCollOnDisk &back() const {
return *m_coll.back();
}
- void Add(size_t pos, const ProcessedRuleOnDisk *processedRule) {
- assert(processedRule);
+ void Add(size_t pos, const DottedRuleOnDisk *dottedRule) {
+ assert(dottedRule);
- m_coll[pos]->Add(processedRule);
- m_savedNode.push_back(new SavedNodeOnDisk(processedRule));
+ m_coll[pos]->Add(dottedRule);
+ m_savedNode.push_back(new SavedNodeOnDisk(dottedRule));
}
const SavedNodeColl &GetSavedNodeColl() const {
diff --git a/moses/src/DummyScoreProducers.h b/moses/src/DummyScoreProducers.h
index 9d826bbef..9b045a4d3 100644
--- a/moses/src/DummyScoreProducers.h
+++ b/moses/src/DummyScoreProducers.h
@@ -31,6 +31,13 @@ public:
const FFState* prev_state,
ScoreComponentCollection* accumulator) const;
+ virtual FFState* EvaluateChart(
+ const ChartHypothesis&,
+ int /* featureID */,
+ ScoreComponentCollection*) const {
+ assert(0); // feature function not valid in chart decoder
+ return NULL;
+ }
};
/** Doesn't do anything but provide a key into the global
@@ -48,7 +55,6 @@ public:
virtual void Evaluate(
const TargetPhrase& phrase,
ScoreComponentCollection* out) const;
-
};
/** unknown word penalty */
diff --git a/moses/src/DynSAInclude/RandLMCache.h b/moses/src/DynSAInclude/RandLMCache.h
new file mode 100755
index 000000000..3f38cae02
--- /dev/null
+++ b/moses/src/DynSAInclude/RandLMCache.h
@@ -0,0 +1,197 @@
+// Copyright 2008 Abby Levenberg, David Talbot
+//
+// This file is part of RandLM
+//
+// RandLM is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// RandLM is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with RandLM. If not, see <http://www.gnu.org/licenses/>.
+#ifndef INC_RANDLM_CACHE_H
+#define INC_RANDLM_CACHE_H
+
+#include <iterator>
+#include <map>
+#include <ctime>
+#include <iostream>
+
+namespace randlm {
+
+ template<typename T>
+ class CacheNode {
+ public:
+ typedef std::map<wordID_t, CacheNode<T>* > childMap;
+ // initialise value to 'unknown' (i.e. not yet queried or cached).
+ CacheNode(T unknown_value) : value_(unknown_value) {}
+ childMap childs_; // child pointers
+ T value_; // value stored
+ const void* state_; // state pointer
+ };
+
+ template<typename T>
+ class Cache {
+ public:
+ typedef typename std::map<wordID_t, CacheNode<T>* >::iterator childPtr;
+ // unknown_value is used to indicate the ngram was not queried (yet)
+ // null_value_ indicates it was queried but not found in model
+ // space usage is handled by client.
+ Cache(T unknown_value, T null_value) :
+ cur_nodes_(0), unknown_value_(unknown_value), null_value_(null_value) {
+ root_ = newNode();
+ }
+ ~Cache() {
+ if(clear()) {
+ delete root_;
+ root_ = NULL;
+ } else {
+ std::cerr << "Error freeing cache memory.\n";
+ }
+ }
+ bool setCacheNgram(const wordID_t* ngram, int len, T value, const void* state) {
+ // inserts full ngram into cache
+ CacheNode<T>* node = root_;
+ for (int i = len - 1; i > -1; --i) {
+ childPtr child = node->childs_.find(ngram[i]);
+ if( child != node->childs_.end() ) {
+ // current node is already prefix. Go to child node
+ node = node->childs_[ngram[i]];
+ } else {
+ // no child for prefix. set new child link in current node
+ CacheNode<T> * newChild = newNode(node);
+ node->childs_[ngram[i]] = newChild;
+ // go to new node
+ node = newChild;
+ }
+ }
+ node->value_ = value;
+ node->state_ = state;
+ return true;
+ }
+ bool checkCacheNgram(const wordID_t* ngram, int len, T* value, const void** state) {
+ // finds value for this full ngram only (returns false if full ngram not in cache)
+ CacheNode<T> * node = root_;
+ for(int i = len - 1; i > -1; --i) {
+ // go to deepest level node of ngram in cache
+ childPtr child = node->childs_.find(ngram[i]);
+ if( child != node->childs_.end() ) {
+ // switch to child node
+ node = node->childs_[ngram[i]];
+ } else {
+ // not cached
+ return false;
+ }
+ }
+ *value = node->value_;
+ if(state) *state = node->state_;
+ return *value != null_value_ && *value != unknown_value_;
+ }
+ int getCache2(const wordID_t* ngram, int len, T** values, int* found) {
+ // set values array to point to cache value nodes
+ CacheNode<T> * node = root_;
+ *found = 0;
+ //values[0] = &node->value_; // pointer to root node's value
+ bool all_found = true;
+ for(int i = len - 1; i > -1; --i) {
+ // go to deepest level node of ngram in cache
+ childPtr child = node->childs_.find(ngram[i]);
+ if( child != node->childs_.end() ) {
+ // switch to child node
+ node = node->childs_[ngram[i]];
+ // get pointer to value (index by length - 1)
+ values[i] = &node->value_;
+ // if null_value then assume all extensions impossible
+ if (node->value_ == null_value_) {
+ return len - 1 - i; // max length posible
+ }
+ all_found = all_found && (node->value_ != unknown_value_);
+ if (all_found)
+ ++(*found);
+ } else {
+ // initialise uncached values
+ CacheNode<T> * newChild = newNode(node);
+ node->childs_[ngram[i]] = newChild;
+ // go to new node
+ node = newChild;
+ values[i] = &node->value_;
+ }
+ }
+ return len; // all possible
+ }
+ int getCache(const wordID_t* ngram, int len, T** values, int* found) {
+ // get pointers to values for ngram and constituents.
+ // returns upper bound on longest subngram in model.
+ // 'found' stores longest non-null and known value found.
+ CacheNode<T> * node = root_;
+ *found = 0;
+ values[0] = &node->value_; // pointer to root node's value
+ bool all_found = true;
+ for(int i = len - 1; i > -1; --i) {
+ // go to deepest level node of ngram in cache
+ childPtr child = node->childs_.find(ngram[i]);
+ if( child != node->childs_.end() ) {
+ // switch to child node
+ node = node->childs_[ngram[i]];
+ // get pointer to value (index by length - 1)
+ values[len - i] = &node->value_;
+ // if null_value then assume all extensions impossible
+ if (node->value_ == null_value_)
+ return len - 1 - i; // max length posible
+ all_found = all_found && (node->value_ != unknown_value_);
+ if (all_found)
+ ++(*found);
+ } else {
+ // initialise uncached values
+ CacheNode<T> * newChild = newNode(node);
+ node->childs_[ngram[i]] = newChild;
+ // go to new node
+ node = newChild;
+ values[len - i] = &node->value_;
+ }
+ }
+ return len; // all possible
+ }
+ bool clear() {
+ std::cerr << "Clearing cache with " << static_cast<float>(cur_nodes_ * nodeSize())
+ / static_cast<float>(1ull << 20) << "MB" << std::endl;
+ return clearNodes(root_);
+ }
+ int nodes() {
+ // returns number of nodes
+ return cur_nodes_;
+ }
+ int nodeSize() {
+ return sizeof(CacheNode<T>) + sizeof(root_->childs_);
+ }
+ private:
+ CacheNode<T> * root_;
+ count_t cur_nodes_;
+ T unknown_value_; // Used to initialise data at each node
+ T null_value_; // Indicates cached something not in model
+ CacheNode<T>* newNode(CacheNode<T> * node = 0) {
+ ++cur_nodes_;
+ return new CacheNode<T>(unknown_value_);
+ }
+ bool clearNodes(CacheNode<T> * node) {
+ //delete children from this node
+ if(!node->childs_.empty()) {
+ iterate(node->childs_, itr) {
+ if(!clearNodes(itr->second))
+ std::cerr << "Error emptying cache\n";
+ delete itr->second;
+ --cur_nodes_;
+ }
+ node->childs_.clear();
+ }
+ return true;
+ }
+
+ };
+} //end namespace
+#endif //INC_RANDLM_CACHE_H
diff --git a/moses/src/DynSAInclude/RandLMFilter.h b/moses/src/DynSAInclude/RandLMFilter.h
new file mode 100755
index 000000000..fe64e23aa
--- /dev/null
+++ b/moses/src/DynSAInclude/RandLMFilter.h
@@ -0,0 +1,410 @@
+// Copyright 2008 David Talbot
+//
+// This file is part of RandLM
+//
+// RandLM is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// RandLM is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with RandLM. If not, see <http://www.gnu.org/licenses/>.
+#ifndef INC_RANDLM_FILTER_H
+#define INC_RANDLM_FILTER_H
+
+#include <cmath>
+#include "file.h"
+
+namespace randlm {
+
+ // Class Filter wraps a contiguous array of data. Filter and its subclasses
+ // implement read/write/increment functionality on arrays with arbitrary sized addresses
+ // (i.e. an address may not use a full number of bytes). When converting to byte-based
+ // representation we assume "unused" bits are to left.
+ // E.g. if the underlying data is stored in units T = uint16 and the 'width' = 11
+ // to read 'address' = 3 we extract bits at indices [33,42] (i.e. [11*3, 11*4 - 1])
+ // and store in a uint16 in positions 0000 0001 111111 where the first 7 bits have
+ // been masked out.
+ template<typename T>
+ class Filter {
+ public:
+ Filter(uint64_t addresses, int width) : addresses_(addresses), width_(width), data_(NULL) {
+ // number of bits in T
+ cell_width_ = sizeof(T) << 3;
+ // current implementation has following constraints
+ assert(cell_width_ > 0 && cell_width_ <= 64 && cell_width_ >= width);
+ // used for >> division
+ log_cell_width_ = static_cast<int>(floor(log(cell_width_)/log(2) + 0.000001));
+ // size of underlying data in Ts
+ cells_ = ((addresses * width) + cell_width_ - 1) >> log_cell_width_;
+ // instantiate underlying data
+ data_ = new T[cells_];
+ assert(data_ != NULL);
+ assert(reset());
+ // 'first_bit' marks the first bit used by 'address' (left padded with zeros).
+ first_bit_ = (width % cell_width_ == 0) ? 0 : cell_width_ - (width % cell_width_);
+ // mask for full cell
+ full_mask_ = static_cast<T>(0xffffffffffffffffull);
+ // mask for bits that make up the address
+ address_mask_ = full_mask_ >> first_bit_;
+ }
+ Filter(FileHandler* fin, bool loaddata = true) : data_(NULL) {
+ assert(loadHeader(fin));
+ if (loaddata)
+ assert(loadData(fin));
+ }
+ virtual ~Filter() {
+ delete[] data_;
+ }
+ bool reset() {
+ for (uint64_t i = 0; i < cells_; ++i)
+ data_[i] = 0;
+ return true;
+ }
+ count_t size() {
+ // return approx size of filter in MBs
+ return cells_ * sizeof(T) >> 20;
+ }
+ // read / write functions
+ inline bool read(uint64_t address, T* value) {
+ assert(address <= addresses_);
+ // copy address to 'value'
+ uint64_t data_bit = address * width_;
+ uint32_t data_cell = (data_bit >> log_cell_width_); // % cells_;
+ // 'offset' shows how address in 'data' and 'value' align
+ int offset = (data_bit % cell_width_) - first_bit_;
+ // they align so just copy across masking unneeded leading bits
+ if (offset == 0) {
+ *value = data_[data_cell] & address_mask_;
+ return true;
+ }
+ // data address starts to left so shift it right
+ if (offset < 0) {
+ *value = (data_[data_cell] >> -offset) & address_mask_;
+ return true;
+ }
+ // data address is to right so shift it left and look at one more cell to right
+ *value = ((data_[data_cell] << offset)
+ | (data_[data_cell + 1] >> (cell_width_ - offset))) & address_mask_ ;
+ return true;
+ }
+ inline T read(uint64_t address) {
+ assert(address <= addresses_);
+ // return value at address
+ T value = 0;
+ uint64_t data_bit = address * width_;
+ uint32_t data_cell = (data_bit >> log_cell_width_); // % cells_;
+ // 'offset' shows how address in 'data' and 'value' align
+ int offset = (data_bit % cell_width_) - first_bit_;
+ // they align so just copy across masking unneeded leading bits
+ if (offset == 0) {
+ value = data_[data_cell] & address_mask_;
+ }
+ // data address starts to left so shift it right
+ else if (offset < 0) {
+ value = (data_[data_cell] >> -offset) & address_mask_;
+ }
+ // data address is to right so shift it left and look at one more cell to right
+ else
+ value = ((data_[data_cell] << offset)
+ | (data_[data_cell + 1] >> (cell_width_ - offset))) & address_mask_ ;
+ return value;
+ }
+ inline bool write(uint64_t address, T value) {
+ assert(address <= addresses_);
+ assert(log2(value) <= width_);
+ // write 'value' to address
+ uint64_t data_bit = address * width_;
+ uint32_t data_cell = (data_bit >> log_cell_width_); // % cells_;
+ // 'offset' shows how address in 'data' and 'value' align
+ int offset = (data_bit % cell_width_) - first_bit_;
+ // they align so just copy across masking unneeded leading zeros of value
+ if (offset == 0) {
+ data_[data_cell] = value | (data_[data_cell] & ~address_mask_);
+ return true;
+ }
+ // address in data is to left so shift value left by -offset
+ if (offset < 0) {
+ data_[data_cell] = (value << -offset)
+ | (data_[data_cell] & ~(address_mask_ << -offset));
+ return true;
+ }
+ // address in data is to right so shift value right by offset
+ data_[data_cell] = (value >> offset) |
+ (data_[data_cell] & ~(address_mask_ >> offset));
+ data_[data_cell + 1] = (value << (cell_width_ - offset)) |
+ (data_[data_cell + 1] & (full_mask_ >> offset));
+ return true;
+ }
+ inline bool readWithFingerprint(uint64_t address, T finger, T* value) {
+ // copy 'address' ^ 'finger' to 'value'
+ uint64_t data_bit = address * width_;
+ uint32_t data_cell = (data_bit >> log_cell_width_); // % cells_;
+ // 'offset' shows how address in 'data' and 'value' align
+ int offset = (data_bit % cell_width_) - first_bit_;
+ // they align so just copy across masking unneeded leading bits
+ if (offset == 0) {
+ *value = (finger ^ data_[data_cell]) & address_mask_;
+ return true;
+ }
+ // data address starts to left so shift it right
+ if (offset < 0) {
+ *value = ((data_[data_cell] >> -offset) ^ finger) & address_mask_;
+ return true;
+ }
+ // data address is to right so shift it left and look at one more cell to right
+ *value = (((data_[data_cell] << offset)
+ | (data_[data_cell + 1] >> (cell_width_ - offset))) ^ finger)
+ & address_mask_ ;
+ return true;
+ }
+ inline bool writeWithFingerprint(uint64_t address, T finger, T value) {
+ // write 'value' ^ 'finger' to address
+ finger &= address_mask_; // make sure fingerprint is correct size
+ uint64_t data_bit = address * width_;
+ uint32_t data_cell = (data_bit >> log_cell_width_); // % cells_;
+ // 'offset' shows how address in 'data' and 'value' align
+ int offset = (data_bit % cell_width_) - first_bit_;
+ // they align so just copy across masking unneeded leading zeros of value
+ if (offset == 0) {
+ data_[data_cell] = (finger ^ value) | (data_[data_cell] & ~address_mask_);
+ return true;
+ }
+ // address in data is to left so shift value left by -offset
+ if (offset < 0) {
+ data_[data_cell] = ((finger ^ value) << -offset)
+ | (data_[data_cell] & ~(address_mask_ << -offset));
+ return true;
+ }
+ // address in data is to right so shift value right by offset
+ data_[data_cell] = ((finger ^ value) >> offset) |
+ (data_[data_cell] & ~(address_mask_ >> offset));
+ data_[data_cell + 1] = ((finger ^ value) << (cell_width_ - offset)) |
+ (data_[data_cell + 1] & (full_mask_ >> offset));
+ return true;
+ }
+ // debugging
+ void printFilter(const std::string & prefix = "", uint32_t truncate = 64){
+ std::cout << prefix;
+ for (uint32_t i = 0; i < cells_ && i < truncate; ++i) {
+ for (int j = cell_width_ - 1; j >= 0; --j)
+ if (data_[i] & (1ull << j))
+ std::cout << 1;
+ else
+ std::cout << 0;
+ std::cout << "\n";
+ }
+ std::cout << std::endl;
+ }
+ // i/o
+ uint64_t getAddresses() { return addresses_; }
+ int getWidth() { return width_; }
+ int getCellWidth() { return cell_width_; }
+ uint32_t getCells() { return cells_; }
+ virtual bool save(FileHandler* out) {
+ assert(out != NULL);
+ assert(out->write((char*)&cells_, sizeof(cells_)));
+ assert(out->write((char*)&cell_width_, sizeof(cell_width_)));
+ assert(out->write((char*)&log_cell_width_, sizeof(log_cell_width_)));
+ assert(out->write((char*)&addresses_, sizeof(addresses_)));
+ assert(out->write((char*)&width_, sizeof(width_)));
+ assert(out->write((char*)&first_bit_, sizeof(first_bit_)));
+ assert(out->write((char*)&full_mask_, sizeof(full_mask_)));
+ assert(out->write((char*)&address_mask_, sizeof(address_mask_)));
+ //assert(out->write((char*)data_, cells_ * sizeof(T)));
+ const uint64_t jump = 524288032ul; //(uint64_t)pow(2, 29);
+ if((width_ == 1) || cells_ < jump)
+ assert(out->write((char*)data_, cells_ * sizeof(T)));
+ else {
+ uint64_t idx(0);
+ while(idx + jump < cells_) {
+ assert(out->write((char*)&data_[idx], jump * sizeof(T)));
+ idx += jump;
+ }
+ assert(out->write((char*)&data_[idx], (cells_ - idx) * sizeof(T)));
+ }
+ return true;
+ }
+ protected:
+ bool loadHeader(FileHandler* fin) {
+ assert(fin != NULL);
+ assert(fin->read((char*)&cells_, sizeof(cells_)));
+ assert(fin->read((char*)&cell_width_, sizeof(cell_width_)));
+ assert(cell_width_ == sizeof(T) << 3); // make sure correct underlying data type
+ assert(fin->read((char*)&log_cell_width_, sizeof(log_cell_width_)));
+ assert(fin->read((char*)&addresses_, sizeof(addresses_)));
+ assert(fin->read((char*)&width_, sizeof(width_)));
+ assert(fin->read((char*)&first_bit_, sizeof(first_bit_)));
+ assert(fin->read((char*)&full_mask_, sizeof(full_mask_)));
+ assert(fin->read((char*)&address_mask_, sizeof(address_mask_)));
+ return true;
+ }
+ bool loadData(FileHandler* fin) {
+ // instantiate underlying array
+ data_ = new T[cells_];
+ assert(data_ != NULL);
+ assert(fin->read((char*)data_, cells_ * sizeof(T)));
+ //assert(fin->read((char*)&data_[0], ceil(float(cells_) / 2.0) * sizeof(T)));
+ //assert(fin->read((char*)&data_[cells_ / 2], (cells_ / 2) * sizeof(T)));
+ return true;
+ }
+ uint64_t cells_; // number T making up 'data_'
+ int cell_width_; // bits per cell (i.e. sizeof(T) << 3)
+ int log_cell_width_; // log of bits used for >> division
+ uint64_t addresses_; // number of addresses in the filter
+ int width_; // width in bits of each address
+ int first_bit_; // position of first bit in initial byte
+ T full_mask_; // all 1s
+ T address_mask_; // 1s in those positions that are part of address
+ T* data_; // the raw data as bytes
+ };
+
+ // Extension with bit test/setter methods added
+ class BitFilter : public Filter<uint8_t> {
+ public:
+ BitFilter(uint64_t bits) : Filter<uint8_t>(bits, 1) {}
+ BitFilter(FileHandler* fin, bool loaddata = true)
+ : Filter<uint8_t>(fin, loaddata) {
+ if (loaddata)
+ assert(load(fin));
+ }
+ // TODO: overload operator[]
+ virtual bool testBit(uint64_t location) {
+ // test bit referenced by location
+ return data_[(location % addresses_) >> 3] & 1 << ((location % addresses_) % 8);
+ }
+ virtual bool setBit(uint64_t location) {
+ // set bit referenced by location
+ data_[(location % addresses_) >> 3] |= 1 << ((location % addresses_) % 8);
+ return true;
+ }
+ virtual bool clearBit(uint64_t location) {
+ // set bit referenced by location
+ data_[(location % addresses_) >> 3] &= 0 << ((location % addresses_) % 8);
+ return true;
+ }
+ bool save(FileHandler* fout) {
+ assert(Filter<uint8_t>::save(fout));
+ std::cerr << "Saved BitFilter. Rho = " << rho() << "." << std::endl;;
+ return true;
+ }
+ float rho(uint64_t limit = 0) {
+ uint64_t ones = 0;
+ uint64_t range = limit > 0 ? std::min(limit,cells_) : cells_;
+ for (uint64_t i = 0; i < range; ++i)
+ for (int j = 0; j < 8; ++j)
+ if (data_[i] & (1 << j))
+ ++ones;
+ return static_cast<float>((range << 3) - ones)/static_cast<float>(range << 3);
+ }
+ protected:
+ bool load(FileHandler* fin) {
+ std::cerr << "Loaded BitFilter. Rho = " << rho() << "." << std::endl;;
+ return true;
+ }
+ };
+/*
+ // ResizedBitFilter deals with resizing to save memory
+ // whereas other filters should expect locations to be within range
+ // this filter will need to resize (and possibly rehash) locations
+ // to fit a smaller range.
+ class ResizedBitFilter : public BitFilter {
+ public:
+ ResizedBitFilter(FileHandler* fin) : BitFilter(fin) {
+ assert(load(fin));
+ }
+ ResizedBitFilter(FileHandler* fin, uint64_t newsize) : BitFilter(newsize) {
+ assert(resizeFromFile(fin, newsize));
+ }
+ bool resizeFromFile(FileHandler* oldin, uint64_t newsize);
+ virtual bool testBit(uint64_t location) {
+ // test bit referenced by location
+ return BitFilter::testBit((location % old_addresses_) * a_ + b_);
+ }
+ virtual bool setBit(uint64_t location) {
+ // set bit referenced by location
+ return BitFilter::setBit((location % old_addresses_) * a_ + b_);
+ }
+ bool save(FileHandler* fout) {
+ // re-hashing parameters
+ assert(BitFilter::save(fout));
+ std::cerr << "Saved ResizedBitFilter. Rho = " << rho() << "." << std::endl;
+ assert(fout->write((char*)&old_addresses_, sizeof(old_addresses_)));
+ assert(fout->write((char*)&a_, sizeof(a_)));
+ return fout->write((char*)&b_, sizeof(b_));
+ }
+ protected:
+ bool load(FileHandler* fin) {
+ // re-hashing parameters
+ std::cerr << "Loaded ResizedBitFilter. Rho = " << rho() << "." << std::endl;
+ assert(fin->read((char*)&old_addresses_, sizeof(old_addresses_)));
+ assert(fin->read((char*)&a_, sizeof(a_)));
+ return fin->read((char*)&b_, sizeof(b_));
+ }
+ // member data
+ uint64_t old_addresses_; // size of pre-resized filter
+ uint64_t a_, b_; // re-hashing parameters (needed?)
+ };
+
+ // CountingFilter supports increment operator. Addresses
+ // of the filter are treated as counters that store their counts
+ // in big-endian format (i.e. leftmost bit is most significant).
+ template<typename T>
+ class CountingFilter : public Filter<T> {
+ public:
+ CountingFilter(uint64_t addresses, int width, bool wrap_around = true) :
+ Filter<T>(addresses, width), wrap_around_(wrap_around) {}
+ CountingFilter(FileHandler* fin) : Filter<T>(fin, true) {
+ assert(load(fin));
+ }
+ ~CountingFilter() {}
+ // increment this address by one
+ inline bool increment(uint32_t address) {
+ uint64_t data_bit = address * this->width_; // index of first bit
+ uint32_t data_cell = (data_bit >> this->log_cell_width_); // % this->cells_; // index in data_
+ // 'offset' shows how address in 'data' and 'value' align
+ data_bit %= this->cell_width_;
+ int offset = data_bit - this->first_bit_;
+ // start from right incrementing and carrying if necessary
+ bool carry = true;
+ if (offset > 0) { // counter spans two cells
+ carry = incrementSubCell(0, offset, &this->data_[data_cell + 1]);
+ if (carry)
+ carry = incrementSubCell(data_bit, this->width_ - offset, &this->data_[data_cell]);
+ } else { // counter is within a single cell
+ carry = incrementSubCell(data_bit, this->width_, &this->data_[data_cell]);
+ }
+ // last update must not have carried
+ if (!carry)
+ return true;
+ // wrapped round so check whether need to reset to max count
+ if (!wrap_around_)
+ assert(this->write(address, this->address_mask_));
+ return false; // false to indicate that overflowed
+ }
+ bool save(FileHandler* fout) {
+ assert(Filter<T>::save(fout));
+ return fout->write((char*)&wrap_around_, sizeof(wrap_around_));
+ }
+ private:
+ bool load(FileHandler* fin) {
+ return fin->read((char*)&wrap_around_, sizeof(wrap_around_));
+ }
+ inline bool incrementSubCell(int bit, int len, T* cell) {
+ // increment counter consisting of bits [startbit, startbit + len - 1] rest stays unchanged
+ *cell = ((((*cell >> (this->cell_width_ - bit - len)) + 1)
+ & (this->full_mask_ >> (this->cell_width_ - len))) << (this->cell_width_ - bit - len))
+ | (*cell & ~(((this->full_mask_ >> (this->cell_width_ - len)) << (this->cell_width_ - bit - len))));
+ // indicate overflow as true
+ return ((*cell & (this->full_mask_ >> bit)) >> (this->cell_width_ - bit - len)) == 0;
+ }
+ bool wrap_around_; // whether to start from 0 on overflow (if not just stay at maximum count)
+ };
+*/
+}
+#endif // INC_RANDLM_FILTER_H
diff --git a/moses/src/DynSAInclude/file.cpp b/moses/src/DynSAInclude/file.cpp
index 657af71f9..70c45ca77 100644
--- a/moses/src/DynSAInclude/file.cpp
+++ b/moses/src/DynSAInclude/file.cpp
@@ -16,7 +16,7 @@ const std::string FileHandler::kGunzipCommand = "gunzip -f";
const std::string FileHandler::kBzip2Command = "bzip2 -f";
const std::string FileHandler::kBunzip2Command = "bunzip2 -f";
-FileHandler::FileHandler(const std::string & path, std::ios_base::openmode flags, bool checkExists)
+FileHandler::FileHandler(const std::string & path, std::ios_base::openmode flags, bool /* checkExists */)
: std::fstream(NULL), path_(path), flags_(flags), buffer_(NULL), fp_(NULL)
{
if( !(flags^(std::ios::in|std::ios::out)) ) {
diff --git a/moses/src/DynSAInclude/hash.h b/moses/src/DynSAInclude/hash.h
new file mode 100755
index 000000000..f0965d9bd
--- /dev/null
+++ b/moses/src/DynSAInclude/hash.h
@@ -0,0 +1,327 @@
+#ifndef INC_ALLHASHFUNCS_H
+#define INC_ALLHASHFUNCS_H
+
+#include <cassert>
+#include <cmath>
+#include "types.h"
+#include "utils.h"
+#include "file.h"
+using namespace Moses;
+typedef uint64_t P; // largest input range is 2^64
+
+template <typename T>
+class HashBase {
+ protected:
+ T m_; // range of hash output
+ count_t H_; // number of hash functions to instantiate
+ virtual void initSeeds()=0;
+ virtual void freeSeeds()=0;
+ public:
+ HashBase(float m, count_t H=1):m_((T)m), H_(H) {
+ //cerr << "range = (0..." << m_ << "]" << endl;
+ }
+ HashBase(FileHandler* fin) {
+ load(fin);
+ }
+ virtual ~HashBase(){}
+ virtual T hash(const char*s, count_t h)=0; // string hashing
+ virtual T hash(const wordID_t* id, const int len, count_t h)=0; // vocab mapped hashing
+ count_t size() { return H_;}
+ virtual void save(FileHandler* fout) {
+ assert(fout != 0);
+ fout->write((char*)&m_, sizeof(m_));
+ fout->write((char*)&H_, sizeof(H_));
+ }
+ virtual void load(FileHandler* fin) {
+ assert(fin != 0);
+ fin->read((char*)&m_, sizeof(m_));
+ fin->read((char*)&H_, sizeof(H_));
+ }
+};
+template <typename T>
+class UnivHash_linear: public HashBase<T> {
+ public:
+ UnivHash_linear(float m, count_t H, P pr):
+ HashBase<T>(m, H), pr_(pr) {
+ //assert(isPrime(pr_));
+ initSeeds();
+ }
+ UnivHash_linear(FileHandler* fin):
+ HashBase<T>(fin) {
+ load(fin);
+ }
+ ~UnivHash_linear() {freeSeeds();}
+ T hash(const char* s, count_t h){return 0;} //not implemented
+ T hash(const wordID_t* id, const int len, count_t h);
+ T hash(const wordID_t id, const count_t pos,
+ const T prevValue, count_t h);
+ void save(FileHandler* fout);
+ void load(FileHandler* fin);
+ private:
+ T** a_, **b_;
+ P pr_;
+ void initSeeds();
+ void freeSeeds();
+};
+
+/* UnivHash_noPrimes:
+ * From Dietzfelbinger 2008
+ * p = input domain range = 2^l
+ * m = output range = 2^k
+ * # of hash function = 2^(l-1)
+*/
+template <typename T>
+class UnivHash_noPrimes: public HashBase<T> {
+ public:
+ UnivHash_noPrimes(float k, float l):
+ HashBase<T>(k, 100), d_(count_t((l-k))) {
+ if(((int)l >> 3) == sizeof(P)) p_ = (P) pow(2,l) - 1;
+ else p_ = (P) pow(2,l);
+ initSeeds();
+ }
+ UnivHash_noPrimes(FileHandler* fin):
+ HashBase<T>(fin) {
+ load(fin);
+ }
+ ~UnivHash_noPrimes() {freeSeeds();}
+ T hash(const char* s, count_t h);
+ T hash(const wordID_t* id, const int len, count_t h);
+ T hash(const P x, count_t h);
+ void save(FileHandler* fout);
+ void load(FileHandler* fin);
+ private:
+ count_t d_; // l-k
+ P p_, *a_; // real-valued input range, storage
+ void initSeeds();
+ void freeSeeds() {delete[] a_;}
+};
+
+template <typename T>
+class Hash_shiftAddXOR: public HashBase<T> {
+ public:
+ Hash_shiftAddXOR(float m, count_t H=5): HashBase<T>(m,H),
+ l_(5), r_(2) {
+ initSeeds();
+ }
+ ~Hash_shiftAddXOR() {freeSeeds();}
+ T hash(const char* s, count_t h);
+ T hash(const wordID_t* id, const int len, count_t h) {} // empty
+ private:
+ T* v_; // random seed storage
+ const unsigned short l_, r_; // left-shift bits, right-shift bits
+ void initSeeds();
+ void freeSeeds() {delete[] v_;}
+};
+
+template <typename T>
+class UnivHash_tableXOR: public HashBase<T> {
+ public:
+ UnivHash_tableXOR(float m, count_t H=5): HashBase<T>(m, H),
+ table_(NULL), tblLen_(255*MAX_STR_LEN) {
+ initSeeds();
+ }
+ ~UnivHash_tableXOR() {freeSeeds();}
+ T hash(const char* s, count_t h);
+ T hash(const wordID_t* id, const int len, count_t h) {}
+ private:
+ T** table_; // storage for random numbers
+ count_t tblLen_; // length of table
+ void initSeeds();
+ void freeSeeds();
+};
+
+// ShiftAddXor
+template <typename T>
+void Hash_shiftAddXOR<T>::initSeeds() {
+ v_ = new T[this->H_];
+ for(count_t i=0; i < this->H_; i++)
+ v_[i] = Utils::rand<T>() + 1;
+}
+template <typename T>
+T Hash_shiftAddXOR<T>::hash(const char* s, count_t h=0) {
+ T value = v_[h];
+ int pos(0);
+ unsigned char c;
+ while((c = *s++) && (++pos < MAX_STR_LEN)) {
+ value ^= ((value << l_) + (value >> r_) + c);
+ }
+ return (value % this->m_);
+}
+
+// UnivHash_tableXOR
+template <typename T>
+void UnivHash_tableXOR<T>::initSeeds() {
+ // delete any values in table
+ if(table_) freeSeeds();
+ // instance of new table
+ table_ = new T* [this->H_];
+ // fill with random values
+ for(count_t j=0; j < this->H_; j++) {
+ table_[j] = new T[tblLen_];
+ for(count_t i=0; i < tblLen_; i++) {
+ table_[j][i] = Utils::rand<T>(this->m_-1);
+ }
+ }
+}
+template <typename T>
+void UnivHash_tableXOR<T>::freeSeeds() {
+ for(count_t j = 0; j < this->H_; j++)
+ delete[] table_[j];
+ delete[] table_;
+ table_ = NULL;
+}
+template <typename T>
+T UnivHash_tableXOR<T>::hash(const char* s, count_t h = 0) {
+ T value = 0;
+ count_t pos = 0, idx = 0;
+ unsigned char c;
+ while((c = *s++) && (++pos < MAX_STR_LEN))
+ value ^= table_[h][idx += c];
+ assert(value < this->m_);
+ return value;
+}
+
+// UnivHash_noPrimes
+template <typename T>
+void UnivHash_noPrimes<T>::initSeeds() {
+ a_ = new P[this->H_];
+ for(T i=0; i < this->H_; i++) {
+ a_[i] = Utils::rand<P>();
+ if(a_[i] % 2 == 0) a_[i]++; // a must be odd
+ }
+}
+template <typename T>
+T UnivHash_noPrimes<T>::hash(const P x, count_t h=0) {
+ // h_a(x) = (ax mod 2^l) div 2^(l-k)
+ T value = ((a_[h] * x) % p_) >> d_;
+ return value % this->m_;
+}
+template <typename T>
+T UnivHash_noPrimes<T>::hash(const wordID_t* id, const int len,
+ count_t h=0) {
+ T value = 0;
+ int pos(0);
+ while(pos < len) {
+ value ^= hash((P)id[pos], h++);
+ pos++;
+ }
+ return value % this->m_;
+}
+template <typename T>
+T UnivHash_noPrimes<T>::hash(const char* s, count_t h=0) {
+ T value = 0;
+ int pos(0);
+ unsigned char c;
+ while((c = *s++) && (++pos < MAX_STR_LEN)) {
+ value ^= hash((P)c, h);
+ }
+ return value % this->m_;
+}
+template <typename T>
+void UnivHash_noPrimes<T>::save(FileHandler* fout) {
+ HashBase<T>::save(fout);
+ fout->write((char*)&p_, sizeof(p_));
+ fout->write((char*)&d_, sizeof(d_));
+ for(T i=0; i < this->H_; i++) {
+ fout->write((char*)&a_[i], sizeof(a_[i]));
+ }
+}
+template <typename T>
+void UnivHash_noPrimes<T>::load(FileHandler* fin) {
+ a_ = new P[this->H_];
+ // HashBase<T>::load(fin) already done in constructor
+ fin->read((char*)&p_, sizeof(p_));
+ fin->read((char*)&d_, sizeof(d_));
+ for(T i=0; i < this->H_; i++)
+ {
+ fin->read((char*)&a_[i], sizeof(a_[i]));
+ }
+}
+
+//UnivHash_linear
+template <typename T>
+void UnivHash_linear<T>::initSeeds() {
+ a_ = new T*[this->H_];
+ b_ = new T*[this->H_];
+ for(count_t i=0; i < this->H_; i++) {
+ a_[i] = new T[MAX_NGRAM_ORDER];
+ b_[i] = new T[MAX_NGRAM_ORDER];
+ for(count_t j=0; j < MAX_NGRAM_ORDER; j++) {
+ a_[i][j] = 1 + Utils::rand<T>();
+ b_[i][j] = Utils::rand<T>();
+ }
+ }
+}
+template <typename T>
+void UnivHash_linear<T>::freeSeeds() {
+ for(count_t i=0; i < this->H_; i++) {
+ delete[] a_[i];
+ delete[] b_[i];
+ }
+ delete[] a_;
+ delete[] b_;
+ a_ = b_ = NULL;
+}
+template <typename T>
+inline T UnivHash_linear<T>::hash(const wordID_t* id, const int len,
+ count_t h=0) {
+ assert(h < this->H_);
+ T value = 0;
+ int pos(0);
+ while(pos < len) {
+ value += ((a_[h][pos] * id[pos]) + b_[h][pos]);// % pr_;
+ ++pos;
+ }
+ return value % this->m_;
+}
+template <typename T>
+inline T UnivHash_linear<T>::hash(const wordID_t id, const count_t pos,
+ const T prevValue, count_t h=0) {
+ assert(h < this->H_);
+ T value = prevValue + ((a_[h][pos] * id) + b_[h][pos]); // % pr_;
+ return value % this->m_;
+}
+template <typename T>
+void UnivHash_linear<T>::save(FileHandler* fout) {
+ // int bytes = sizeof(a_[0][0]);
+ HashBase<T>::save(fout);
+ fout->write((char*)&pr_, sizeof(pr_));
+ for(count_t i=0; i < this->H_; i++) {
+ for(count_t j=0; j < MAX_NGRAM_ORDER; j++) {
+ fout->write((char*)&a_[i][j], sizeof(a_[i][j]));
+ fout->write((char*)&b_[i][j], sizeof(b_[i][j]));
+ //cout << "a[" << i << "][" << j << "]=" << a_[i][j] << endl;
+ //cout << "b[" << i << "][" << j << "]=" << b_[i][j] << endl;
+ }
+ }
+}
+template <typename T>
+void UnivHash_linear<T>::load(FileHandler* fin) {
+ // HashBase<T>::load(fin) already done in constructor
+ fin->read((char*)&pr_, sizeof(pr_));
+ a_ = new T*[this->H_];
+ b_ = new T*[this->H_];
+ for(count_t i=0; i < this->H_; i++) {
+ a_[i] = new T[MAX_NGRAM_ORDER];
+ b_[i] = new T[MAX_NGRAM_ORDER];
+ for(count_t j=0; j < MAX_NGRAM_ORDER; j++) {
+ fin->read((char*)&a_[i][j], sizeof(a_[i][j]));
+ fin->read((char*)&b_[i][j], sizeof(b_[i][j]));
+ //cout << "a[" << i << "][" << j << "]=" << a_[i][j] << endl;
+ //cout << "b[" << i << "][" << j << "]=" << b_[i][j] << endl;
+ }
+ }
+}
+/*
+template <typename T>
+T UnivHash_linear<T>::hash(const char* s, count_t h=0) {
+ assert(h < this->H_);
+ T value = 0;
+ int pos(0);
+ unsigned char c;
+ while((c = *s++) && (++pos < MAX_STR_LEN)) {
+ value += ((a_[h][pos] * c) + b_[h][pos]);// % pr_;
+ }
+ return value % this->m_;
+}*/
+#endif
diff --git a/moses/src/DynSAInclude/onlineRLM.h b/moses/src/DynSAInclude/onlineRLM.h
new file mode 100755
index 000000000..dd81afa46
--- /dev/null
+++ b/moses/src/DynSAInclude/onlineRLM.h
@@ -0,0 +1,493 @@
+#ifndef INC_DYNAMICLM_H
+#define INC_DYNAMICLM_H
+
+#include <algorithm>
+#include "perfectHash.h"
+#include "RandLMCache.h"
+#include "types.h"
+#include "vocab.h"
+
+/*
+ * DynamicLM manipulates LM
+ */
+using randlm::BitFilter;
+using randlm::Cache;
+
+const bool strict_checks_ = false;
+
+template<typename T>
+class OnlineRLM: public PerfectHash<T> {
+public:
+ OnlineRLM(uint16_t MBs, int width, int bucketRange, count_t order,
+ Vocab* v, float qBase = 8): PerfectHash<T>(MBs, width, bucketRange, qBase),
+ vocab_(v), bAdapting_(false), order_(order), corpusSize_(0), alpha_(0) {
+ assert(vocab_ != 0);
+ //instantiate quantizer class here
+ cache_ = new Cache<float>(8888.8888, 9999.9999); // unknown_value, null_value
+ alpha_ = new float[order_ + 1];
+ for(count_t i = 0; i <= order_; ++i)
+ alpha_[i] = i * log10(0.4);
+ cerr << "Initialzing auxillary bit filters...\n";
+ bPrefix_ = new BitFilter(this->cells_);
+ bHit_ = new BitFilter(this->cells_);
+ }
+ OnlineRLM(FileHandler* fin, count_t order):
+ PerfectHash<T>(fin), bAdapting_(true), order_(order), corpusSize_(0) {
+ load(fin);
+ cache_ = new Cache<float>(8888.8888, 9999.9999); // unknown_value, null_value
+ alpha_ = new float[order_ + 1];
+ for(count_t i = 0; i <= order_; ++i)
+ alpha_[i] = i * log10(0.4);
+ }
+ ~OnlineRLM() {
+ if(alpha_) delete[] alpha_;
+ if(bAdapting_) delete vocab_;
+ else vocab_ = NULL;
+ if(cache_) delete cache_;
+ delete bPrefix_;
+ delete bHit_;
+ }
+ float getProb(const wordID_t* ngram, int len, const void** state);
+ //float getProb2(const wordID_t* ngram, int len, const void** state);
+ bool insert(const std::vector<string>& ngram, const int value);
+ bool update(const std::vector<string>& ngram, const int value);
+ int query(const wordID_t* IDs, const int len);
+ int sbsqQuery(const std::vector<string>& ngram, int* len,
+ bool bStrict = false);
+ int sbsqQuery(const wordID_t* IDs, const int len, int* codes,
+ bool bStrict = false);
+ void remove(const std::vector<string>& ngram);
+ count_t heurDelete(count_t num2del, count_t order = 5);
+ uint64_t corpusSize() {return corpusSize_;}
+ void corpusSize(uint64_t c) {corpusSize_ = c;}
+ void clearCache() {
+ if(cache_) cache_->clear();
+ }
+ void save(FileHandler* fout);
+ void load(FileHandler* fin);
+ void randDelete(int num2del);
+ int countHits();
+ int countPrefixes();
+ int cleanUpHPD();
+ void clearMarkings();
+ void removeNonMarked();
+ Vocab* vocab_;
+protected:
+ void markQueried(const uint64_t& index);
+ void markQueried(hpdEntry_t& value);
+ bool markPrefix(const wordID_t* IDs, const int len, bool bSet);
+private:
+ const void* getContext(const wordID_t* ngram, int len);
+ const bool bAdapting_; // used to signal adaptation of model
+ const count_t order_; // LM order
+ uint64_t corpusSize_; // total training corpus size
+ float* alpha_; // backoff constant
+ Cache<float>* cache_;
+ BitFilter* bPrefix_;
+ BitFilter* bHit_;
+};
+template<typename T>
+bool OnlineRLM<T>::insert(const std::vector<string>& ngram, const int value) {
+ int len = ngram.size();
+ wordID_t wrdIDs[len];
+ uint64_t index(this->cells_ + 1);
+ for(int i = 0; i < len; ++i)
+ wrdIDs[i] = vocab_->GetWordID(ngram[i]);
+ index = PerfectHash<T>::insert(wrdIDs, len, value);
+ if(value > 1 && len < order_)
+ markPrefix(wrdIDs, ngram.size(), true); // mark context
+ // keep track of total items from training data minus "<s>"
+ if(ngram.size() == 1 && (!bAdapting_)) // hack to not change corpusSize when adapting
+ corpusSize_ += (wrdIDs[0] != vocab_->GetBOSWordID()) ? value : 0;
+ if(bAdapting_ && (index < this->cells_)) // mark to keep while adapting
+ markQueried(index);
+ return true;
+}
+template<typename T>
+bool OnlineRLM<T>::update(const std::vector<string>& ngram, const int value) {
+ int len = ngram.size();
+ wordID_t wrdIDs[len];
+ uint64_t index(this->cells_ + 1);
+ hpdEntry_t hpdItr;
+ vocab_->MakeOpen();
+ for(int i = 0; i < len; ++i)
+ wrdIDs[i] = vocab_->GetWordID(ngram[i]);
+ // if updating, minimize false positives by pre-checking if context already in model
+ bool bIncluded(true);
+ if(value > 1 && len < (int)order_)
+ bIncluded = markPrefix(wrdIDs, ngram.size(), true); // mark context
+ if(bIncluded) { // if context found
+ bIncluded = PerfectHash<T>::update2(wrdIDs, len, value, hpdItr, index);
+ if(index < this->cells_) {
+ markQueried(index);
+ }
+ else if(hpdItr != this->dict_.end()) markQueried(hpdItr);
+ }
+ return bIncluded;
+}
+template<typename T>
+int OnlineRLM<T>::query(const wordID_t* IDs, int len) {
+ uint64_t filterIdx = 0;
+ hpdEntry_t hpdItr;
+ int value(0);
+ value = PerfectHash<T>::query(IDs, len, hpdItr, filterIdx);
+ if(value != -1) {
+ if(hpdItr != this->dict_.end()) {
+ //markQueried(hpdItr); // mark this event as "hit"
+ value -= ((value & this->hitMask_) != 0) ? this->hitMask_ : 0; // check for previous hit marks
+ }
+ else {
+ assert(filterIdx < this->cells_);
+ //markQueried(filterIdx);
+ }
+ }
+ return value > 0 ? value : 0;
+}
+template<typename T>
+bool OnlineRLM<T>::markPrefix(const wordID_t* IDs, const int len, bool bSet) {
+ if(len <= 1) return true; // only do this for for ngrams with context
+ static Cache<int> pfCache(-1, -1); // local prefix cache
+ int code(0);
+ if(!pfCache.checkCacheNgram(IDs, len - 1, &code, NULL)) {
+ hpdEntry_t hpdItr;
+ uint64_t filterIndex(0);
+ code = PerfectHash<T>::query(IDs, len - 1, hpdItr, filterIndex); // hash IDs[0..len-1]
+ if(code == -1) { // encountered false positive in pipeline
+ cerr << "WARNING: markPrefix(). The O-RLM is *not* well-formed.\n";
+ // add all prefixes or return false;
+ return false;
+ }
+ if(filterIndex != this->cells_ + 1) {
+ assert(hpdItr == this->dict_.end());
+ if(bSet) bPrefix_->setBit(filterIndex); // mark index
+ else bPrefix_->clearBit(filterIndex); // unset index
+ }
+ else {
+ assert(filterIndex == this->cells_ + 1);
+ //how to handle hpd prefixes?
+ }
+ if(pfCache.nodes() > 10000) pfCache.clear();
+ pfCache.setCacheNgram(IDs, len - 1, code, NULL);
+ }
+ return true;
+}
+template<typename T>
+void OnlineRLM<T>::markQueried(const uint64_t& index) {
+ bHit_->setBit(index);
+ //cerr << "filter[" << index << "] = " << this->filter_->read(index) << endl;
+}
+template<typename T>
+void OnlineRLM<T>::markQueried(hpdEntry_t& value) {
+ // set high bit of counter to indicate "hit" status
+ value->second |= this->hitMask_;
+}
+template<typename T>
+void OnlineRLM<T>::remove(const std::vector<string>& ngram) {
+ wordID_t IDs[ngram.size()];
+ for(count_t i = 0; i < ngram.size(); ++i)
+ IDs[i] = vocab_->GetWordID(ngram[i]);
+ PerfectHash<T>::remove(IDs, ngram.size());
+}
+template<typename T>
+count_t OnlineRLM<T>::heurDelete(count_t num2del, count_t order) {
+ count_t deleted = 0;
+ cout << "Deleting " << num2del << " of order "<< order << endl;
+ // delete from filter first
+ int full = *std::max_element(this->idxTracker_, this->idxTracker_
+ + this->totBuckets_);
+ for(; full > 0; --full) // delete from fullest buckets first
+ for(int bk = 0; bk < this->totBuckets_; ++bk) {
+ if(deleted >= num2del) break;
+ if(this->idxTracker_[bk] == full) { // if full
+ uint64_t first = bk * this->bucketRange_,
+ last = first + this->bucketRange_;
+ for(uint64_t row = first; row < last; ++row) { // check each row
+ if(!(bHit_->testBit(row) || bPrefix_->testBit(row) )) {
+ if(this->filter_->read(row) != 0) {
+ PerfectHash<T>::remove(row); // remove from filter
+ ++deleted;
+ }
+ }
+ }
+ }
+ }
+ if(deleted < num2del) {
+ // remove from hpd
+ cerr << "TODO! HPD deletions\n";
+ }
+ cerr << "Total deleted = " << deleted << endl;
+ return deleted;
+}
+template<typename T>
+int OnlineRLM<T>::sbsqQuery(const std::vector<string>& ngram, int* codes,
+ bool bStrict) {
+ wordID_t IDs[ngram.size()];
+ for(count_t i = 0; i < ngram.size(); ++i)
+ IDs[i] = vocab_->GetWordID(ngram[i]);
+ return sbsqQuery(IDs, ngram.size(), codes, bStrict);
+}
+template<typename T>
+int OnlineRLM<T>::sbsqQuery(const wordID_t* IDs, const int len, int* codes,
+ bool bStrict) {
+ uint64_t filterIdx = 0;
+ int val(0), fnd(0);
+ hpdEntry_t hpdItr;
+ for(int i = len - 1; i >= 0; --i) { // do subsequence filtering
+ //if(IDs[i] == Vocab::kOOVWordID) break;
+ val = PerfectHash<T>::query(&IDs[i], len - i, hpdItr, filterIdx);
+ if(val != -1) { // if event found
+ fnd = len - i; // increment found sequence
+ if(hpdItr != this->dict_.end()) {
+ val -= ((val & this->hitMask_) != 0) ? this->hitMask_ : 0; // account for previous hit marks
+ }
+ }
+ else if(bStrict) {
+ break;
+ }
+ // add to value array
+ codes[i] = val > 0 ? val : 0;
+ }
+ while(bStrict && (fnd > 1)) { // do checks the other way
+ val = PerfectHash<T>::query(&IDs[len - fnd], fnd - 1, hpdItr, filterIdx);
+ if(val != -1) break; // if anything found
+ else --fnd; // else decrement found
+ }
+ return fnd;
+}
+template<typename T>
+float OnlineRLM<T>::getProb(const wordID_t* ngram, int len,
+ const void** state) {
+ static const float oovprob = log10(1.0 / (static_cast<float>(vocab_->Size()) - 1));
+ float logprob(0);
+ const void* context = (state) ? *state : 0;
+ // if full ngram and prob not in cache
+ if(!cache_->checkCacheNgram(ngram, len, &logprob, &context)) {
+ // get full prob and put in cache
+ int num_fnd(0), den_val(0);
+ int in[len]; // in[] keeps counts of increasing order numerator
+ for(int i = 0; i < len; ++i) in[i] = 0;
+ for(int i = len - 1; i >= 0; --i) {
+ if(ngram[i] == vocab_->GetkOOVWordID()) break; // no need to query if OOV
+ in[i] = query(&ngram[i], len - i);
+ if(in[i] > 0) {
+ num_fnd = len - i;
+ }
+ else if(strict_checks_) break;
+ }
+ while(num_fnd > 1) { // get lower order count
+ //get sub-context of size one less than length found (exluding target)
+ if(((den_val = query(&ngram[len - num_fnd], num_fnd - 1)) > 0) &&
+ (den_val >= in[len - num_fnd]) && (in[len - num_fnd] > 0)) {
+ break;
+ }
+ else --num_fnd; // else backoff to lower ngram order
+ }
+ if(num_fnd == 1 && (in[len - 1] < 1)) // sanity check for unigrams
+ num_fnd = 0;
+ switch(num_fnd) { // find prob (need to refactor into precomputation)
+ case 0: // OOV
+ logprob = alpha_[len] + oovprob;
+ break;
+ case 1: // unigram found only
+ assert(in[len - 1] > 0);
+ logprob = alpha_[len - 1] + (corpusSize_ > 0 ?
+ log10(static_cast<float>(in[len - 1]) / static_cast<float>(corpusSize_)) : 0);
+ //logprob = alpha_[len - 1] +
+ //log10(static_cast<float>(in[len - 1]) / static_cast<float>(corpusSize_));
+ break;
+ default:
+ assert(den_val > 0);
+ //if(subgram == in[len - found]) ++subgram; // avoid returning zero probs????
+ logprob = alpha_[len - num_fnd] +
+ log10(static_cast<float>(in[len - num_fnd]) / static_cast<float>(den_val));
+ break;
+ }
+ // need unique context
+ context = getContext(&ngram[len - num_fnd], num_fnd);
+ // put whatever was found in cache
+ cache_->setCacheNgram(ngram, len, logprob, context);
+ } // end checkCache
+ return logprob;
+}
+template<typename T>
+const void* OnlineRLM<T>::getContext(const wordID_t* ngram, int len) {
+ int dummy(0);
+ float* addresses[len]; // only interested in addresses of cache
+ assert(cache_->getCache2(ngram, len, &addresses[0], &dummy) == len);
+ // return address of cache node
+ return (const void*)addresses[0];
+}
+template<typename T>
+void OnlineRLM<T>::randDelete(int num2del) {
+ int deleted = 0;
+ for(uint64_t i = 0; i < this->cells_; i++) {
+ if(this->filter_->read(i) != 0) {
+ PerfectHash<T>::remove(i);
+ ++deleted;
+ }
+ if(deleted >= num2del) break;
+ }
+}
+template<typename T>
+int OnlineRLM<T>::countHits() {
+ int hit(0);
+ for(uint64_t i = 0; i < this->cells_; ++i)
+ if(bHit_->testBit(i)) ++hit;
+ iterate(this->dict_, itr)
+ if((itr->second & this->hitMask_) != 0)
+ ++hit;
+ cerr << "Hit count = " << hit << endl;
+ return hit;
+}
+template<typename T>
+int OnlineRLM<T>::countPrefixes() {
+ int pfx(0);
+ for(uint64_t i = 0; i < this->cells_; ++i)
+ if(bPrefix_->testBit(i)) ++pfx;
+ //TODO::Handle hpdict prefix counts
+ cerr << "Prefix count (in filter) = " << pfx << endl;
+ return pfx;
+}
+template<typename T>
+int OnlineRLM<T>::cleanUpHPD() {
+ cerr << "HPD size before = " << this->dict_.size() << endl;
+ std::vector<string> vDel, vtmp;
+ iterate(this->dict_, itr) {
+ if(((itr->second & this->hitMask_) == 0) && // if not hit during testing
+ (Utils::splitToStr(itr->first, vtmp, "¬") >= 3)) { // and higher order ngram
+ vDel.push_back(itr->first);
+ }
+ }
+ iterate(vDel, vitr)
+ this->dict_.erase(*vitr);
+ cerr << "HPD size after = " << this->dict_.size() << endl;
+ return vDel.size();
+}
+template<typename T>
+void OnlineRLM<T>::clearMarkings() {
+ cerr << "clearing all event hits\n";
+ bHit_->reset();
+ count_t* value(0);
+ iterate(this->dict_, itr) {
+ value = &itr->second;
+ *value -= ((*value & this->hitMask_) != 0) ? this->hitMask_ : 0;
+ }
+}
+template<typename T>
+void OnlineRLM<T>::save(FileHandler* fout) {
+ cerr << "Saving ORLM...\n";
+ // save vocab
+ vocab_->Save(fout);
+ fout->write((char*)&corpusSize_, sizeof(corpusSize_));
+ fout->write((char*)&order_, sizeof(order_));
+ bPrefix_->save(fout);
+ bHit_->save(fout);
+ // save everything else
+ PerfectHash<T>::save(fout);
+ cerr << "Finished saving ORLM." << endl;
+}
+template<typename T>
+void OnlineRLM<T>::load(FileHandler* fin) {
+ cerr << "Loading ORLM...\n";
+ // load vocab first
+ vocab_ = new Vocab(fin);
+ assert(vocab_ != 0);
+ fin->read((char*)&corpusSize_, sizeof(corpusSize_));
+ cerr << "\tCorpus size = " << corpusSize_ << endl;
+ fin->read((char*)&order_, sizeof(order_));
+ cerr << "\tModel order = " << order_ << endl;
+ bPrefix_ = new BitFilter(fin);
+ bHit_ = new BitFilter(fin);
+ // load everything else
+ PerfectHash<T>::load(fin);
+}
+template<typename T>
+void OnlineRLM<T>::removeNonMarked() {
+ cerr << "deleting all unused events\n";
+ int deleted(0);
+ for(uint64_t i = 0; i < this->cells_; ++i) {
+ if(!(bHit_->testBit(i) || bPrefix_->testBit(i))
+ && (this->filter_->read(i) != 0)) {
+ PerfectHash<T>::remove(i);
+ ++deleted;
+ }
+ }
+ deleted += cleanUpHPD();
+ cerr << "total removed from ORLM = " << deleted << endl;
+}
+/*
+template<typename T>
+float OnlineRLM<T>::getProb2(const wordID_t* ngram, int len, const void** state) {
+ static const float oovprob = log10(1.0 / (static_cast<float>(vocab_->size()) - 1));
+ float log_prob(0);
+ const void* context_state(NULL);
+ int found;
+ int* denom_codes[order_];
+ int* num_codes[order_ + 1];
+ int denom_found(0);
+ cerr << "length=" << len << endl;
+ // constrain cache queries using model assumptions
+ int denom_len = cache_->getCache(ngram, len - 1, &denom_codes[0], &denom_found);
+ cerr << "denom_len = " << denom_len << endl;
+ int num_len = cache_->getCache(&ngram[len - denom_len - 1], denom_len + 1,
+ &num_codes[0], &found);
+ cerr << "num_len= " << num_len << endl;
+ // keed reducing ngram size until both denominator and numerator are found
+ // allowed to leave kUnknownCode in cache because we check for this.
+ found = num_len; // guaranteed to be <= denom_len + 1
+ // still check for OOV
+ for (int i = len - found; i < len; ++i)
+ if (ngram[i] == Vocab::kOOVWordID) {
+ found = len - i - 1;
+ }
+ // check for relative estimator
+ while(found > 1) {
+ if(*denom_codes[found-1] == cache_unk_ &&
+ ((*denom_codes[found-1] = query(&ngram[len-found], found-1)) == 0)) {
+ //!struct_->query(&ngram[len-*found], *found-1, kMainEventIdx, denom_codes[*found-1])) {
+ *num_codes[found] = cache_unk_;
+ } else {
+ if(*num_codes[found] != cache_unk_ ||
+ ((*num_codes[found] = query(&ngram[len-found], found)) <= *denom_codes[found-1]))
+ // struct_->query(&ngram[len-*found], *found, kMainEventIdx,
+ // num_codes[*found], *denom_codes[*found-1]))
+ break;
+ }
+ --found;
+ }
+ // didn't find bigram numerator or unigram denominator
+ if (found == 1)
+ found = *num_codes[1] != cache_unk_
+ || ((*num_codes[1] = query(&ngram[len - 1], 1)) != 0);
+ //struct_->query(&ngram[len - 1], 1, kMainEventIdx, num_codes[1]);
+ // ....
+ // return estimate applying correct backoff score (precomputed)
+ // store full log prob with complete ngram (even if backed off)
+ switch (found) {
+ case 0: // no observation: assign prob of 'new word' in training data
+ log_prob = alpha_[len] + oovprob;
+ //log_prob = stupid_backoff_log10_[len] + uniform_log10prob_;
+ break;
+ case 1: // unigram over whole corpus
+ log_prob = alpha_[len - 1] +
+ log10(static_cast<float>(*num_codes[1]) / static_cast<float>(corpusSize_));
+ //log_prob = log_quantiser_->getLog10Value(*num_codes[1]) - corpus_size_log10_
+ // + stupid_backoff_log10_[len - 1]; // precomputed
+ break;
+ default: // otherwise use both statistics and (possibly zero) backoff weight
+ log_prob = alpha_[len - found] +
+ log10(static_cast<float>(*num_codes[found]) / static_cast<float>(*denom_codes[found-1]));
+ //log_prob = log_quantiser_->getLog10Value(*num_codes[*found ])
+ // - log_quantiser_->getLog10Value(*denom_codes[*found - 1])
+ // + stupid_backoff_log10_[len - *found];
+ }
+ context_state = (const void*)num_codes[found == len ? found - 1 : found];;
+ //probCache_->store(len, log_prob, context_state);
+ if (state)
+ *state = context_state;
+ return log_prob;
+}
+*/
+
+#endif
+
diff --git a/moses/src/DynSAInclude/params.cpp b/moses/src/DynSAInclude/params.cpp
new file mode 100755
index 000000000..c37fcd684
--- /dev/null
+++ b/moses/src/DynSAInclude/params.cpp
@@ -0,0 +1,223 @@
+#include "params.h"
+
+namespace Moses {
+// parameter constants
+const std::string Parameters::kNotSetValue = "__NOT_SET__";
+
+const int Parameters::kBoolValue = 0;
+const int Parameters::kIntValue = 1;
+const int Parameters::kFloatValue = 2;
+const int Parameters::kStringValue = 3;
+const int Parameters::kUndefinedValue = -1;
+
+const std::string Parameters::kTrueValue = "1";
+const std::string Parameters::kFalseValue = "0";
+
+Parameters::Parameters(const ParamDefs * paramdefs, const count_t paramNum) {
+ initialize(paramdefs, paramNum);
+}
+
+Parameters::Parameters(int argc, char ** argv, const ParamDefs * paramdefs,
+ const count_t paramNum) {
+ initialize(paramdefs, paramNum);
+ loadParams(argc, argv);
+}
+
+void Parameters::initialize(const ParamDefs * paramdefs, const count_t paramNum) {
+ for( count_t i = 0; i < paramNum; i++ ) {
+ params_[paramdefs[i].name] = paramdefs[i]; // assign name
+ }
+ cerr << "Default parameter values:\n";
+ iterate(params_, itr)
+ cerr << "\t" << itr->first << " --> " << itr->second.value << endl;
+}
+
+bool Parameters::loadParams(int argc, char ** argv) {
+ // load params from commandline args
+ //if( argc < 3 ) {
+ // fprintf(stderr, "ERROR: No parameters. Use \"-config\" or \"-f\" to specify configuration file.\n");
+ // return false;
+ //}
+ bool load_from_file = false;
+ std::set<std::string> setParams;
+ int jumpBy = 0;
+ for( int i = 1; i < argc; i += jumpBy ) {
+ std::string param = argv[i];
+ if(param[0] != '-') {
+ std::cerr << "Unknown parameter: " << param << std::endl;
+ return false;
+ }
+ Utils::ltrim(param, "- ");
+ // normalise parameter to long name
+ param = normaliseParamName(param);
+ // check if valid param name
+ if(!isValidParamName(param)) {
+ std::cerr << "Unknown param option \"" << param << "\"\n";
+ exit(EXIT_FAILURE);
+ }
+ setParams.insert(param); // needed to not overwrite param value if file is specified
+ //if the parameter is of type booL no corresponding value
+ if( getValueType(param) == kBoolValue ) {
+ jumpBy = 1;
+ assert(setParamValue(param, kTrueValue));
+ } else { //not of type bool so must have corresponding value
+ assert(i+1 < argc);
+ jumpBy = 2;
+ std::string val = argv[i+1];
+ Utils::trim(val);
+ if( param == "config" )
+ load_from_file = true;
+ if(!setParamValue(param, val)) {
+ std::cerr << "Invalid Param name->value " << param << "->" << val << std::endl;
+ return false;
+ }
+ }
+ }
+ bool success = true;
+ // load from file if specified
+ if (load_from_file)
+ success = loadParams(getParamValue("config"), setParams);
+ return success;
+}
+
+std::string Parameters::normaliseParamName(const std::string & name) {
+ // Map valid abbreviations to long names. Retain other names.
+ if( params_.find(name) == params_.end() )
+ iterate(params_, i)
+ if( i->second.abbrev == name )
+ return i->first;
+ return name;
+}
+
+int Parameters::getValueType(const std::string& name) {
+ if(params_.find(name) != params_.end())
+ return params_[name].type;
+ return Parameters::kUndefinedValue;
+}
+
+bool Parameters::isValidParamName(const std::string & name) {
+ return params_.find(name) != params_.end();
+}
+
+bool Parameters::setParamValue(const std::string& name, const std::string& val) {
+ // TODO: Add basic type checking w verifyValueType()
+ bool set = isValidParamName(name);
+ if(set) {
+ params_[name].value = val;
+ std::cerr << "PARAM SET: "<< name << "=" << val << std::endl;
+ }
+ return( set );
+}
+std::string Parameters::getParamValue(const std::string& name) {
+ std::string value = Parameters::kNotSetValue;
+ if(isValidParamName(name))
+ if(params_.find(name) != params_.end())
+ value = params_[name].value;
+ else if(getValueType(name) == kBoolValue)
+ value = kFalseValue;
+ return value;
+}
+std::string Parameters::getParam(const std::string& name) {
+ return getParamValue(name);
+/*void* Parameters::getParam(const std::string& name) {
+ void* paramVal = 0;
+ int type = getValueType(name);
+ const char* sval = getParamValue(name).c_str();
+ switch(type) {
+ case kIntValue: {
+ int ival = atoi(sval);
+ paramVal = (void*)&ival;
+ break;
+ }
+ case kFloatValue: {
+ float fval = atof(sval);
+ paramVal = (void*)&fval;
+ break;
+ }
+ case kStringValue: {
+ paramVal = (void*)sval;
+ break;
+ }
+ case kBoolValue: {
+ bool bval = sval == Parameters::kTrueValue ? true : false;
+ paramVal = (void*)&bval;
+ break;
+ }
+ default: // --> Parameters::kUndefinedValue
+ paramVal = (void*)sval; // will set to Parameters::kNotSetValue
+ }
+ return paramVal;*/
+}
+bool Parameters::verifyValueType(const std::string& name, const std::string& val) {
+ // Implement basic type checking
+ return true;
+}
+
+int Parameters::getParamCount() const {
+ return params_.size();
+}
+
+/*
+ * HAVE TO CHANGE loadParams() from file to not overwrite command lines but
+ * override default if different*/
+bool Parameters::loadParams(const std::string & file_path,
+ std::set<std::string>& setParams) {
+ // parameters loaded from file don't override cmd line paramters
+ /*std::set<std::string>::iterator end = setParams.end();
+ FileHandler file(file_path.c_str(), std::ios::in);
+ std::string line, param;
+ while ( getline(file, line) ) {
+ Utils::trim(line);
+ //ignore comments (lines beginning with '#') and empty lines
+ if( line[0] == '#' || line.empty() ) continue;
+ if( line[0] == '[' ) {
+ Utils::trim(line, "-[]"); //remove brackets
+ // normalise parameter names
+ param = normaliseParamName(line);
+ //handle boolean type parameters
+ if(getValueType(param) == kBoolValue && setParams.find(param) == end)
+ setParamValue(param, kTrueValue);
+ } else {
+ // TODO: verify that this works as intended
+ if(setParams.find(param) == end) { // if param hasn't already been set in cmd line
+ if(!setParamValue(param, line)) {
+ std::cerr << "Invalid Param name->value " << param << "->" << line << std::endl;
+ return false;
+ }
+ }
+ }
+ }*/
+ return true;
+}
+/*
+int Parameters::getCSVParams(const std::string & name, std::vector<std::string> & values) {
+ // get param values(s) may be more than one separated by commas
+ values.clear();
+ if( isValidParamName(name) )
+ if( params_.find(name) != params_.end() )
+ return Utils::tokenizeToStr(params_.find(name)->second.c_str(), values, ",");
+ return 0;
+}
+
+bool Parameters::checkParamIsSet(const std::string & name) {
+ // Returns true for non-bool parameter that is set to anything.
+ // Returns true for bool parameter only if set to true.
+ if (getValueType(name) == kBoolValue) // boolean value so check whether true
+ return getParamValue(name) == kTrueValue;
+ return (getParamValue(name) != kNotSetValue);
+}
+
+bool Parameters::printHelp(const std::string & name) {
+ return true;
+}
+
+bool Parameters::printParams() {
+ // print out parameters and values
+ std::map<std::string, std::string>::iterator it;
+ std::cerr << "User defined parameter settings:\n";
+ for (it = params_.begin(); it != params_.end(); ++it)
+ std::cerr << "\t" << it->first << "\t" << it->second << "\n";
+ return true;
+}
+*/
+}
diff --git a/moses/src/DynSAInclude/params.h b/moses/src/DynSAInclude/params.h
new file mode 100755
index 000000000..33930e536
--- /dev/null
+++ b/moses/src/DynSAInclude/params.h
@@ -0,0 +1,62 @@
+#ifndef moses_DynSAInclude_params_h
+#define moses_DynSAInclude_params_h
+
+#include <iostream>
+#include <map>
+#include <set>
+#include <vector>
+#include <cassert>
+#include "file.h"
+#include "utils.h"
+#include "types.h"
+
+#define NumOfParams(paramArray) (sizeof(paramArray)/sizeof((paramArray)[0]))
+
+namespace Moses {
+typedef struct ParamDefs {
+ std::string name;
+ std::string value;
+ std::string abbrev;
+ int type;
+ std::string description;
+} ParamDefs;
+
+class Parameters {
+public:
+ static const std::string kNotSetValue;
+ static const int kBoolValue;
+ static const int kIntValue;
+ static const int kFloatValue;
+ static const int kStringValue;
+ static const int kUndefinedValue;
+ static const std::string kFalseValue;
+ static const std::string kTrueValue;
+
+ Parameters(const ParamDefs * paramdefs, const count_t paramNum);
+ Parameters(int argc, char** argv, const ParamDefs * paramdefs, const count_t paramNum);
+ ~Parameters() {}
+ bool loadParams(int argc, char ** argv);
+ bool loadParams(const std::string& param_file, std::set<std::string>&);
+ int getValueType(const std::string & name);
+ bool setParamValue(const std::string& name, const std::string& value);
+ bool verifyValueType(const std::string& name, const std::string& value);
+ bool isValidParamName(const std::string & name);
+ std::string getParamValue(const std::string& name);
+ //void* getParam(const std::string& name);
+ std::string getParam(const std::string& name);
+ int getParamCount() const;
+ /*
+ int getCSVParams(const std::string & name, std::vector<std::string> & values);
+ bool checkParamIsSet(const std::string& name);
+ bool printParams();
+ bool printHelp(const std::string & name);
+ */
+private:
+ std::string normaliseParamName(const std::string &name);
+ void initialize(const ParamDefs * paramdefs, const count_t paramNum);
+ std::map<std::string, ParamDefs > params_; // name->value,type,abbrev,desc
+};
+
+}
+#endif //INC_PARAMS.H
+
diff --git a/moses/src/DynSAInclude/perfectHash.h b/moses/src/DynSAInclude/perfectHash.h
new file mode 100755
index 000000000..2ee2ce156
--- /dev/null
+++ b/moses/src/DynSAInclude/perfectHash.h
@@ -0,0 +1,407 @@
+/* NO OVERLAY VALUES STORED IN SEPERATE FILTER */
+#ifndef INC_PERFECTHASH_H
+#define INC_PERFECTHASH_H
+
+#include <map>
+#include <stdint.h>
+#include "hash.h"
+#include "RandLMFilter.h"
+#include "quantizer.h"
+/*
+ * PerfectHash handles setting up hash functions and storage
+ * for LM data.
+ */
+using randlm::Filter;
+using randlm::BitFilter;
+typedef std::map<string, count_t> hpDict_t;
+typedef hpDict_t::iterator hpdEntry_t;
+static count_t collisions_ = 0;
+/* Based on Mortenson et. al. 2006 */
+template<typename T>
+class PerfectHash {
+public:
+ PerfectHash(uint16_t MBs, int width, int bucketRange, float qBase);
+ PerfectHash(FileHandler* fin) {
+ assert(fin != 0);
+ }
+ virtual ~PerfectHash();
+ void analyze();
+ count_t hpDictMemUse();
+ count_t bucketsMemUse();
+protected:
+ Filter<T>* filter_;
+ Filter<T>* values_;
+ hpDict_t dict_;
+ uint64_t cells_;
+ count_t hitMask_;
+ int totBuckets_;
+ uint8_t bucketRange_;
+ uint8_t* idxTracker_;
+ uint64_t insert(const wordID_t* IDs, const int len, const count_t value);
+ bool update(const wordID_t* IDs, const int len, const count_t value,
+ hpdEntry_t& hpdAddr, uint64_t& filterIdx);
+ bool update2(const wordID_t* IDs, const int len, const count_t value,
+ hpdEntry_t& hpdAddr, uint64_t& filterIdx);
+ int query(const wordID_t* IDs, const int len,
+ hpdEntry_t& hpdAddr, uint64_t& filterIdx);
+ virtual void remove(const wordID_t* IDs, const int len);
+ void remove(uint64_t index);
+ void save(FileHandler* fout);
+ void load(FileHandler* fin);
+ virtual void markQueried(const uint64_t&)=0;
+ //pointer to a specific entry in a hpDict_t
+ virtual void markQueried(hpdEntry_t&)=0;
+private:
+ T nonZeroSignature(const wordID_t* IDs, const int len, count_t bucket);
+ string hpDictKeyValue(const wordID_t* IDs, const int len);
+ uint64_t memBound_; // total memory bound in bytes
+ uint16_t cellWidth_; // in bits
+ UnivHash_linear<count_t>* bucketHash_;
+ UnivHash_linear<T>* fingerHash_;
+ LogQtizer* qtizer_;
+};
+template<typename T>
+PerfectHash<T>::PerfectHash(uint16_t MBs, int width, int bucketRange,
+ float qBase): hitMask_(1 << 31), memBound_(MBs * (1ULL << 20)),
+ cellWidth_(width) {
+ bucketRange_ = static_cast<uint8_t>(bucketRange);
+ if(bucketRange > 255) {
+ cerr << "ERROR: Max bucket range is > 2^8\n";
+ exit(1);
+ }
+ qtizer_ = new LogQtizer(qBase);
+ int valBits = (int)ceil(log2((float)qtizer_->maxcode()));
+ cerr << "BITS FOR VALUES ARRAY = " << valBits << endl;
+ uint64_t totalBits = memBound_ << 3;
+ cells_ = (uint64_t) ceil((float)totalBits / (float)(cellWidth_ + valBits)); // upper bound on cells
+ cells_ += (cells_ % bucketRange_); // make cells multiple of bucket range
+ totBuckets_ = (cells_ / bucketRange_) - 1; // minus 1 so totBuckets * bucksize + bucksize = cells
+ filter_ = new Filter<T>(cells_, cellWidth_);
+ values_ = new Filter<T>(cells_, valBits);
+ idxTracker_ = new uint8_t[totBuckets_];
+ for(int i=0; i < totBuckets_; ++i) idxTracker_[i] = 0;
+ // initialize ranges for each hash function
+ bucketHash_ = new UnivHash_linear<count_t>(totBuckets_, 1, PRIME);
+ fingerHash_ = new UnivHash_linear<T>(pow(2.0f, cellWidth_), MAX_HASH_FUNCS, PRIME);
+}
+template<typename T>
+PerfectHash<T>::~PerfectHash() {
+ delete[] idxTracker_;
+ delete filter_;
+ filter_ = NULL;
+ delete fingerHash_;
+ delete bucketHash_;
+ delete qtizer_;
+ delete values_;
+}
+template<typename T>
+uint64_t PerfectHash<T>::insert(const wordID_t* IDs, const int len,
+ const count_t value) {
+ count_t bucket = (bucketHash_->size() > 1 ? bucketHash_->hash(IDs, len, len) : bucketHash_->hash(IDs, len));
+ if(idxTracker_[bucket] < (int)bucketRange_) { // if empty rows
+ // restriction on fprint value is non-zero
+ T fp = nonZeroSignature(IDs, len, (bucket % MAX_HASH_FUNCS));
+ uint64_t emptyidx = cells_ + 1;
+ uint64_t index = bucket * bucketRange_, // starting bucket row
+ lastrow = index + bucketRange_; // ending row
+ while(index < lastrow) { // unique so check each row for "matching" signature
+ T filterVal = filter_->read(index);
+ if((filterVal == 0) && (emptyidx == cells_ + 1)) { // record first empty row
+ emptyidx = index;
+ }
+ else if(filterVal == fp) {
+ ++collisions_;
+ dict_[hpDictKeyValue(IDs, len)] = value; // store exact in hpd
+ return cells_ + 1; // finished
+ }
+ ++index;
+ }
+ assert((emptyidx < index) && (filter_->read(emptyidx) == 0)); // should have found empty index if it gets here
+ T code = (T)qtizer_->code(value);
+ filter_->write(emptyidx, fp); // insert the fprint
+ values_->write(emptyidx, code);
+ ++idxTracker_[bucket]; // keep track of bucket size
+ return emptyidx;
+ }
+ else { // bucket is full
+ dict_[hpDictKeyValue(IDs, len)] = value; // add to hpd
+ return cells_ + 1;
+ }
+}
+template<typename T>
+bool PerfectHash<T>::update(const wordID_t* IDs, const int len,
+ const count_t value, hpdEntry_t& hpdAddr, uint64_t& filterIdx) {
+ // check if key is in high perf. dictionary
+ filterIdx = cells_ + 1;
+ string skey = hpDictKeyValue(IDs, len);
+ if((hpdAddr = dict_.find(skey)) != dict_.end()) {
+ hpdAddr->second = value;
+ return true;
+ }
+ // else hash ngram
+ //count_t bucket = bucketHash_->hash(IDs, len);
+ count_t bucket = (bucketHash_->size() > 1 ? bucketHash_->hash(IDs, len, len) : bucketHash_->hash(IDs, len));
+ // restriction on fprint value is non-zero
+ T fp = nonZeroSignature(IDs, len, (bucket % MAX_HASH_FUNCS));
+ uint64_t index = bucket * bucketRange_, // starting bucket row
+ lastrow = index + bucketRange_;
+ while(index < lastrow) { // must check each row for matching fp event
+ T filterVal = filter_->read(index);
+ if(filterVal == fp) { // found event w.h.p.
+ values_->write(index, (T)qtizer_->code(value));
+ filterIdx = index;
+ return true;
+ }
+ ++index;
+ }
+ // could add if it gets here.
+ return false;
+}
+template<typename T>
+int PerfectHash<T>::query(const wordID_t* IDs, const int len,
+ hpdEntry_t& hpdAddr, uint64_t& filterIdx) {
+ // check if key is in high perf. dictionary
+ string skey = hpDictKeyValue(IDs, len);
+ if((hpdAddr = dict_.find(skey)) != dict_.end()) {
+ filterIdx = cells_ + 1;
+ return(hpdAddr->second); // returns copy of value
+ }
+ else { // check if key is in filter
+ // get bucket
+ //count_t bucket = bucketHash_->hash(IDs, len);
+ count_t bucket = (bucketHash_->size() > 1 ? bucketHash_->hash(IDs, len, len) : bucketHash_->hash(IDs, len));
+ // restriction on fprint value is non-zero
+ T fp = nonZeroSignature(IDs, len, (bucket % MAX_HASH_FUNCS));
+ // return value if ngram is in filter
+ uint64_t index = bucket * bucketRange_,
+ lastrow = index + bucketRange_;
+ for(; index < lastrow; ++index) {
+ if(filter_->read(index) == fp) {
+ //cout << "fp = " << fp << "\tbucket = " << bucket << "\tfilter =" <<
+ //filter_->read(index) << "\tcode = " << code << endl;
+ filterIdx = index;
+ hpdAddr = dict_.end();
+ return (int)qtizer_->value(values_->read(index));
+ }
+ }
+ }
+ return -1;
+}
+template<typename T>
+void PerfectHash<T>::remove(const wordID_t* IDs, const int len) {
+ // delete key if in high perf. dictionary
+ string skey = hpDictKeyValue(IDs, len);
+ if(dict_.find(skey) != dict_.end())
+ dict_.erase(skey);
+ else { // check if key is in filter
+ // get small representation for ngrams
+ //count_t bucket = bucketHash_->hash(IDs, len);
+ count_t bucket = (bucketHash_->size() > 1? bucketHash_->hash(IDs, len, len) : bucketHash_->hash(IDs, len));
+ // retrieve non zero fingerprint for ngram
+ T fp = nonZeroSignature(IDs, len, (bucket % MAX_HASH_FUNCS));
+ // return value if ngram is in filter
+ uint64_t index = bucket * bucketRange_,
+ lastrow = index + bucketRange_;
+ for(; index < lastrow; ++index) {
+ if(filter_->read(index) == fp) {
+ filter_->write(index, 0);
+ values_->write(index, 0);
+ --idxTracker_[bucket]; // track bucket size reduction
+ break;
+ }
+ }
+ }
+}
+template<typename T> // clear filter index
+void PerfectHash<T>::remove(uint64_t index) {
+ assert(index < cells_);
+ assert(filter_->read(index) != 0); // slow
+ filter_->write(index, 0);
+ values_->write(index, 0);
+ //reduce bucket size
+ count_t bucket = index / bucketRange_;
+ --idxTracker_[bucket];
+}
+template<typename T>
+T PerfectHash<T>::nonZeroSignature(const wordID_t* IDs, const int len,
+ count_t bucket) {
+ count_t h = bucket;
+ T fingerprint(0);
+ do {
+ fingerprint = fingerHash_->hash(IDs, len, h);
+ h += (h < fingerHash_->size() - 1 ? 1 : -h); // wrap around
+ } while((fingerprint == 0) && (h != bucket));
+ if(fingerprint == 0)
+ cerr << "WARNING: Unable to find non-zero signature for ngram\n" << endl;
+ return fingerprint;
+}
+template<typename T>
+string PerfectHash<T>::hpDictKeyValue(const wordID_t* IDs, const int len) {
+ string skey(" ");
+ for(int i = 0; i < len; ++i)
+ skey += Utils::IntToStr(IDs[i]) + "¬";
+ Utils::trim(skey);
+ return skey;
+}
+template<typename T>
+count_t PerfectHash<T>::hpDictMemUse() {
+ // return hpDict memory usage in MBs
+ return (count_t) sizeof(hpDict_t::value_type)* dict_.size() >> 20;
+}
+template<typename T>
+count_t PerfectHash<T>::bucketsMemUse() {
+ // return bucket memory usage in MBs
+ return (count_t) (filter_->size() + values_->size());
+}
+template<typename T>
+void PerfectHash<T>::save(FileHandler* fout) {
+ assert(fout != 0);
+ cerr << "\tSaving perfect hash parameters...\n";
+ fout->write((char*)&hitMask_, sizeof(hitMask_));
+ fout->write((char*)&memBound_, sizeof(memBound_));
+ fout->write((char*)&cellWidth_, sizeof(cellWidth_));
+ fout->write((char*)&cells_, sizeof(cells_));
+ fout->write((char*)&totBuckets_, sizeof(totBuckets_));
+ fout->write((char*)&bucketRange_, sizeof(bucketRange_));
+ fout->write((char*)idxTracker_, totBuckets_ * sizeof(idxTracker_[0]));
+ qtizer_->save(fout);
+ cerr << "\tSaving hash functions...\n";
+ fingerHash_->save(fout);
+ bucketHash_->save(fout);
+ cerr << "\tSaving bit filter...\n";
+ filter_->save(fout);
+ values_->save(fout);
+ cerr << "\tSaving high performance dictionary...\n";
+ count_t size = dict_.size();
+ fout->write((char*)&size, sizeof(count_t));
+ *fout << endl;
+ iterate(dict_, t)
+ *fout << t->first << "\t" << t->second << "\n";
+}
+template<typename T>
+void PerfectHash<T>::load(FileHandler* fin) {
+ assert(fin != 0);
+ cerr << "\tLoading perfect hash parameters...\n";
+ fin->read((char*)&hitMask_, sizeof(hitMask_));
+ fin->read((char*)&memBound_, sizeof(memBound_));
+ fin->read((char*)&cellWidth_, sizeof(cellWidth_));
+ fin->read((char*)&cells_, sizeof(cells_));
+ fin->read((char*)&totBuckets_, sizeof(totBuckets_));
+ fin->read((char*)&bucketRange_, sizeof(bucketRange_));
+ idxTracker_ = new uint8_t[totBuckets_];
+ fin->read((char*)idxTracker_, totBuckets_ * sizeof(idxTracker_[0]));
+ qtizer_ = new LogQtizer(fin);
+ cerr << "\tLoading hash functions...\n";
+ fingerHash_ = new UnivHash_linear<T>(fin);
+ bucketHash_ = new UnivHash_linear<count_t>(fin);
+ cerr << "\tLoading bit filter...\n";
+ filter_ = new Filter<T>(fin);
+ values_ = new Filter<T>(fin);
+ cerr << "\tLoading HPD...\n";
+ count_t size = 0;
+ fin->read((char*)&size, sizeof(count_t));
+ fin->ignore(256, '\n');
+ string line;
+ hpDict_t::key_type key;
+ hpDict_t::mapped_type val;
+ for(count_t i=0; i < size; ++i) {
+ getline(*fin, line);
+ Utils::trim(line);
+ std::istringstream ss(line.c_str());
+ ss >> key, ss >> val;
+ dict_[key] = val;
+ }
+ cerr << "\tHPD size=" << dict_.size() << endl;
+ cerr << "Finished loading ORLM." << endl;
+}
+template<typename T>
+void PerfectHash<T>::analyze() {
+ cerr << "Analyzing Dynamic Bloomier Filter...\n";
+ // see how many items in each bucket
+ uint8_t* bucketCnt = new uint8_t[totBuckets_];
+ unsigned largestBucket = 0, totalCellsSet = 0,
+ smallestBucket = bucketRange_, totalZeroes = 0;
+ int curBucket = -1, fullBuckets(0);
+ for(int i = 0; i < totBuckets_; ++i) bucketCnt[i] = 0;
+ for(uint64_t i =0; i < cells_; ++i) {
+ if(i % bucketRange_ == 0) ++curBucket;
+ if(filter_->read(i) != 0) {
+ ++bucketCnt[curBucket];
+ ++totalCellsSet;
+ }
+ else ++totalZeroes;
+ }
+ count_t bi = 0, si = 0;
+ for(int i = 0; i < totBuckets_; ++i) {
+ if(bucketCnt[i] > largestBucket) {
+ largestBucket = bucketCnt[i];
+ bi = i;
+ }
+ else if(bucketCnt[i] < smallestBucket) {
+ smallestBucket = bucketCnt[i];
+ si = i;
+ }
+ }
+ count_t trackerCells(0);
+ for(int i = 0; i < totBuckets_; i++) {
+ trackerCells += idxTracker_[i];
+ if(idxTracker_[i] == bucketRange_)
+ ++fullBuckets;
+ }
+ for(int i = 0; i < totBuckets_; ++i) {
+ if(bucketCnt[i] != idxTracker_[i])
+ cerr << "bucketCnt[" << i << "] = " << (int)bucketCnt[i] <<
+ "\tidxTracker_[" << i << "] = " << (int)idxTracker_[i] << endl;
+ }
+ cerr << "total cells= " << cells_ << endl;
+ cerr << "total buckets= " << totBuckets_ << endl;
+ cerr << "bucket range= " << (int)bucketRange_ << endl;
+ cerr << "fingerprint bits= " << cellWidth_ << endl;
+ cerr << "total cells set= " << totalCellsSet;
+ cerr << " (idxTracker set = " << trackerCells << ")" << endl;
+ cerr << "total zeroes=" << totalZeroes;
+ cerr << " (idxTracker zeros = " << cells_ - trackerCells << ")" << endl;
+ cerr << "largest bucket (" << bi << ") size= " << largestBucket << endl;
+ cerr << "smallest bucket (" << si << ") size= " << smallestBucket << endl;
+ cerr << "last bucket size= " << (int)bucketCnt[totBuckets_ - 1] <<
+ " (idxTracker last bucket size = " << (int)idxTracker_[totBuckets_ - 1] << ")" << endl;
+ cerr << "total buckets full = " << fullBuckets << endl;
+ cerr << "total collision errors= " << collisions_ << endl;
+ cerr << "high performance dictionary size= " << dict_.size() << endl;
+ cerr << "high performance dictionary MBs= " << hpDictMemUse() << endl;
+ cerr << "filter MBs= " << filter_->size() << endl;
+ cerr << "values MBs= " << values_->size() << endl;
+ delete[] bucketCnt;
+}
+template<typename T>
+bool PerfectHash<T>::update2(const wordID_t* IDs, const int len,
+ const count_t value, hpdEntry_t& hpdAddr, uint64_t& filterIdx) {
+ // check if key is in high perf. dictionary
+ filterIdx = cells_ + 1;
+ string skey = hpDictKeyValue(IDs, len);
+ if((hpdAddr = dict_.find(skey)) != dict_.end()) {
+ hpdAddr->second += value;
+ return true;
+ }
+ // else hash ngram
+ //count_t bucket = bucketHash_->hash(IDs, len);
+ count_t bucket = (bucketHash_->size() > 1 ? bucketHash_->hash(IDs, len, len) : bucketHash_->hash(IDs, len));
+ // restriction on fprint value is non-zero
+ T fp = nonZeroSignature(IDs, len, (bucket % MAX_HASH_FUNCS));
+ uint64_t index = bucket * bucketRange_, // starting bucket row
+ lastrow = index + bucketRange_;
+ while(index < lastrow) { // must check each row for matching fp event
+ T filterVal = filter_->read(index);
+ if(filterVal == fp) { // found event w.h.p.
+ int oldval = (int)qtizer_->value(values_->read(index));
+ values_->write(index, (T)qtizer_->code(oldval + value));
+ filterIdx = index;
+ return true;
+ }
+ ++index;
+ }
+ // add if it gets here.
+ insert(IDs, len, value);
+ return false;
+}
+#endif
diff --git a/moses/src/DynSAInclude/quantizer.h b/moses/src/DynSAInclude/quantizer.h
new file mode 100755
index 000000000..e452716e4
--- /dev/null
+++ b/moses/src/DynSAInclude/quantizer.h
@@ -0,0 +1,98 @@
+#ifndef ORLM_QUANTIZER_H
+#define ORLM_QUANTIZER_H
+
+#include <vector>
+#include <cmath>
+#include <cassert>
+#include <algorithm>
+#include "types.h"
+
+static const float kFloatErr = 0.00001f;
+class LogQtizer {
+public:
+ LogQtizer(float i): base_(pow(2, 1 / i)) {
+ assert(base_ > 1);
+ max_code_ = 0;
+ float value = 1; // code = 1 -> value = 1 for any base
+ std::vector<float> code_to_value_vec;
+ while (log2(value) < 30) { // assume 2^30 is largest count
+ code_to_value_vec.push_back(value);
+ value = pow(base_, ++max_code_);
+ }
+ code_to_value_vec.push_back(value); // store max_code_ so in total [0, max_code_]
+ // get valid range
+ max_value_ = code_to_value_vec[max_code_];
+ min_value_ = 1;
+ // store codes in array for lookup
+ code_to_value_ = new float[max_code_ + 1];
+ code_to_log_value_ = new float[max_code_ + 1];
+ for (int j = 0; j <= max_code_; ++j) {
+ // map to integers
+ code_to_value_[j] = floor(kFloatErr + code_to_value_vec[j]); //
+ code_to_log_value_[j] = log10(code_to_value_[j]); // log_base 10 to match srilm
+ }
+ std::cerr << "Initialized quantization (size = " << max_code_ + 1 << ")" << std::endl;
+ }
+ LogQtizer(FileHandler* fin) {
+ assert(fin != NULL);
+ load(fin);
+ }
+ int code(float value) {
+ // should just be: return log_b(value)
+ assert(!(value < min_value_ || value > max_value_));
+ // but binary search removes errors due to floor operator above
+ int code = static_cast<int>(std::lower_bound(code_to_value_, code_to_value_+ max_code_,
+ value) - code_to_value_);
+ // make sure not overestimating
+ code = code_to_value_[code] > value ? code - 1 : code;
+ return code;
+ }
+ inline float value(int code) {
+ // table look up for values
+ return code_to_value_[code];
+ }
+ inline int maxcode() {
+ return max_code_;
+ }
+ inline float logValue(int code) {
+ // table look up for log of values
+ return code_to_log_value_[code];
+ }
+ ~LogQtizer() {
+ delete[] code_to_value_;
+ delete[] code_to_log_value_;
+ }
+ void save(FileHandler* fout) {
+ fout->write((char*)&base_, sizeof(base_));
+ fout->write((char*)&max_code_, sizeof(max_code_));
+ fout->write((char*)&max_value_, sizeof(max_value_));
+ fout->write((char*)&min_value_, sizeof(min_value_));
+ for (int j = 0; j <= max_code_; ++j)
+ fout->write((char*)&code_to_value_[j], sizeof(code_to_value_[j]));
+ for (int j = 0; j <= max_code_; ++j)
+ fout->write((char*)&code_to_log_value_[j], sizeof(code_to_log_value_[j]));
+ std::cerr << "Saved log codebook with " << max_code_ + 1 << " codes." <<std::endl;
+ }
+private:
+ float base_;
+ float* code_to_value_;
+ float* code_to_log_value_;
+ int max_code_;
+ float max_value_;
+ float min_value_;
+ void load(FileHandler* fin) {
+ fin->read((char*)&base_, sizeof(base_));
+ fin->read((char*)&max_code_, sizeof(max_code_));
+ fin->read((char*)&max_value_, sizeof(max_value_));
+ fin->read((char*)&min_value_, sizeof(min_value_));
+ code_to_value_ = new float[max_code_ + 1];
+ for(int j = 0; j <= max_code_; ++j)
+ fin->read((char*)&code_to_value_[j], sizeof(code_to_value_[j]));
+ code_to_log_value_ = new float[max_code_ + 1];
+ for(int j = 0; j <= max_code_; ++j)
+ fin->read((char*)&code_to_log_value_[j], sizeof(code_to_log_value_[j]));
+ std::cerr << "Loaded log codebook with " << max_code_ + 1 << " codes." << std::endl;
+ }
+};
+
+#endif
diff --git a/moses/src/DynSAInclude/types.h b/moses/src/DynSAInclude/types.h
index 8f85d784c..444010889 100644
--- a/moses/src/DynSAInclude/types.h
+++ b/moses/src/DynSAInclude/types.h
@@ -7,6 +7,10 @@
#include <vector>
#include <typeinfo>
#include <stdint.h>
+#define iterate(c, i) for(typeof(c.begin()) i = c.begin(); i != c.end(); ++i)
+#define piterate(c, i) for(typeof(c->begin()) i = c->begin(); i != c->end(); ++i)
+#define riterate(c, i) for(typeof(c.rbegin()) i = c.rbegin(); i != c.rend(); ++i)
+
#define THREADED false
#define THREAD_MAX 2
diff --git a/moses/src/DynSAInclude/vocab.cpp b/moses/src/DynSAInclude/vocab.cpp
index 6aed35bd8..f0825f5a4 100644
--- a/moses/src/DynSAInclude/vocab.cpp
+++ b/moses/src/DynSAInclude/vocab.cpp
@@ -103,7 +103,11 @@ bool Vocab::Load(const std::string & vocab_path, const FactorDirection& directio
std::cerr << "Loading vocab from " << vocab_path << std::endl;
return Load(&vcbin, direction, factors, closed);
}
-
+bool Vocab::Load(FileHandler* vcbin) {
+ FactorList factors;
+ factors.push_back(0);
+ return Load(vcbin, Input, factors);
+}
bool Vocab::Load(FileHandler* vcbin, const FactorDirection& direction,
const FactorList& factors, bool closed)
{
diff --git a/moses/src/DynSAInclude/vocab.h b/moses/src/DynSAInclude/vocab.h
index 16a4f7e93..cb2d3dac1 100644
--- a/moses/src/DynSAInclude/vocab.h
+++ b/moses/src/DynSAInclude/vocab.h
@@ -49,6 +49,11 @@ public:
bool ret = Load(fin, direction, factors, closed);
assert(ret);
}
+ Vocab(FileHandler *fin):
+ m_kOOVWordID(0),
+ m_kBOSWordID(1) {
+ Load(fin);
+ }
~Vocab() {}
// parse 'word' into factored Word and get id
wordID_t GetWordID(const std::string& word, const FactorDirection& direction,
@@ -56,10 +61,10 @@ public:
wordID_t GetWordID(const Word& word);
wordID_t GetWordID(const string& word);
Word& GetWord(wordID_t id);
- inline const wordID_t GetkOOVWordID() {
+ inline wordID_t GetkOOVWordID() {
return m_kOOVWordID;
}
- inline const wordID_t GetBOSWordID() {
+ inline wordID_t GetBOSWordID() {
return m_kBOSWordID;
}
inline const Word& GetkOOVWord() {
@@ -92,7 +97,15 @@ public:
const FactorList& factors, bool closed = true);
bool Load(FileHandler* fin, const FactorDirection& direction,
const FactorList& factors, bool closed = true);
+ bool Load(FileHandler* fin);
void PrintVocab();
+ Word2Id::const_iterator VocabStart() {
+ return m_words2ids.begin();
+ }
+ Word2Id::const_iterator VocabEnd() {
+ return m_words2ids.end();
+ }
+
protected:
bool m_closed; // can more words be added
diff --git a/moses/src/DynSuffixArray.cpp b/moses/src/DynSuffixArray.cpp
index 821e4f053..5e70b7fdd 100644
--- a/moses/src/DynSuffixArray.cpp
+++ b/moses/src/DynSuffixArray.cpp
@@ -72,6 +72,14 @@ int DynSuffixArray::Rank(unsigned word, unsigned idx)
int DynSuffixArray::F_firstIdx(unsigned word)
{
// return index of first row where word is found in m_F
+ /*for(int i=0; i < m_F->size(); ++i) {
+ if(m_F->at(i) == word) {
+ return i;
+ }
+ }
+ return -1;*/
+ //NOTE: lower_bound is faster than linear search above but may cause issues
+ // if ordering of vocab is not consecutive (ie..after deletions)
int low = std::lower_bound(m_F->begin(), m_F->end(), word) - m_F->begin();
//cerr << "in F_firstIdx with word = " << word << " and low = " << low << " and F->size() =" << m_F->size() << endl;
if(low >= m_F->size())
@@ -132,6 +140,7 @@ void DynSuffixArray::Insert(vuint_t* newSent, unsigned newIndex)
}
// Begin stage 4
Reorder(true_pos, LastFirstFunc(kprime)); // actual position vs computed position of cycle (newIndex-1)
+ cerr << "GETS HERE 13\n";
}
void DynSuffixArray::Reorder(unsigned j, unsigned jprime)
@@ -141,6 +150,7 @@ void DynSuffixArray::Reorder(unsigned j, unsigned jprime)
//cerr << "j=" << j << "\tj'=" << jprime << endl;
int tmp, isaIdx(-1);
int new_j = LastFirstFunc(j);
+ cerr << "new_j = " << new_j << endl;
// for SA, L, and F, the element at pos j is moved to j'
tmp = m_L->at(j); // L
m_L->at(j) = m_L->at(jprime);
@@ -161,6 +171,7 @@ void DynSuffixArray::Reorder(unsigned j, unsigned jprime)
j = new_j;
jprime = LastFirstFunc(jprime);
}
+ //cerr << "j=" << j << "\tj'=" << jprime << endl;
}
void DynSuffixArray::Delete(unsigned index, unsigned num2del)
@@ -190,7 +201,7 @@ void DynSuffixArray::Delete(unsigned index, unsigned num2del)
PrintAuxArrays();
}
-void DynSuffixArray::Substitute(vuint_t* newSents, unsigned newIndex)
+void DynSuffixArray::Substitute(vuint_t* /* newSents */, unsigned /* newIndex */)
{
std::cerr << "NEEDS TO IMPLEMENT SUBSITITUTE FACTOR\n";
return;
@@ -206,6 +217,8 @@ bool DynSuffixArray::GetCorpusIndex(const vuint_t* phrase, vuint_t* indices)
// bounds holds first and (last + 1) index of phrase[0] in m_SA
size_t lwrBnd = size_t(bounds.first - m_F->begin());
size_t uprBnd = size_t(bounds.second - m_F->begin());
+ //cerr << "phrasesize = " << phrasesize << "\tuprBnd = " << uprBnd << "\tlwrBnd = " << lwrBnd;
+ //cerr << "\tcorpus size = " << m_corpus->size() << endl;
if(uprBnd - lwrBnd == 0) return false; // not found
if(phrasesize == 1) {
for(size_t i=lwrBnd; i < uprBnd; ++i) {
@@ -216,7 +229,7 @@ bool DynSuffixArray::GetCorpusIndex(const vuint_t* phrase, vuint_t* indices)
//find longer phrases if they exist
for(size_t i = lwrBnd; i < uprBnd; ++i) {
size_t crpIdx = m_SA->at(i);
- if((crpIdx + phrasesize) >= m_corpus->size()) continue; // past end of corpus
+ if((crpIdx + phrasesize) > m_corpus->size()) continue; // past end of corpus
for(size_t pos = 1; pos < phrasesize; ++pos) { // for all following words
if(m_corpus->at(crpIdx + pos) != phrase->at(pos)) { // if word doesn't match
if(indices->size() > 0) i = uprBnd; // past the phrases since SA is ordered
diff --git a/moses/src/Factor.cpp b/moses/src/Factor.cpp
index 5d21e8f31..ace8631a4 100644
--- a/moses/src/Factor.cpp
+++ b/moses/src/Factor.cpp
@@ -29,14 +29,14 @@ using namespace std;
namespace Moses
{
-Factor::Factor(FactorDirection direction, FactorType factorType, const std::string *factorString, size_t id)
+Factor::Factor(FactorDirection /* direction */, FactorType /* factorType */, const std::string *factorString, size_t id)
://m_direction(direction)
//,m_factorType(factorType)
m_ptrString(factorString)
,m_id(id)
{}
-Factor::Factor(FactorDirection direction, FactorType factorType, const std::string *factorString)
+Factor::Factor(FactorDirection /* direction */, FactorType /* factorType */, const std::string *factorString)
//:m_direction(direction)
//,m_factorType(factorType)
:m_ptrString(factorString)
diff --git a/moses/src/FeatureFunction.cpp b/moses/src/FeatureFunction.cpp
index 023756595..322d8de6e 100644
--- a/moses/src/FeatureFunction.cpp
+++ b/moses/src/FeatureFunction.cpp
@@ -16,8 +16,8 @@ bool StatelessFeatureFunction::ComputeValueInTranslationOption() const
return false;
}
void StatelessFeatureFunction::Evaluate(
- const TargetPhrase& cur_hypo,
- ScoreComponentCollection* accumulator) const
+ const TargetPhrase& /* cur_hypo */,
+ ScoreComponentCollection* /* accumulator */) const
{
assert(!"Please implement Evaluate or set ComputeValueInTranslationOption to true");
}
diff --git a/moses/src/FeatureFunction.h b/moses/src/FeatureFunction.h
index 0d02aa695..283e8d3bb 100644
--- a/moses/src/FeatureFunction.h
+++ b/moses/src/FeatureFunction.h
@@ -10,6 +10,7 @@ namespace Moses
class TargetPhrase;
class Hypothesis;
+class ChartHypothesis;
class FFState;
class InputType;
class ScoreComponentCollection;
@@ -64,6 +65,11 @@ public:
const FFState* prev_state,
ScoreComponentCollection* accumulator) const = 0;
+ virtual FFState* EvaluateChart(
+ const ChartHypothesis& /* cur_hypo */,
+ int /* featureID */,
+ ScoreComponentCollection* accumulator) const = 0;
+
//! return the state associated with the empty hypothesis for a given sentence
virtual const FFState* EmptyHypothesisState(const InputType &input) const = 0;
diff --git a/moses/src/File.h b/moses/src/File.h
index c4af22e16..47d25abd4 100644
--- a/moses/src/File.h
+++ b/moses/src/File.h
@@ -117,6 +117,7 @@ inline void fReadString(FILE* f,std::string& e)
}
a[s]='\0';
e.assign(a);
+ delete[](a);
}
inline size_t fWriteStringVector(FILE* f,const std::vector<std::string>& v)
diff --git a/moses/src/FloydWarshall.cpp b/moses/src/FloydWarshall.cpp
index b1b8c0bce..9e495053b 100644
--- a/moses/src/FloydWarshall.cpp
+++ b/moses/src/FloydWarshall.cpp
@@ -6,6 +6,8 @@
//#include "FloydWarshall.h"
+using namespace std;
+
// All-pairs shortest path algorithm
void floyd_warshall(const std::vector<std::vector<bool> >& edges, std::vector<std::vector<int> >& dist)
{
diff --git a/moses/src/Hypothesis.cpp b/moses/src/Hypothesis.cpp
index a5d09a686..cf89a565a 100644
--- a/moses/src/Hypothesis.cpp
+++ b/moses/src/Hypothesis.cpp
@@ -276,13 +276,17 @@ void Hypothesis::CalcScore(const SquareMatrix &futureScore)
// cached in the translation option-- there is no principled distinction
const vector<const StatelessFeatureFunction*>& sfs =
m_manager.GetTranslationSystem()->GetStatelessFeatureFunctions();
+ VERBOSE(3,"There are " << sfs.size() << " stateless feature functions" << endl);
for (unsigned i = 0; i < sfs.size(); ++i) {
+ VERBOSE(3,"\tStateless score producer:\t" << sfs[i]->GetScoreProducerDescription() << endl);
sfs[i]->Evaluate(m_targetPhrase, &m_scoreBreakdown);
}
const vector<const StatefulFeatureFunction*>& ffs =
m_manager.GetTranslationSystem()->GetStatefulFeatureFunctions();
+ VERBOSE(3,"There are " << ffs.size() << " stateful feature functions" << endl);
for (unsigned i = 0; i < ffs.size(); ++i) {
+ VERBOSE(3,"\tStateful score producer:\t" << ffs[i]->GetScoreProducerDescription() << endl);
m_ffStates[i] = ffs[i]->Evaluate(
*this,
m_prevHypo ? m_prevHypo->m_ffStates[i] : NULL,
diff --git a/moses/src/LMList.cpp b/moses/src/LMList.cpp
index f183ed197..46f5599a8 100644
--- a/moses/src/LMList.cpp
+++ b/moses/src/LMList.cpp
@@ -60,35 +60,6 @@ void LMList::CalcScore(const Phrase &phrase, float &retFullScore, float &retNGra
}
}
-void LMList::CalcAllLMScores(const Phrase &phrase
- , ScoreComponentCollection &nGramOnly
- , ScoreComponentCollection *beginningBitsOnly) const
-{
- assert(phrase.GetNumTerminals() == phrase.GetSize());
-
- const_iterator lmIter;
- for (lmIter = begin(); lmIter != end(); ++lmIter) {
- const LanguageModel &lm = **lmIter;
-
- // do not process, if factors not defined yet (happens in partial translation options)
- if (!lm.Useable(phrase))
- continue;
-
- float beginningScore, nGramScore;
- lm.CalcScoreChart(phrase, beginningScore, nGramScore);
- beginningScore = UntransformLMScore(beginningScore);
- nGramScore = UntransformLMScore(nGramScore);
-
- nGramOnly.PlusEquals(&lm, nGramScore);
-
- if (beginningBitsOnly)
- beginningBitsOnly->PlusEquals(&lm, beginningScore);
-
- }
-
-}
-
-
void LMList::Add(LanguageModel *lm)
{
m_coll.push_back(lm);
diff --git a/moses/src/LMList.h b/moses/src/LMList.h
index d6e528051..4fbb894a6 100644
--- a/moses/src/LMList.h
+++ b/moses/src/LMList.h
@@ -45,6 +45,7 @@ public:
size_t GetMaxNGramOrder() const
{ return m_maxNGramOrder; }
+
};
}
diff --git a/moses/src/LanguageModel.cpp b/moses/src/LanguageModel.cpp
index 1a8e35fc5..629d566e5 100644
--- a/moses/src/LanguageModel.cpp
+++ b/moses/src/LanguageModel.cpp
@@ -1,8 +1,8 @@
// $Id$
/***********************************************************************
-Moses - factored phrase-based language decoder
-Copyright (C) 2006 University of Edinburgh
+Moses - statistical machine translation system
+Copyright (C) 2006-2011 University of Edinburgh
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -28,9 +28,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#include "FFState.h"
#include "LanguageModel.h"
#include "LanguageModelImplementation.h"
+#include "LanguageModelChartState.h"
#include "TypeDef.h"
#include "Util.h"
#include "Manager.h"
+#include "ChartManager.h"
#include "FactorCollection.h"
#include "Phrase.h"
#include "StaticData.h"
@@ -108,7 +110,7 @@ void LanguageModel::CalcScore(const Phrase &phrase
// do nothing, don't include prob for <s> unigram
assert(currPos == 0);
} else {
- float partScore = m_implementation->GetValueGivenState(contextFactor, *state);
+ float partScore = m_implementation->GetValueGivenState(contextFactor, *state).score;
fullScore += partScore;
if (contextFactor.size() == GetNGramOrder())
ngramScore += partScore;
@@ -119,46 +121,6 @@ void LanguageModel::CalcScore(const Phrase &phrase
}
}
-void LanguageModel::CalcScoreChart(const Phrase &phrase
- , float &beginningBitsOnly
- , float &ngramScore) const
-{
- // TODO - get rid of this function
-
- beginningBitsOnly = 0;
- ngramScore = 0;
-
- size_t phraseSize = phrase.GetSize();
- if (!phraseSize) return;
-
- vector<const Word*> contextFactor;
- contextFactor.reserve(GetNGramOrder());
- std::auto_ptr<FFState> state(m_implementation->NewState((phrase.GetWord(0) == m_implementation->GetSentenceStartArray()) ?
- m_implementation->GetBeginSentenceState() : m_implementation->GetNullContextState()));
- size_t currPos = 0;
- while (currPos < phraseSize) {
- const Word &word = phrase.GetWord(currPos);
- assert(!word.IsNonTerminal());
-
- ShiftOrPush(contextFactor, word);
- assert(contextFactor.size() <= GetNGramOrder());
-
- if (word == m_implementation->GetSentenceStartArray()) {
- // do nothing, don't include prob for <s> unigram
- assert(currPos == 0);
- } else {
- float partScore = m_implementation->GetValueGivenState(contextFactor, *state);
-
- if (contextFactor.size() == GetNGramOrder())
- ngramScore += partScore;
- else
- beginningBitsOnly += partScore;
- }
-
- currPos++;
- }
-}
-
void LanguageModel::ShiftOrPush(vector<const Word*> &contextFactor, const Word &word) const
{
if (contextFactor.size() < GetNGramOrder()) {
@@ -185,7 +147,9 @@ FFState* LanguageModel::Evaluate(
{
// In this function, we only compute the LM scores of n-grams that overlap a
// phrase boundary. Phrase-internal scores are taken directly from the
- // translation option. In the unigram case, there is no overlap, so we don't
+ // translation option.
+
+ // In the case of unigram language models, there is no overlap, so we don't
// need to do anything.
if(GetNGramOrder() <= 1)
return NULL;
@@ -194,8 +158,11 @@ FFState* LanguageModel::Evaluate(
IFVERBOSE(2) {
t = clock(); // track time
}
+
+ // Empty phrase added? nothing to be done
if (hypo.GetCurrTargetLength() == 0)
return ps ? m_implementation->NewState(ps) : NULL;
+
const size_t currEndPos = hypo.GetCurrTargetWordsRange().GetEndPos();
const size_t startPos = hypo.GetCurrTargetWordsRange().GetStartPos();
@@ -210,7 +177,7 @@ FFState* LanguageModel::Evaluate(
}
}
FFState *res = m_implementation->NewState(ps);
- float lmScore = ps ? m_implementation->GetValueGivenState(contextFactor, *res) : m_implementation->GetValueForgotState(contextFactor, *res);
+ float lmScore = ps ? m_implementation->GetValueGivenState(contextFactor, *res).score : m_implementation->GetValueForgotState(contextFactor, *res).score;
// main loop
size_t endPos = std::min(startPos + GetNGramOrder() - 2
@@ -223,7 +190,7 @@ FFState* LanguageModel::Evaluate(
// add last factor
contextFactor.back() = &hypo.GetWord(currPos);
- lmScore += m_implementation->GetValueGivenState(contextFactor, *res);
+ lmScore += m_implementation->GetValueGivenState(contextFactor, *res).score;
}
// end of sentence
@@ -238,9 +205,10 @@ FFState* LanguageModel::Evaluate(
else
contextFactor[i] = &hypo.GetWord((size_t)currPos);
}
- lmScore += m_implementation->GetValueForgotState(contextFactor, *res);
- } else {
-
+ lmScore += m_implementation->GetValueForgotState(contextFactor, *res).score;
+ }
+ else
+ {
if (endPos < currEndPos) {
//need to get the LM state (otherwise the last LM state is fine)
for (size_t currPos = endPos+1; currPos <= currEndPos; currPos++) {
@@ -262,4 +230,146 @@ float LanguageModel::GetWeight() const {
return StaticData::Instance().GetAllWeights().GetScoreForProducer(this);
}
+FFState* LanguageModel::EvaluateChart(
+ const ChartHypothesis& hypo,
+ int featureID,
+ ScoreComponentCollection* out) const
+{
+ // data structure for factored context phrase (history and predicted word)
+ vector<const Word*> contextFactor;
+ contextFactor.reserve(GetNGramOrder());
+
+ // initialize language model context state
+ FFState *lmState = m_implementation->NewState( m_implementation->GetNullContextState() );
+
+ // initial language model scores
+ float prefixScore = 0.0; // not yet final for initial words (lack context)
+ float finalizedScore = 0.0; // finalized, has sufficient context
+
+ // get index map for underlying hypotheses
+ const AlignmentInfo::NonTermIndexMap &nonTermIndexMap =
+ hypo.GetCurrTargetPhrase().GetAlignmentInfo().GetNonTermIndexMap();
+
+ // loop over rule
+ for (size_t phrasePos = 0, wordPos = 0;
+ phrasePos < hypo.GetCurrTargetPhrase().GetSize();
+ phrasePos++)
+ {
+ // consult rule for either word or non-terminal
+ const Word &word = hypo.GetCurrTargetPhrase().GetWord(phrasePos);
+
+ // regular word
+ if (!word.IsNonTerminal())
+ {
+ ShiftOrPush(contextFactor, word);
+
+ // beginning of sentence symbol <s>? -> just update state
+ if (word == m_implementation->GetSentenceStartArray())
+ {
+ assert(phrasePos == 0);
+ delete lmState;
+ lmState = m_implementation->NewState( m_implementation->GetBeginSentenceState() );
+ }
+ // score a regular word added by the rule
+ else
+ {
+ updateChartScore( &prefixScore, &finalizedScore, UntransformLMScore(m_implementation->GetValueGivenState(contextFactor, *lmState).score), ++wordPos );
+ }
+ }
+
+ // non-terminal, add phrase from underlying hypothesis
+ else
+ {
+ // look up underlying hypothesis
+ size_t nonTermIndex = nonTermIndexMap[phrasePos];
+ const ChartHypothesis *prevHypo = hypo.GetPrevHypo(nonTermIndex);
+ size_t subPhraseLength = prevHypo->GetNumTargetTerminals();
+
+ // special case: rule starts with non-terminal -> copy everything
+ if (phrasePos == 0) {
+
+ // get prefixScore and finalizedScore
+ const LanguageModelChartState* prevState =
+ dynamic_cast<const LanguageModelChartState*>(prevHypo->GetFFState( featureID ));
+ prefixScore = prevState->GetPrefixScore();
+ finalizedScore = prevHypo->GetScoreBreakdown().GetScoresForProducer(this)[0] - prefixScore;
+
+ // get language model state
+ delete lmState;
+ lmState = m_implementation->NewState( prevState->GetRightContext() );
+
+ // push suffix
+ int suffixPos = prevHypo->GetSuffix().GetSize() - (GetNGramOrder()-1);
+ if (suffixPos < 0) suffixPos = 0; // push all words if less than order
+ for(;(size_t)suffixPos < prevHypo->GetSuffix().GetSize(); suffixPos++)
+ {
+ const Word &word = prevHypo->GetSuffix().GetWord(suffixPos);
+ ShiftOrPush(contextFactor, word);
+ wordPos++;
+ }
+ }
+
+ // internal non-terminal
+ else
+ {
+ // score its prefix
+ for(size_t prefixPos = 0;
+ prefixPos < GetNGramOrder()-1 // up to LM order window
+ && prefixPos < subPhraseLength; // up to length
+ prefixPos++)
+ {
+ const Word &word = prevHypo->GetPrefix().GetWord(prefixPos);
+ ShiftOrPush(contextFactor, word);
+ updateChartScore( &prefixScore, &finalizedScore, UntransformLMScore(m_implementation->GetValueGivenState(contextFactor, *lmState).score), ++wordPos );
+ }
+
+ // check if we are dealing with a large sub-phrase
+ if (subPhraseLength > GetNGramOrder() - 1)
+ {
+ // add its finalized language model score
+ const LanguageModelChartState* prevState =
+ dynamic_cast<const LanguageModelChartState*>(prevHypo->GetFFState( featureID ));
+ finalizedScore +=
+ prevHypo->GetScoreBreakdown().GetScoresForProducer(this)[0] // full score
+ - prevState->GetPrefixScore(); // - prefix score
+
+ // copy language model state
+ delete lmState;
+ lmState = m_implementation->NewState( prevState->GetRightContext() );
+
+ // push its suffix
+ size_t remainingWords = subPhraseLength - (GetNGramOrder()-1);
+ if (remainingWords > GetNGramOrder()-1) {
+ // only what is needed for the history window
+ remainingWords = GetNGramOrder()-1;
+ }
+ for(size_t suffixPos = prevHypo->GetSuffix().GetSize() - remainingWords;
+ suffixPos < prevHypo->GetSuffix().GetSize();
+ suffixPos++) {
+ const Word &word = prevHypo->GetSuffix().GetWord(suffixPos);
+ ShiftOrPush(contextFactor, word);
+ }
+ wordPos += subPhraseLength;
+ }
+ }
+ }
+ }
+
+ // assign combined score to score breakdown
+ out->Assign(this, prefixScore + finalizedScore);
+
+ // create and return feature function state
+ LanguageModelChartState *res = new LanguageModelChartState( prefixScore, lmState, hypo );
+ return res;
+}
+
+void LanguageModel::updateChartScore( float *prefixScore, float *finalizedScore, float score, size_t wordPos ) const {
+ if (wordPos < GetNGramOrder()) {
+ *prefixScore += score;
+ }
+ else {
+ *finalizedScore += score;
+ }
+}
+
}
diff --git a/moses/src/LanguageModel.h b/moses/src/LanguageModel.h
index 2302f3296..d140cb745 100644
--- a/moses/src/LanguageModel.h
+++ b/moses/src/LanguageModel.h
@@ -127,6 +127,22 @@ public:
const FFState* prev_state,
ScoreComponentCollection* accumulator) const;
+ virtual FFState* EvaluateChart(
+ const ChartHypothesis& cur_hypo,
+ int featureID,
+ ScoreComponentCollection* accumulator) const;
+
+ void updateChartScore( float *prefixScore, float *finalScore, float score, size_t wordPos ) const;
+
+#ifdef WITH_THREADS
+ // if multi-threaded return boost ptr
+ boost::shared_ptr<LanguageModelImplementation>
+#else // return normal LM ptr
+ LanguageModelImplementation*
+#endif
+ GetLMImplementation() const {
+ return m_implementation;
+ }
};
}
diff --git a/moses/src/LanguageModelChartState.h b/moses/src/LanguageModelChartState.h
new file mode 100644
index 000000000..c21a17e9c
--- /dev/null
+++ b/moses/src/LanguageModelChartState.h
@@ -0,0 +1,89 @@
+// $Id$
+
+/***********************************************************************
+Moses - statistical machine translation system
+Copyright (C) 2006-2011 University of Edinburgh
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+***********************************************************************/
+
+#pragma once
+
+#include "FFState.h"
+#include "ChartManager.h"
+#include "ChartHypothesis.h"
+
+namespace Moses
+{
+
+//! Abstract class for lexical reordering model states
+class LanguageModelChartState : public FFState
+{
+private:
+ float m_prefixScore;
+ FFState* m_lmRightContext;
+ const ChartHypothesis *m_hypo;
+
+public:
+ LanguageModelChartState(float prefixScore,
+ FFState *lmRightContext,
+ const ChartHypothesis &hypo)
+ :m_prefixScore(prefixScore)
+ ,m_lmRightContext(lmRightContext)
+ ,m_hypo(&hypo)
+ {}
+ ~LanguageModelChartState() {
+ delete m_lmRightContext;
+ }
+
+ float GetPrefixScore() const { return m_prefixScore; }
+ FFState* GetRightContext() const { return m_lmRightContext; }
+ const ChartHypothesis* GetHypothesis() const { return m_hypo; }
+
+ int Compare(const FFState& o) const
+ {
+ const LanguageModelChartState &other =
+ dynamic_cast<const LanguageModelChartState &>( o );
+
+ // prefix
+ if (m_hypo->GetCurrSourceRange().GetStartPos() > 0) // not for "<s> ..."
+ {
+ int ret = m_hypo->GetPrefix().Compare(other.GetHypothesis()->GetPrefix());
+ if (ret != 0)
+ return ret;
+ }
+
+ // suffix
+ size_t inputSize = m_hypo->GetManager().GetSource().GetSize();
+ if (m_hypo->GetCurrSourceRange().GetEndPos() < inputSize - 1)// not for "... </s>"
+ {
+ int ret = other.GetRightContext()->Compare( *m_lmRightContext );
+ if (ret != 0)
+ return ret;
+ }
+
+// size_t inputSize = m_hypo->GetManager().GetSource().GetSize();
+// if (m_hypo->GetCurrSourceRange().GetEndPos() < inputSize - 1)
+// {
+// int ret2 = m_hypo->GetSuffix().Compare(other.GetHypothesis()->GetSuffix());
+// if (ret != 0)
+// return ret;
+// }
+
+ return 0;
+ }
+};
+
+}
diff --git a/moses/src/LanguageModelDMapLM.cpp b/moses/src/LanguageModelDMapLM.cpp
new file mode 100644
index 000000000..40546f40e
--- /dev/null
+++ b/moses/src/LanguageModelDMapLM.cpp
@@ -0,0 +1,135 @@
+//
+// Oliver Wilson <oliver.wilson@ed.ac.uk>
+//
+
+#include <Config.h>
+
+#include "FactorCollection.h"
+#include "LanguageModelDMapLM.h"
+
+namespace Moses
+{
+
+LanguageModelDMapLM::LanguageModelDMapLM() : m_lm(0) {
+}
+
+LanguageModelDMapLM::~LanguageModelDMapLM() {
+ delete m_lm;
+}
+
+bool LanguageModelDMapLM::Load(const std::string& filePath,
+ FactorType factorType,
+ size_t nGramOrder)
+{
+ //std::cerr << "LanguageModelDMapLM: loading..." << std::endl;
+ m_filePath = filePath;
+ m_factorType = factorType;
+ m_nGramOrder = nGramOrder;
+ m_sentenceStart = FactorCollection::Instance().AddFactor(Output, factorType, "<s>");
+ m_sentenceStartArray[m_factorType] = m_sentenceStart;
+ m_sentenceEnd = FactorCollection::Instance().AddFactor(Output, factorType, "</s>");
+ m_sentenceEndArray[m_factorType] = m_sentenceEnd;
+ std::ifstream configFile(filePath.c_str());
+ char struct_name_buffer[1024];
+ char run_local_buffer[1024];
+ configFile.getline(struct_name_buffer, 1024);
+ configFile.getline(run_local_buffer, 1024);
+ bool run_local;
+ //std::cerr << "table name: " << struct_name_buffer << std::endl;
+ //std::cerr << "run local: " << run_local_buffer << std::endl;
+ if (strncmp(run_local_buffer, "true", 1024) == 0)
+ run_local = true;
+ else
+ run_local = false;
+ m_lm = new StructLanguageModelBackoff(Config::getConfig(), struct_name_buffer);
+ return m_lm->init(run_local);
+}
+
+void LanguageModelDMapLM::CreateFactor(FactorCollection& factorCollection)
+{
+ // Don't know what this is for.
+}
+
+LMResult LanguageModelDMapLM::GetValueGivenState(
+ const std::vector<const Word*>& contextFactor,
+ FFState& state) const
+{
+ DMapLMState& cast_state = static_cast<DMapLMState&>(state);
+ LMResult result;
+ size_t succeeding_order;
+ size_t target_order = std::min((size_t)cast_state.m_last_succeeding_order + 1,
+ GetNGramOrder());
+ result.score = GetValue(contextFactor, target_order, &succeeding_order);
+ cast_state.m_last_succeeding_order = succeeding_order;
+ return result;
+}
+
+LMResult LanguageModelDMapLM::GetValueForgotState(
+ const std::vector<const Word*>& contextFactor,
+ FFState& outState) const
+{
+ DMapLMState& cast_state = static_cast<DMapLMState&>(outState);
+ LMResult result;
+ size_t succeeding_order;
+ size_t target_order = GetNGramOrder();
+ result.score = GetValue(contextFactor, target_order, &succeeding_order);
+ cast_state.m_last_succeeding_order = succeeding_order;
+ return result;
+}
+
+float LanguageModelDMapLM::GetValue(
+ const std::vector<const Word*>& contextFactor,
+ size_t target_order,
+ size_t* succeeding_order) const
+{
+ FactorType factorType = GetFactorType();
+ float score;
+
+ std::string ngram_string("");
+ ngram_string.append(((*contextFactor[0])[factorType])->GetString());
+ for (size_t i = 1; i < contextFactor.size(); ++i) {
+ ngram_string.append(" ");
+ ngram_string.append(((*contextFactor[i])[factorType])->GetString());
+ }
+ //std::cout << "ngram: X" << ngram_string << "X" << std::endl;
+ score = m_lm->calcScore(ngram_string.c_str(), target_order, succeeding_order);
+ score = FloorScore(TransformLMScore(score));
+ return score;
+}
+
+FFState* LanguageModelDMapLM::GetNullContextState() const {
+ DMapLMState* state = new DMapLMState();
+ state->m_last_succeeding_order = GetNGramOrder();
+ return state;
+}
+
+FFState* LanguageModelDMapLM::GetNewSentenceState() const {
+ DMapLMState* state = new DMapLMState();
+ state->m_last_succeeding_order = GetNGramOrder();
+ return state;
+}
+
+FFState* LanguageModelDMapLM::GetBeginSentenceState() const {
+ DMapLMState* state = new DMapLMState();
+ state->m_last_succeeding_order = GetNGramOrder();
+ return state;
+}
+
+FFState* LanguageModelDMapLM::NewState(const FFState* state) const {
+ DMapLMState* new_state = new DMapLMState();
+ const DMapLMState* cast_state = static_cast<const DMapLMState*>(state);
+ new_state->m_last_succeeding_order = cast_state->m_last_succeeding_order;
+ return new_state;
+}
+
+void LanguageModelDMapLM::CleanUpAfterSentenceProcessing() {
+ m_lm->printStats();
+ m_lm->resetStats();
+ m_lm->clearCaches();
+}
+
+void LanguageModelDMapLM::InitializeBeforeSentenceProcessing() {
+}
+
+} // namespace Moses
+
diff --git a/moses/src/LanguageModelDMapLM.h b/moses/src/LanguageModelDMapLM.h
new file mode 100644
index 000000000..13b8a0d7a
--- /dev/null
+++ b/moses/src/LanguageModelDMapLM.h
@@ -0,0 +1,57 @@
+//
+// Oliver Wilson <oliver.wilson@ed.ac.uk>
+//
+
+#ifndef moses_LanguageModelDMapLM_h
+#define moses_LanguageModelDMapLM_h
+
+#include <StructLanguageModelBackoff.h>
+
+#include "Factor.h"
+#include "FFState.h"
+#include "LanguageModelSingleFactor.h"
+#include "Util.h"
+
+namespace Moses {
+
+class DMapLMState : public FFState {
+public:
+ int Compare(const FFState &o) const {
+ const DMapLMState& cast_other = static_cast<const DMapLMState&>(o);
+ if (cast_other.m_last_succeeding_order < m_last_succeeding_order)
+ return -1;
+ else if (cast_other.m_last_succeeding_order > m_last_succeeding_order)
+ return 1;
+ else
+ return 0;
+ }
+ uint8_t m_last_succeeding_order;
+};
+
+class LanguageModelDMapLM : public LanguageModelSingleFactor
+{
+public:
+ LanguageModelDMapLM();
+ ~LanguageModelDMapLM();
+ bool Load(const std::string&, FactorType, size_t);
+ LMResult GetValueGivenState(const std::vector<const Word*>&, FFState&) const;
+ LMResult GetValueForgotState(const std::vector<const Word*>&, FFState&) const;
+ float GetValue(const std::vector<const Word*>&, size_t, size_t*) const;
+ FFState* GetNullContextState() const;
+ FFState* GetNewSentenceState() const;
+ FFState* GetBeginSentenceState() const;
+ FFState* NewState(const FFState*) const;
+ void CleanUpAfterSentenceProcessing();
+ void InitializeBeforeSentenceProcessing();
+
+protected:
+ StructLanguageModelBackoff* m_lm;
+
+ void CreateFactor(FactorCollection&);
+
+};
+
+} // namespace Moses
+
+#endif // moses_LanguageModelDMapLM_h
+
diff --git a/moses/src/LanguageModelFactory.cpp b/moses/src/LanguageModelFactory.cpp
index f7440ad5f..37fcba54e 100644
--- a/moses/src/LanguageModelFactory.cpp
+++ b/moses/src/LanguageModelFactory.cpp
@@ -37,12 +37,18 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#ifdef LM_RAND
# include "LanguageModelRandLM.h"
#endif
+#ifdef LM_ORLM
+# include "LanguageModelORLM.h"
+#endif
#ifdef LM_REMOTE
# include "LanguageModelRemote.h"
#endif
#ifdef LM_KEN
# include "LanguageModelKen.h"
#endif
+#ifdef LM_DMAP
+# include "LanguageModelDMapLM.h"
+#endif
#include "LanguageModel.h"
#include "LanguageModelInternal.h"
@@ -70,6 +76,11 @@ LanguageModel* CreateLanguageModel(LMImplementation lmImplementation
lm = new LanguageModelRandLM();
#endif
break;
+ case ORLM:
+#ifdef LM_ORLM
+ lm = new LanguageModelORLM();
+#endif
+ break;
case Remote:
#ifdef LM_REMOTE
lm = new LanguageModelRemote();
@@ -120,6 +131,11 @@ LanguageModel* CreateLanguageModel(LMImplementation lmImplementation
lm = new LanguageModelInternal();
#endif
break;
+ case DMapLM:
+#ifdef LM_DMAP
+ lm = new LanguageModelDMapLM();
+#endif
+ break;
}
if (lm == NULL) {
diff --git a/moses/src/LanguageModelIRST.cpp b/moses/src/LanguageModelIRST.cpp
index 6eb9a04ed..407a3b834 100644
--- a/moses/src/LanguageModelIRST.cpp
+++ b/moses/src/LanguageModelIRST.cpp
@@ -218,7 +218,7 @@ int LanguageModelIRST::GetLmID( const Factor *factor ) const
}
}
-float LanguageModelIRST::GetValue(const vector<const Word*> &contextFactor, State* finalState) const
+LMResult LanguageModelIRST::GetValue(const vector<const Word*> &contextFactor, State* finalState) const
{
FactorType factorType = GetFactorType();
@@ -241,14 +241,17 @@ float LanguageModelIRST::GetValue(const vector<const Word*> &contextFactor, Stat
for (size_t i = 0 ; i < count ; i++) {
codes[idx++] = GetLmID((*contextFactor[i])[factorType]);
}
- float prob;
+ LMResult result;
+ result.unknown = (codes[idx - 1] == m_unknownId);
+
char* msp = NULL;
unsigned int ilen;
- prob = m_lmtb->clprob(codes,idx,NULL,NULL,&msp,&ilen);
+ result.score = m_lmtb->clprob(codes,idx,NULL,NULL,&msp,&ilen);
if (finalState) *finalState=(State *) msp;
- return TransformLMScore(prob);
+ result.score = TransformLMScore(result.score);
+ return result;
}
diff --git a/moses/src/LanguageModelIRST.h b/moses/src/LanguageModelIRST.h
index 8105d7189..a8f9b9b31 100644
--- a/moses/src/LanguageModelIRST.h
+++ b/moses/src/LanguageModelIRST.h
@@ -68,7 +68,7 @@ public:
, FactorType factorType
, size_t nGramOrder);
- virtual float GetValue(const std::vector<const Word*> &contextFactor, State* finalState = NULL) const;
+ virtual LMResult GetValue(const std::vector<const Word*> &contextFactor, State* finalState = NULL) const;
void CleanUpAfterSentenceProcessing();
void InitializeBeforeSentenceProcessing();
diff --git a/moses/src/LanguageModelImplementation.cpp b/moses/src/LanguageModelImplementation.cpp
index 729195c32..c9e28c502 100644
--- a/moses/src/LanguageModelImplementation.cpp
+++ b/moses/src/LanguageModelImplementation.cpp
@@ -38,7 +38,7 @@ using namespace std;
namespace Moses
{
-float LanguageModelImplementation::GetValueGivenState(
+LMResult LanguageModelImplementation::GetValueGivenState(
const std::vector<const Word*> &contextFactor,
FFState &state) const
{
diff --git a/moses/src/LanguageModelImplementation.h b/moses/src/LanguageModelImplementation.h
index d1ab14323..0886e7283 100644
--- a/moses/src/LanguageModelImplementation.h
+++ b/moses/src/LanguageModelImplementation.h
@@ -37,6 +37,13 @@ class FactorCollection;
class Factor;
class Phrase;
+struct LMResult {
+ // log probability
+ float score;
+ // Is the word unknown?
+ bool unknown;
+};
+
//! Abstract base class which represent a language model on a contiguous phrase
class LanguageModelImplementation
{
@@ -75,11 +82,11 @@ public:
* \param contextFactor n-gram to be scored
* \param state LM state. Input and output. state must be initialized. If state isn't initialized, you want GetValueWithoutState.
*/
- virtual float GetValueGivenState(const std::vector<const Word*> &contextFactor, FFState &state) const;
+ virtual LMResult GetValueGivenState(const std::vector<const Word*> &contextFactor, FFState &state) const;
// Like GetValueGivenState but state may not be initialized (however it is non-NULL).
// For example, state just came from NewState(NULL).
- virtual float GetValueForgotState(const std::vector<const Word*> &contextFactor, FFState &outState) const = 0;
+ virtual LMResult GetValueForgotState(const std::vector<const Word*> &contextFactor, FFState &outState) const = 0;
//! get State for a particular n-gram. We don't care what the score is.
// This is here so models can implement a shortcut to GetValueAndState.
diff --git a/moses/src/LanguageModelInternal.cpp b/moses/src/LanguageModelInternal.cpp
index 906d5af47..7e388b70d 100644
--- a/moses/src/LanguageModelInternal.cpp
+++ b/moses/src/LanguageModelInternal.cpp
@@ -101,7 +101,7 @@ bool LanguageModelInternal::Load(const std::string &filePath
return true;
}
-float LanguageModelInternal::GetValue(const std::vector<const Word*> &contextFactor
+LMResult LanguageModelInternal::GetValue(const std::vector<const Word*> &contextFactor
, State* finalState) const
{
const size_t ngram = contextFactor.size();
@@ -120,36 +120,41 @@ float LanguageModelInternal::GetValue(const std::vector<const Word*> &contextFac
break;
}
- assert (false);
- return 0;
+ assert(false);
+ return LMResult();
}
-float LanguageModelInternal::GetValue(const Factor *factor0, State* finalState) const
+LMResult LanguageModelInternal::GetValue(const Factor *factor0, State* finalState) const
{
- float prob;
+ LMResult result;
const NGramNode *nGram = GetLmID(factor0);
if (nGram == NULL) {
if (finalState != NULL)
*finalState = NULL;
- prob = -numeric_limits<float>::infinity();
+ result.score = -numeric_limits<float>::infinity();
+ result.unknown = true;
} else {
if (finalState != NULL)
*finalState = static_cast<const void*>(nGram);
- prob = nGram->GetScore();
+ result.score = nGram->GetScore();
+ result.unknown = false;
}
- return FloorScore(prob);
+ result.score = FloorScore(result.score);
+ return result;
}
-float LanguageModelInternal::GetValue(const Factor *factor0, const Factor *factor1, State* finalState) const
+LMResult LanguageModelInternal::GetValue(const Factor *factor0, const Factor *factor1, State* finalState) const
{
- float score;
+ LMResult result;
const NGramNode *nGram[2];
nGram[1] = GetLmID(factor1);
if (nGram[1] == NULL) {
if (finalState != NULL)
*finalState = NULL;
- score = -numeric_limits<float>::infinity();
+ result.unknown = true;
+ result.score = -numeric_limits<float>::infinity();
} else {
+ result.unknown = false;
nGram[0] = nGram[1]->GetNGram(factor0);
if (nGram[0] == NULL) {
// something unigram
@@ -159,34 +164,36 @@ float LanguageModelInternal::GetValue(const Factor *factor0, const Factor *facto
nGram[0] = GetLmID(factor0);
if (nGram[0] == NULL) {
// stops at unigram
- score = nGram[1]->GetScore();
+ result.score = nGram[1]->GetScore();
} else {
// unigram unigram
- score = nGram[1]->GetScore() + nGram[0]->GetLogBackOff();
+ result.score = nGram[1]->GetScore() + nGram[0]->GetLogBackOff();
}
} else {
// bigram
if (finalState != NULL)
*finalState = static_cast<const void*>(nGram[0]);
- score = nGram[0]->GetScore();
+ result.score = nGram[0]->GetScore();
}
}
- return FloorScore(score);
-
+ result.score = FloorScore(result.score);
+ return result;
}
-float LanguageModelInternal::GetValue(const Factor *factor0, const Factor *factor1, const Factor *factor2, State* finalState) const
+LMResult LanguageModelInternal::GetValue(const Factor *factor0, const Factor *factor1, const Factor *factor2, State* finalState) const
{
- float score;
+ LMResult result;
const NGramNode *nGram[3];
nGram[2] = GetLmID(factor2);
if (nGram[2] == NULL) {
if (finalState != NULL)
*finalState = NULL;
- score = -numeric_limits<float>::infinity();
+ result.unknown = true;
+ result.score = -numeric_limits<float>::infinity();
} else {
+ result.unknown = false;
nGram[1] = nGram[2]->GetNGram(factor1);
if (nGram[1] == NULL) {
// something unigram
@@ -196,15 +203,15 @@ float LanguageModelInternal::GetValue(const Factor *factor0, const Factor *facto
nGram[1] = GetLmID(factor1);
if (nGram[1] == NULL) {
// stops at unigram
- score = nGram[2]->GetScore();
+ result.score = nGram[2]->GetScore();
} else {
nGram[0] = nGram[1]->GetNGram(factor0);
if (nGram[0] == NULL) {
// unigram unigram
- score = nGram[2]->GetScore() + nGram[1]->GetLogBackOff();
+ result.score = nGram[2]->GetScore() + nGram[1]->GetLogBackOff();
} else {
// unigram bigram
- score = nGram[2]->GetScore() + nGram[1]->GetLogBackOff() + nGram[0]->GetLogBackOff();
+ result.score = nGram[2]->GetScore() + nGram[1]->GetLogBackOff() + nGram[0]->GetLogBackOff();
}
}
} else {
@@ -214,19 +221,19 @@ float LanguageModelInternal::GetValue(const Factor *factor0, const Factor *facto
// trigram
if (finalState != NULL)
*finalState = static_cast<const void*>(nGram[0]);
- score = nGram[0]->GetScore();
+ result.score = nGram[0]->GetScore();
} else {
if (finalState != NULL)
*finalState = static_cast<const void*>(nGram[1]);
- score = nGram[1]->GetScore();
+ result.score = nGram[1]->GetScore();
nGram[1] = nGram[1]->GetRootNGram();
nGram[0] = nGram[1]->GetNGram(factor0);
if (nGram[0] == NULL) {
// just bigram
// do nothing
} else {
- score += nGram[0]->GetLogBackOff();
+ result.score += nGram[0]->GetLogBackOff();
}
}
@@ -234,7 +241,8 @@ float LanguageModelInternal::GetValue(const Factor *factor0, const Factor *facto
}
}
- return FloorScore(score);
+ result.score = FloorScore(result.score);
+ return result;
}
diff --git a/moses/src/LanguageModelInternal.h b/moses/src/LanguageModelInternal.h
index 849bd6305..4cee6ca76 100644
--- a/moses/src/LanguageModelInternal.h
+++ b/moses/src/LanguageModelInternal.h
@@ -20,15 +20,15 @@ protected:
return ( factorId >= m_lmIdLookup.size()) ? NULL : m_lmIdLookup[factorId];
};
- float GetValue(const Factor *factor0, State* finalState) const;
- float GetValue(const Factor *factor0, const Factor *factor1, State* finalState) const;
- float GetValue(const Factor *factor0, const Factor *factor1, const Factor *factor2, State* finalState) const;
+ LMResult GetValue(const Factor *factor0, State* finalState) const;
+ LMResult GetValue(const Factor *factor0, const Factor *factor1, State* finalState) const;
+ LMResult GetValue(const Factor *factor0, const Factor *factor1, const Factor *factor2, State* finalState) const;
public:
bool Load(const std::string &filePath
, FactorType factorType
, size_t nGramOrder);
- float GetValue(const std::vector<const Word*> &contextFactor
+ LMResult GetValue(const std::vector<const Word*> &contextFactor
, State* finalState = 0) const;
};
diff --git a/moses/src/LanguageModelJoint.h b/moses/src/LanguageModelJoint.h
index 58d987b72..7ceca7172 100644
--- a/moses/src/LanguageModelJoint.h
+++ b/moses/src/LanguageModelJoint.h
@@ -78,9 +78,12 @@ public:
return m_lmImpl->Load(filePath, m_implFactor, nGramOrder);
}
- float GetValueForgotState(const std::vector<const Word*> &contextFactor, FFState &outState) const {
+ LMResult GetValueForgotState(const std::vector<const Word*> &contextFactor, FFState &outState) const {
if (contextFactor.size() == 0) {
- return 0;
+ LMResult ret;
+ ret.score = 0.0;
+ ret.unknown = false;
+ return ret;
}
// joint context for internal LM
@@ -109,7 +112,7 @@ public:
}
// calc score on chunked phrase
- float ret = m_lmImpl->GetValueForgotState(jointContext, outState);
+ LMResult ret = m_lmImpl->GetValueForgotState(jointContext, outState);
RemoveAllInColl(jointContext);
diff --git a/moses/src/LanguageModelKen.cpp b/moses/src/LanguageModelKen.cpp
index ac618a6a4..02f875b8d 100644
--- a/moses/src/LanguageModelKen.cpp
+++ b/moses/src/LanguageModelKen.cpp
@@ -97,8 +97,8 @@ public:
, FactorType factorType
, size_t nGramOrder);
- float GetValueGivenState(const std::vector<const Word*> &contextFactor, FFState &state) const;
- float GetValueForgotState(const std::vector<const Word*> &contextFactor, FFState &outState) const;
+ LMResult GetValueGivenState(const std::vector<const Word*> &contextFactor, FFState &state) const;
+ LMResult GetValueForgotState(const std::vector<const Word*> &contextFactor, FFState &outState) const;
void GetState(const std::vector<const Word*> &contextFactor, FFState &outState) const;
FFState *GetNullContextState() const;
@@ -171,10 +171,13 @@ template <class Model> bool LanguageModelKen<Model>::Load(const std::string &fil
return true;
}
-template <class Model> float LanguageModelKen<Model>::GetValueGivenState(const std::vector<const Word*> &contextFactor, FFState &state) const
+template <class Model> LMResult LanguageModelKen<Model>::GetValueGivenState(const std::vector<const Word*> &contextFactor, FFState &state) const
{
+ LMResult result;
if (contextFactor.empty()) {
- return 0;
+ result.score = 0.0;
+ result.unknown = false;
+ return result;
}
lm::ngram::State &realState = static_cast<KenLMState&>(state).state;
std::size_t factor = contextFactor.back()->GetFactor(GetFactorType())->GetId();
@@ -182,21 +185,29 @@ template <class Model> float LanguageModelKen<Model>::GetValueGivenState(const s
lm::ngram::State copied(realState);
lm::FullScoreReturn ret(m_ngram->FullScore(copied, new_word, realState));
- return TransformLMScore(ret.prob);
+ result.score = TransformLMScore(ret.prob);
+ result.unknown = (new_word == 0);
+ return result;
}
-template <class Model> float LanguageModelKen<Model>::GetValueForgotState(const vector<const Word*> &contextFactor, FFState &outState) const
+template <class Model> LMResult LanguageModelKen<Model>::GetValueForgotState(const vector<const Word*> &contextFactor, FFState &outState) const
{
+ LMResult result;
if (contextFactor.empty()) {
static_cast<KenLMState&>(outState).state = m_ngram->NullContextState();
- return 0;
+ result.score = 0.0;
+ result.unknown = false;
+ return result;
}
lm::WordIndex indices[contextFactor.size()];
TranslateIDs(contextFactor, indices);
lm::FullScoreReturn ret(m_ngram->FullScoreForgotState(indices + 1, indices + contextFactor.size(), indices[0], static_cast<KenLMState&>(outState).state));
- return TransformLMScore(ret.prob);
+
+ result.score = TransformLMScore(ret.prob);
+ result.unknown = (indices[0] == 0);
+ return result;
}
template <class Model> void LanguageModelKen<Model>::GetState(const std::vector<const Word*> &contextFactor, FFState &outState) const
@@ -243,10 +254,14 @@ LanguageModelSingleFactor *ConstructKenLM(const std::string &file, bool lazy)
switch(model_type) {
case lm::ngram::HASH_PROBING:
return new LanguageModelKen<lm::ngram::ProbingModel>(lazy);
- case lm::ngram::HASH_SORTED:
- return new LanguageModelKen<lm::ngram::SortedModel>(lazy);
case lm::ngram::TRIE_SORTED:
return new LanguageModelKen<lm::ngram::TrieModel>(lazy);
+ case lm::ngram::QUANT_TRIE_SORTED:
+ return new LanguageModelKen<lm::ngram::QuantTrieModel>(lazy);
+ case lm::ngram::ARRAY_TRIE_SORTED:
+ return new LanguageModelKen<lm::ngram::ArrayTrieModel>(lazy);
+ case lm::ngram::QUANT_ARRAY_TRIE_SORTED:
+ return new LanguageModelKen<lm::ngram::QuantArrayTrieModel>(lazy);
default:
std::cerr << "Unrecognized kenlm model type " << model_type << std::endl;
abort();
diff --git a/moses/src/LanguageModelORLM.cpp b/moses/src/LanguageModelORLM.cpp
new file mode 100755
index 000000000..80c16770b
--- /dev/null
+++ b/moses/src/LanguageModelORLM.cpp
@@ -0,0 +1,103 @@
+#include <cassert>
+#include <limits>
+#include <iostream>
+#include <fstream>
+
+#include "FactorCollection.h"
+#include "Phrase.h"
+#include "InputFileStream.h"
+#include "StaticData.h"
+#include "LanguageModelORLM.h"
+
+using std::map;
+namespace Moses
+{
+bool LanguageModelORLM::Load(const std::string &filePath, FactorType factorType,
+ size_t nGramOrder) {
+ cerr << "Loading LanguageModelORLM..." << endl;
+ m_filePath = filePath;
+ m_factorType = factorType;
+ m_nGramOrder = nGramOrder;
+ FileHandler fLmIn(m_filePath, std::ios::in|std::ios::binary, true);
+ m_lm = new OnlineRLM<T>(&fLmIn, m_nGramOrder);
+ fLmIn.close();
+ //m_lm = new MultiOnlineRLM<T>(m_filePath, m_nGramOrder);
+ assert(m_lm != NULL);
+ // get special word ids
+ m_oov_id = m_lm->vocab_->GetWordID("<unk>");
+ CreateFactors();
+ return true;
+}
+void LanguageModelORLM::CreateFactors() {
+ FactorCollection &factorCollection = FactorCollection::Instance();
+ size_t maxFactorId = 0; // to create lookup vector later on
+ std::map<size_t, wordID_t> m_lmids_map; // map from factor id -> word id
+
+ for(std::map<Word, wordID_t>::const_iterator vIter = m_lm->vocab_->VocabStart();
+ vIter != m_lm->vocab_->VocabEnd(); vIter++){
+ // get word from ORLM vocab and associate with (new) factor id
+ size_t factorId = factorCollection.AddFactor(Output,m_factorType,vIter->first.ToString())->GetId();
+ m_lmids_map[factorId] = vIter->second;
+ maxFactorId = (factorId > maxFactorId) ? factorId : maxFactorId;
+ }
+ // add factors for BOS and EOS and store bf word ids
+ size_t factorId;
+ m_sentenceStart = factorCollection.AddFactor(Output, m_factorType, "<s>");
+ factorId = m_sentenceStart->GetId();
+ maxFactorId = (factorId > maxFactorId) ? factorId : maxFactorId;
+ m_sentenceStartArray[m_factorType] = m_sentenceStart;
+
+ m_sentenceEnd = factorCollection.AddFactor(Output, m_factorType, "</s>");
+ factorId = m_sentenceEnd->GetId();
+ maxFactorId = (factorId > maxFactorId) ? factorId : maxFactorId;
+ m_sentenceEndArray[m_factorType] = m_sentenceEnd;
+ // add to lookup vector in object
+ lm_ids_vec_.resize(maxFactorId+1);
+ // fill with OOV code
+ fill(lm_ids_vec_.begin(), lm_ids_vec_.end(), m_oov_id);
+
+ for (map<size_t, wordID_t>::const_iterator iter = m_lmids_map.begin();
+ iter != m_lmids_map.end() ; ++iter)
+ lm_ids_vec_[iter->first] = iter->second;
+}
+wordID_t LanguageModelORLM::GetLmID(const std::string& str) const {
+ return m_lm->vocab_->GetWordID(str);
+}
+wordID_t LanguageModelORLM::GetLmID(const Factor* factor) const {
+ size_t factorId = factor->GetId();
+ return (factorId >= lm_ids_vec_.size()) ? m_oov_id : lm_ids_vec_[factorId];
+}
+LMResult LanguageModelORLM::GetValue(const std::vector<const Word*> &contextFactor,
+ State* finalState) const {
+ FactorType factorType = GetFactorType();
+ // set up context
+ //std::vector<long unsigned int> factor(1,0);
+ //std::vector<string> sngram;
+ wordID_t ngram[MAX_NGRAM_SIZE];
+ int count = contextFactor.size();
+ for (int i = 0; i < count; i++) {
+ ngram[i] = GetLmID((*contextFactor[i])[factorType]);
+ //sngram.push_back(contextFactor[i]->GetString(factor, false));
+ }
+ //float logprob = FloorScore(TransformLMScore(lm_->getProb(sngram, count, finalState)));
+ LMResult ret;
+ ret.score = FloorScore(TransformLMScore(m_lm->getProb(&ngram[0], count, finalState)));
+ ret.unknown = count && (ngram[count - 1] == m_oov_id);
+ /*if (finalState)
+ std::cout << " = " << logprob << "(" << *finalState << ", " << *len <<")"<< std::endl;
+ else
+ std::cout << " = " << logprob << std::endl;
+ */
+ return ret;
+}
+bool LanguageModelORLM::UpdateORLM(const std::vector<string>& ngram, const int value) {
+ /*cerr << "Inserting into ORLM: \"";
+ iterate(ngram, nit)
+ cerr << *nit << " ";
+ cerr << "\"\t" << value << endl; */
+ m_lm->vocab_->MakeOpen();
+ bool res = m_lm->update(ngram, value);
+ m_lm->vocab_->MakeClosed();
+ return res;
+}
+}
diff --git a/moses/src/LanguageModelORLM.h b/moses/src/LanguageModelORLM.h
new file mode 100755
index 000000000..ba3ad0b75
--- /dev/null
+++ b/moses/src/LanguageModelORLM.h
@@ -0,0 +1,49 @@
+#pragma once
+
+#include <string>
+#include <vector>
+#include "Factor.h"
+#include "Util.h"
+#include "LanguageModelSingleFactor.h"
+#include "onlineRLM.h"
+//#include "multiOnlineRLM.h"
+#include "DynSAInclude/file.h"
+#include "DynSAInclude/vocab.h"
+
+namespace Moses
+{
+class Factor;
+class Phrase;
+
+class LanguageModelORLM : public LanguageModelPointerState {
+public:
+ typedef count_t T; // type for ORLM filter
+ LanguageModelORLM()
+ : m_lm(0) {}
+ bool Load(const std::string &filePath, FactorType factorType, size_t nGramOrder);
+ virtual LMResult GetValue(const std::vector<const Word*> &contextFactor, State* finalState = NULL) const;
+ ~LanguageModelORLM() {
+ //save LM with markings
+ Utils::rtrim(m_filePath, ".gz");
+ FileHandler fout(m_filePath + ".marked.gz", std::ios::out|std::ios::binary, false);
+ m_lm->save(&fout);
+ fout.close();
+ delete m_lm;
+ }
+ void CleanUpAfterSentenceProcessing() {m_lm->clearCache();} // clear caches
+ void InitializeBeforeSentenceProcessing() { // nothing to do
+ //m_lm->initThreadSpecificData(); // Creates thread specific data iff
+ // compiled with multithreading.
+ }
+ bool UpdateORLM(const std::vector<string>& ngram, const int value);
+ protected:
+ OnlineRLM<T>* m_lm;
+ //MultiOnlineRLM<T>* m_lm;
+ wordID_t m_oov_id;
+ std::vector<wordID_t> lm_ids_vec_;
+ void CreateFactors();
+ wordID_t GetLmID(const std::string &str) const;
+ wordID_t GetLmID(const Factor *factor) const;
+};
+} // end namespace
+
diff --git a/moses/src/LanguageModelParallelBackoff.cpp b/moses/src/LanguageModelParallelBackoff.cpp
index 49957dc36..95361b309 100644
--- a/moses/src/LanguageModelParallelBackoff.cpp
+++ b/moses/src/LanguageModelParallelBackoff.cpp
@@ -109,7 +109,7 @@ bool LanguageModelParallelBackoff::Load(const std::string &filePath, const std::
CreateFactors();
cerr << "Factors created! \n";
- FactorCollection &factorCollection = FactorCollection::Instance();
+ //FactorCollection &factorCollection = FactorCollection::Instance();
/*for (size_t index = 0 ; index < m_factorTypesOrdered.size() ; ++index)
{
@@ -219,7 +219,7 @@ void LanguageModelParallelBackoff::CreateFactors()
}
-float LanguageModelParallelBackoff::GetValueForgotState(const std::vector<const Word*> &contextFactor, FFState &outState) const
+LMResult LanguageModelParallelBackoff::GetValueForgotState(const std::vector<const Word*> &contextFactor, FFState & /*outState */) const
{
static WidMatrix widMatrix;
@@ -250,8 +250,11 @@ float LanguageModelParallelBackoff::GetValueForgotState(const std::vector<const
}
- float p = m_srilmModel->wordProb( widMatrix, contextFactor.size() - 1, contextFactor.size() );
- return FloorScore(TransformLMScore(p));
+ LMResult ret;
+ ret.score = m_srilmModel->wordProb( widMatrix, contextFactor.size() - 1, contextFactor.size() );
+ ret.score = FloorScore(TransformLMScore(ret.score));
+ ret.unknown = !contextFactor.empty() && (widMatrix[contextFactor.size() - 1][0] == m_unknownId);
+ return ret;
/*if (contextFactor.size() == 0)
{
@@ -278,7 +281,7 @@ float LanguageModelParallelBackoff::GetValueForgotState(const std::vector<const
}
// The old version did not initialize finalState like it should. Technically that makes the behavior undefined, so it's not clear what else to do here.
-FFState *LanguageModelParallelBackoff::NewState(const FFState *from) const
+FFState *LanguageModelParallelBackoff::NewState(const FFState * /*from*/) const
{
return NULL;
}
diff --git a/moses/src/LanguageModelParallelBackoff.h b/moses/src/LanguageModelParallelBackoff.h
index c032d88e7..fdbdbd4f7 100644
--- a/moses/src/LanguageModelParallelBackoff.h
+++ b/moses/src/LanguageModelParallelBackoff.h
@@ -89,7 +89,7 @@ public:
void CreateFactors();
- float GetValueForgotState(const std::vector<const Word*> &contextFactor, FFState &outState) const;
+ LMResult GetValueForgotState(const std::vector<const Word*> &contextFactor, FFState &outState) const;
FFState *GetNullContextState() const;
FFState *GetBeginSentenceState() const;
FFState *NewState(const FFState *from) const;
diff --git a/moses/src/LanguageModelRandLM.cpp b/moses/src/LanguageModelRandLM.cpp
index 91f47a16d..d75dc188b 100644
--- a/moses/src/LanguageModelRandLM.cpp
+++ b/moses/src/LanguageModelRandLM.cpp
@@ -46,6 +46,7 @@ bool LanguageModelRandLM::Load(const std::string &filePath, FactorType factorTyp
// get special word ids
m_oov_id = m_lm->getWordID(m_lm->getOOV());
CreateFactors(factorCollection);
+ m_lm->initThreadSpecificData();
return true;
}
@@ -90,7 +91,7 @@ randlm::WordID LanguageModelRandLM::GetLmID( const std::string &str ) const
return m_lm->getWordID(str);
}
-float LanguageModelRandLM::GetValue(const vector<const Word*> &contextFactor,
+LMResult LanguageModelRandLM::GetValue(const vector<const Word*> &contextFactor,
State* finalState) const
{
FactorType factorType = GetFactorType();
@@ -102,12 +103,14 @@ float LanguageModelRandLM::GetValue(const vector<const Word*> &contextFactor,
//std::cerr << m_lm->getWord(ngram[i]) << " ";
}
int found = 0;
- float logprob = FloorScore(TransformLMScore(m_lm->getProb(&ngram[0], count, &found, finalState)));
+ LMResult ret;
+ ret.score = FloorScore(TransformLMScore(m_lm->getProb(&ngram[0], count, &found, finalState)));
+ ret.unknown = count && (ngram[count - 1] == m_oov_id);
//if (finalState)
// std::cerr << " = " << logprob << "(" << *finalState << ", " <<")"<< std::endl;
//else
// std::cerr << " = " << logprob << std::endl;
- return logprob;
+ return ret;
}
}
diff --git a/moses/src/LanguageModelRandLM.h b/moses/src/LanguageModelRandLM.h
index e759c7d87..b161647ed 100644
--- a/moses/src/LanguageModelRandLM.h
+++ b/moses/src/LanguageModelRandLM.h
@@ -41,14 +41,17 @@ class LanguageModelRandLM : public LanguageModelPointerState
public:
LanguageModelRandLM() : m_lm(0) {}
bool Load(const std::string &filePath, FactorType factorType, size_t nGramOrder);
- virtual float GetValue(const std::vector<const Word*> &contextFactor, State* finalState = NULL) const;
+ virtual LMResult GetValue(const std::vector<const Word*> &contextFactor, State* finalState = NULL) const;
~LanguageModelRandLM() {
delete m_lm;
}
void CleanUpAfterSentenceProcessing() {
m_lm->clearCaches(); // clear caches
}
- void InitializeBeforeSentenceProcessing() {} // nothing to do
+ void InitializeBeforeSentenceProcessing() {
+ m_lm->initThreadSpecificData(); // Creates thread specific data iff
+ // compiled with multithreading.
+ }
protected:
std::vector<randlm::WordID> m_randlm_ids_vec;
randlm::RandLM* m_lm;
diff --git a/moses/src/LanguageModelRemote.cpp b/moses/src/LanguageModelRemote.cpp
index 07f35544e..5abe5a109 100644
--- a/moses/src/LanguageModelRemote.cpp
+++ b/moses/src/LanguageModelRemote.cpp
@@ -60,12 +60,15 @@ bool LanguageModelRemote::start(const std::string& host, int port)
return true;
}
-float LanguageModelRemote::GetValue(const std::vector<const Word*> &contextFactor, State* finalState) const
+LMResult LanguageModelRemote::GetValue(const std::vector<const Word*> &contextFactor, State* finalState) const
{
+ LMResult ret;
+ ret.unknown = false;
size_t count = contextFactor.size();
if (count == 0) {
if (finalState) *finalState = NULL;
- return 0;
+ ret.score = 0.0;
+ return ret;
}
//std::cerr << "contextFactor.size() = " << count << "\n";
size_t max = m_nGramOrder;
@@ -82,7 +85,8 @@ float LanguageModelRemote::GetValue(const std::vector<const Word*> &contextFacto
cur = &cur->tree[event_word ? event_word : EOS];
if (cur->prob) {
if (finalState) *finalState = cur->boState;
- return cur->prob;
+ ret.score = cur->prob;
+ return ret;
}
cur->boState = *reinterpret_cast<const State*>(&m_curId);
++m_curId;
@@ -127,7 +131,8 @@ float LanguageModelRemote::GetValue(const std::vector<const Word*> &contextFacto
if (finalState) {
*finalState = cur->boState;
}
- return cur->prob;
+ ret.score = cur->prob;
+ return ret;
}
LanguageModelRemote::~LanguageModelRemote()
diff --git a/moses/src/LanguageModelRemote.h b/moses/src/LanguageModelRemote.h
index 4b56da95d..db709c596 100644
--- a/moses/src/LanguageModelRemote.h
+++ b/moses/src/LanguageModelRemote.h
@@ -35,7 +35,7 @@ public:
m_cache.tree.clear();
m_curId = 1000;
}
- virtual float GetValue(const std::vector<const Word*> &contextFactor, State* finalState = 0) const ;
+ virtual LMResult GetValue(const std::vector<const Word*> &contextFactor, State* finalState = 0) const;
bool Load(const std::string &filePath
, FactorType factorType
, size_t nGramOrder);
diff --git a/moses/src/LanguageModelSRI.cpp b/moses/src/LanguageModelSRI.cpp
index 2aa656462..967dcd8ed 100644
--- a/moses/src/LanguageModelSRI.cpp
+++ b/moses/src/LanguageModelSRI.cpp
@@ -121,20 +121,25 @@ VocabIndex LanguageModelSRI::GetLmID( const Factor *factor ) const
return ( factorId >= m_lmIdLookup.size()) ? m_unknownId : m_lmIdLookup[factorId];
}
-float LanguageModelSRI::GetValue(VocabIndex wordId, VocabIndex *context) const
+LMResult LanguageModelSRI::GetValue(VocabIndex wordId, VocabIndex *context) const
{
- float p = m_srilmModel->wordProb( wordId, context );
- return FloorScore(TransformLMScore(p)); // log10->log
+ LMResult ret;
+ ret.score = FloorScore(TransformLMScore(m_srilmModel->wordProb( wordId, context)));
+ ret.unknown = (wordId == m_unknownId);
+ return ret;
}
-float LanguageModelSRI::GetValue(const vector<const Word*> &contextFactor, State* finalState) const
+LMResult LanguageModelSRI::GetValue(const vector<const Word*> &contextFactor, State* finalState) const
{
+ LMResult ret;
FactorType factorType = GetFactorType();
size_t count = contextFactor.size();
if (count <= 0) {
if(finalState)
*finalState = NULL;
- return 0;
+ ret.score = 0.0;
+ ret.unknown = false;
+ return ret;
}
// set up context
@@ -147,7 +152,7 @@ float LanguageModelSRI::GetValue(const vector<const Word*> &contextFactor, State
assert((*contextFactor[count-1])[factorType] != NULL);
// call sri lm fn
VocabIndex lmId = GetLmID((*contextFactor[count-1])[factorType]);
- float ret = GetValue(lmId, ngram+1);
+ ret = GetValue(lmId, ngram+1);
if (finalState) {
ngram[0] = lmId;
diff --git a/moses/src/LanguageModelSRI.h b/moses/src/LanguageModelSRI.h
index 1b0a99574..927939bb3 100644
--- a/moses/src/LanguageModelSRI.h
+++ b/moses/src/LanguageModelSRI.h
@@ -44,7 +44,7 @@ protected:
Ngram *m_srilmModel;
VocabIndex m_unknownId;
- float GetValue(VocabIndex wordId, VocabIndex *context) const;
+ LMResult GetValue(VocabIndex wordId, VocabIndex *context) const;
void CreateFactors();
VocabIndex GetLmID( const std::string &str ) const;
VocabIndex GetLmID( const Factor *factor ) const;
@@ -56,7 +56,7 @@ public:
, FactorType factorType
, size_t nGramOrder);
- virtual float GetValue(const std::vector<const Word*> &contextFactor, State* finalState = 0) const;
+ virtual LMResult GetValue(const std::vector<const Word*> &contextFactor, State* finalState = 0) const;
};
diff --git a/moses/src/LanguageModelSingleFactor.cpp b/moses/src/LanguageModelSingleFactor.cpp
index b36efaee6..943260803 100644
--- a/moses/src/LanguageModelSingleFactor.cpp
+++ b/moses/src/LanguageModelSingleFactor.cpp
@@ -76,7 +76,7 @@ FFState *LanguageModelPointerState::NewState(const FFState *from) const
return new PointerState(from ? static_cast<const PointerState*>(from)->lmstate : NULL);
}
-float LanguageModelPointerState::GetValueForgotState(const std::vector<const Word*> &contextFactor, FFState &outState) const
+LMResult LanguageModelPointerState::GetValueForgotState(const std::vector<const Word*> &contextFactor, FFState &outState) const
{
return GetValue(contextFactor, &static_cast<PointerState&>(outState).lmstate);
}
diff --git a/moses/src/LanguageModelSingleFactor.h b/moses/src/LanguageModelSingleFactor.h
index 381af7500..c9226f62e 100644
--- a/moses/src/LanguageModelSingleFactor.h
+++ b/moses/src/LanguageModelSingleFactor.h
@@ -87,9 +87,9 @@ protected:
virtual FFState *GetBeginSentenceState() const;
virtual FFState *NewState(const FFState *from = NULL) const;
- virtual float GetValueForgotState(const std::vector<const Word*> &contextFactor, FFState &outState) const;
+ virtual LMResult GetValueForgotState(const std::vector<const Word*> &contextFactor, FFState &outState) const;
- virtual float GetValue(const std::vector<const Word*> &contextFactor, State* finalState = NULL) const = 0;
+ virtual LMResult GetValue(const std::vector<const Word*> &contextFactor, State* finalState = NULL) const = 0;
};
diff --git a/moses/src/LanguageModelSkip.h b/moses/src/LanguageModelSkip.h
index e9c85616a..7b8a3b56f 100644
--- a/moses/src/LanguageModelSkip.h
+++ b/moses/src/LanguageModelSkip.h
@@ -43,7 +43,7 @@ protected:
public:
/** Constructor
- * \param lmImpl SRI or IRST LM which this LM can use to load data
+ * \param lmImpl SRI, IRST, or Ken LM which this LM can use to load data
*/
LanguageModelSkip(LanguageModelSingleFactor *lmImpl) {
m_lmImpl = lmImpl;
@@ -81,16 +81,22 @@ public:
return m_lmImpl->NewState(from);
}
- float GetValueForgotState(const std::vector<const Word*> &contextFactor, FFState &outState) const {
+ LMResult GetValueForgotState(const std::vector<const Word*> &contextFactor, FFState &outState) const {
+ LMResult ret;
if (contextFactor.size() == 0) {
- return 0;
+ ret.score = 0.0;
+ ret.unknown = false;
+ return ret;
}
// only process context where last word is a word we want
const Factor *factor = (*contextFactor.back())[m_factorType];
std::string strWord = factor->GetString();
- if (strWord.find("---") == 0)
- return 0;
+ if (strWord.find("---") == 0) {
+ ret.score = 0.0;
+ ret.unknown = false;
+ return ret;
+ }
// add last word
std::vector<const Word*> chunkContext;
@@ -117,7 +123,7 @@ public:
std::reverse(chunkContext.begin(), chunkContext.end());
// calc score on chunked phrase
- float ret = m_lmImpl->GetValueForgotState(chunkContext, outState);
+ ret = m_lmImpl->GetValueForgotState(chunkContext, outState);
RemoveAllInColl(chunkContext);
diff --git a/moses/src/LexicalReordering.cpp b/moses/src/LexicalReordering.cpp
index 426af7ce3..2ca9ccc48 100644
--- a/moses/src/LexicalReordering.cpp
+++ b/moses/src/LexicalReordering.cpp
@@ -70,7 +70,7 @@ LexicalReordering::~LexicalReordering()
Scores LexicalReordering::GetProb(const Phrase& f, const Phrase& e) const
{
- return m_table->GetScore(f, e, Phrase(Output));
+ return m_table->GetScore(f, e, Phrase(Output, ARRAY_SIZE_INCR));
}
FFState* LexicalReordering::Evaluate(const Hypothesis& hypo,
diff --git a/moses/src/LexicalReordering.h b/moses/src/LexicalReordering.h
index d87d73822..18527f6aa 100644
--- a/moses/src/LexicalReordering.h
+++ b/moses/src/LexicalReordering.h
@@ -52,6 +52,13 @@ public:
Scores GetProb(const Phrase& f, const Phrase& e) const;
+ virtual FFState* EvaluateChart(const ChartHypothesis&,
+ int /* featureID */,
+ ScoreComponentCollection*) const {
+ assert(0); // not valid for chart decoder
+ return NULL;
+ }
+
private:
bool DecodeCondition(std::string s);
bool DecodeDirection(std::string s);
diff --git a/moses/src/LexicalReorderingState.cpp b/moses/src/LexicalReorderingState.cpp
index be8735e02..f3edb005d 100644
--- a/moses/src/LexicalReorderingState.cpp
+++ b/moses/src/LexicalReorderingState.cpp
@@ -489,7 +489,7 @@ LexicalReorderingState::ReorderingType HierarchicalReorderingForwardState::GetOr
return NM;
}
-LexicalReorderingState::ReorderingType HierarchicalReorderingForwardState::GetOrientationTypeLeftRight(WordsRange currRange, WordsBitmap coverage) const
+LexicalReorderingState::ReorderingType HierarchicalReorderingForwardState::GetOrientationTypeLeftRight(WordsRange currRange, WordsBitmap /* coverage */) const
{
if (currRange.GetStartPos() > m_prevRange.GetEndPos()) {
return R;
diff --git a/moses/src/LexicalReorderingTable.cpp b/moses/src/LexicalReorderingTable.cpp
index 6452b4c28..a4735d64d 100644
--- a/moses/src/LexicalReorderingTable.cpp
+++ b/moses/src/LexicalReorderingTable.cpp
@@ -571,8 +571,8 @@ void LexicalReorderingTableTree::auxCacheForSrcPhrase(const Phrase& f)
if(m_FactorsE.empty()) {
//f is all of key...
Candidates cands;
- m_Table->GetCandidates(MakeTableKey(f,Phrase(Output)),&cands);
- m_Cache[MakeCacheKey(f,Phrase(Output))] = cands;
+ m_Table->GetCandidates(MakeTableKey(f,Phrase(Output, ARRAY_SIZE_INCR)),&cands);
+ m_Cache[MakeCacheKey(f,Phrase(Output, ARRAY_SIZE_INCR))] = cands;
} else {
ObjectPool<PPimp> pool;
PPimp* pPos = m_Table->GetRoot();
diff --git a/moses/src/Makefile.am b/moses/src/Makefile.am
index f532c489b..56ce83eb1 100644
--- a/moses/src/Makefile.am
+++ b/moses/src/Makefile.am
@@ -5,15 +5,26 @@ libmoses_ladir = ${includedir}
libmoses_la_HEADERS = \
AlignmentInfo.h \
+ AlignmentInfoCollection.h \
BilingualDynSuffixArray.h \
BitmapContainer.h \
BleuScoreFeature.h \
CellCollection.h \
+ ChartCell.h \
+ ChartCellCollection.h \
+ ChartHypothesis.h \
+ ChartHypothesisCollection.h \
+ ChartManager.h \
ChartRuleLookupManager.h \
ChartRuleLookupManagerMemory.h \
ChartRuleLookupManagerOnDisk.h \
ChartTranslationOption.h \
+ ChartTranslationOptionCollection.h \
ChartTranslationOptionList.h \
+ ChartTrellisNode.h \
+ ChartTrellisPath.h \
+ ChartTrellisPathCollection.h \
+ ChartTrellisPathList.h \
ConfusionNet.h \
DecodeFeature.h \
DecodeGraph.h \
@@ -22,6 +33,7 @@ libmoses_la_HEADERS = \
DecodeStepTranslation.h \
Dictionary.h \
DotChart.h \
+ DotChartInMemory.h \
DotChartOnDisk.h \
DummyScoreProducers.h \
DynSAInclude/file.h \
@@ -49,6 +61,7 @@ libmoses_la_HEADERS = \
LMList.h \
LVoc.h \
LanguageModel.h \
+ LanguageModelChartState.h \
LanguageModelJoint.h \
LanguageModelFactory.h \
LanguageModelImplementation.h \
@@ -85,6 +98,9 @@ libmoses_la_HEADERS = \
PrefixTreeMap.h \
ReorderingConstraint.h \
ReorderingStack.h \
+ RuleCube.h \
+ RuleCubeItem.h \
+ RuleCubeQueue.h \
ScoreComponentCollection.h \
ScoreProducer.h \
Search.h \
@@ -116,7 +132,6 @@ libmoses_la_HEADERS = \
UserMessage.h \
Util.h \
Word.h \
- WordConsumed.h \
WordLattice.h \
WordTranslationFeature.h \
WordsBitmap.h \
@@ -140,21 +155,46 @@ if RAND_LM
libmoses_la_HEADERS += LanguageModelRandLM.h
endif
+if ORLM_LM
+libmoses_la_HEADERS += LanguageModelORLM.h \
+ DynSAInclude/params.h \
+ DynSAInclude/hash.h \
+ DynSAInclude/quantizer.h \
+ DynSAInclude/RandLMFilter.h \
+ DynSAInclude/RandLMCache.h
+endif
+
if INTERNAL_LM
libmoses_la_HEADERS += LanguageModelInternal.h \
NGramCollection.h \
NGramNode.h
endif
+if SYN_LM
+libmoses_la_HEADERS += SyntacticLanguageModel.h
+endif
+
libmoses_la_SOURCES = \
AlignmentInfo.cpp \
+ AlignmentInfoCollection.cpp \
BilingualDynSuffixArray.cpp \
BitmapContainer.cpp \
BleuScoreFeature.cpp \
+ ChartCell.cpp \
+ ChartCellCollection.cpp \
+ ChartHypothesis.cpp \
+ ChartHypothesisCollection.cpp \
+ ChartManager.cpp \
+ ChartRuleLookupManager.cpp \
ChartRuleLookupManagerMemory.cpp \
ChartRuleLookupManagerOnDisk.cpp \
ChartTranslationOption.cpp \
+ ChartTranslationOptionCollection.cpp \
ChartTranslationOptionList.cpp \
+ ChartTrellisNode.cpp \
+ ChartTrellisPath.cpp \
+ ChartTrellisPathCollection.cpp \
+ ChartTrellisPathList.cpp \
ConfusionNet.cpp \
DecodeFeature.cpp \
DecodeGraph.cpp \
@@ -163,10 +203,11 @@ libmoses_la_SOURCES = \
DecodeStepTranslation.cpp \
Dictionary.cpp \
DotChart.cpp \
+ DotChartInMemory.cpp \
DotChartOnDisk.cpp \
DummyScoreProducers.cpp \
- DynSAInclude/file.cpp \
- DynSAInclude/vocab.cpp \
+ DynSAInclude/file.cpp \
+ DynSAInclude/vocab.cpp \
DynSuffixArray.cpp \
FFState.cpp \
Factor.cpp \
@@ -221,6 +262,9 @@ libmoses_la_SOURCES = \
PrefixTreeMap.cpp \
ReorderingConstraint.cpp \
ReorderingStack.cpp \
+ RuleCube.cpp \
+ RuleCubeItem.cpp \
+ RuleCubeQueue.cpp \
ScoreComponentCollection.cpp \
ScoreProducer.cpp \
Search.cpp \
@@ -249,7 +293,6 @@ libmoses_la_SOURCES = \
UserMessage.cpp \
Util.cpp \
Word.cpp \
- WordConsumed.cpp \
WordLattice.cpp \
WordTranslationFeature.cpp \
WordsBitmap.cpp \
@@ -294,12 +337,23 @@ if RAND_LM
libmoses_la_SOURCES += LanguageModelRandLM.cpp
endif
+if ORLM_LM
+libmoses_la_SOURCES += LanguageModelORLM.cpp \
+ DynSAInclude/onlineRLM.h \
+ DynSAInclude/perfecthash.h \
+ DynSAInclude/params.cpp
+endif
+
if INTERNAL_LM
libmoses_la_SOURCES += LanguageModelInternal.cpp \
NGramCollection.cpp \
NGramNode.cpp
endif
+if SYN_LM
+libmoses_la_SOURCES += SyntacticLanguageModel.cpp
+endif
+
if KEN_LM
libmoses_la_SOURCES += LanguageModelKen.cpp
endif
diff --git a/moses/src/Manager.cpp b/moses/src/Manager.cpp
index 41ea259d8..e17149ded 100644
--- a/moses/src/Manager.cpp
+++ b/moses/src/Manager.cpp
@@ -355,7 +355,10 @@ void OutputWordGraph(std::ostream &outputWordGraphStream, const Hypothesis *hypo
}
// words !!
- outputWordGraphStream << "\tw=" << hypo->GetCurrTargetPhrase();
+// outputWordGraphStream << "\tw=" << hypo->GetCurrTargetPhrase();
+
+ // output both source and target phrases in the word graph
+ outputWordGraphStream << "\tw=" << hypo->GetSourcePhraseStringRep() << "|" << hypo->GetCurrTargetPhrase();
outputWordGraphStream << endl;
}
@@ -501,46 +504,46 @@ void OutputSearchNode(long translationId, std::ostream &outputSearchGraphStream,
const Hypothesis *prevHypo = searchNode.hypo->GetPrevHypo();
- // output in traditional format
- if (!extendedFormat)
- {
- outputSearchGraphStream << " hyp=" << searchNode.hypo->GetId()
- << " stack=" << searchNode.hypo->GetWordsBitmap().GetNumWordsCovered()
- << " back=" << prevHypo->GetId()
- << " score=" << searchNode.hypo->GetScore()
- << " transition=" << (searchNode.hypo->GetScore() - prevHypo->GetScore());
-
- if (searchNode.recombinationHypo != NULL)
- outputSearchGraphStream << " recombined=" << searchNode.recombinationHypo->GetId();
-
- outputSearchGraphStream << " forward=" << searchNode.forward << " fscore=" << searchNode.fscore
- << " covered=" << searchNode.hypo->GetCurrSourceWordsRange().GetStartPos()
- << "-" << searchNode.hypo->GetCurrSourceWordsRange().GetEndPos()
- << " out=" << searchNode.hypo->GetCurrTargetPhrase().GetStringRep(outputFactorOrder)
- << endl;
- return;
- }
-
- // output in extended format
- if (searchNode.recombinationHypo != NULL)
- outputSearchGraphStream << " hyp=" << searchNode.recombinationHypo->GetId();
- else
- outputSearchGraphStream << " hyp=" << searchNode.hypo->GetId();
-
- outputSearchGraphStream << " back=" << prevHypo->GetId();
-
- ScoreComponentCollection scoreBreakdown = searchNode.hypo->GetScoreBreakdown();
- scoreBreakdown.MinusEquals( prevHypo->GetScoreBreakdown() );
+ // output in traditional format
+ if (!extendedFormat) {
+ outputSearchGraphStream << " hyp=" << searchNode.hypo->GetId()
+ << " stack=" << searchNode.hypo->GetWordsBitmap().GetNumWordsCovered()
+ << " back=" << prevHypo->GetId()
+ << " score=" << searchNode.hypo->GetScore()
+ << " transition=" << (searchNode.hypo->GetScore() - prevHypo->GetScore());
+
+ if (searchNode.recombinationHypo != NULL)
+ outputSearchGraphStream << " recombined=" << searchNode.recombinationHypo->GetId();
+
+ outputSearchGraphStream << " forward=" << searchNode.forward << " fscore=" << searchNode.fscore
+ << " covered=" << searchNode.hypo->GetCurrSourceWordsRange().GetStartPos()
+ << "-" << searchNode.hypo->GetCurrSourceWordsRange().GetEndPos()
+ << " out=" << searchNode.hypo->GetCurrTargetPhrase().GetStringRep(outputFactorOrder)
+ << endl;
+ return;
+ }
+
+ // output in extended format
+ if (searchNode.recombinationHypo != NULL)
+ outputSearchGraphStream << " hyp=" << searchNode.recombinationHypo->GetId();
+ else
+ outputSearchGraphStream << " hyp=" << searchNode.hypo->GetId();
+
+ outputSearchGraphStream << " back=" << prevHypo->GetId();
+
+ ScoreComponentCollection scoreBreakdown = searchNode.hypo->GetScoreBreakdown();
+ scoreBreakdown.MinusEquals( prevHypo->GetScoreBreakdown() );
outputSearchGraphStream << " [ " << StaticData::Instance().GetAllWeights();
- outputSearchGraphStream << " ]";
- // added this so that we will have the span in the input covered
- // (DNM, 19 Nov 2010)
- outputSearchGraphStream << " covered=" <<
- searchNode.hypo->GetCurrSourceWordsRange().GetStartPos()
- << "-" <<
- searchNode.hypo->GetCurrSourceWordsRange().GetEndPos();
-
- outputSearchGraphStream << " out=" << searchNode.hypo->GetCurrTargetPhrase().GetStringRep(outputFactorOrder) << endl;
+ outputSearchGraphStream << " ]";
+ // added this so that we will have the span in the input covered
+ // (DNM, 19 Nov 2010)
+ outputSearchGraphStream << " covered=" <<
+ searchNode.hypo->GetCurrSourceWordsRange().GetStartPos()
+ << "-" <<
+ searchNode.hypo->GetCurrSourceWordsRange().GetEndPos();
+ outputSearchGraphStream << " out=" << searchNode.hypo->GetSourcePhraseStringRep() << "|" <<
+ searchNode.hypo->GetCurrTargetPhrase().GetStringRep(outputFactorOrder) << endl;
+// outputSearchGraphStream << " out=" << searchNode.hypo->GetCurrTargetPhrase().GetStringRep(outputFactorOrder) << endl;
}
void Manager::GetConnectedGraph(
@@ -559,14 +562,13 @@ void Manager::GetConnectedGraph(
connected[ hypo->GetId() ] = true;
connectedList.push_back( hypo );
}
-
// move back from known connected hypotheses
for(size_t i=0; i<connectedList.size(); i++) {
const Hypothesis *hypo = connectedList[i];
// add back pointer
const Hypothesis *prevHypo = hypo->GetPrevHypo();
- if (prevHypo->GetId() > 0 // don't add empty hypothesis
+ if (prevHypo && prevHypo->GetId() > 0 // don't add empty hypothesis
&& connected.find( prevHypo->GetId() ) == connected.end()) { // don't add already added
connected[ prevHypo->GetId() ] = true;
connectedList.push_back( prevHypo );
diff --git a/moses/src/NGramCollection.cpp b/moses/src/NGramCollection.cpp
index 9b28a7203..f1fd08ef5 100644
--- a/moses/src/NGramCollection.cpp
+++ b/moses/src/NGramCollection.cpp
@@ -32,7 +32,7 @@ NGramCollection::~NGramCollection()
}
}
-void NGramCollection::Add(const Factor *factor, const NGramNode &ngramNode)
+void NGramCollection::Add(const Factor * /* factor */, const NGramNode & /* ngramNode */)
{
}
diff --git a/moses/src/NonTerminal.cpp b/moses/src/NonTerminal.cpp
new file mode 100644
index 000000000..37ebc9b68
--- /dev/null
+++ b/moses/src/NonTerminal.cpp
@@ -0,0 +1,3 @@
+
+#include "NonTerminal.h"
+
diff --git a/moses/src/PDTAimp.h b/moses/src/PDTAimp.h
index 500d6201f..2186a2ad0 100644
--- a/moses/src/PDTAimp.h
+++ b/moses/src/PDTAimp.h
@@ -5,22 +5,22 @@
#define moses_PDTAimp_h
#include "StaticData.h" // needed for factor splitter
+#include "PhraseDictionaryTree.h"
+#include "UniqueObject.h"
+#include "InputFileStream.h"
+#include "PhraseDictionaryTreeAdaptor.h"
+#include "Util.h"
namespace Moses
{
-inline bool existsFile(const char* filePath)
-{
- struct stat mystat;
- return (stat(filePath,&mystat)==0);
-}
-double addLogScale(double x,double y)
+inline double addLogScale(double x,double y)
{
if(x>y) return addLogScale(y,x);
else return x+log(1.0+exp(y-x));
}
-double Exp(double x)
+inline double Exp(double x)
{
return exp(x);
}
@@ -211,7 +211,7 @@ public:
m_dict->UseWordAlignment(staticData.UseAlignmentInfo());
std::string binFname=filePath+".binphr.idx";
- if(!existsFile(binFname.c_str())) {
+ if(!FileExists(binFname.c_str())) {
TRACE_ERR( "bin ttable does not exist -> create it\n");
InputFileStream in(filePath);
m_dict->Create(in,filePath);
@@ -236,11 +236,11 @@ public:
std::vector<float> scores;
Phrase src;
- State() : range(0,0),scores(0),src(Input) {}
+ State() : range(0,0),scores(0),src(Input, ARRAY_SIZE_INCR) {}
State(Position b,Position e,const PPtr& v,const std::vector<float>& sv=std::vector<float>(0))
- : ptr(v),range(b,e),scores(sv),src(Input) {}
+ : ptr(v),range(b,e),scores(sv),src(Input, ARRAY_SIZE_INCR) {}
State(Range const& r,const PPtr& v,const std::vector<float>& sv=std::vector<float>(0))
- : ptr(v),range(r),scores(sv),src(Input) {}
+ : ptr(v),range(r),scores(sv),src(Input, ARRAY_SIZE_INCR) {}
Position begin() const {
return range.first;
diff --git a/moses/src/Parameter.cpp b/moses/src/Parameter.cpp
index 06701df6b..a4f4758a7 100644
--- a/moses/src/Parameter.cpp
+++ b/moses/src/Parameter.cpp
@@ -64,13 +64,19 @@ Parameter::Parameter()
AddParam("n-best-list", "file and size of n-best-list to be generated; specify - as the file in order to write to STDOUT");
AddParam("n-best-factor", "factor to compute the maximum number of contenders (=factor*nbest-size). value 0 means infinity, i.e. no threshold. default is 0");
AddParam("print-all-derivations", "to print all derivations in search graph");
- AddParam("output-factors", "list of factors in the output");
- AddParam("phrase-drop-allowed", "da", "if present, allow dropping of source words"); //da = drop any (word); see -du for comparison
- AddParam("report-all-factors", "report all factors in output, not just first");
- AddParam("report-all-factors-in-n-best", "Report all factors in n-best-lists. Default is false");
- AddParam("report-segmentation", "t", "report phrase segmentation in the output");
- AddParam("stack", "s", "maximum stack size for histogram pruning");
- AddParam("stack-diversity", "sd", "minimum number of hypothesis of each coverage in stack (default 0)");
+ AddParam("output-factors", "list of factors in the output");
+ AddParam("phrase-drop-allowed", "da", "if present, allow dropping of source words"); //da = drop any (word); see -du for comparison
+ AddParam("report-all-factors", "report all factors in output, not just first");
+ AddParam("report-all-factors-in-n-best", "Report all factors in n-best-lists. Default is false");
+ AddParam("report-segmentation", "t", "report phrase segmentation in the output");
+#ifdef HAVE_SYNLM
+ AddParam("slmodel-file", "location of the syntactic language model file(s)");
+ AddParam("weight-slm", "slm", "weight(s) for syntactic language model");
+ AddParam("slmodel-factor", "factor to use with syntactic language model");
+ AddParam("slmodel-beam", "beam width to use with syntactic language model's parser");
+#endif
+ AddParam("stack", "s", "maximum stack size for histogram pruning");
+ AddParam("stack-diversity", "sd", "minimum number of hypothesis of each coverage in stack (default 0)");
AddParam("threads","th", "number of threads to use in decoding (defaults to single-threaded)");
AddParam("translation-details", "T", "for each best hypothesis, report translation details to the given file");
AddParam("ttable-file", "location and properties of the translation tables");
@@ -129,14 +135,12 @@ Parameter::Parameter()
AddParam("print-alignment-info-in-n-best", "Include word-to-word alignment in the n-best list. Word-to-word alignments are takne from the phrase table if any. Default is false");
AddParam("link-param-count", "Number of parameters on word links when using confusion networks or lattices (default = 1)");
AddParam("description", "Source language, target language, description");
-
AddParam("max-chart-span", "maximum num. of source word chart rules can consume (default 10)");
AddParam("non-terminals", "list of non-term symbols, space separated");
AddParam("rule-limit", "a little like table limit. But for chart decoding rules. Default is DEFAULT_MAX_TRANS_OPT_SIZE");
AddParam("source-label-overlap", "What happens if a span already has a label. 0=add more. 1=replace. 2=discard. Default is 0");
AddParam("output-hypo-score", "Output the hypo score to stdout with the output string. For search error analysis. Default is false");
AddParam("unknown-lhs", "file containing target lhs of unknown words. 1 per line: LHS prob");
-
AddParam("enable-online-command", "enable online commands to change some decoder parameters (default false); if enabled, use-persistent-cache is disabled");
AddParam("discrim-lmodel-file", "Order, factor and vocabulary file for discriminative LM. Use * for filename to indicate unlimited vocabulary.");
AddParam("phrase-pair-feature", "Source and target factors for phrase pair feature");
@@ -147,11 +151,10 @@ Parameter::Parameter()
AddParam("source-word-deletion-feature", "Count feature for each unaligned source word");
AddParam("word-translation-feature", "Count feature for word translation according to word alignment");
AddParam("report-sparse-features", "Indicate which sparse feature functions should report detailed scores in n-best, instead of aggregate");
+ AddParam("cube-pruning-lazy-scoring", "cbls", "Don't fully score a hypothesis until it is popped");
+ AddParam("translation-systems", "specify multiple translation systems, each consisting of an id, followed by a set of models ids, eg '0 T1 R1 L0'");
AddParam("show-weights", "print feature weights and exit");
-
- AddParam("translation-systems", "specify multiple translation systems, each consisting of an id, followed by a set of models ids, eg '0 T1 R1 L0'");
- AddParam("show-weights", "print feature weights and exit");
- AddParam("alignment-output-file", "print output word alignments into given file");
+ AddParam("alignment-output-file", "print output word alignments into given file");
}
Parameter::~Parameter()
@@ -279,6 +282,18 @@ bool Parameter::Validate()
{
bool noErrorFlag = true;
+ PARAM_MAP::const_iterator iterParams;
+ for (iterParams = m_setting.begin(); iterParams != m_setting.end(); ++iterParams) {
+ const std::string &key = iterParams->first;
+
+ if (m_valid.find(key) == m_valid.end())
+ {
+ UserMessage::Add("Unknown parameter " + key);
+ noErrorFlag = false;
+ }
+ }
+
+
// required parameters
if (m_setting["ttable-file"].size() == 0) {
UserMessage::Add("No phrase translation table (ttable-file)");
diff --git a/moses/src/Phrase.cpp b/moses/src/Phrase.cpp
index 942102149..4045c2c03 100644
--- a/moses/src/Phrase.cpp
+++ b/moses/src/Phrase.cpp
@@ -104,7 +104,7 @@ void Phrase::MergeFactors(const Phrase &copy, const std::vector<FactorType>& fac
Phrase Phrase::GetSubString(const WordsRange &wordsRange) const
{
- Phrase retPhrase(m_direction);
+ Phrase retPhrase(m_direction, wordsRange.GetNumWordsCovered());
for (size_t currPos = wordsRange.GetStartPos() ; currPos <= wordsRange.GetEndPos() ; currPos++) {
Word &word = retPhrase.AddWord();
@@ -116,7 +116,7 @@ Phrase Phrase::GetSubString(const WordsRange &wordsRange) const
Phrase Phrase::GetSubString(const WordsRange &wordsRange, FactorType factorType) const
{
- Phrase retPhrase(m_direction);
+ Phrase retPhrase(m_direction, wordsRange.GetNumWordsCovered());
for (size_t currPos = wordsRange.GetStartPos() ; currPos <= wordsRange.GetEndPos() ; currPos++)
{
@@ -130,7 +130,6 @@ Phrase Phrase::GetSubString(const WordsRange &wordsRange, FactorType factorType)
std::string Phrase::GetStringRep(const vector<FactorType> factorsToPrint) const
{
- Phrase retPhrase(m_direction);
stringstream strme;
for (size_t pos = 0 ; pos < GetSize() ; pos++) {
strme << GetWord(pos).GetString(factorsToPrint, (pos != GetSize()-1));
@@ -188,7 +187,8 @@ vector< vector<string> > Phrase::Parse(const std::string &phraseString, const st
// to
// "KOMMA" "none"
if (factorStrVector.size() != factorOrder.size()) {
- TRACE_ERR( "[ERROR] Malformed input at " << /*StaticData::Instance().GetCurrentInputPosition() <<*/ std::endl
+ TRACE_ERR( "[ERROR] Malformed input: '" << annotatedWord << "'" << std::endl
+ << "In '" << phraseString << "'" << endl
<< " Expected input to have words composed of " << factorOrder.size() << " factor(s) (form FAC1|FAC2|...)" << std::endl
<< " but instead received input with " << factorStrVector.size() << " factor(s).\n");
abort();
@@ -203,6 +203,8 @@ void Phrase::CreateFromString(const std::vector<FactorType> &factorOrder
{
FactorCollection &factorCollection = FactorCollection::Instance();
+ m_words.reserve(phraseVector.size());
+
for (size_t phrasePos = 0 ; phrasePos < phraseVector.size() ; phrasePos++) {
// add word this phrase
Word &word = AddWord();
@@ -226,7 +228,7 @@ void Phrase::CreateFromString(const std::vector<FactorType> &factorOrder
void Phrase::CreateFromStringNewFormat(FactorDirection direction
, const std::vector<FactorType> &factorOrder
, const std::string &phraseString
- , const std::string &factorDelimiter
+ , const std::string & /*factorDelimiter */
, Word &lhs)
{
// parse
@@ -236,6 +238,8 @@ void Phrase::CreateFromStringNewFormat(FactorDirection direction
// to
// "KOMMA|none" "ART|Def.Z" "NN|Neut.NotGen.Sg" "VVFIN|none"
+ m_words.reserve(annotatedWordVector.size()-1);
+
for (size_t phrasePos = 0 ; phrasePos < annotatedWordVector.size() - 1 ; phrasePos++) {
string &annotatedWord = annotatedWordVector[phrasePos];
bool isNonTerminal;
diff --git a/moses/src/Phrase.h b/moses/src/Phrase.h
index b5ef204a8..ece96f2bc 100644
--- a/moses/src/Phrase.h
+++ b/moses/src/Phrase.h
@@ -58,7 +58,7 @@ public:
/** create empty phrase
* \param direction = language (Input = Source, Output = Target)
*/
- Phrase(FactorDirection direction, size_t reserveSize = ARRAY_SIZE_INCR);
+ Phrase(FactorDirection direction, size_t reserveSize);
/** create phrase from vectors of words */
Phrase(FactorDirection direction, const std::vector< const Word* > &mergeWords);
diff --git a/moses/src/PhraseBoundaryFeature.cpp b/moses/src/PhraseBoundaryFeature.cpp
index 5b99fc571..22f5baa85 100644
--- a/moses/src/PhraseBoundaryFeature.cpp
+++ b/moses/src/PhraseBoundaryFeature.cpp
@@ -37,7 +37,7 @@ size_t PhraseBoundaryFeature::GetNumInputScores() const
return 0;
}
-const FFState* PhraseBoundaryFeature::EmptyHypothesisState(const InputType &input) const
+const FFState* PhraseBoundaryFeature::EmptyHypothesisState(const InputType &) const
{
return new PhraseBoundaryState(NULL,NULL);
}
diff --git a/moses/src/PhraseBoundaryFeature.h b/moses/src/PhraseBoundaryFeature.h
index 382ffd29f..378d69c5b 100644
--- a/moses/src/PhraseBoundaryFeature.h
+++ b/moses/src/PhraseBoundaryFeature.h
@@ -37,11 +37,19 @@ public:
std::string GetScoreProducerWeightShortName() const;
size_t GetNumInputScores() const;
- virtual const FFState* EmptyHypothesisState(const InputType &input) const;
+ virtual const FFState* EmptyHypothesisState(const InputType &) const;
virtual FFState* Evaluate(const Hypothesis& cur_hypo, const FFState* prev_state,
ScoreComponentCollection* accumulator) const;
+ virtual FFState* EvaluateChart( const ChartHypothesis& /* cur_hypo */,
+ int /* featureID */,
+ ScoreComponentCollection* ) const
+ {
+ /* Not implemented */
+ assert(0);
+ }
+
private:
void AddFeatures(
const Word* leftWord, const Word* rightWord, const FactorList& factors,
diff --git a/moses/src/PhraseDictionary.h b/moses/src/PhraseDictionary.h
index 457ae76a0..8957ff569 100644
--- a/moses/src/PhraseDictionary.h
+++ b/moses/src/PhraseDictionary.h
@@ -46,7 +46,7 @@ class StaticData;
class InputType;
class WordsRange;
class ChartTranslationOptionList;
-class CellCollection;
+class ChartCellCollection;
class TranslationSystem;
class ChartRuleLookupManager;
@@ -81,7 +81,7 @@ public:
//! Create a sentence-specific manager for SCFG rule lookup.
virtual ChartRuleLookupManager *CreateRuleLookupManager(
const InputType &,
- const CellCollection &) = 0;
+ const ChartCellCollection &) = 0;
protected:
size_t m_tableLimit;
diff --git a/moses/src/PhraseDictionaryDynSuffixArray.cpp b/moses/src/PhraseDictionaryDynSuffixArray.cpp
index d28717c63..41353b7e0 100644
--- a/moses/src/PhraseDictionaryDynSuffixArray.cpp
+++ b/moses/src/PhraseDictionaryDynSuffixArray.cpp
@@ -71,14 +71,15 @@ const TargetPhraseCollection *PhraseDictionaryDynSuffixArray::GetTargetPhraseCol
void PhraseDictionaryDynSuffixArray::insertSnt(string& source, string& target, string& alignment)
{
- m_biSA->addSntPair(source, target, alignment);
+ m_biSA->addSntPair(source, target, alignment); // insert sentence pair into suffix arrays
+ //StaticData::Instance().ClearTransOptionCache(); // clear translation option cache
}
-void PhraseDictionaryDynSuffixArray::deleteSnt(unsigned idx, unsigned num2Del)
+void PhraseDictionaryDynSuffixArray::deleteSnt(unsigned /* idx */, unsigned /* num2Del */)
{
// need to implement --
}
-ChartRuleLookupManager *PhraseDictionaryDynSuffixArray::CreateRuleLookupManager(const InputType&, const CellCollection&)
+ChartRuleLookupManager *PhraseDictionaryDynSuffixArray::CreateRuleLookupManager(const InputType&, const ChartCellCollection&)
{
assert(false);
return 0;
diff --git a/moses/src/PhraseDictionaryDynSuffixArray.h b/moses/src/PhraseDictionaryDynSuffixArray.h
index 1ca63b796..1bd16fc34 100644
--- a/moses/src/PhraseDictionaryDynSuffixArray.h
+++ b/moses/src/PhraseDictionaryDynSuffixArray.h
@@ -30,7 +30,7 @@ public:
void CleanUp();
void insertSnt(string&, string&, string&);
void deleteSnt(unsigned, unsigned);
- ChartRuleLookupManager *CreateRuleLookupManager(const InputType&, const CellCollection&);
+ ChartRuleLookupManager *CreateRuleLookupManager(const InputType&, const ChartCellCollection&);
private:
BilingualDynSuffixArray *m_biSA;
std::vector<float> m_weight;
diff --git a/moses/src/PhraseDictionaryMemory.cpp b/moses/src/PhraseDictionaryMemory.cpp
index 7c263319f..832fcf3e8 100644
--- a/moses/src/PhraseDictionaryMemory.cpp
+++ b/moses/src/PhraseDictionaryMemory.cpp
@@ -105,7 +105,7 @@ bool PhraseDictionaryMemory::Load(const std::vector<FactorType> &input
}
// source
- Phrase sourcePhrase(Input);
+ Phrase sourcePhrase(Input, 0);
sourcePhrase.CreateFromString( input, phraseVector);
//target
TargetPhrase targetPhrase(Output);
diff --git a/moses/src/PhraseDictionaryMemory.h b/moses/src/PhraseDictionaryMemory.h
index feb1b832e..a38d9c842 100644
--- a/moses/src/PhraseDictionaryMemory.h
+++ b/moses/src/PhraseDictionaryMemory.h
@@ -66,7 +66,7 @@ public:
virtual ChartRuleLookupManager *CreateRuleLookupManager(
const InputType &,
- const CellCollection &) {
+ const ChartCellCollection &) {
assert(false);
return 0;
}
diff --git a/moses/src/PhraseDictionaryNodeSCFG.cpp b/moses/src/PhraseDictionaryNodeSCFG.cpp
index 63aeeee21..7f80f8fff 100644
--- a/moses/src/PhraseDictionaryNodeSCFG.cpp
+++ b/moses/src/PhraseDictionaryNodeSCFG.cpp
@@ -46,6 +46,22 @@ void PhraseDictionaryNodeSCFG::Prune(size_t tableLimit)
m_targetPhraseCollection->Prune(true, tableLimit);
}
+void PhraseDictionaryNodeSCFG::Sort(size_t tableLimit)
+{
+ // recusively sort
+ for (TerminalMap::iterator p = m_sourceTermMap.begin(); p != m_sourceTermMap.end(); ++p) {
+ p->second.Sort(tableLimit);
+ }
+ for (NonTerminalMap::iterator p = m_nonTermMap.begin(); p != m_nonTermMap.end(); ++p) {
+ p->second.Sort(tableLimit);
+ }
+
+ // prune TargetPhraseCollection in this node
+ if (m_targetPhraseCollection != NULL) {
+ m_targetPhraseCollection->Sort(true, tableLimit);
+ }
+}
+
PhraseDictionaryNodeSCFG *PhraseDictionaryNodeSCFG::GetOrCreateChild(const Word &sourceTerm)
{
assert(!sourceTerm.IsNonTerminal());
diff --git a/moses/src/PhraseDictionaryNodeSCFG.h b/moses/src/PhraseDictionaryNodeSCFG.h
index 2fc8e4fd0..613d872ab 100644
--- a/moses/src/PhraseDictionaryNodeSCFG.h
+++ b/moses/src/PhraseDictionaryNodeSCFG.h
@@ -170,6 +170,7 @@ public:
}
void Prune(size_t tableLimit);
+ void Sort(size_t tableLimit);
PhraseDictionaryNodeSCFG *GetOrCreateChild(const Word &sourceTerm);
PhraseDictionaryNodeSCFG *GetOrCreateChild(const Word &sourceNonTerm, const Word &targetNonTerm);
const PhraseDictionaryNodeSCFG *GetChild(const Word &sourceTerm) const;
diff --git a/moses/src/PhraseDictionaryOnDisk.cpp b/moses/src/PhraseDictionaryOnDisk.cpp
index fc28bfebd..410ee1ba1 100644
--- a/moses/src/PhraseDictionaryOnDisk.cpp
+++ b/moses/src/PhraseDictionaryOnDisk.cpp
@@ -69,24 +69,24 @@ bool PhraseDictionaryOnDisk::Load(const std::vector<FactorType> &input
// PhraseDictionary impl
//! find list of translations that can translates src. Only for phrase input
-const TargetPhraseCollection *PhraseDictionaryOnDisk::GetTargetPhraseCollection(const Phrase& src) const
+const TargetPhraseCollection *PhraseDictionaryOnDisk::GetTargetPhraseCollection(const Phrase& /* src */) const
{
assert(false);
return NULL;
}
-void PhraseDictionaryOnDisk::AddEquivPhrase(const Phrase &source, const TargetPhrase &targetPhrase)
+void PhraseDictionaryOnDisk::AddEquivPhrase(const Phrase& /* source */, const TargetPhrase& /*targetPhrase */)
{
assert(false); // TODO
}
//! Create entry for translation of source to targetPhrase
-void PhraseDictionaryOnDisk::AddEquivPhrase(const Phrase &source, TargetPhrase *targetPhrase)
+void PhraseDictionaryOnDisk::AddEquivPhrase(const Phrase& /* source */, TargetPhrase * /* targetPhrase */)
{
}
-void PhraseDictionaryOnDisk::InitializeForInput(const InputType& input)
+void PhraseDictionaryOnDisk::InitializeForInput(const InputType& /* input */)
{
// Nothing to do: sentence-specific state is stored in ChartRuleLookupManager
}
@@ -103,7 +103,7 @@ void PhraseDictionaryOnDisk::LoadTargetLookup()
ChartRuleLookupManager *PhraseDictionaryOnDisk::CreateRuleLookupManager(
const InputType &sentence,
- const CellCollection &cellCollection)
+ const ChartCellCollection &cellCollection)
{
return new ChartRuleLookupManagerOnDisk(sentence, cellCollection, *this,
m_dbWrapper, m_languageModels,
diff --git a/moses/src/PhraseDictionaryOnDisk.h b/moses/src/PhraseDictionaryOnDisk.h
index 94d292e7d..fa3a6fe85 100644
--- a/moses/src/PhraseDictionaryOnDisk.h
+++ b/moses/src/PhraseDictionaryOnDisk.h
@@ -32,8 +32,7 @@
namespace Moses
{
class TargetPhraseCollection;
-class ProcessedRuleStackOnDisk;
-class CellCollection;
+class DottedRuleStackOnDisk;
class WordPenaltyProducer;
class PhraseDictionaryOnDisk : public PhraseDictionary
@@ -87,7 +86,7 @@ public:
virtual ChartRuleLookupManager *CreateRuleLookupManager(
const InputType &,
- const CellCollection &);
+ const ChartCellCollection &);
};
} // namespace Moses
diff --git a/moses/src/PhraseDictionarySCFG.cpp b/moses/src/PhraseDictionarySCFG.cpp
index 2662bd0ad..0f6c53fec 100644
--- a/moses/src/PhraseDictionarySCFG.cpp
+++ b/moses/src/PhraseDictionarySCFG.cpp
@@ -96,7 +96,7 @@ bool PhraseDictionarySCFG::Load(const std::vector<FactorType> &input
, const std::vector<FactorType> &output
, std::istream &inStream
, const std::vector<float> &weight
- , size_t tableLimit
+ , size_t /* tableLimit */
, const LMList &languageModels
, const WordPenaltyProducer* wpProducer)
{
@@ -122,10 +122,10 @@ bool PhraseDictionarySCFG::Load(const std::vector<FactorType> &input
abort();
}
- const string &sourcePhraseString = tokens[0]
- , &targetPhraseString = tokens[1]
- , &scoreString = tokens[2]
- , &alignString = tokens[3];
+ const string &sourcePhraseString = tokens[0]
+ , &targetPhraseString = tokens[1]
+ , &scoreString = tokens[2]
+ , &alignString = tokens[3];
bool isLHSEmpty = (sourcePhraseString.find_first_not_of(" \t", 0) == string::npos);
if (isLHSEmpty && !staticData.IsWordDeletionEnabled()) {
@@ -144,11 +144,11 @@ bool PhraseDictionarySCFG::Load(const std::vector<FactorType> &input
// parse source & find pt node
- // head word
+ // constituent labels
Word sourceLHS, targetLHS;
// source
- Phrase sourcePhrase(Input);
+ Phrase sourcePhrase(Input, 0);
sourcePhrase.CreateFromStringNewFormat(Input, input, sourcePhraseString, factorDelimiter, sourceLHS);
// create target phrase obj
@@ -166,10 +166,6 @@ bool PhraseDictionarySCFG::Load(const std::vector<FactorType> &input
targetPhrase->SetScoreChart(GetFeature(), scoreVector, weight, languageModels,wpProducer);
- // count info for backoff
- if (tokens.size() >= 6)
- targetPhrase->CreateCountInfo(tokens[5]);
-
TargetPhraseCollection &phraseColl = GetOrCreateTargetPhraseCollection(sourcePhrase, *targetPhrase);
AddEquivPhrase(phraseColl, targetPhrase);
@@ -180,7 +176,7 @@ bool PhraseDictionarySCFG::Load(const std::vector<FactorType> &input
// prune each target phrase collection
if (m_tableLimit) {
- m_collection.Prune(m_tableLimit);
+ m_collection.Sort(m_tableLimit);
}
return true;
@@ -224,7 +220,7 @@ PhraseDictionaryNodeSCFG &PhraseDictionarySCFG::GetOrCreateNode(const Phrase &so
return *currNode;
}
-void PhraseDictionarySCFG::AddEquivPhrase(const Phrase &source, const TargetPhrase &targetPhrase)
+void PhraseDictionarySCFG::AddEquivPhrase(const Phrase & /* source */, const TargetPhrase & /* targetPhrase */)
{
assert(false); // TODO
}
@@ -235,7 +231,7 @@ void PhraseDictionarySCFG::AddEquivPhrase(TargetPhraseCollection &targetPhraseCo
}
-const TargetPhraseCollection *PhraseDictionarySCFG::GetTargetPhraseCollection(const Phrase &source) const
+const TargetPhraseCollection *PhraseDictionarySCFG::GetTargetPhraseCollection(const Phrase & /* source */) const
{
// exactly like CreateTargetPhraseCollection, but don't create
assert(false);
@@ -256,7 +252,7 @@ const TargetPhraseCollection *PhraseDictionarySCFG::GetTargetPhraseCollection(co
*/
}
-void PhraseDictionarySCFG::InitializeForInput(const InputType& input)
+void PhraseDictionarySCFG::InitializeForInput(const InputType& /* input */)
{
// Nothing to do: sentence-specific state is stored in ChartRuleLookupManager
}
@@ -273,7 +269,7 @@ void PhraseDictionarySCFG::CleanUp()
ChartRuleLookupManager *PhraseDictionarySCFG::CreateRuleLookupManager(
const InputType &sentence,
- const CellCollection &cellCollection)
+ const ChartCellCollection &cellCollection)
{
return new ChartRuleLookupManagerMemory(sentence, cellCollection, *this);
}
diff --git a/moses/src/PhraseDictionarySCFG.h b/moses/src/PhraseDictionarySCFG.h
index f8b1df725..dd79289c3 100644
--- a/moses/src/PhraseDictionarySCFG.h
+++ b/moses/src/PhraseDictionarySCFG.h
@@ -24,16 +24,14 @@
#include "PhraseDictionary.h"
#include "PhraseDictionaryNodeSCFG.h"
-#include "CellCollection.h"
#include "InputType.h"
-#include "WordConsumed.h"
#include "NonTerminal.h"
namespace Moses
{
class ChartTranslationOptionList;
-class ProcessedRuleStack;
-class ProcessedRuleColl;
+class DottedRuleStack;
+class DottedRuleColl;
/*** Implementation of a phrase table in a trie. Looking up a phrase of
* length n words requires n look-ups to find the TargetPhraseCollection.
@@ -106,7 +104,7 @@ public:
ChartRuleLookupManager *CreateRuleLookupManager(
const InputType &,
- const CellCollection &);
+ const ChartCellCollection &);
};
} // namespace Moses
diff --git a/moses/src/PhraseDictionaryTree.cpp b/moses/src/PhraseDictionaryTree.cpp
index 70f4a7b03..634ffa967 100644
--- a/moses/src/PhraseDictionaryTree.cpp
+++ b/moses/src/PhraseDictionaryTree.cpp
@@ -136,7 +136,8 @@ static WordVoc* ReadVoc(const std::string& filename)
}
-struct PDTimp {
+class PDTimp {
+public:
typedef PrefixTreeF<LabelId,OFF_T> PTF;
typedef FilePtr<PTF> CPT;
typedef std::vector<CPT> Data;
diff --git a/moses/src/PhraseDictionaryTreeAdaptor.h b/moses/src/PhraseDictionaryTreeAdaptor.h
index a6ee31fe7..9f4567eb2 100644
--- a/moses/src/PhraseDictionaryTreeAdaptor.h
+++ b/moses/src/PhraseDictionaryTreeAdaptor.h
@@ -70,7 +70,7 @@ public:
virtual ChartRuleLookupManager *CreateRuleLookupManager(
const InputType &,
- const CellCollection &) {
+ const ChartCellCollection &) {
assert(false);
return 0;
}
diff --git a/moses/src/PrefixTree.h b/moses/src/PrefixTree.h
index 1987d5d59..c6eafb4ce 100644
--- a/moses/src/PrefixTree.h
+++ b/moses/src/PrefixTree.h
@@ -60,7 +60,9 @@ public:
if(i==keys.end() || *i!=*b) {
keys.insert(i,*b);
data.insert(data.begin()+pos,def);
- ptr.insert(ptr.begin()+pos,0);
+
+ Self *self = NULL;
+ ptr.insert(ptr.begin()+pos, self);
}
if(++b!=e) {
if(!ptr[pos]) ptr[pos]=new Self;
diff --git a/moses/src/RuleCube.cpp b/moses/src/RuleCube.cpp
new file mode 100644
index 000000000..5f2c027bb
--- /dev/null
+++ b/moses/src/RuleCube.cpp
@@ -0,0 +1,104 @@
+// $Id$
+// vim:tabstop=2
+/***********************************************************************
+ Moses - factored phrase-based language decoder
+ Copyright (C) 2010 Hieu Hoang
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ ***********************************************************************/
+
+#include "ChartCell.h"
+#include "ChartCellCollection.h"
+#include "ChartTranslationOption.h"
+#include "ChartTranslationOptionCollection.h"
+#include "RuleCube.h"
+#include "RuleCubeQueue.h"
+#include "StaticData.h"
+#include "Util.h"
+#include "WordsRange.h"
+
+#ifdef HAVE_BOOST
+#include <boost/functional/hash.hpp>
+#endif
+
+namespace Moses
+{
+
+// initialise the RuleCube by creating the top-left corner item
+RuleCube::RuleCube(const ChartTranslationOption &transOpt,
+ const ChartCellCollection &allChartCells,
+ ChartManager &manager)
+ : m_transOpt(transOpt)
+{
+ RuleCubeItem *item = new RuleCubeItem(transOpt, allChartCells);
+ m_covered.insert(item);
+ if (StaticData::Instance().GetCubePruningLazyScoring()) {
+ item->EstimateScore();
+ } else {
+ item->CreateHypothesis(transOpt, manager);
+ }
+ m_queue.push(item);
+}
+
+RuleCube::~RuleCube()
+{
+ RemoveAllInColl(m_covered);
+}
+
+RuleCubeItem *RuleCube::Pop(ChartManager &manager)
+{
+ RuleCubeItem *item = m_queue.top();
+ m_queue.pop();
+ CreateNeighbors(*item, manager);
+ return item;
+}
+
+// create new RuleCube for neighboring principle rules
+void RuleCube::CreateNeighbors(const RuleCubeItem &item, ChartManager &manager)
+{
+ // create neighbor along translation dimension
+ const TranslationDimension &translationDimension =
+ item.GetTranslationDimension();
+ if (translationDimension.HasMoreTranslations()) {
+ CreateNeighbor(item, -1, manager);
+ }
+
+ // create neighbors along all hypothesis dimensions
+ for (size_t i = 0; i < item.GetHypothesisDimensions().size(); ++i) {
+ const HypothesisDimension &dimension = item.GetHypothesisDimensions()[i];
+ if (dimension.HasMoreHypo()) {
+ CreateNeighbor(item, i, manager);
+ }
+ }
+}
+
+void RuleCube::CreateNeighbor(const RuleCubeItem &item, int dimensionIndex,
+ ChartManager &manager)
+{
+ RuleCubeItem *newItem = new RuleCubeItem(item, dimensionIndex);
+ std::pair<ItemSet::iterator, bool> result = m_covered.insert(newItem);
+ if (!result.second) {
+ delete newItem; // already seen it
+ } else {
+ if (StaticData::Instance().GetCubePruningLazyScoring()) {
+ newItem->EstimateScore();
+ } else {
+ newItem->CreateHypothesis(m_transOpt, manager);
+ }
+ m_queue.push(newItem);
+ }
+}
+
+}
diff --git a/moses/src/RuleCube.h b/moses/src/RuleCube.h
new file mode 100644
index 000000000..2fa6cdedf
--- /dev/null
+++ b/moses/src/RuleCube.h
@@ -0,0 +1,139 @@
+// $Id$
+// vim:tabstop=2
+/***********************************************************************
+ Moses - factored phrase-based language decoder
+ Copyright (C) 2010 Hieu Hoang
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ ***********************************************************************/
+
+#pragma once
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "RuleCubeItem.h"
+
+#ifdef HAVE_BOOST
+#include <boost/functional/hash.hpp>
+#include <boost/unordered_set.hpp>
+#include <boost/version.hpp>
+#endif
+
+#include <cassert>
+#include <queue>
+#include <set>
+#include <vector>
+
+namespace Moses
+{
+
+class ChartCellCollection;
+class ChartManager;
+class ChartTranslationOption;
+
+// Define an ordering between RuleCubeItems based on their scores. This
+// is used to order items in the cube's priority queue.
+class RuleCubeItemScoreOrderer
+{
+ public:
+ bool operator()(const RuleCubeItem *p, const RuleCubeItem *q) const {
+ return p->GetScore() < q->GetScore();
+ }
+};
+
+// Define an ordering between RuleCubeItems based on their positions in the
+// cube. This is used to record which positions in the cube have been covered
+// during search.
+class RuleCubeItemPositionOrderer
+{
+ public:
+ bool operator()(const RuleCubeItem *p, const RuleCubeItem *q) const {
+ return *p < *q;
+ }
+};
+
+#ifdef HAVE_BOOST
+class RuleCubeItemHasher
+{
+ public:
+ size_t operator()(const RuleCubeItem *p) const {
+ size_t seed = 0;
+ boost::hash_combine(seed, p->GetHypothesisDimensions());
+ boost::hash_combine(seed, p->GetTranslationDimension().GetTargetPhrase());
+ return seed;
+ }
+};
+
+class RuleCubeItemEqualityPred
+{
+ public:
+ bool operator()(const RuleCubeItem *p, const RuleCubeItem *q) const {
+ return p->GetHypothesisDimensions() == q->GetHypothesisDimensions() &&
+ p->GetTranslationDimension() == q->GetTranslationDimension();
+ }
+};
+#endif
+
+class RuleCube
+{
+ public:
+ RuleCube(const ChartTranslationOption &, const ChartCellCollection &,
+ ChartManager &);
+
+ ~RuleCube();
+
+ float GetTopScore() const {
+ assert(!m_queue.empty());
+ RuleCubeItem *item = m_queue.top();
+ return item->GetScore();
+ }
+
+ RuleCubeItem *Pop(ChartManager &);
+
+ bool IsEmpty() const { return m_queue.empty(); }
+
+ const ChartTranslationOption &GetTranslationOption() const {
+ return m_transOpt;
+ }
+
+ private:
+#if defined(BOOST_VERSION) && (BOOST_VERSION >= 104200)
+ typedef boost::unordered_set<RuleCubeItem*,
+ RuleCubeItemHasher,
+ RuleCubeItemEqualityPred
+ > ItemSet;
+#else
+ typedef std::set<RuleCubeItem*, RuleCubeItemPositionOrderer> ItemSet;
+#endif
+
+ typedef std::priority_queue<RuleCubeItem*,
+ std::vector<RuleCubeItem*>,
+ RuleCubeItemScoreOrderer
+ > Queue;
+
+ RuleCube(const RuleCube &); // Not implemented
+ RuleCube &operator=(const RuleCube &); // Not implemented
+
+ void CreateNeighbors(const RuleCubeItem &, ChartManager &);
+ void CreateNeighbor(const RuleCubeItem &, int, ChartManager &);
+
+ const ChartTranslationOption &m_transOpt;
+ ItemSet m_covered;
+ Queue m_queue;
+};
+
+}
diff --git a/moses/src/RuleCubeItem.cpp b/moses/src/RuleCubeItem.cpp
new file mode 100644
index 000000000..cf3d18aa8
--- /dev/null
+++ b/moses/src/RuleCubeItem.cpp
@@ -0,0 +1,139 @@
+/***********************************************************************
+ Moses - statistical machine translation system
+ Copyright (C) 2006-2011 University of Edinburgh
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ ***********************************************************************/
+
+#include "ChartCell.h"
+#include "ChartCellCollection.h"
+#include "ChartTranslationOption.h"
+#include "ChartTranslationOptionCollection.h"
+#include "DotChart.h"
+#include "RuleCubeItem.h"
+#include "RuleCubeQueue.h"
+#include "WordsRange.h"
+#include "Util.h"
+
+#ifdef HAVE_BOOST
+#include <boost/functional/hash.hpp>
+#endif
+
+namespace Moses
+{
+
+#ifdef HAVE_BOOST
+std::size_t hash_value(const HypothesisDimension &dimension)
+{
+ boost::hash<const ChartHypothesis*> hasher;
+ return hasher(dimension.GetHypothesis());
+}
+#endif
+
+RuleCubeItem::RuleCubeItem(const ChartTranslationOption &transOpt,
+ const ChartCellCollection &allChartCells)
+ : m_translationDimension(0,
+ transOpt.GetTargetPhraseCollection().GetCollection())
+ , m_hypothesis(0)
+{
+ CreateHypothesisDimensions(transOpt.GetDottedRule(), allChartCells);
+}
+
+// create the RuleCube from an existing one, differing only in one dimension
+RuleCubeItem::RuleCubeItem(const RuleCubeItem &copy, int hypoDimensionIncr)
+ : m_translationDimension(copy.m_translationDimension)
+ , m_hypothesisDimensions(copy.m_hypothesisDimensions)
+ , m_hypothesis(0)
+{
+ if (hypoDimensionIncr == -1) {
+ m_translationDimension.IncrementPos();
+ } else {
+ HypothesisDimension &dimension = m_hypothesisDimensions[hypoDimensionIncr];
+ dimension.IncrementPos();
+ }
+}
+
+RuleCubeItem::~RuleCubeItem()
+{
+ delete m_hypothesis;
+}
+
+void RuleCubeItem::EstimateScore()
+{
+ m_score = m_translationDimension.GetTargetPhrase()->GetFutureScore();
+ std::vector<HypothesisDimension>::const_iterator p;
+ for (p = m_hypothesisDimensions.begin();
+ p != m_hypothesisDimensions.end(); ++p) {
+ m_score += p->GetHypothesis()->GetTotalScore();
+ }
+}
+
+void RuleCubeItem::CreateHypothesis(const ChartTranslationOption &transOpt,
+ ChartManager &manager)
+{
+ m_hypothesis = new ChartHypothesis(transOpt, *this, manager);
+ m_hypothesis->CalcScore();
+ m_score = m_hypothesis->GetTotalScore();
+}
+
+ChartHypothesis *RuleCubeItem::ReleaseHypothesis()
+{
+ assert(m_hypothesis);
+ ChartHypothesis *hypo = m_hypothesis;
+ m_hypothesis = 0;
+ return hypo;
+}
+
+// for each non-terminal, create a ordered list of matching hypothesis from the
+// chart
+void RuleCubeItem::CreateHypothesisDimensions(
+ const DottedRule &dottedRule,
+ const ChartCellCollection &allChartCells)
+{
+ assert(!dottedRule.IsRoot());
+
+ const DottedRule *prev = dottedRule.GetPrev();
+ if (!prev->IsRoot()) {
+ CreateHypothesisDimensions(*prev, allChartCells);
+ }
+
+ // only deal with non-terminals
+ if (dottedRule.IsNonTerminal()) {
+ // get a sorted list of the underlying hypotheses
+ const ChartCellLabel &cellLabel = dottedRule.GetChartCellLabel();
+ const ChartHypothesisCollection *hypoColl = cellLabel.GetStack();
+ assert(hypoColl);
+ const HypoList &hypoList = hypoColl->GetSortedHypotheses();
+
+ // there have to be hypothesis with the desired non-terminal
+ // (otherwise the rule would not be considered)
+ assert(!hypoList.empty());
+
+ // create a list of hypotheses that match the non-terminal
+ HypothesisDimension dimension(0, hypoList);
+ // add them to the vector for such lists
+ m_hypothesisDimensions.push_back(dimension);
+ }
+}
+
+bool RuleCubeItem::operator<(const RuleCubeItem &compare) const
+{
+ if (m_translationDimension == compare.m_translationDimension) {
+ return m_hypothesisDimensions < compare.m_hypothesisDimensions;
+ }
+ return m_translationDimension < compare.m_translationDimension;
+}
+
+}
diff --git a/moses/src/RuleCubeItem.h b/moses/src/RuleCubeItem.h
new file mode 100644
index 000000000..d9edff04f
--- /dev/null
+++ b/moses/src/RuleCubeItem.h
@@ -0,0 +1,148 @@
+/***********************************************************************
+ Moses - statistical machine translation system
+ Copyright (C) 2006-2011 University of Edinburgh
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ ***********************************************************************/
+
+#pragma once
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <vector>
+
+namespace Moses
+{
+
+class ChartCellCollection;
+class ChartHypothesis;
+class ChartManager;
+class ChartTranslationOption;
+class DottedRule;
+class TargetPhrase;
+
+typedef std::vector<const ChartHypothesis*> HypoList;
+
+// wrapper around list of target phrase translation options
+class TranslationDimension
+{
+ public:
+ TranslationDimension(std::size_t pos,
+ const std::vector<TargetPhrase*> &orderedTargetPhrases)
+ : m_pos(pos)
+ , m_orderedTargetPhrases(&orderedTargetPhrases)
+ {}
+
+ std::size_t IncrementPos() { return m_pos++; }
+
+ bool HasMoreTranslations() const {
+ return m_pos+1 < m_orderedTargetPhrases->size();
+ }
+
+ const TargetPhrase *GetTargetPhrase() const {
+ return (*m_orderedTargetPhrases)[m_pos];
+ }
+
+ bool operator<(const TranslationDimension &compare) const {
+ return GetTargetPhrase() < compare.GetTargetPhrase();
+ }
+
+ bool operator==(const TranslationDimension &compare) const {
+ return GetTargetPhrase() == compare.GetTargetPhrase();
+ }
+
+ private:
+ std::size_t m_pos;
+ const std::vector<TargetPhrase*> *m_orderedTargetPhrases;
+};
+
+
+// wrapper around list of hypotheses for a particular non-term of a trans opt
+class HypothesisDimension
+{
+public:
+ HypothesisDimension(std::size_t pos, const HypoList &orderedHypos)
+ : m_pos(pos)
+ , m_orderedHypos(&orderedHypos)
+ {}
+
+ std::size_t IncrementPos() { return m_pos++; }
+
+ bool HasMoreHypo() const {
+ return m_pos+1 < m_orderedHypos->size();
+ }
+
+ const ChartHypothesis *GetHypothesis() const {
+ return (*m_orderedHypos)[m_pos];
+ }
+
+ bool operator<(const HypothesisDimension &compare) const {
+ return GetHypothesis() < compare.GetHypothesis();
+ }
+
+ bool operator==(const HypothesisDimension &compare) const {
+ return GetHypothesis() == compare.GetHypothesis();
+ }
+
+private:
+ std::size_t m_pos;
+ const HypoList *m_orderedHypos;
+};
+
+#ifdef HAVE_BOOST
+std::size_t hash_value(const HypothesisDimension &);
+#endif
+
+class RuleCubeItem
+{
+ public:
+ RuleCubeItem(const ChartTranslationOption &, const ChartCellCollection &);
+ RuleCubeItem(const RuleCubeItem &, int);
+ ~RuleCubeItem();
+
+ const TranslationDimension &GetTranslationDimension() const {
+ return m_translationDimension;
+ }
+
+ const std::vector<HypothesisDimension> &GetHypothesisDimensions() const {
+ return m_hypothesisDimensions;
+ }
+
+ float GetScore() const { return m_score; }
+
+ void EstimateScore();
+
+ void CreateHypothesis(const ChartTranslationOption &, ChartManager &);
+
+ ChartHypothesis *ReleaseHypothesis();
+
+ bool operator<(const RuleCubeItem &) const;
+
+ private:
+ RuleCubeItem(const RuleCubeItem &); // Not implemented
+ RuleCubeItem &operator=(const RuleCubeItem &); // Not implemented
+
+ void CreateHypothesisDimensions(const DottedRule &,
+ const ChartCellCollection &);
+
+ TranslationDimension m_translationDimension;
+ std::vector<HypothesisDimension> m_hypothesisDimensions;
+ ChartHypothesis *m_hypothesis;
+ float m_score;
+};
+
+}
diff --git a/moses/src/RuleCubeQueue.cpp b/moses/src/RuleCubeQueue.cpp
new file mode 100644
index 000000000..89020a4e5
--- /dev/null
+++ b/moses/src/RuleCubeQueue.cpp
@@ -0,0 +1,68 @@
+// $Id$
+// vim:tabstop=2
+/***********************************************************************
+ Moses - factored phrase-based language decoder
+ Copyright (C) 2010 Hieu Hoang
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ ***********************************************************************/
+
+#include "RuleCubeQueue.h"
+
+#include "RuleCubeItem.h"
+#include "StaticData.h"
+
+namespace Moses
+{
+
+RuleCubeQueue::~RuleCubeQueue()
+{
+ while (!m_queue.empty()) {
+ RuleCube *cube = m_queue.top();
+ m_queue.pop();
+ delete cube;
+ }
+}
+
+void RuleCubeQueue::Add(RuleCube *ruleCube)
+{
+ m_queue.push(ruleCube);
+}
+
+ChartHypothesis *RuleCubeQueue::Pop()
+{
+ // pop the most promising rule cube
+ RuleCube *cube = m_queue.top();
+ m_queue.pop();
+
+ // pop the most promising item from the cube and get the corresponding
+ // hypothesis
+ RuleCubeItem *item = cube->Pop(m_manager);
+ if (StaticData::Instance().GetCubePruningLazyScoring()) {
+ item->CreateHypothesis(cube->GetTranslationOption(), m_manager);
+ }
+ ChartHypothesis *hypo = item->ReleaseHypothesis();
+
+ // if the cube contains more items then push it back onto the queue
+ if (!cube->IsEmpty()) {
+ m_queue.push(cube);
+ } else {
+ delete cube;
+ }
+
+ return hypo;
+}
+
+}
diff --git a/moses-chart/src/Cube.cpp b/moses/src/RuleCubeQueue.h
index 14c2b35ad..5ef3b3af2 100644
--- a/moses-chart/src/Cube.cpp
+++ b/moses/src/RuleCubeQueue.h
@@ -19,43 +19,48 @@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
***********************************************************************/
-#include "Cube.h"
+#pragma once
-#include "../../moses/src/Util.h"
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
-using namespace std;
+#include "RuleCube.h"
-namespace MosesChart
-{
-Cube::~Cube()
+#include <queue>
+#include <vector>
+
+namespace Moses
{
- Moses::RemoveAllInColl(m_uniqueEntry);
-}
-bool Cube::Add(QueueEntry *queueEntry)
+class ChartManager;
+
+// Define an ordering between RuleCube based on their best item scores. This
+// is used to order items in the priority queue.
+class RuleCubeOrderer
{
- pair<UniqueCubeEntry::iterator, bool> inserted = m_uniqueEntry.insert(queueEntry);
-
- if (inserted.second) {
- // inserted
- m_sortedByScore.push(queueEntry);
- } else {
- // already there
- delete queueEntry;
+ public:
+ bool operator()(const RuleCube *p, const RuleCube *q) const {
+ return p->GetTopScore() < q->GetTopScore();
}
+};
- //assert(m_uniqueEntry.size() == m_sortedByScore.size());
+class RuleCubeQueue
+{
+ public:
+ RuleCubeQueue(ChartManager &manager) : m_manager(manager) {}
+ ~RuleCubeQueue();
- return inserted.second;
-}
+ void Add(RuleCube *);
+ ChartHypothesis *Pop();
+ bool IsEmpty() const { return m_queue.empty(); }
-QueueEntry *Cube::Pop()
-{
- QueueEntry *entry = m_sortedByScore.top();
- m_sortedByScore.pop();
+ private:
+ typedef std::priority_queue<RuleCube*, std::vector<RuleCube*>,
+ RuleCubeOrderer > Queue;
- return entry;
-}
+ Queue m_queue;
+ ChartManager &m_manager;
+};
}
-
diff --git a/moses/src/Sentence.cpp b/moses/src/Sentence.cpp
index 43f31f554..7e1d611a3 100644
--- a/moses/src/Sentence.cpp
+++ b/moses/src/Sentence.cpp
@@ -34,7 +34,7 @@ namespace Moses
{
Sentence::Sentence(FactorDirection direction)
- : Phrase(direction)
+ : Phrase(direction, 0)
, InputType()
{
assert(direction == Input);
diff --git a/moses/src/StaticData.cpp b/moses/src/StaticData.cpp
index 0218bcdea..45e04fcdc 100644
--- a/moses/src/StaticData.cpp
+++ b/moses/src/StaticData.cpp
@@ -50,6 +50,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#include "BleuScoreFeature.h"
#include "ScoreComponentCollection.h"
+#ifdef HAVE_SYNLM
+#include "SyntacticLanguageModel.h"
+#endif
+
using namespace std;
namespace Moses
@@ -350,6 +354,8 @@ bool StaticData::LoadData(Parameter *parameter)
m_cubePruningDiversity = (m_parameter->GetParam("cube-pruning-diversity").size() > 0)
? Scan<size_t>(m_parameter->GetParam("cube-pruning-diversity")[0]) : DEFAULT_CUBE_PRUNING_DIVERSITY;
+ SetBooleanParameter(&m_cubePruningLazyScoring, "cube-pruning-lazy-scoring", false);
+
// unknown word processing
SetBooleanParameter( &m_dropUnknown, "drop-unknown", false );
@@ -416,12 +422,12 @@ bool StaticData::LoadData(Parameter *parameter)
if (vecStr.size() == 1) {
sentenceID++;
- Phrase phrase(Output);
+ Phrase phrase(Output, 0);
phrase.CreateFromString(GetOutputFactorOrder(), vecStr[0], GetFactorDelimiter());
m_constraints.insert(make_pair(sentenceID,phrase));
} else if (vecStr.size() == 2) {
sentenceID = Scan<long>(vecStr[0]);
- Phrase phrase(Output);
+ Phrase phrase(Output, 0);
phrase.CreateFromString(GetOutputFactorOrder(), vecStr[1], GetFactorDelimiter());
m_constraints.insert(make_pair(sentenceID,phrase));
} else {
@@ -441,6 +447,12 @@ bool StaticData::LoadData(Parameter *parameter)
return false;
}
+#ifdef HAVE_SYNLM
+ if (m_parameter->GetParam("slmodel-file").size() > 0) {
+ if (!LoadSyntacticLanguageModel()) return false;
+ }
+#endif
+
if (!LoadLexicalReorderingModel()) return false;
if (!LoadLanguageModels()) return false;
if (!LoadGenerationTables()) return false;
@@ -494,7 +506,7 @@ bool StaticData::LoadData(Parameter *parameter)
m_distortionScoreProducers.assign(tsConfig.size(), NULL);
} else {
if (m_distortionScoreProducers.size() != tsConfig.size()) {
- UserMessage::Add(string("Mismatch between number of distortion scores and number of translation systems"));
+ UserMessage::Add(string("Mismatch between number of distortion scores and number of translation systems. Or [search-algorithm] has been set to a phrase-based algorithm when it should be chart decoding"));
return false;
}
}
@@ -579,6 +591,11 @@ bool StaticData::LoadData(Parameter *parameter)
if (m_wordTranslationFeature) {
m_translationSystems.find(config[0])->second.AddFeatureFunction(m_wordTranslationFeature);
}
+#ifdef HAVE_SYNLM
+ if (m_syntacticLanguageModel != NULL) {
+ m_translationSystems.find(config[0])->second.AddFeatureFunction(m_syntacticLanguageModel);
+ }
+#endif
}
//Load extra feature weights
@@ -635,17 +652,19 @@ StaticData::~StaticData()
RemoveAllInColl(m_generationDictionary);
RemoveAllInColl(m_reorderModels);
RemoveAllInColl(m_globalLexicalModels);
+
+#ifdef HAVE_SYNLM
+ delete m_syntacticLanguageModel;
+#endif
+
+
RemoveAllInColl(m_decodeGraphs);
RemoveAllInColl(m_wordPenaltyProducers);
RemoveAllInColl(m_distortionScoreProducers);
m_languageModel.CleanUp();
// delete trans opt
- map<std::pair<size_t, Phrase>, std::pair< TranslationOptionList*, clock_t > >::iterator iterCache;
- for (iterCache = m_transOptCache.begin() ; iterCache != m_transOptCache.end() ; ++iterCache) {
- TranslationOptionList *transOptList = iterCache->second.first;
- delete transOptList;
- }
+ ClearTransOptionCache();
// small score producers
delete m_unknownWordPenaltyProducer;
@@ -664,6 +683,61 @@ StaticData::~StaticData()
}
+#ifdef HAVE_SYNLM
+ bool StaticData::LoadSyntacticLanguageModel() {
+ cerr << "Loading syntactic language models..." << std::endl;
+
+ const vector<float> weights = Scan<float>(m_parameter->GetParam("weight-slm"));
+ const vector<string> files = m_parameter->GetParam("slmodel-file");
+
+ const FactorType factorType = (m_parameter->GetParam("slmodel-factor").size() > 0) ?
+ TransformScore(Scan<int>(m_parameter->GetParam("slmodel-factor")[0]))
+ : 0;
+
+ const size_t beamWidth = (m_parameter->GetParam("slmodel-beam").size() > 0) ?
+ TransformScore(Scan<int>(m_parameter->GetParam("slmodel-beam")[0]))
+ : 500;
+
+ if (files.size() < 1) {
+ cerr << "No syntactic language model files specified!" << std::endl;
+ return false;
+ }
+
+ // check if feature is used
+ if (weights.size() >= 1) {
+
+ //cout.setf(ios::scientific,ios::floatfield);
+ //cerr.setf(ios::scientific,ios::floatfield);
+
+ // create the feature
+ m_syntacticLanguageModel = new SyntacticLanguageModel(files,weights,factorType,beamWidth);
+
+ /*
+ /////////////////////////////////////////
+ // BEGIN LANE's UNSTABLE EXPERIMENT :)
+ //
+
+ double ppl = m_syntacticLanguageModel->perplexity();
+ cerr << "Probability is " << ppl << endl;
+
+
+ //
+ // END LANE's UNSTABLE EXPERIMENT
+ /////////////////////////////////////////
+ */
+
+
+ if (m_syntacticLanguageModel==NULL) {
+ return false;
+ }
+
+ }
+
+ return true;
+
+ }
+#endif
+
bool StaticData::LoadLexicalReorderingModel()
{
VERBOSE(1, "Loading lexical distortion models...");
@@ -1534,6 +1608,13 @@ void StaticData::AddTransOptListToCache(const DecodeGraph &decodeGraph, const Ph
m_transOptCache[key] = make_pair( storedTransOptList, clock() );
ReduceTransOptCache();
}
+void StaticData::ClearTransOptionCache() const {
+ map<std::pair<size_t, Phrase>, std::pair< TranslationOptionList*, clock_t > >::iterator iterCache;
+ for (iterCache = m_transOptCache.begin() ; iterCache != m_transOptCache.end() ; ++iterCache) {
+ TranslationOptionList *transOptList = iterCache->second.first;
+ delete transOptList;
+ }
+}
void StaticData::ReLoadParameter()
{
diff --git a/moses/src/StaticData.h b/moses/src/StaticData.h
index 991befc00..707058b9e 100644
--- a/moses/src/StaticData.h
+++ b/moses/src/StaticData.h
@@ -71,6 +71,9 @@ class DistortionScoreProducer;
class DecodeStep;
class UnknownWordPenaltyProducer;
class TargetBigramFeature;
+#ifdef HAVE_SYNLM
+class SyntacticLanguageModel;
+#endif
class TranslationSystem;
typedef std::pair<std::string, float> UnknownLHSEntry;
@@ -86,12 +89,15 @@ protected:
std::map<long,Phrase> m_constraints;
std::vector<PhraseDictionaryFeature*> m_phraseDictionary;
std::vector<GenerationDictionary*> m_generationDictionary;
- Parameter *m_parameter;
- std::vector<FactorType> m_inputFactorOrder, m_outputFactorOrder;
+ Parameter *m_parameter;
+ std::vector<FactorType> m_inputFactorOrder, m_outputFactorOrder;
LMList m_languageModel;
ScoreComponentCollection m_allWeights;
std::vector<LexicalReordering*> m_reorderModels;
std::vector<GlobalLexicalModel*> m_globalLexicalModels;
+#ifdef HAVE_SYNLM
+ SyntacticLanguageModel* m_syntacticLanguageModel;
+#endif
std::vector<DecodeGraph*> m_decodeGraphs;
std::vector<size_t> m_decodeGraphBackoff;
// Initial = 0 = can be used when creating poss trans
@@ -115,10 +121,10 @@ protected:
// do it differently from old pharaoh
// -ve = no limit on distortion
// 0 = no disortion (monotone in old pharaoh)
- bool m_reorderingConstraint; // use additional reordering constraints
+ bool m_reorderingConstraint; //! use additional reordering constraints
size_t
- m_maxHypoStackSize //hypothesis-stack size that triggers pruning
- , m_minHypoStackDiversity // minimum number of hypothesis in stack for each source word coverage
+ m_maxHypoStackSize //! hypothesis-stack size that triggers pruning
+ , m_minHypoStackDiversity //! minimum number of hypothesis in stack for each source word coverage
, m_nBestSize
, m_nBestFactor
, m_maxNoTransOptPerCoverage
@@ -131,11 +137,7 @@ protected:
std::string m_nBestFilePath;
bool m_fLMsLoaded, m_labeledNBestList,m_nBestIncludesAlignment;
- /***
- * false = treat unknown words as unknowns, and translate them as themselves;
- * true = drop (ignore) them
- */
- bool m_dropUnknown;
+ bool m_dropUnknown; //! false = treat unknown words as unknowns, and translate them as themselves; true = drop (ignore) them
bool m_wordDeletionEnabled;
bool m_disableDiscarding;
@@ -209,6 +211,7 @@ protected:
size_t m_cubePruningPopLimit;
size_t m_cubePruningDiversity;
+ bool m_cubePruningLazyScoring;
size_t m_ruleLimit;
@@ -229,15 +232,13 @@ protected:
//! helper fn to set bool param from ini file/command line
void SetBooleanParameter(bool *paramter, std::string parameterName, bool defaultValue);
-
- /***
- * load all language models as specified in ini file
- */
+ //! load all language models as specified in ini file
bool LoadLanguageModels();
- /***
- * load not only the main phrase table but also any auxiliary tables that depend on which features are being used
- * (eg word-deletion, word-insertion tables)
- */
+#ifdef HAVE_SYNLM
+ //! load syntactic language model
+ bool LoadSyntacticLanguageModel();
+#endif
+ //! load not only the main phrase table but also any auxiliary tables that depend on which features are being used (e.g., word-deletion, word-insertion tables)
bool LoadPhraseTables();
//! load all generation tables as specified in ini file
bool LoadGenerationTables();
@@ -285,16 +286,12 @@ public:
}
#endif
- /** load data into static instance. This function is required
- * as LoadData() is not const
- */
+ //! Load data into static instance. This function is required as LoadData() is not const
static bool LoadDataStatic(Parameter *parameter) {
return s_instance.LoadData(parameter);
}
- /** Main function to load everything.
- * Also initialize the Parameter object
- */
+ //! Main function to load everything. Also initialize the Parameter object
bool LoadData(Parameter *parameter);
const PARAM_VEC &GetParam(const std::string &paramName) const {
@@ -351,6 +348,9 @@ public:
size_t GetCubePruningDiversity() const {
return m_cubePruningDiversity;
}
+ bool GetCubePruningLazyScoring() const {
+ return m_cubePruningLazyScoring;
+ }
size_t IsPathRecoveryEnabled() const {
return m_recoverPath;
}
@@ -376,7 +376,6 @@ public:
const TranslationSystem& GetTranslationSystem(std::string id) const {
std::map<std::string, TranslationSystem>::const_iterator iter =
m_translationSystems.find(id);
- VERBOSE(2, "Looking for translation system id " << id << std::endl);
if (iter == m_translationSystems.end()) {
VERBOSE(1, "Translation system not found " << id << std::endl);
throw std::runtime_error("Unknown translation system id");
@@ -451,6 +450,9 @@ public:
SearchAlgorithm GetSearchAlgorithm() const {
return m_searchAlgorithm;
}
+ LMList GetLMList() const {
+ return m_languageModel;
+ }
size_t GetNumInputScores() const {
return m_numInputScores;
}
@@ -591,6 +593,8 @@ public:
void AddTransOptListToCache(const DecodeGraph &decodeGraph, const Phrase &sourcePhrase, const TranslationOptionList &transOptList) const;
+ void ClearTransOptionCache() const;
+
const TranslationOptionList* FindTransOptListInCache(const DecodeGraph &decodeGraph, const Phrase &sourcePhrase) const;
diff --git a/moses/src/SyntacticLanguageModel.cpp b/moses/src/SyntacticLanguageModel.cpp
new file mode 100755
index 000000000..85c19bdc0
--- /dev/null
+++ b/moses/src/SyntacticLanguageModel.cpp
@@ -0,0 +1,123 @@
+//
+
+#include "StaticData.h"
+#include "SyntacticLanguageModel.h"
+#include "HHMMLangModel-gf.h"
+#include "TextObsModel.h"
+#include "SyntacticLanguageModelFiles.h"
+#include "SyntacticLanguageModelState.h"
+
+
+namespace Moses
+{
+ // asnteousntaoheisnthaoesntih
+ SyntacticLanguageModel::SyntacticLanguageModel(const std::vector<std::string>& filePath,
+ const std::vector<float>& weights,
+ const FactorType factorType,
+ size_t beamWidth)
+ // Initialize member variables
+ : m_NumScoreComponents(weights.size())
+ , m_beamWidth(beamWidth)
+ , m_factorType(factorType)
+ , m_files(new SyntacticLanguageModelFiles<YModel,XModel>(filePath)) {
+
+ // Inform Moses score manager of this feature and its weight(s)
+ const_cast<ScoreIndexManager&>(StaticData::Instance().GetScoreIndexManager()).AddScoreProducer(this);
+ const_cast<StaticData&>(StaticData::Instance()).SetWeightsForScoreProducer(this, weights);
+ VERBOSE(3,"Constructed SyntacticLanguageModel" << endl);
+ }
+
+ SyntacticLanguageModel::~SyntacticLanguageModel() {
+ VERBOSE(3,"Destructing SyntacticLanguageModel" << std::endl);
+ // delete m_files;
+ }
+
+ size_t SyntacticLanguageModel::GetNumScoreComponents() const {
+ return m_NumScoreComponents;
+ }
+
+ std::string SyntacticLanguageModel::GetScoreProducerDescription() const {
+ return "Syntactic Language Model";
+ }
+
+ std::string SyntacticLanguageModel::GetScoreProducerWeightShortName() const {
+ return "slm";
+ }
+
+ const FFState* SyntacticLanguageModel::EmptyHypothesisState(const InputType &input) const {
+
+ return new SyntacticLanguageModelState<YModel,XModel,S,R>(m_files,m_beamWidth);
+
+ }
+
+ /*
+ double SyntacticLanguageModel::perplexity() {
+
+ SyntacticLanguageModelState<YModel,XModel,S,R> *prev =
+ new SyntacticLanguageModelState<YModel,XModel,S,R>(m_files,m_beamWidth);
+
+ std::cerr << "Initial prob:" << "\t" << prev->getProb() <<std::endl;
+
+
+ std::vector<std::string> words(3);
+ words[0] = "no";
+ words[1] = ",";
+ words[2] = "zxvth";
+
+
+ for (std::vector<std::string>::iterator i=words.begin();
+ i != words.end();
+ i++) {
+
+ prev = new SyntacticLanguageModelState<YModel,XModel,S,R>(prev, *i);
+ std::cerr << *i << "\t" << prev->getProb() <<std::endl;
+
+ }
+
+ if (true) exit(-1);
+
+ return prev->getProb();
+
+ }
+ */
+ FFState* SyntacticLanguageModel::Evaluate(const Hypothesis& cur_hypo,
+ const FFState* prev_state,
+ ScoreComponentCollection* accumulator) const {
+
+ VERBOSE(3,"Evaluating SyntacticLanguageModel for a hypothesis" << endl);
+
+ const SyntacticLanguageModelState<YModel,XModel,S,R>& prev =
+ static_cast<const SyntacticLanguageModelState<YModel,XModel,S,R>&>(*prev_state);
+
+ const SyntacticLanguageModelState<YModel,XModel,S,R>* currentState = &prev;
+ SyntacticLanguageModelState<YModel,XModel,S,R>* nextState = NULL;
+
+
+ const TargetPhrase& targetPhrase = cur_hypo.GetCurrTargetPhrase();
+
+ for (size_t i=0, n=targetPhrase.GetSize(); i<n; i++) {
+
+ const Word& word = targetPhrase.GetWord(i);
+ const Factor* factor = word.GetFactor(m_factorType);
+
+ const std::string& string = factor->GetString();
+
+ if (i==0) {
+ nextState = new SyntacticLanguageModelState<YModel,XModel,S,R>(&prev, string);
+ } else {
+ currentState = nextState;
+ nextState = new SyntacticLanguageModelState<YModel,XModel,S,R>(currentState, string);
+ }
+
+ double score = nextState->getScore();
+ VERBOSE(3,"SynLM evaluated a score of " << score << endl);
+ accumulator->Assign( this, score );
+ }
+
+
+
+ return nextState;
+
+ }
+
+}
diff --git a/moses/src/SyntacticLanguageModel.h b/moses/src/SyntacticLanguageModel.h
new file mode 100755
index 000000000..977a57680
--- /dev/null
+++ b/moses/src/SyntacticLanguageModel.h
@@ -0,0 +1,52 @@
+//
+
+#ifndef moses_SyntacticLanguageModel_h
+#define moses_SyntacticLanguageModel_h
+
+#include "FeatureFunction.h"
+
+
+class YModel; // hidden model
+class XModel; // observed model
+
+namespace Moses
+{
+
+ template <class MH, class MO> class SyntacticLanguageModelFiles;
+
+ class SyntacticLanguageModel : public StatefulFeatureFunction {
+
+ public:
+
+ SyntacticLanguageModel(const std::vector<std::string>& filePaths,
+ const std::vector<float>& weights,
+ const FactorType factorType,
+ const size_t beamWidth);
+
+ ~SyntacticLanguageModel();
+
+ size_t GetNumScoreComponents() const;
+ std::string GetScoreProducerDescription() const;
+ std::string GetScoreProducerWeightShortName() const;
+
+ const FFState* EmptyHypothesisState(const InputType &input) const;
+
+ FFState* Evaluate(const Hypothesis& cur_hypo,
+ const FFState* prev_state,
+ ScoreComponentCollection* accumulator) const;
+
+ // double perplexity();
+
+ private:
+
+ const size_t m_NumScoreComponents;
+ SyntacticLanguageModelFiles<YModel,XModel>* m_files;
+ const FactorType m_factorType;
+ const size_t m_beamWidth;
+
+ };
+
+
+}
+
+#endif
diff --git a/moses/src/SyntacticLanguageModelFiles.h b/moses/src/SyntacticLanguageModelFiles.h
new file mode 100755
index 000000000..318e22636
--- /dev/null
+++ b/moses/src/SyntacticLanguageModelFiles.h
@@ -0,0 +1,95 @@
+//
+
+#ifndef moses_SyntacticLanguageModelFiles_h
+#define moses_SyntacticLanguageModelFiles_h
+
+#include "nl-iomacros.h"
+#include "nl-string.h"
+
+namespace Moses
+{
+
+template <class MH, class MO>
+class SyntacticLanguageModelFiles {
+
+ public:
+
+ SyntacticLanguageModelFiles(const std::vector<std::string>& filePaths);
+ ~SyntacticLanguageModelFiles();
+
+ MH* getHiddenModel();
+ MO* getObservedModel();
+
+ private:
+ MH* hiddenModel;
+ MO* observedModel;
+
+};
+
+
+template <class MH, class MO>
+ SyntacticLanguageModelFiles<MH,MO>::SyntacticLanguageModelFiles(const std::vector<std::string>& filePaths) {
+
+ this->hiddenModel = new MH();
+ this->observedModel = new MO();
+
+ //// I. LOAD MODELS...
+ std::cerr << "Reading syntactic language model files...\n";
+ // For each model file...
+ for ( int a=0, n=filePaths.size(); a<n; a++ ) { // read models
+ FILE* pf = fopen(filePaths[a].c_str(),"r"); //assert(pf); // Read model file
+ if(!pf){
+ std::cerr << "Error loading model file " << filePaths[a] << std::endl;
+ return;
+ }
+ std::cerr << "Loading model \'" << filePaths[a] << "\'...\n";
+ int c=' '; int i=0; int line=1; String sBuff(1000); // Lookahead/ctrs/buffers
+ CONSUME_ALL ( pf, c, WHITESPACE(c), line); // Get to first record
+ while ( c!=-1 && c!='\0' && c!='\5' ) { // For each record
+ CONSUME_STR ( pf, c, (c!='\n' && c!='\0' && c!='\5'), sBuff, i, line ); // Consume line
+ StringInput si(sBuff.c_array());
+ if ( !( sBuff[0]=='#' // Accept comments/fields
+ || si>>*(this->hiddenModel)>>"\0"!=NULL
+ || si>>*(this->observedModel)>>"\0"!=NULL
+ ))
+ std::cerr<<"\nERROR: can't parse \'"<<sBuff<<"\' in line "<<line<<"\n\n";
+ CONSUME_ALL ( pf, c, WHITESPACE(c), line); // Consume whitespace
+ if ( line%100000==0 ) std::cerr<<" "<<line<<" lines read...\n"; // Progress for big models
+ }
+ std::cerr << "Model \'" << filePaths[a] << "\' loaded.\n";
+ }
+
+ std::cerr << "...reading syntactic language model files completed\n";
+
+
+}
+
+
+template <class MH, class MO>
+ SyntacticLanguageModelFiles<MH,MO>::~SyntacticLanguageModelFiles() {
+
+ std::cerr<<"Destructing syntactic language model files" << std::endl;
+ //delete hiddenModel;
+ //delete observedModel;
+
+}
+
+
+template <class MH, class MO>
+ MH* SyntacticLanguageModelFiles<MH,MO>::getHiddenModel() {
+
+ return this->hiddenModel;
+
+}
+
+template <class MH, class MO>
+ MO* SyntacticLanguageModelFiles<MH,MO>::getObservedModel() {
+
+ return this->observedModel;
+
+}
+
+
+}
+
+#endif
diff --git a/moses/src/SyntacticLanguageModelState.h b/moses/src/SyntacticLanguageModelState.h
new file mode 100755
index 000000000..0877a59b3
--- /dev/null
+++ b/moses/src/SyntacticLanguageModelState.h
@@ -0,0 +1,303 @@
+//
+
+#ifndef moses_SyntacticLanguageModelState_h
+#define moses_SyntacticLanguageModelState_h
+
+#include "nl-iomacros.h"
+#include "nl-cpt.h"
+#include "nl-hmm.h"
+
+#include "SyntacticLanguageModelFiles.h"
+#include "FFState.h"
+#include <string>
+
+namespace Moses
+{
+
+template <class MY, class MX, class YS=typename MY::RandVarType, class B=NullBackDat<typename MY::RandVarType> >
+ class SyntacticLanguageModelState : public FFState {
+ public:
+
+ // Initialize an empty LM state
+ SyntacticLanguageModelState( SyntacticLanguageModelFiles<MY,MX>* modelData, int beamSize );
+
+ // Get the next LM state from an existing LM state and the next word
+ SyntacticLanguageModelState( const SyntacticLanguageModelState* prev, std::string word );
+
+
+ ~SyntacticLanguageModelState() {
+ //cerr << "Deleting SyntacticLanguageModelState" << std::endl;
+ //delete randomVariableStore;
+ }
+
+ virtual int Compare(const FFState& other) const;
+
+ // Get the LM score from this LM state
+ double getScore() const;
+
+ double getProb() const;
+
+ private:
+
+ void setScore(double score);
+ void printRV();
+
+ SafeArray1D<Id<int>,pair<YS,LogProb> >* randomVariableStore;
+ double prob;
+ double score;
+ int beamSize;
+ SyntacticLanguageModelFiles<MY,MX>* modelData;
+ bool sentenceStart;
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+
+ template <class MY, class MX, class YS, class B>
+ void SyntacticLanguageModelState<MY,MX,YS,B>::printRV() {
+
+ cerr << "*********** BEGIN printRV() ******************" << endl;
+ int size=randomVariableStore->getSize();
+ cerr << "randomVariableStore->getSize() == " << size << endl;
+
+ for (int depth=0; depth<size; depth+=1) {
+
+
+ const pair<YS,LogProb> *data = &(randomVariableStore->get(depth));
+ std::cerr << "randomVariableStore[" << depth << "]\t" << data->first << "\tprob = " << data->second.toProb() << "\tlogProb = " << double(data->second.toInt())/100 << std::endl;
+
+ }
+ cerr << "*********** END printRV() ******************" << endl;
+
+ }
+
+// Initialize an empty LM state from grammar files
+//
+// nArgs is the number of model files
+// argv is the list of model file names
+//
+template <class MY, class MX, class YS, class B>
+ SyntacticLanguageModelState<MY,MX,YS,B>::SyntacticLanguageModelState( SyntacticLanguageModelFiles<MY,MX>* modelData, int beamSize ) {
+
+ this->randomVariableStore = new SafeArray1D<Id<int>,pair<YS,LogProb> >();
+ this->modelData = modelData;
+ this->beamSize = beamSize;
+
+ // Initialize an empty random variable value
+ YS xBEG;
+ StringInput(String(BEG_STATE).c_array())>>xBEG>>"\0";
+ cerr<<xBEG<<"\n";
+
+ // cout << "Examining RV store just before RV init" << endl;
+ //printRV();
+
+ // Initialize the random variable store
+ this->randomVariableStore->init(1,pair<YS,LogProb>(xBEG,0));
+
+ this->sentenceStart = true;
+
+ IFVERBOSE(3) {
+ VERBOSE(3,"Examining RV store just after RV init" << endl);
+ printRV();
+ }
+
+ // Get score of final frame in HHMM
+ LogProb l(1.0);
+ //score = l.toDouble();
+ setScore(l.toDouble());
+ // MY::F_ROOT_OBS = true;
+ // this->modelData->getHiddenModel()->setRootObs(true);
+
+
+}
+
+
+template <class MY, class MX, class YS, class B>
+ int SyntacticLanguageModelState<MY,MX,YS,B>::Compare(const FFState& other) const {
+ /*
+ const SyntacticLanguageModelState<MY,MX,YS,B>& o =
+ static_cast<const SyntacticLanguageModelState<MY,MX,YS,B>&>(other);
+
+ if (o.score > score) return 1;
+ else if (o.score < score) return -1;
+ else return 0;
+ */
+ return 0;
+ }
+
+
+template <class MY, class MX, class YS, class B>
+ SyntacticLanguageModelState<MY,MX,YS,B>::SyntacticLanguageModelState( const SyntacticLanguageModelState* prev, std::string word ) {
+
+ // Initialize member variables
+ this->randomVariableStore = new SafeArray1D<Id<int>,pair<YS,LogProb> >();
+ this->modelData = prev->modelData;
+ this->beamSize = prev->beamSize;
+ this->randomVariableStore->init(this->beamSize);
+ this->sentenceStart=false;
+
+ YS ysEND;
+ StringInput(String(END_STATE).c_array())>>ysEND>>"\0";
+
+ // Get HHMM model files
+ MY& mH = *(modelData->getHiddenModel());
+ MX& mO = *(modelData->getObservedModel());
+
+ // Initialize HHMM
+ HMM<MY,MX,YS,B> hmm(mH,mO);
+ int MAX_WORDS = 2;
+ hmm.init(MAX_WORDS,this->beamSize,prev->randomVariableStore);
+ typename MX::RandVarType x(word.c_str());
+ // cout << "Examining HHMM just after hmm.init" << endl;
+ // hmm.debugPrint();
+
+
+ /* cerr << "*********** BEGIN writeCurr() ******************" << endl;
+ hmm.writeCurr(cout,0);
+ hmm.writeCurr(cout,1);
+ cerr << "*********** END writeCurr() ******************" << endl;
+ */
+/*
+ {
+
+ int wnum=1;
+ list<TrellNode<YS,B> > lys = hmm.getMLSnodes(ysEND); // get mls list
+ for ( typename list<TrellNode<YS,B> >::iterator i=lys.begin(); i!=lys.end(); i++, wnum++ ) { // for each frame
+ cout << "HYPOTH " << wnum
+ << " " << i->getBackData()
+ << " " << x
+ << " " << i->getId()
+ << " (" << i->getLogProb() << ")"
+ << endl; // print RV val
+ }
+ }
+ */
+
+
+ /*
+ cerr << "Writing hmm.writeCurr" << endl;
+ hmm.writeCurr(cerr,0);
+ hmm.writeCurr(cerr,1);
+ cerr << "...done writing hmm.writeCurr" << endl;
+ */
+ hmm.getCurrSum();
+
+
+
+ // Initialize observed variable
+ // typename MX::RandVarType ov;
+ // ov.set(word.c_str(),mO);
+ // MY::WORD = ov.getW();
+ //bool endOfSentence = prev->sentenceStart;//true;
+
+ // std::cerr << "About to give HHMM a word of input:\t" << word << std::endl;
+
+ hmm.updateRanked(x, prev->sentenceStart);
+
+ // cout << "Examining HHMM just after hmm.updateRanked(" << x << "," << prev->sentenceStart << ")" << endl;
+ // hmm.debugPrint();
+/*
+ cerr << "*********** BEGIN writeCurr() ******************" << endl;
+ hmm.writeCurr(cout,0);
+ hmm.writeCurr(cout,1);
+ cerr << "*********** END writeCurr() ******************" << endl;
+ */
+/*
+{
+
+ int wnum=1;
+ list<TrellNode<YS,B> > lys = hmm.getMLSnodes(ysEND); // get mls list
+ for ( typename list<TrellNode<YS,B> >::iterator i=lys.begin(); i!=lys.end(); i++, wnum++ ) { // for each frame
+ cout << "HYPOTH " << wnum
+ << " " << i->getBackData()
+ << " " << x
+ << " " << i->getId()
+ << " (" << i->getLogProb() << ")"
+ << endl; // print RV val
+ }
+ }
+ */
+// X ov(word.c_str());
+ //mH.setWord(ov);
+ // MY::WORD = ov;//ov.getW();
+
+ // Update HHMM based on observed variable
+ //hmm.updateRanked(ov);
+ //mH.setRootObs(true);
+ //MY::F_ROOT_OBS = false;
+
+ // Get the current score
+ double currSum = hmm.getCurrSum();
+ //VERBOSE(3,"Setting score using currSum for " << scientific << x << " = " << currSum << endl);
+ setScore(currSum);
+ // cout << "Examining RV store just before RV init via gatherElementsInBeam" << endl;
+ // printRV();
+
+ // Get new hidden random variable store from HHMM
+ hmm.gatherElementsInBeam(randomVariableStore);
+ // cout << "Examining RV store just after RV init via gatherElementsInBeam" << endl;
+ // printRV();
+ /*
+ cerr << "Writing hmm.writeCurr..." << endl;
+ hmm.writeCurr(cerr,0);
+ hmm.writeCurr(cerr,1);
+ cerr << "...done writing hmm.writeCurr" << endl;
+ */
+}
+
+
+template <class MY, class MX, class YS, class B>
+double SyntacticLanguageModelState<MY,MX,YS,B>::getProb() const {
+
+ return prob;
+}
+
+template <class MY, class MX, class YS, class B>
+double SyntacticLanguageModelState<MY,MX,YS,B>::getScore() const {
+
+ return score;
+}
+
+
+template <class MY, class MX, class YS, class B>
+ void SyntacticLanguageModelState<MY,MX,YS,B>::setScore(double score) {
+
+
+
+
+ this->prob = score;
+
+ // We want values to range from -100 to 0
+ //
+ // If the minimum positive value for a double is min=4.94065645841246544e-324
+ // then to scale, we want a logarithmic base such that log_b(min)=-100
+ //
+ // -100 = log(min) / log(b)
+ //
+ // log(b) = log(min) / -100
+ //
+ // b = exp( log(min) / -100 )
+ //
+ // b = 7.44440071921381
+
+ // Check for score==0 to avoid causing -infinity with log(score)
+ if (score==0) {
+ this->score = -100;
+ } else {
+ double x = log(score) / 7.44440071921381;
+ if ( x >= -100) {
+ this->score = x;
+ } else {
+ this->score = -100;
+ }
+ }
+
+ VERBOSE(3,"\tSyntacticLanguageModelState has score=" << this->score << endl);
+
+}
+
+
+}
+
+#endif
diff --git a/moses/src/TargetBigramFeature.h b/moses/src/TargetBigramFeature.h
index 744f3a9ee..ccffa9c2c 100644
--- a/moses/src/TargetBigramFeature.h
+++ b/moses/src/TargetBigramFeature.h
@@ -47,6 +47,14 @@ public:
virtual FFState* Evaluate(const Hypothesis& cur_hypo, const FFState* prev_state,
ScoreComponentCollection* accumulator) const;
+
+ virtual FFState* EvaluateChart( const ChartHypothesis& /* cur_hypo */,
+ int /* featureID */,
+ ScoreComponentCollection* ) const
+ {
+ /* Not implemented */
+ assert(0);
+ }
private:
FactorType m_factorType;
Word m_bos;
diff --git a/moses/src/TargetPhrase.cpp b/moses/src/TargetPhrase.cpp
index 03899ec26..d624307f8 100644
--- a/moses/src/TargetPhrase.cpp
+++ b/moses/src/TargetPhrase.cpp
@@ -30,6 +30,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#include "ScoreComponentCollection.h"
#include "Util.h"
#include "DummyScoreProducers.h"
+#include "AlignmentInfoCollection.h"
using namespace std;
@@ -42,7 +43,8 @@ bool TargetPhrase::printalign=StaticData::Instance().PrintAlignmentInfo();
//bool TargetPhrase::printalign;
TargetPhrase::TargetPhrase(FactorDirection direction, std::string out_string)
- :Phrase(direction),m_transScore(0.0), m_ngramScore(0.0), m_fullScore(0.0), m_sourcePhrase(direction)
+ :Phrase(direction, 0),m_transScore(0.0), m_fullScore(0.0), m_sourcePhrase(direction,0)
+ , m_alignmentInfo(&AlignmentInfoCollection::Instance().GetEmptyAlignmentInfo())
{
//ACAT
@@ -54,11 +56,11 @@ TargetPhrase::TargetPhrase(FactorDirection direction, std::string out_string)
TargetPhrase::TargetPhrase(FactorDirection direction)
- :Phrase(direction)
- , m_transScore(0.0)
- , m_ngramScore(0.0)
- ,m_fullScore(0.0)
- ,m_sourcePhrase(direction)
+ :Phrase(direction, ARRAY_SIZE_INCR)
+ , m_transScore(0.0)
+ , m_fullScore(0.0)
+ ,m_sourcePhrase(direction, 0)
+ , m_alignmentInfo(&AlignmentInfoCollection::Instance().GetEmptyAlignmentInfo())
{
wordalignflag=StaticData::Instance().UseAlignmentInfo();
printalign=StaticData::Instance().PrintAlignmentInfo();
@@ -71,7 +73,7 @@ TargetPhrase::~TargetPhrase()
void TargetPhrase::SetScore(const TranslationSystem* system)
{
// used when creating translations of unknown words:
- m_transScore = m_ngramScore = 0;
+ m_transScore = 0;
m_fullScore = - system->GetWeightWordPenalty();
}
@@ -161,7 +163,6 @@ void TargetPhrase::SetScore(const ScoreProducer* translationScoreProducer,
}
}
- m_ngramScore = totalNgramScore;
m_fullScore = m_transScore + totalFutureScore + totalFullScore
- (this->GetSize() * weightWP); // word penalty
@@ -216,7 +217,7 @@ void TargetPhrase::SetScore(const ScoreProducer* producer, const Scores &scoreVe
{
// used when creating translations of unknown words (chart decoding)
m_scoreBreakdown.Assign(producer, scoreVector);
- m_transScore = m_ngramScore = 0;
+ m_transScore = 0;
m_fullScore = m_scoreBreakdown.GetWeightedScore();
}
@@ -236,7 +237,7 @@ void TargetPhrase::SetWeights(const ScoreProducer* translationScoreProducer, con
void TargetPhrase::ResetScore()
{
- m_fullScore = m_ngramScore = 0;
+ m_fullScore = 0;
m_scoreBreakdown.ZeroAll();
}
@@ -264,8 +265,9 @@ TargetPhrase *TargetPhrase::MergeNext(const TargetPhrase &inputPhrase) const
void TargetPhrase::SetAlignmentInfo(const std::string &alignString)
{
- list<pair<size_t,size_t> > alignmentInfo;
- vector<string> alignVec = Tokenize(alignString);
+ set<pair<size_t,size_t> > alignmentInfo;
+ vector<string> alignVec;
+ Tokenize(alignVec, alignString);
vector<string>::const_iterator iter;
for (iter = alignVec.begin(); iter != alignVec.end(); ++iter) {
@@ -275,22 +277,15 @@ void TargetPhrase::SetAlignmentInfo(const std::string &alignString)
size_t &sourcePos = alignPos[0]
,&targetPos = alignPos[1];
- alignmentInfo.push_back(pair<size_t,size_t>(sourcePos, targetPos));
+ alignmentInfo.insert(pair<size_t,size_t>(sourcePos, targetPos));
}
SetAlignmentInfo(alignmentInfo);
}
-void TargetPhrase::SetAlignmentInfo(const std::list<std::pair<size_t,size_t> > &alignmentInfo)
+void TargetPhrase::SetAlignmentInfo(const std::set<std::pair<size_t,size_t> > &alignmentInfo)
{
- m_alignmentInfo.AddAlignment(alignmentInfo);
-}
-
-void TargetPhrase::CreateCountInfo(const std::string &countStr)
-{
- vector<float> count = Moses::Tokenize<float>(countStr);
- assert(count.size() == 2);
- m_countInfo = Moses::CountInfo(count[1], count[0]);
+ m_alignmentInfo = AlignmentInfoCollection::Instance().Add(alignmentInfo);
}
diff --git a/moses/src/TargetPhrase.h b/moses/src/TargetPhrase.h
index 87ca43f53..afeb20867 100644
--- a/moses/src/TargetPhrase.h
+++ b/moses/src/TargetPhrase.h
@@ -39,43 +39,24 @@ namespace Moses
{
class LMList;
-class PhraseDictionary;
-class GenerationDictionary;
class ScoreProducer;
class TranslationSystem;
class WordPenaltyProducer;
-class CountInfo
-{
-public:
- CountInfo()
- {}
- CountInfo(float countSource, float countTarget)
- :m_countSource(countSource)
- ,m_countTarget(countTarget)
- { }
-
- float m_countSource;
- float m_countTarget;
-
-};
-
-
/** represents an entry on the target side of a phrase table (scores, translation, alignment)
*/
class TargetPhrase: public Phrase
{
friend std::ostream& operator<<(std::ostream&, const TargetPhrase&);
protected:
- float m_transScore, m_ngramScore, m_fullScore;
+ float m_transScore, m_fullScore;
//float m_ngramScore, m_fullScore;
ScoreComponentCollection m_scoreBreakdown;
- AlignmentInfo m_alignmentInfo;
// in case of confusion net, ptr to source phrase
Phrase m_sourcePhrase;
+ const AlignmentInfo* m_alignmentInfo;
Word m_lhsTarget;
- CountInfo m_countInfo;
static bool wordalignflag;
static bool printalign;
@@ -168,12 +149,10 @@ public:
{ return m_lhsTarget; }
void SetAlignmentInfo(const std::string &alignString);
- void SetAlignmentInfo(const std::list<std::pair<size_t,size_t> > &alignmentInfo);
+ void SetAlignmentInfo(const std::set<std::pair<size_t,size_t> > &alignmentInfo);
- AlignmentInfo &GetAlignmentInfo()
- { return m_alignmentInfo; }
const AlignmentInfo &GetAlignmentInfo() const
- { return m_alignmentInfo; }
+ { return *m_alignmentInfo; }
void UseWordAlignment(bool a){
wordalignflag=a;
@@ -191,6 +170,7 @@ public:
void CreateCountInfo(const std::string &countStr);
TO_STRING();
+
};
std::ostream& operator<<(std::ostream&, const TargetPhrase&);
diff --git a/moses/src/TargetPhraseCollection.cpp b/moses/src/TargetPhraseCollection.cpp
index 398acf345..38570f8d5 100644
--- a/moses/src/TargetPhraseCollection.cpp
+++ b/moses/src/TargetPhraseCollection.cpp
@@ -55,6 +55,25 @@ void TargetPhraseCollection::Prune(bool adhereTableLimit, size_t tableLimit)
}
}
+void TargetPhraseCollection::Sort(bool adhereTableLimit, size_t tableLimit)
+{
+ std::vector<TargetPhrase*>::iterator iterMiddle;
+ iterMiddle = (tableLimit == 0 || m_collection.size() < tableLimit)
+ ? m_collection.end()
+ : m_collection.begin()+tableLimit;
+
+ std::partial_sort(m_collection.begin(), iterMiddle, m_collection.end(),
+ CompareTargetPhrase());
+
+ if (adhereTableLimit && m_collection.size() > tableLimit) {
+ for (size_t i = tableLimit; i < m_collection.size(); ++i) {
+ TargetPhrase *targetPhrase = m_collection[i];
+ delete targetPhrase;
+ }
+ m_collection.erase(m_collection.begin()+tableLimit, m_collection.end());
+ }
+}
+
}
diff --git a/moses/src/TargetPhraseCollection.h b/moses/src/TargetPhraseCollection.h
index 849401848..f4124f458 100644
--- a/moses/src/TargetPhraseCollection.h
+++ b/moses/src/TargetPhraseCollection.h
@@ -57,6 +57,8 @@ public:
RemoveAllInColl(m_collection);
}
+ const std::vector<TargetPhrase*> &GetCollection() const { return m_collection; }
+
//! divide collection into 2 buckets using std::nth_element, the top & bottom according to table limit
void NthElement(size_t tableLimit);
@@ -74,6 +76,7 @@ public:
}
void Prune(bool adhereTableLimit, size_t tableLimit);
+ void Sort(bool adhereTableLimit, size_t tableLimit);
};
diff --git a/moses/src/ThreadPool.cpp b/moses/src/ThreadPool.cpp
index 430ea4e2b..97ae4a6e2 100644
--- a/moses/src/ThreadPool.cpp
+++ b/moses/src/ThreadPool.cpp
@@ -27,7 +27,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
using namespace std;
using namespace Moses;
-Moses::ThreadPool::ThreadPool( size_t numThreads )
+namespace Moses
+{
+
+ThreadPool::ThreadPool( size_t numThreads )
: m_stopped(false), m_stopping(false)
{
for (size_t i = 0; i < numThreads; ++i) {
@@ -35,7 +38,7 @@ Moses::ThreadPool::ThreadPool( size_t numThreads )
}
}
-void Moses::ThreadPool::Execute()
+void ThreadPool::Execute()
{
do {
Task* task = NULL;
@@ -62,7 +65,7 @@ void Moses::ThreadPool::Execute()
#endif
}
-void Moses::ThreadPool::Submit( Task* task )
+void ThreadPool::Submit( Task* task )
{
boost::mutex::scoped_lock lock(m_mutex);
if (m_stopping) {
@@ -73,7 +76,7 @@ void Moses::ThreadPool::Submit( Task* task )
}
-void Moses::ThreadPool::Stop(bool processRemainingJobs)
+void ThreadPool::Stop(bool processRemainingJobs)
{
{
//prevent more jobs from being added to the queue
@@ -98,4 +101,7 @@ void Moses::ThreadPool::Stop(bool processRemainingJobs)
m_threads.join_all();
}
+
+}
#endif //WITH_THREADS
+
diff --git a/moses/src/TranslationOption.cpp b/moses/src/TranslationOption.cpp
index 8a6c38e9a..6bc0eaf3e 100644
--- a/moses/src/TranslationOption.cpp
+++ b/moses/src/TranslationOption.cpp
@@ -88,7 +88,7 @@ TranslationOption::TranslationOption(const WordsRange &wordsRange
TranslationOption::TranslationOption(const TranslationOption &copy)
: m_targetPhrase(copy.m_targetPhrase)
//, m_sourcePhrase(new Phrase(*copy.m_sourcePhrase)) // TODO use when confusion network trans opt for confusion net properly implemented
- , m_sourcePhrase( (copy.m_sourcePhrase == NULL) ? new Phrase(Input) : new Phrase(*copy.m_sourcePhrase))
+ , m_sourcePhrase( (copy.m_sourcePhrase == NULL) ? new Phrase(Input, ARRAY_SIZE_INCR) : new Phrase(*copy.m_sourcePhrase))
, m_sourceWordsRange(copy.m_sourceWordsRange)
, m_futureScore(copy.m_futureScore)
, m_scoreBreakdown(copy.m_scoreBreakdown)
@@ -98,7 +98,7 @@ TranslationOption::TranslationOption(const TranslationOption &copy)
TranslationOption::TranslationOption(const TranslationOption &copy, const WordsRange &sourceWordsRange)
: m_targetPhrase(copy.m_targetPhrase)
//, m_sourcePhrase(new Phrase(*copy.m_sourcePhrase)) // TODO use when confusion network trans opt for confusion net properly implemented
- , m_sourcePhrase( (copy.m_sourcePhrase == NULL) ? new Phrase(Input) : new Phrase(*copy.m_sourcePhrase))
+ , m_sourcePhrase( (copy.m_sourcePhrase == NULL) ? new Phrase(Input, ARRAY_SIZE_INCR) : new Phrase(*copy.m_sourcePhrase))
, m_sourceWordsRange(sourceWordsRange)
, m_futureScore(copy.m_futureScore)
, m_scoreBreakdown(copy.m_scoreBreakdown)
diff --git a/moses/src/TranslationOptionCollection.cpp b/moses/src/TranslationOptionCollection.cpp
index 13aac8b73..b004d5ddd 100644
--- a/moses/src/TranslationOptionCollection.cpp
+++ b/moses/src/TranslationOptionCollection.cpp
@@ -221,7 +221,8 @@ void TranslationOptionCollection::ProcessOneUnknownWord(const Word &sourceWord,s
// modify the starting bitmap
}
- Phrase* m_unksrc = new Phrase(Input); m_unksrc->AddWord() = sourceWord;
+ Phrase* m_unksrc = new Phrase(Input,1);
+ m_unksrc->AddWord() = sourceWord;
m_unksrcs.push_back(m_unksrc);
TranslationOption *transOpt;
@@ -265,6 +266,8 @@ void TranslationOptionCollection::ProcessOneUnknownWord(const Word &sourceWord,s
, m_system->GetUnknownWordPenaltyProducer());
transOpt->CalcScore(m_system);
Add(transOpt);
+
+
}
/** compute future score matrix in a dynamic programming fashion.
@@ -387,7 +390,7 @@ void TranslationOptionCollection::CreateTranslationOptions()
for (size_t endPos = startPos ; endPos < startPos + maxSize ; endPos++) {
if (graph > 0 && // only skip subsequent graphs
decodeGraphBackoff[graph] != 0 && // use of backoff specified
- (endPos-startPos+1 > decodeGraphBackoff[graph] || // size exceeds backoff limit or ...
+ (endPos-startPos+1 >= decodeGraphBackoff[graph] || // size exceeds backoff limit or ...
m_collection[startPos][endPos-startPos].size() > 0)) { // no phrases found so far
VERBOSE(3,"No backoff to graph " << graph << " for span [" << startPos << ";" << endPos << "]" << endl);
// do not create more options
diff --git a/moses/src/TreeInput.cpp b/moses/src/TreeInput.cpp
index f22686a1e..a46d8409c 100644
--- a/moses/src/TreeInput.cpp
+++ b/moses/src/TreeInput.cpp
@@ -40,8 +40,6 @@ bool TreeInput::ProcessAndStripXMLTags(string &line, std::vector<XMLParseOutput>
string cleanLine; // return string (text without xml)
size_t wordPos = 0; // position in sentence (in terms of number of words)
- const vector<FactorType> &outputFactorOrder = StaticData::Instance().GetOutputFactorOrder();
- const string &factorDelimiter = StaticData::Instance().GetFactorDelimiter();
// loop through the tokens
for (size_t xmlTokenPos = 0 ; xmlTokenPos < xmlTokens.size() ; xmlTokenPos++) {
@@ -174,9 +172,7 @@ int TreeInput::Read(std::istream& in,const std::vector<FactorType>& factorOrder)
{
const StaticData &staticData = StaticData::Instance();
- const string& factorDelimiter = StaticData::Instance().GetFactorDelimiter();
string line;
-
if (getline(in, line, '\n').eof())
return 0;
// remove extra spaces
@@ -232,7 +228,7 @@ TranslationOptionCollection* TreeInput::CreateTranslationOptionCollection() cons
}
void TreeInput::AddChartLabel(size_t startPos, size_t endPos, const Word &label
- , const std::vector<FactorType>& factorOrder)
+ , const std::vector<FactorType>& /* factorOrder */)
{
assert(label.IsNonTerminal());
diff --git a/moses/src/TrellisPath.cpp b/moses/src/TrellisPath.cpp
index 5f1ceefe4..f2a84d4ab 100644
--- a/moses/src/TrellisPath.cpp
+++ b/moses/src/TrellisPath.cpp
@@ -156,7 +156,7 @@ void TrellisPath::CreateDeviantPaths(TrellisPathList &pathColl) const
Phrase TrellisPath::GetTargetPhrase() const
{
- Phrase targetPhrase(Output);
+ Phrase targetPhrase(Output, ARRAY_SIZE_INCR);
int numHypo = (int) m_path.size();
for (int node = numHypo - 2 ; node >= 0 ; --node) {
@@ -174,7 +174,7 @@ Phrase TrellisPath::GetSurfacePhrase() const
{
const std::vector<FactorType> &outputFactor = StaticData::Instance().GetOutputFactorOrder();
Phrase targetPhrase = GetTargetPhrase()
- ,ret(Output);
+ ,ret(Output, targetPhrase.GetSize());
for (size_t pos = 0 ; pos < targetPhrase.GetSize() ; ++pos) {
Word &newWord = ret.AddWord();
diff --git a/moses/src/TypeDef.h b/moses/src/TypeDef.h
index fbc67f660..9f501b2fa 100644
--- a/moses/src/TypeDef.h
+++ b/moses/src/TypeDef.h
@@ -92,10 +92,18 @@ const size_t DEFAULT_VERBOSE_LEVEL = 1;
# define LM_RAND 1
# endif
+# ifdef HAVE_ORLM
+# define LM_ORLM 1
+# endif
+
# ifdef HAVE_KENLM
# define LM_KEN 1
# endif
+# ifdef HAVE_DMAPLM
+# define LM_DMAP
+# endif
+
#endif
/////////////////////////////////////////////////
@@ -152,6 +160,8 @@ enum LMImplementation {
,ParallelBackoff = 7
,Ken = 8
,LazyKen = 9
+ ,ORLM = 10
+ ,DMapLM = 11
};
enum PhraseTableImplementation {
diff --git a/moses/src/WordConsumed.h b/moses/src/WordConsumed.h
deleted file mode 100644
index 14d6f0b4b..000000000
--- a/moses/src/WordConsumed.h
+++ /dev/null
@@ -1,74 +0,0 @@
-// $Id$
-// vim:tabstop=2
-/***********************************************************************
- Moses - factored phrase-based language decoder
- Copyright (C) 2010 Hieu Hoang
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- ***********************************************************************/
-#pragma once
-
-#include <iostream>
-#include "WordsRange.h"
-#include "Word.h"
-
-namespace Moses
-{
-
-class WordConsumed
-{
- friend std::ostream& operator<<(std::ostream&, const WordConsumed&);
-
-protected:
- WordsRange m_coverage;
- const Word &m_sourceWord; // can be non-term headword, or term
- const WordConsumed *m_prevWordsConsumed;
-public:
- WordConsumed(); // not implmented
- WordConsumed(size_t startPos, size_t endPos, const Word &sourceWord, const WordConsumed *prevWordsConsumed)
- :m_coverage(startPos, endPos)
- ,m_sourceWord(sourceWord)
- ,m_prevWordsConsumed(prevWordsConsumed)
- {}
- const Moses::WordsRange &GetWordsRange() const {
- return m_coverage;
- }
- const Word &GetSourceWord() const {
- return m_sourceWord;
- }
- Moses::WordsRange &GetWordsRange() {
- return m_coverage;
- }
- bool IsNonTerminal() const {
- return m_sourceWord.IsNonTerminal();
- }
-
- const WordConsumed *GetPrevWordsConsumed() const {
- return m_prevWordsConsumed;
- }
-
- //! transitive comparison used for adding objects into FactorCollection
- inline bool operator<(const WordConsumed &compare) const {
- if (IsNonTerminal() < compare.IsNonTerminal())
- return true;
- else if (IsNonTerminal() == compare.IsNonTerminal())
- return m_coverage < compare.m_coverage;
-
- return false;
- }
-
-};
-
-}; // namespace
diff --git a/moses/src/gzfilebuf.h b/moses/src/gzfilebuf.h
index b5b0ce87f..d59d3e1b7 100644
--- a/moses/src/gzfilebuf.h
+++ b/moses/src/gzfilebuf.h
@@ -18,18 +18,18 @@ public:
gzclose(_gzf);
}
protected:
- virtual int_type overflow (int_type c) {
+ virtual int_type overflow (int_type /* c */) {
throw;
}
// write multiple characters
virtual
- std::streamsize xsputn (const char* s,
- std::streamsize num) {
+ std::streamsize xsputn (const char* /* s */,
+ std::streamsize /* num */) {
throw;
}
- virtual std::streampos seekpos ( std::streampos sp, std::ios_base::openmode which = std::ios_base::in | std::ios_base::out ) {
+ virtual std::streampos seekpos ( std::streampos /* sp */, std::ios_base::openmode /* which = std::ios_base::in | std::ios_base::out */ ) {
throw;
}
diff --git a/regenerate-makefiles.sh b/regenerate-makefiles.sh
index 22fff2253..24e8f53f7 100755
--- a/regenerate-makefiles.sh
+++ b/regenerate-makefiles.sh
@@ -2,6 +2,8 @@
# NOTE:
# Versions 1.9 (or higher) of aclocal and automake are required.
+# And version >=2.60 of autoconf
+# And version >=1.4.7 of m4
# For Mac OSX users:
# Standard distribution usually includes versions 1.6.
@@ -53,7 +55,7 @@ $LIBTOOLIZE || die "libtoolize failed"
echo
echo "You should now be able to configure and build:"
-echo " ./configure [--with-srilm=/path/to/srilm] [--with-irstlm=/path/to/irstlm] [--with-randlm=/path/to/randlm] [--without-kenlm] [--with-xmlrpc-c=/path/to/xmlrpc-c-config]"
+echo " ./configure [--with-srilm=/path/to/srilm] [--with-irstlm=/path/to/irstlm] [--with-randlm=/path/to/randlm] [--without-kenlm] [--with-synlm] [--with-xmlrpc-c=/path/to/xmlrpc-c-config]"
echo " make -j 4"
echo
diff --git a/regression-testing/MosesRegressionTesting.pm b/regression-testing/MosesRegressionTesting.pm
index 2bbd9b171..77d6e730c 100644
--- a/regression-testing/MosesRegressionTesting.pm
+++ b/regression-testing/MosesRegressionTesting.pm
@@ -5,7 +5,7 @@ use strict;
# if your tests need a new version of the test data, increment this
# and make sure that a moses-regression-tests-vX.Y is available for
# download from statmt.org (redpony AT umd dot edu for more info)
-use constant TESTING_DATA_VERSION => '5';
+use constant TESTING_DATA_VERSION => '7';
# find the data directory in a few likely locations and make sure
# that it is the correct version
diff --git a/regression-testing/compare-results.pl b/regression-testing/compare-results.perl
index a4f60dc41..a4f60dc41 100755
--- a/regression-testing/compare-results.pl
+++ b/regression-testing/compare-results.perl
diff --git a/regression-testing/run-single-test.pl b/regression-testing/run-single-test.perl
index 45a5ca278..0dc804719 100755
--- a/regression-testing/run-single-test.pl
+++ b/regression-testing/run-single-test.perl
@@ -105,7 +105,7 @@ if($NBEST > 0){
run_command("gzip $results/run.nbest");
}
-($o, $ec, $sig) = run_command("$BIN_TEST/compare-results.pl $results $truth");
+($o, $ec, $sig) = run_command("$BIN_TEST/compare-results.perl $results $truth");
print $o;
if ($ec) {
print STDERR "FAILURE, for debugging, local moses.ini=$local_moses_ini\n";
diff --git a/regression-testing/run-test-detokenizer.perl b/regression-testing/run-test-detokenizer.perl
new file mode 100755
index 000000000..e297b90be
--- /dev/null
+++ b/regression-testing/run-test-detokenizer.perl
@@ -0,0 +1,308 @@
+#!/usr/bin/perl -w
+#
+# Detokenization tests.
+#
+
+use strict;
+# This is here to suppress (false) warnings about OLDOUT and OLDERR being used only once. Maybe there is a less brutish way to suppress that, but I don't know it.
+no warnings 'once';
+use utf8;
+
+use Cwd ('abs_path');
+use File::Spec::Functions;
+use File::Basename ('dirname');
+use IPC::Run3;
+use Getopt::Long;
+use Test::More;
+
+GetOptions("detokenizer=s" => \(my $detokenizer),
+ "results-dir=s"=> \(my $results_dir)
+ ) or exit 1;
+
+unless (defined $results_dir) {
+ print STDERR "Usage: run-test-detokenizer.t --results-dir <RESULTS-DIRECTORY> [--detokenizer <DETOKENIZER-SCRIPT>]\n";
+ exit 1;
+}
+
+die "ERROR: Results directory ".$results_dir." doesn't exist or is not a writable directory. Dying" unless (-d $results_dir && -w $results_dir);
+
+$detokenizer = catfile(dirname(dirname(abs_path($0))), "scripts", "tokenizer", "detokenizer.perl") unless $detokenizer;
+die "ERROR: Detokenizer script ".$detokenizer." does not exist. Dying" unless -f $detokenizer;
+
+
+my @testCases = ();
+
+######################################
+# Definitions of individual test cases
+######################################
+
+# A simple English test
+&addDetokenizerTest("TEST_ENGLISH_EASY", "en",
+<<'TOK'
+This sentence is really simple , so it should not be hard to detokenize .
+This one is no more difficult , but , hey , it is on a new line .
+TOK
+,
+<<'EXP'
+This sentence is really simple, so it should not be hard to detokenize.
+This one is no more difficult, but, hey, it is on a new line.
+EXP
+);
+
+# An English test involving double-quotes
+&addDetokenizerTest("TEST_ENGLISH_DOUBLEQUOTES", "en",
+<<'TOK'
+This is a somewhat " less simple " test .
+TOK
+,
+<<'EXP'
+This is a somewhat "less simple" test.
+EXP
+);
+
+# A simple French test
+&addDetokenizerTest("TEST_FRENCH_EASY", "fr",
+<<'TOK'
+Voici une phrase simple .
+TOK
+,
+<<'EXP'
+Voici une phrase simple.
+EXP
+);
+
+# A French test involving an apostrophe
+&addDetokenizerTest("TEST_FRENCH_APOSTROPHE", "fr",
+<<'TOK'
+Moi , j' ai une apostrophe .
+TOK
+,
+<<'EXP'
+Moi, j'ai une apostrophe.
+EXP
+);
+
+# A French test involving an apostrophe on the second-last word
+&addDetokenizerTest("TEST_FRENCH_APOSTROPHE_PENULTIMATE", "fr",
+<<'TOK'
+de musique rap issus de l' immigration
+TOK
+,
+<<'EXP'
+de musique rap issus de l'immigration
+EXP
+);
+
+# A German test involving non-ASCII characters
+# Note: We don't specify a language because the detokenizer errors if you pass in a language for which it has no special rules, of which German is an example.
+&addDetokenizerTest("TEST_GERMAN_NONASCII", undef,
+<<'TOK'
+Ich hoffe , daß Sie schöne Ferien hatten .
+Frau Präsidentin ! Frau Díez González und ich hatten einige Anfragen
+TOK
+,
+<<'EXP'
+Ich hoffe, daß Sie schöne Ferien hatten.
+Frau Präsidentin! Frau Díez González und ich hatten einige Anfragen
+EXP
+);
+
+# A simple Chinese test
+&addDetokenizerTest("TEST_CHINESE_EASY", undef,
+<<'TOK'
+è¿™ 是 一个 ç®€å• çš„çš„ 汉语 å¥å­ 。
+TOK
+,
+<<'EXP'
+这是一个简å•çš„的汉语å¥å­ã€‚
+EXP
+);
+
+# A simple Japanese test
+&addDetokenizerTest("TEST_JAPANESE_EASY", undef,
+<<'TOK'
+ã©ã† ã—ょ ㆠ㋠㪠。
+ã©ã“ 㧠食㹠ãŸã„ 。
+TOK
+,
+<<'EXP'
+ã©ã†ã—ょã†ã‹ãªã€‚
+ã©ã“ã§é£Ÿã¹ãŸã„。
+EXP
+);
+
+
+######################################
+# Now run those babies ...
+######################################
+
+plan tests => scalar(@testCases);
+
+foreach my $testCase (@testCases) {
+ &runDetokenizerTest($testCase);
+}
+
+############
+## Utilities
+############
+
+# Creates a new detokenizer test case, adds it to the array of test cases to be run, and returns it.
+sub addDetokenizerTest {
+ my ($testName, $language, $tokenizedText, $rightAnswer) = @_;
+
+ my $testCase = new DetokenizerTestCase($testName, $language, $tokenizedText, $rightAnswer);
+ push(@testCases, $testCase);
+ return $testCase;
+}
+
+sub runDetokenizerTest {
+ my ($testCase) = @_;
+
+ my $testOutputDir = catfile($results_dir, $testCase->getName());
+ my $tokenizedFile = catfile($testOutputDir, "input.txt");
+ my $expectedFile = catfile($testOutputDir, "expected.txt");
+
+ # Fail if we can't make the test output directory
+ unless (mkdir($testOutputDir)) {
+ return fail($testCase->getName().": Failed to create output directory ".$testOutputDir." [".$!."]");
+ }
+
+ open TOK, ">".$tokenizedFile;
+ binmode TOK, ":utf8";
+ print TOK $testCase->getTokenizedText();
+ close TOK;
+
+ open TRUTH, ">".$expectedFile;
+ binmode TRUTH, ":utf8";
+ print TRUTH $testCase->getRightAnswer();
+ close TRUTH;
+
+ &runTest($testCase->getName(), $testOutputDir, $tokenizedFile, sub {
+ return defined($testCase->getLanguage()) ? [$detokenizer, "-l", $testCase->getLanguage()] : [$detokenizer];
+ }, sub {
+ &verifyIdentical($testCase->getName(), $expectedFile, catfile($testOutputDir, "stdout.txt"))
+ }, 1, $testCase->getFailureExplanation());
+}
+
+# $stdinFile, if defined, is a file to send to the command via STDIN
+# $buildCommandRoutineReference is a reference to a zero-argument subroutine that returns the
+# system command to run in the form of an array reference
+# $validationRoutineReference is a reference to a zero-argument subroutine that makes exactly one call
+# to ok() or similar to validate the contents of the output directory
+# $separateStdoutFromStderr is an optional boolean argument; if omitted or false, the command's
+# STDOUT and STDERR are mixed together in out output file called
+# stdout-and-stderr.txt; otherwise, they are printed to separate output
+# files called stdout.txt and stderr.txt, respectively
+# $failureExplanation is an explanation of why the test is expected to fail. If the test is expected
+# to pass, then this should be left undefined. Even in the case of a test that
+# is expected to fail, the system command is still expected to exit normally --
+# only the validation routine is expected to fail.
+sub runTest {
+ my ($testName, $outputDir, $stdinFile, $buildCommandRoutineReference, $validationRoutineReference, $separateStdoutFromStderr, $failureExplanation) = @_;
+
+ my ($stdoutFile, $stderrFile);
+ if ($separateStdoutFromStderr) {
+ $stdoutFile = catfile($outputDir, "stdout.txt");
+ $stderrFile = catfile($outputDir, "stderr.txt");
+ } else {
+ $stdoutFile = catfile($outputDir, "stdout-and-stderr.txt");
+ $stderrFile = $stdoutFile;
+ }
+
+ my $commandRef = $buildCommandRoutineReference->();
+ my $exitStatus = &runVerbosely($commandRef, $stdinFile, $stdoutFile, $stderrFile);
+ return fail($testName.": command exited with status ".$exitStatus) unless $exitStatus == 0;
+
+ if (defined $failureExplanation) {
+ TODO: {
+ local $TODO = $failureExplanation;
+ $validationRoutineReference->();
+ }
+ } else {
+ $validationRoutineReference->();
+ }
+}
+
+# Announce that we're going to run the given command, then run it.
+# $stdinFile, if defined, is a file to send to the command via STDIN
+# $stdoutFile and $stderrFile, if defined, are file paths to which the command's standard output
+# and standard error, respectively, are written. They can be the same file.
+# The exit code of the command is returned.
+sub runVerbosely {
+ my ($commandRef, $stdinFile, $stdoutFile, $stderrFile) = @_;
+ my @command = @{$commandRef};
+ note("Executing command:\n @command\n");
+ note("standard input coming from: ".$stdinFile) if defined $stdinFile;
+ note("standard output going to: ".$stdoutFile) if defined $stdoutFile;
+ note("standard error going to: ".$stderrFile) if defined $stderrFile;
+ run3($commandRef, $stdinFile, $stdoutFile, $stderrFile);
+ return $?;
+}
+
+# Verify that the given output file is identical to the given reference file.
+sub verifyIdentical {
+ my ($testName, $referenceFile, $outputFile) = @_;
+
+ open(REF, $referenceFile) or return fail($testName.": Can't open reference file ".$referenceFile." [".$!."].");
+ open(OUT, $outputFile) or return fail($testName.": Can't open output file ".$outputFile." [".$!."].");
+ my @referenceFileAsArray = <REF>;
+ my @outputFileAsArray = <OUT>;
+ close(REF);
+ close(OUT);
+ is_deeply(\@outputFileAsArray, \@referenceFileAsArray, $testName.": Output file ".$outputFile." matches reference file ".$referenceFile.".");
+}
+
+
+##%%%%%%%%%%%%%%%%%%%%%%%%%%%##
+## DetokenizerTestCase class ##
+
+package DetokenizerTestCase;
+
+# Constructor
+sub new {
+ my $class = shift;
+ my $self = {
+ _name => shift,
+ _language => shift,
+ _tokenizedText => shift,
+ _rightAnswer => shift,
+
+ _failureExplanation => undef
+ };
+ bless $self, $class;
+}
+
+sub getName {
+ my ($self) = @_;
+ return $self->{_name};
+}
+
+sub getLanguage {
+ my ($self) = @_;
+ return $self->{_language};
+}
+
+sub getTokenizedText {
+ my ($self) = @_;
+ return $self->{_tokenizedText};
+}
+
+sub getRightAnswer {
+ my ($self) = @_;
+ return $self->{_rightAnswer};
+}
+
+# Call this routine to indicate that this test case is expected to fail.
+# (The detokenizer script is still expected to exit normally, but the output is not expected to
+# match the right answer because of a bug or unimplemented use case.)
+sub setExpectedToFail {
+ my ($self, $failureExplanation) = @_;
+ $self->{_failureExplanation} = $failureExplanation || "This test is expected to fail.";
+}
+
+# Returns a string explaining why this test is expected to fail, or undef if this test is expected
+# to pass.
+sub getFailureExplanation {
+ my ($self) = @_;
+ return $self->{_failureExplanation};
+}
diff --git a/regression-testing/run-test-scorer.perl b/regression-testing/run-test-scorer.perl
new file mode 100755
index 000000000..e3395cfa8
--- /dev/null
+++ b/regression-testing/run-test-scorer.perl
@@ -0,0 +1,81 @@
+#!/usr/bin/perl -w
+
+use strict;
+use FindBin qw($Bin);
+use MosesRegressionTesting;
+use Getopt::Long;
+use File::Temp qw ( tempfile );
+use POSIX qw ( strftime );
+
+my $scoreExe;
+my $test_name;
+my $data_dir;
+my $test_dir;
+my $results_dir;
+
+GetOptions("scorer=s" => \$scoreExe,
+ "test=s" => \$test_name,
+ "data-dir=s"=> \$data_dir,
+ "test-dir=s"=> \$test_dir,
+ "results-dir=s"=> \$results_dir,
+ ) or exit 1;
+
+# output dir
+unless (defined $results_dir)
+{
+ my $ts = get_timestamp($scoreExe);
+ $results_dir = "$data_dir/results/$test_name/$ts";
+}
+
+`mkdir -p $results_dir`;
+
+my $outPath = "$results_dir/pt.half";
+
+my $scorerArgs = `cat $test_dir/$test_name/args.txt`;
+$_ = $scorerArgs;
+s/(\$\w+)/$1/eeg;
+$scorerArgs = $_;
+
+my $cmdMain = "$scoreExe $scorerArgs \n";
+`$cmdMain`;
+
+my $truthPath = "$test_dir/$test_name/truth/results.txt";
+
+
+if (-e $outPath)
+{
+ my $cmd = "diff $outPath $truthPath | wc -l";
+
+ my $numDiff = `$cmd`;
+
+ if ($numDiff == 0)
+ {
+ # print STDERR "FAILURE. Ran $cmdMain\n";
+ print STDERR "SUCCESS\n";
+ exit 0;
+ }
+ else
+ {
+ print STDERR "FAILURE. Ran $cmdMain\n";
+ exit 1;
+ }
+}
+else
+{
+ print STDERR "FAILURE. Output does not exists. Ran $cmdMain\n";
+ exit 1;
+}
+
+###################################
+sub get_timestamp {
+ my ($file) = @_;
+ my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
+ $atime,$mtime,$ctime,$blksize,$blocks)
+ = stat($file);
+ my $timestamp = strftime("%Y%m%d-%H%M%S", gmtime $mtime);
+ my $timestamp2 = strftime("%Y%m%d-%H%M%S", gmtime);
+ my $username = `whoami`; chomp $username;
+ return "moses.v$timestamp-$username-at-$timestamp2";
+}
+
+
diff --git a/regression-testing/run-test-suite.pl b/regression-testing/run-test-suite.perl
index aa42209b8..443c6d1d4 100755
--- a/regression-testing/run-test-suite.pl
+++ b/regression-testing/run-test-suite.perl
@@ -3,16 +3,27 @@
# $Id$
use strict;
+use FindBin qw($Bin);
+
my $script_dir; BEGIN { use Cwd qw/ abs_path /; use File::Basename; $script_dir = dirname(abs_path($0)); push @INC, $script_dir; }
use Getopt::Long;
############################################################
my @tests = qw (
+ score.phrase-based
+ score.phrase-based-inv
+ score.phrase-based-with-alignment
+ score.phrase-based-with-alignment-inv
+ score.hierarchical
+ score.hierarchical-inv
chart.target-syntax
- chart.hierarchical
chart.target-syntax.ondisk
+ chart.hierarchical
+ chart.hierarchical-withsrilm
chart.hierarchical.ondisk
phrase.basic-surface-only
+ phrase.basic-surface-only-withirstlm
+ phrase.basic-surface-only-withirstlm-binlm
phrase.ptable-filtering
phrase.multi-factor
phrase.multi-factor-drop
@@ -37,8 +48,9 @@ use MosesRegressionTesting;
use File::Temp qw ( tempfile );
use POSIX qw ( strftime );
-my $decoderPhrase;
-my $decoderChart;
+my $decoderPhrase = "$Bin/../moses-cmd/src/moses";
+my $decoderChart = "$Bin/../moses-chart-cmd/src/moses_chart";
+my $scoreExe = "$Bin/../scripts/training/phrase-extract/score";
my $test_dir;
my $BIN_TEST = $script_dir;
my $data_dir;
@@ -48,6 +60,7 @@ GetOptions( "decoder-phrase=s" => \$decoderPhrase,
"data-dir=s" => \$data_dir,
) or exit 1;
+
$data_dir = MosesRegressionTesting::find_data_directory($BIN_TEST, $data_dir);
my $test_run = "$BIN_TEST/run-single-test.pl --data-dir=$data_dir";
@@ -75,11 +88,15 @@ foreach my $test (@tests)
if ($model_type eq 'phrase')
{
- $cmd .= "$test_run --decoder=$decoderPhrase";
+ $cmd .= "$BIN_TEST/run-single-test.perl $test_run --decoder=$decoderPhrase";
}
elsif ($model_type eq 'chart.')
{
- $cmd .= "$test_run --decoder=$decoderChart";
+ $cmd .= "$BIN_TEST/run-single-test.perl $test_run --decoder=$decoderChart";
+ }
+ elsif ($model_type eq 'score.')
+ {
+ $cmd .= "$BIN_TEST/run-test-scorer.perl $test_run --scorer=$scoreExe";
}
else
{
@@ -87,6 +104,9 @@ foreach my $test (@tests)
}
$cmd .= " --test=$test";
+
+print STDERR "cmd = $cmd\n";
+
my ($res, $output, $results_path) = do_test($cmd);
format STDOUT =
@<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
diff --git a/regression-testing/tests/chart.hierarchical-withsrilm/filter-stderr.pl b/regression-testing/tests/chart.hierarchical-withsrilm/filter-stderr.pl
new file mode 100755
index 000000000..2f6e17607
--- /dev/null
+++ b/regression-testing/tests/chart.hierarchical-withsrilm/filter-stderr.pl
@@ -0,0 +1,22 @@
+#!/usr/bin/perl
+
+BEGIN { use Cwd qw/ abs_path /; use File::Basename; $script_dir = dirname(abs_path($0)); push @INC, "$script_dir/../perllib"; }
+use RegTestUtils;
+
+$x=0;
+while (<>) {
+ chomp;
+
+ if (/^Finished loading LanguageModels/) {
+ my $time = RegTestUtils::readTime($_);
+ print "LMLOAD_TIME ~ $time\n";
+ }
+ if (/^Finished loading phrase tables/) {
+ my $time = RegTestUtils::readTime($_);
+ print "PTLOAD_TIME ~ $time\n";
+ }
+ next unless /^BEST TRANSLATION:/;
+ my $pscore = RegTestUtils::readHypoScore($_);
+ $x++;
+ print "SCORE_$x = $pscore\n";
+}
diff --git a/regression-testing/tests/chart.hierarchical-withsrilm/filter-stdout.pl b/regression-testing/tests/chart.hierarchical-withsrilm/filter-stdout.pl
new file mode 100755
index 000000000..476ddf6e9
--- /dev/null
+++ b/regression-testing/tests/chart.hierarchical-withsrilm/filter-stdout.pl
@@ -0,0 +1,7 @@
+#!/usr/bin/perl
+$x=0;
+while (<>) {
+ chomp;
+ $x++;
+ print "TRANSLATION_$x=$_\n";
+}
diff --git a/regression-testing/tests/chart.hierarchical-withsrilm/moses.ini b/regression-testing/tests/chart.hierarchical-withsrilm/moses.ini
new file mode 100644
index 000000000..0bad920af
--- /dev/null
+++ b/regression-testing/tests/chart.hierarchical-withsrilm/moses.ini
@@ -0,0 +1,69 @@
+#########################
+### MOSES CONFIG FILE ###
+#########################
+
+# input factors
+[input-factors]
+0
+
+# mapping steps
+[mapping]
+0 T 0
+1 T 1
+
+# translation tables: source-factors, target-factors, number of scores, file
+[ttable-file]
+6 0 0 5 ${MODEL_PATH}/hierarchical/phrase-table.0-0.1
+6 0 0 1 ${MODEL_PATH}/hierarchical/phrase-table.0-0.2
+
+# no generation models, no generation-file section
+
+# language models: type(srilm/irstlm), factors, order, file
+[lmodel-file]
+0 0 5 ${LM_PATH}/news.de.arpalm.gz
+
+
+# limit on how many phrase translations e for each phrase f are loaded
+# 0 = all elements loaded
+[ttable-limit]
+20
+
+
+# language model weights
+[weight-l]
+0.273687
+
+
+# translation model weights
+[weight-t]
+0.077197
+0.014533
+0.059406
+0.001891
+-0.098314
+0.131945
+
+# no generation models, no weight-generation section
+
+# word penalty
+[weight-w]
+-0.343026
+
+[cube-pruning-pop-limit]
+1000
+
+[non-terminals]
+X
+
+[search-algorithm]
+3
+
+[inputtype]
+3
+
+[max-chart-span]
+20
+1000
+
+[weight-d]
+1
diff --git a/regression-testing/tests/chart.hierarchical-withsrilm/to-translate.txt b/regression-testing/tests/chart.hierarchical-withsrilm/to-translate.txt
new file mode 100644
index 000000000..142ac43e0
--- /dev/null
+++ b/regression-testing/tests/chart.hierarchical-withsrilm/to-translate.txt
@@ -0,0 +1,5 @@
+Prague Stock Market falls to minus by the end of the trading day
+after a sharp drop in the morning , the Prague Stock Market corrected its losses .
+transactions with stocks from the Czech Energy Enterprise ( ÄŒEZ ) reached nearly half of the regular daily trading .
+the Prague Stock Market immediately continued its fall from Monday at the beginning of Tuesday 's trading , when it dropped by nearly six percent .
+this time the fall in stocks on Wall Street is responsible for the drop .
diff --git a/regression-testing/tests/chart.hierarchical-withsrilm/truth/results.txt b/regression-testing/tests/chart.hierarchical-withsrilm/truth/results.txt
new file mode 100644
index 000000000..5945e4daa
--- /dev/null
+++ b/regression-testing/tests/chart.hierarchical-withsrilm/truth/results.txt
@@ -0,0 +1,15 @@
+TRANSLATION_1=Prag Stock Markt fällt , durch das Ende der Handel Tag
+TRANSLATION_2=nach einem steilen Rückgang der Morgen , dem Prager Stock Markt korrigiert ihre Verluste .
+TRANSLATION_3=Transaktionen mit Aktien von der tschechischen Energy Enterprise ( ČEZ ) erreicht beinahe die Hälfte der regelmäßigen täglich Handel .
+TRANSLATION_4=der Prager Stock Markt sofort ihren Sturz von Montag zu Beginn der Handel Tuesday , wenn es um beinahe sechs Prozent .
+TRANSLATION_5=dieses Mal den Rückgang der Aktien an der Wall Street verantwortlich ist für die fallen .
+LMLOAD_TIME ~ 2.000
+PTLOAD_TIME ~ 2.000
+PTLOAD_TIME ~ 86.000
+PTLOAD_TIME ~ 86.000
+SCORE_1 = -12.100
+SCORE_2 = -12.344
+SCORE_3 = -116.629
+SCORE_4 = -121.386
+SCORE_5 = -8.128
+TOTAL_WALLTIME ~ 110
diff --git a/regression-testing/tests/chart.hierarchical.ondisk/moses.ini b/regression-testing/tests/chart.hierarchical.ondisk/moses.ini
index b93be1964..1fdbf786d 100644
--- a/regression-testing/tests/chart.hierarchical.ondisk/moses.ini
+++ b/regression-testing/tests/chart.hierarchical.ondisk/moses.ini
@@ -20,7 +20,7 @@
# language models: type(srilm/irstlm), factors, order, file
[lmodel-file]
-0 0 5 ${LM_PATH}/news.de.binlm
+1 0 5 ${LM_PATH}/news.de.binlm
# limit on how many phrase translations e for each phrase f are loaded
@@ -52,9 +52,6 @@
[cube-pruning-pop-limit]
1000
-[glue-rule-type]
-0
-
[non-terminals]
X
diff --git a/regression-testing/tests/chart.hierarchical.ondisk/truth/results.txt b/regression-testing/tests/chart.hierarchical.ondisk/truth/results.txt
index b934712c4..5ed37b255 100644
--- a/regression-testing/tests/chart.hierarchical.ondisk/truth/results.txt
+++ b/regression-testing/tests/chart.hierarchical.ondisk/truth/results.txt
@@ -1,13 +1,13 @@
-TRANSLATION_1=Prag Stock Market zu Ende das Devisen Tag
-TRANSLATION_2=nach scharfen morgens , Prager Stock Market korrigiert .
-TRANSLATION_3=Transaktionen mit Aktien des Tschechischen Energy Enterprise ČEZ halb der regelmäßigen täglichen .
-TRANSLATION_4=Prag Stock Market sofort ihren der Montag Anfang gehandelt entgegenwirkt Tuesday inflationsgerichtete beinahe sechs Prozent .
-TRANSLATION_5=diesmal der Abnahme der Aktien fallen .
-LMLOAD_TIME ~ 1
-PTLOAD_TIME ~ 93
-SCORE_1 = -110.463
-SCORE_2 = -127.068
-SCORE_3 = -273.006
-SCORE_4 = -309.475
-SCORE_5 = -99.853
-TOTAL_WALLTIME ~ 116
+TRANSLATION_1=Prag überquillt Stock Markt , durch das Ende des Handel Tag
+TRANSLATION_2=nach einem steilen Rückgang der Morgen der Prager Stock Markt ihre Verluste . korrigiert
+TRANSLATION_3=Geschäfte mit Aktien aus der Tschechischen Energy Enterprise ( ČEZ ) erreicht beinahe die Hälfte der täglichen Handel . regelmäßigen
+TRANSLATION_4=, die Prag Stock Market sofort ihren Fall von Montag Anfang der Handel , wenn es um beinahe sechs Prozent . Tuesday
+TRANSLATION_5=diesmal die fallen in Aktien an der Wall Street ist für die fallen .
+LMLOAD_TIME ~ 1.000
+PTLOAD_TIME ~ 1.000
+SCORE_1 = -12.918
+SCORE_2 = -12.745
+SCORE_3 = -117.149
+SCORE_4 = -122.970
+SCORE_5 = -9.131
+TOTAL_WALLTIME ~ 23
diff --git a/regression-testing/tests/chart.hierarchical/moses.ini b/regression-testing/tests/chart.hierarchical/moses.ini
index 085d14314..9d6edec94 100644
--- a/regression-testing/tests/chart.hierarchical/moses.ini
+++ b/regression-testing/tests/chart.hierarchical/moses.ini
@@ -20,7 +20,7 @@
# language models: type(srilm/irstlm), factors, order, file
[lmodel-file]
-0 0 5 ${LM_PATH}/news.de.binlm
+1 0 5 ${LM_PATH}/news.de.binlm
# limit on how many phrase translations e for each phrase f are loaded
@@ -52,9 +52,6 @@
[cube-pruning-pop-limit]
1000
-[glue-rule-type]
-0
-
[non-terminals]
X
diff --git a/regression-testing/tests/chart.hierarchical/truth/results.txt b/regression-testing/tests/chart.hierarchical/truth/results.txt
index b934712c4..ff9efc6c8 100644
--- a/regression-testing/tests/chart.hierarchical/truth/results.txt
+++ b/regression-testing/tests/chart.hierarchical/truth/results.txt
@@ -1,13 +1,15 @@
-TRANSLATION_1=Prag Stock Market zu Ende das Devisen Tag
-TRANSLATION_2=nach scharfen morgens , Prager Stock Market korrigiert .
-TRANSLATION_3=Transaktionen mit Aktien des Tschechischen Energy Enterprise ČEZ halb der regelmäßigen täglichen .
-TRANSLATION_4=Prag Stock Market sofort ihren der Montag Anfang gehandelt entgegenwirkt Tuesday inflationsgerichtete beinahe sechs Prozent .
-TRANSLATION_5=diesmal der Abnahme der Aktien fallen .
-LMLOAD_TIME ~ 1
-PTLOAD_TIME ~ 93
-SCORE_1 = -110.463
-SCORE_2 = -127.068
-SCORE_3 = -273.006
-SCORE_4 = -309.475
-SCORE_5 = -99.853
-TOTAL_WALLTIME ~ 116
+TRANSLATION_1=Prag überquillt Stock Markt , durch das Ende des Handel Tag
+TRANSLATION_2=nach einem steilen Rückgang der Morgen der Prager Stock Markt ihre Verluste . korrigiert
+TRANSLATION_3=Geschäfte mit Aktien aus der Tschechischen Energy Enterprise ( ČEZ ) erreicht beinahe die Hälfte der täglichen Handel . regelmäßigen
+TRANSLATION_4=Ãœber die Prag Stock Market sofort seinem Sturz von Montag Anfang der Handel , wenn es um beinahe sechs Prozent . Tuesday
+TRANSLATION_5=diesmal in Aktien an der Wall Street dem Fall ist für die fallen .
+LMLOAD_TIME ~ 1.000
+PTLOAD_TIME ~ 1.000
+PTLOAD_TIME ~ 83.000
+PTLOAD_TIME ~ 83.000
+SCORE_1 = -12.918
+SCORE_2 = -12.745
+SCORE_3 = -117.149
+SCORE_4 = -122.749
+SCORE_5 = -9.149
+TOTAL_WALLTIME ~ 105
diff --git a/regression-testing/tests/chart.show-weights.target-syntax/moses.ini b/regression-testing/tests/chart.show-weights.target-syntax/moses.ini
index cd49dc26d..3ae39c73c 100644
--- a/regression-testing/tests/chart.show-weights.target-syntax/moses.ini
+++ b/regression-testing/tests/chart.show-weights.target-syntax/moses.ini
@@ -20,7 +20,7 @@
# language models: type(srilm/irstlm), factors, order, file
[lmodel-file]
-0 0 5 ${LM_PATH}/news.de.binlm
+1 0 5 ${LM_PATH}/news.de.binlm
# limit on how many phrase translations e for each phrase f are loaded
@@ -52,9 +52,6 @@
[cube-pruning-pop-limit]
1000
-[glue-rule-type]
-0
-
[non-terminals]
X
diff --git a/regression-testing/tests/chart.target-syntax.ondisk/moses.ini b/regression-testing/tests/chart.target-syntax.ondisk/moses.ini
index d4d086a88..c04c13872 100644
--- a/regression-testing/tests/chart.target-syntax.ondisk/moses.ini
+++ b/regression-testing/tests/chart.target-syntax.ondisk/moses.ini
@@ -20,7 +20,7 @@
# language models: type(srilm/irstlm), factors, order, file
[lmodel-file]
-0 0 5 ${LM_PATH}/news.de.binlm
+1 0 5 ${LM_PATH}/news.de.binlm
# limit on how many phrase translations e for each phrase f are loaded
@@ -52,9 +52,6 @@
[cube-pruning-pop-limit]
1000
-[glue-rule-type]
-0
-
[non-terminals]
X
diff --git a/regression-testing/tests/chart.target-syntax.ondisk/truth/results.txt b/regression-testing/tests/chart.target-syntax.ondisk/truth/results.txt
index e6b7e249d..b9af41b98 100644
--- a/regression-testing/tests/chart.target-syntax.ondisk/truth/results.txt
+++ b/regression-testing/tests/chart.target-syntax.ondisk/truth/results.txt
@@ -1,13 +1,13 @@
-TRANSLATION_1=Prag Stock Market 0,90 ohne Ende Handel Tag
-TRANSLATION_2=nach abrupten Rückgang morgens die Prager an Market korrigiert .
-TRANSLATION_3=Transaktionen mit Aktien der Tschechiens Enterprise ( ČEZ ) erreicht beinahe halb regelmäßigen tägliche .
-TRANSLATION_4=die Prag Stock Market sofort ihren von Montag Anfang Tuesday Handel bei um beinahe sechs Prozent .
-TRANSLATION_5=diesmal Rückgang Aktien Luftblasen-Theorie ist der .
-LMLOAD_TIME ~ 1
-PTLOAD_TIME ~ 93
-SCORE_1 = -84.121
-SCORE_2 = -105.710
-SCORE_3 = -248.783
-SCORE_4 = -269.594
-SCORE_5 = -76.063
-TOTAL_WALLTIME ~ 14
+TRANSLATION_1=Prag an Market fällt zu ohne am Ende des Handel Tag
+TRANSLATION_2=nach einem steilen Rückgang der Morgen , die Prag Stock Market korrigiert ihre Verluste .
+TRANSLATION_3=Geschäfte mit Aktien aus der tschechischen Energy Enterprise ( ČEZ ) erreicht beinahe die Hälfte der regelmäßigen Tageszeitung Handel .
+TRANSLATION_4=durch die Prag Stock Market sofort ihren fallen aus Montag Anfang Tuesday der Handel , als es um beinahe sechs Prozent .
+TRANSLATION_5=dieses Mal den Rückgang der Aktien an der Wall Street verantwortlich ist für den Einbruch .
+LMLOAD_TIME ~ 1.000
+PTLOAD_TIME ~ 1.000
+SCORE_1 = -9.173
+SCORE_2 = -9.857
+SCORE_3 = -113.066
+SCORE_4 = -117.916
+SCORE_5 = -7.325
+TOTAL_WALLTIME ~ 51
diff --git a/regression-testing/tests/chart.target-syntax/moses.ini b/regression-testing/tests/chart.target-syntax/moses.ini
index 71b6845a6..39cfd2c54 100644
--- a/regression-testing/tests/chart.target-syntax/moses.ini
+++ b/regression-testing/tests/chart.target-syntax/moses.ini
@@ -20,7 +20,7 @@
# language models: type(srilm/irstlm), factors, order, file
[lmodel-file]
-0 0 5 ${LM_PATH}/news.de.binlm
+1 0 5 ${LM_PATH}/news.de.binlm
# limit on how many phrase translations e for each phrase f are loaded
@@ -52,9 +52,6 @@
[cube-pruning-pop-limit]
1000
-[glue-rule-type]
-0
-
[non-terminals]
X
diff --git a/regression-testing/tests/chart.target-syntax/truth/results.txt b/regression-testing/tests/chart.target-syntax/truth/results.txt
index e6b7e249d..e58ab85cf 100644
--- a/regression-testing/tests/chart.target-syntax/truth/results.txt
+++ b/regression-testing/tests/chart.target-syntax/truth/results.txt
@@ -1,13 +1,15 @@
-TRANSLATION_1=Prag Stock Market 0,90 ohne Ende Handel Tag
-TRANSLATION_2=nach abrupten Rückgang morgens die Prager an Market korrigiert .
-TRANSLATION_3=Transaktionen mit Aktien der Tschechiens Enterprise ( ČEZ ) erreicht beinahe halb regelmäßigen tägliche .
-TRANSLATION_4=die Prag Stock Market sofort ihren von Montag Anfang Tuesday Handel bei um beinahe sechs Prozent .
-TRANSLATION_5=diesmal Rückgang Aktien Luftblasen-Theorie ist der .
-LMLOAD_TIME ~ 1
-PTLOAD_TIME ~ 93
-SCORE_1 = -84.121
-SCORE_2 = -105.710
-SCORE_3 = -248.783
-SCORE_4 = -269.594
-SCORE_5 = -76.063
-TOTAL_WALLTIME ~ 14
+TRANSLATION_1=Prag an Market fällt zu ohne am Ende des Handel Tag
+TRANSLATION_2=nach einem steilen Rückgang der Morgen , die Prag Stock Market korrigiert ihre Verluste .
+TRANSLATION_3=Geschäfte mit Aktien aus der tschechischen Energy Enterprise ( ČEZ ) erreicht beinahe die Hälfte der regelmäßigen Tageszeitung Handel .
+TRANSLATION_4=bei der Prag Stock Market sofort ihren fallen aus Montag Anfang Tuesday Handel , wenn es um beinahe sechs Prozent .
+TRANSLATION_5=an der Zeit in diesem Herbst in Aktien an der Wall Street dafür verantwortlich ist , die Einbruch .
+LMLOAD_TIME ~ 0.000
+PTLOAD_TIME ~ 0.000
+PTLOAD_TIME ~ 7.000
+PTLOAD_TIME ~ 7.000
+SCORE_1 = -9.173
+SCORE_2 = -9.857
+SCORE_3 = -113.066
+SCORE_4 = -117.959
+SCORE_5 = -7.223
+TOTAL_WALLTIME ~ 23
diff --git a/regression-testing/tests/phrase.basic-surface-only-withirstlm-binlm/filter-stderr.pl b/regression-testing/tests/phrase.basic-surface-only-withirstlm-binlm/filter-stderr.pl
new file mode 100755
index 000000000..2f6e17607
--- /dev/null
+++ b/regression-testing/tests/phrase.basic-surface-only-withirstlm-binlm/filter-stderr.pl
@@ -0,0 +1,22 @@
+#!/usr/bin/perl
+
+BEGIN { use Cwd qw/ abs_path /; use File::Basename; $script_dir = dirname(abs_path($0)); push @INC, "$script_dir/../perllib"; }
+use RegTestUtils;
+
+$x=0;
+while (<>) {
+ chomp;
+
+ if (/^Finished loading LanguageModels/) {
+ my $time = RegTestUtils::readTime($_);
+ print "LMLOAD_TIME ~ $time\n";
+ }
+ if (/^Finished loading phrase tables/) {
+ my $time = RegTestUtils::readTime($_);
+ print "PTLOAD_TIME ~ $time\n";
+ }
+ next unless /^BEST TRANSLATION:/;
+ my $pscore = RegTestUtils::readHypoScore($_);
+ $x++;
+ print "SCORE_$x = $pscore\n";
+}
diff --git a/regression-testing/tests/phrase.basic-surface-only-withirstlm-binlm/filter-stdout.pl b/regression-testing/tests/phrase.basic-surface-only-withirstlm-binlm/filter-stdout.pl
new file mode 100755
index 000000000..476ddf6e9
--- /dev/null
+++ b/regression-testing/tests/phrase.basic-surface-only-withirstlm-binlm/filter-stdout.pl
@@ -0,0 +1,7 @@
+#!/usr/bin/perl
+$x=0;
+while (<>) {
+ chomp;
+ $x++;
+ print "TRANSLATION_$x=$_\n";
+}
diff --git a/regression-testing/tests/phrase.basic-surface-only-withirstlm-binlm/moses.ini b/regression-testing/tests/phrase.basic-surface-only-withirstlm-binlm/moses.ini
new file mode 100644
index 000000000..271b8b34a
--- /dev/null
+++ b/regression-testing/tests/phrase.basic-surface-only-withirstlm-binlm/moses.ini
@@ -0,0 +1,49 @@
+# moses.ini for regression test
+
+[ttable-file]
+0 0 0 5 ${MODEL_PATH}/basic-surface-only/phrase-table.gz
+
+# language model
+[lmodel-file]
+1 0 3 ${LM_PATH}/europarl.en.binlm
+# limit on how many phrase translations e for each phrase f are loaded
+[ttable-limit]
+#ttable element load limit 0 = all elements loaded
+20
+
+# distortion (reordering) weight
+[weight-d]
+0.141806519223522
+
+# language model weight
+[weight-l]
+0.142658800199951
+
+# translation model weight (phrase translation, lexical weighting)
+[weight-t]
+0.00402447059454402
+0.0685647475075862
+0.294089113124688
+0.0328320356515851
+-0.0426081987467227
+
+# word penalty
+[weight-w]
+-0.273416114951401
+
+[distortion-limit]
+4
+
+[beam-threshold]
+0.03
+
+[input-factors]
+0
+
+[mapping]
+T 0
+
+
+[verbose]
+2
+
diff --git a/regression-testing/tests/phrase.basic-surface-only-withirstlm-binlm/to-translate.txt b/regression-testing/tests/phrase.basic-surface-only-withirstlm-binlm/to-translate.txt
new file mode 100644
index 000000000..a505702d1
--- /dev/null
+++ b/regression-testing/tests/phrase.basic-surface-only-withirstlm-binlm/to-translate.txt
@@ -0,0 +1,5 @@
+ich frage sie also , herr präsident : stellen die unterschiedlichen arbeitskosten somit nicht auch eine beschränkung des freien wettbewerbs in der europäischen union dar ?
+schaut man sich die fälligkeitspläne der ausführung des haushalts für die rubriken 2 , 3 , 4 und 7 an , stellt man fest , dass nur durchschnittlich 8 % aller verpflichtungen durch zahlungen gedeckt sind .
+vor drei jahren haben wir mit unserer beschäftigungsinitiative begonnen , indem wir kleinen und mittleren unternehmen halfen , chancenkapital zu bekommen .
+das parlament will das auf zweierlei weise tun .
+nur dann werden die europäischen institutionen auch ihrem auftrag gerecht .
diff --git a/regression-testing/tests/phrase.basic-surface-only-withirstlm-binlm/truth/results.txt b/regression-testing/tests/phrase.basic-surface-only-withirstlm-binlm/truth/results.txt
new file mode 100644
index 000000000..2e8e3cab8
--- /dev/null
+++ b/regression-testing/tests/phrase.basic-surface-only-withirstlm-binlm/truth/results.txt
@@ -0,0 +1,14 @@
+TRANSLATION_1=i ask you , therefore , mr president , the different labour costs are therefore not a restriction of free competition in the european union ?
+TRANSLATION_2=if we look at the fälligkeitspläne the implementation of the budget for the categories 2 , 3 , 4 and 7 to , we see that only an average of 8 % of commitments by payments are met .
+TRANSLATION_3=three years ago our employment strategy , we started by small and medium-sized enterprises , halfen chancenkapital to obtain .
+TRANSLATION_4=parliament wants the in two ways .
+TRANSLATION_5=only then will the european institutions to its mandate .
+LMLOAD_TIME ~ 0.000
+PTLOAD_TIME ~ 0.000
+PTLOAD_TIME ~ 3.000
+SCORE_1 = -14.843
+SCORE_2 = -122.483
+SCORE_3 = -217.059
+SCORE_4 = -5.995
+SCORE_5 = -7.015
+TOTAL_WALLTIME ~ 14
diff --git a/regression-testing/tests/phrase.basic-surface-only-withirstlm/filter-stderr.pl b/regression-testing/tests/phrase.basic-surface-only-withirstlm/filter-stderr.pl
new file mode 100755
index 000000000..2f6e17607
--- /dev/null
+++ b/regression-testing/tests/phrase.basic-surface-only-withirstlm/filter-stderr.pl
@@ -0,0 +1,22 @@
+#!/usr/bin/perl
+
+BEGIN { use Cwd qw/ abs_path /; use File::Basename; $script_dir = dirname(abs_path($0)); push @INC, "$script_dir/../perllib"; }
+use RegTestUtils;
+
+$x=0;
+while (<>) {
+ chomp;
+
+ if (/^Finished loading LanguageModels/) {
+ my $time = RegTestUtils::readTime($_);
+ print "LMLOAD_TIME ~ $time\n";
+ }
+ if (/^Finished loading phrase tables/) {
+ my $time = RegTestUtils::readTime($_);
+ print "PTLOAD_TIME ~ $time\n";
+ }
+ next unless /^BEST TRANSLATION:/;
+ my $pscore = RegTestUtils::readHypoScore($_);
+ $x++;
+ print "SCORE_$x = $pscore\n";
+}
diff --git a/regression-testing/tests/phrase.basic-surface-only-withirstlm/filter-stdout.pl b/regression-testing/tests/phrase.basic-surface-only-withirstlm/filter-stdout.pl
new file mode 100755
index 000000000..476ddf6e9
--- /dev/null
+++ b/regression-testing/tests/phrase.basic-surface-only-withirstlm/filter-stdout.pl
@@ -0,0 +1,7 @@
+#!/usr/bin/perl
+$x=0;
+while (<>) {
+ chomp;
+ $x++;
+ print "TRANSLATION_$x=$_\n";
+}
diff --git a/regression-testing/tests/phrase.basic-surface-only-withirstlm/moses.ini b/regression-testing/tests/phrase.basic-surface-only-withirstlm/moses.ini
new file mode 100644
index 000000000..f4c6fee97
--- /dev/null
+++ b/regression-testing/tests/phrase.basic-surface-only-withirstlm/moses.ini
@@ -0,0 +1,49 @@
+# moses.ini for regression test
+
+[ttable-file]
+0 0 0 5 ${MODEL_PATH}/basic-surface-only/phrase-table.gz
+
+# language model
+[lmodel-file]
+1 0 3 ${LM_PATH}/europarl.en.srilm.gz
+# limit on how many phrase translations e for each phrase f are loaded
+[ttable-limit]
+#ttable element load limit 0 = all elements loaded
+20
+
+# distortion (reordering) weight
+[weight-d]
+0.141806519223522
+
+# language model weight
+[weight-l]
+0.142658800199951
+
+# translation model weight (phrase translation, lexical weighting)
+[weight-t]
+0.00402447059454402
+0.0685647475075862
+0.294089113124688
+0.0328320356515851
+-0.0426081987467227
+
+# word penalty
+[weight-w]
+-0.273416114951401
+
+[distortion-limit]
+4
+
+[beam-threshold]
+0.03
+
+[input-factors]
+0
+
+[mapping]
+T 0
+
+
+[verbose]
+2
+
diff --git a/regression-testing/tests/phrase.basic-surface-only-withirstlm/to-translate.txt b/regression-testing/tests/phrase.basic-surface-only-withirstlm/to-translate.txt
new file mode 100644
index 000000000..a505702d1
--- /dev/null
+++ b/regression-testing/tests/phrase.basic-surface-only-withirstlm/to-translate.txt
@@ -0,0 +1,5 @@
+ich frage sie also , herr präsident : stellen die unterschiedlichen arbeitskosten somit nicht auch eine beschränkung des freien wettbewerbs in der europäischen union dar ?
+schaut man sich die fälligkeitspläne der ausführung des haushalts für die rubriken 2 , 3 , 4 und 7 an , stellt man fest , dass nur durchschnittlich 8 % aller verpflichtungen durch zahlungen gedeckt sind .
+vor drei jahren haben wir mit unserer beschäftigungsinitiative begonnen , indem wir kleinen und mittleren unternehmen halfen , chancenkapital zu bekommen .
+das parlament will das auf zweierlei weise tun .
+nur dann werden die europäischen institutionen auch ihrem auftrag gerecht .
diff --git a/regression-testing/tests/phrase.basic-surface-only-withirstlm/truth/results.txt b/regression-testing/tests/phrase.basic-surface-only-withirstlm/truth/results.txt
new file mode 100644
index 000000000..bf57182f6
--- /dev/null
+++ b/regression-testing/tests/phrase.basic-surface-only-withirstlm/truth/results.txt
@@ -0,0 +1,14 @@
+TRANSLATION_1=i ask you , therefore , mr president , the different labour costs are therefore not a restriction of free competition in the european union ?
+TRANSLATION_2=if we look at the fälligkeitspläne the implementation of the budget for the categories 2 , 3 , 4 and 7 to , we see that only an average of 8 % of commitments by payments are met .
+TRANSLATION_3=three years ago our employment strategy , we started by small and medium-sized enterprises , halfen chancenkapital to obtain .
+TRANSLATION_4=parliament wants the in two ways .
+TRANSLATION_5=only then will the european institutions to its mandate .
+LMLOAD_TIME ~ 21.000
+PTLOAD_TIME ~ 21.000
+PTLOAD_TIME ~ 23.000
+SCORE_1 = -14.843
+SCORE_2 = -122.483
+SCORE_3 = -217.059
+SCORE_4 = -5.995
+SCORE_5 = -7.015
+TOTAL_WALLTIME ~ 32
diff --git a/regression-testing/tests/phrase.confusionNet-multi-factor/moses.ini b/regression-testing/tests/phrase.confusionNet-multi-factor/moses.ini
index 770c83933..ee6c05de4 100644
--- a/regression-testing/tests/phrase.confusionNet-multi-factor/moses.ini
+++ b/regression-testing/tests/phrase.confusionNet-multi-factor/moses.ini
@@ -63,9 +63,6 @@ T 1
[stack]
1000
-[ttable-threshold]
-5e-07
-
[verbose]
2
diff --git a/regression-testing/tests/phrase.ptable-filtering/moses.ini b/regression-testing/tests/phrase.ptable-filtering/moses.ini
index 472fe9020..0838ad6b7 100644
--- a/regression-testing/tests/phrase.ptable-filtering/moses.ini
+++ b/regression-testing/tests/phrase.ptable-filtering/moses.ini
@@ -11,10 +11,6 @@
[ttable-limit]
20
-# distortion (reordering) type
-[distortion-type]
-distance
-
# distortion (reordering) weight
[weight-d]
0.01
@@ -42,9 +38,6 @@ distance
[stack]
100
-[lmodel-floor]
--50
-
[beam-threshold]
0.03
diff --git a/regression-testing/tests/score.hierarchical-inv/truth/results.txt b/regression-testing/tests/score.hierarchical-inv/truth/results.txt
new file mode 100644
index 000000000..e4e8ff2c5
--- /dev/null
+++ b/regression-testing/tests/score.hierarchical-inv/truth/results.txt
@@ -0,0 +1,9603 @@
+( [X] ||| ( [X] ||| 0.0278341 1 ||| ||| 1
+( [X][X] [X] ||| ( [X][X] [X] ||| 0.0278341 1 ||| ||| 0.576191
+( [X][X] a [X] ||| ( [X][X] einer [X] ||| 0.0278341 1 ||| ||| 0.1
+( [X][X] rose and observed [X] ||| ( [X][X] erhebt sich zu [X] ||| 0.0278341 1 ||| ||| 0.142857
+( the House [X] ||| ( das Parlament [X] ||| 0.0278341 1 ||| ||| 0.333333
+( the House [X][X] [X] ||| ( das Parlament [X][X] [X] ||| 0.0278341 1 ||| ||| 0.242857
+( the House [X][X] a [X] ||| ( das Parlament [X][X] einer [X] ||| 0.0278341 1 ||| ||| 0.1
+( the [X] ||| ( das [X] ||| 0.0278341 1 ||| ||| 1
+( the [X][X] [X] ||| ( das [X][X] [X] ||| 0.0278341 1 ||| ||| 0.242857
+( the [X][X] a [X] ||| ( das [X][X] einer [X] ||| 0.0278341 1 ||| ||| 0.1
+) [X] ||| ) [X] ||| 0.0278341 1 ||| ||| 1
+Alexander [X] ||| , Alexander [X] ||| 0.013917 1 ||| ||| 2
+for Alexander [X] ||| , Alexander [X] ||| 0.013917 1 ||| ||| 2
+, Madam President , [X] ||| , Frau Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.166667
+, Madam President , [X] ||| , Frau Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.125
+, Madam President [X] ||| , Frau Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.333333
+, Madam [X] ||| , Frau [X] ||| 0.0278341 1 ||| ||| 1
+, Madam [X][X] [X] ||| , Frau [X][X] [X] ||| 0.0278341 1 ||| ||| 0.291667
+, Madam [X][X] [X] ||| , Frau [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.125
+, Mr Evans , [X] ||| , Herr Evans , [X] ||| 0.0278341 1 ||| ||| 0.166667
+, Mr Evans , [X][X] [X] ||| , Herr Evans , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0871143
+, Mr Evans , I [X] ||| , Herr Evans , ich [X] ||| 0.0278341 1 ||| ||| 0.0909091
+, Mr Evans [X] ||| , Herr Evans [X] ||| 0.0278341 1 ||| ||| 0.333333
+, Mr Evans [X][X] [X] ||| , Herr Evans [X][X] [X] ||| 0.0278341 1 ||| ||| 0.178023
+, Mr Evans [X][X] feel [X] ||| , Herr Evans [X][X] denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0526316
+, Mr Evans [X][X] an [X] ||| , Herr Evans [X][X] eine [X] ||| 0.0278341 1 ||| ||| 0.0344828
+, Mr [X] ||| , Herr [X] ||| 0.0278341 1 ||| ||| 1
+, Mr [X][X] [X] ||| , Herr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.34469
+, Mr [X][X] feel [X] ||| , Herr [X][X] denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0526316
+, Mr [X][X] feel an [X] ||| , Herr [X][X] denke , daß eine [X] ||| 0.0278341 1 ||| ||| 0.0344828
+, Mr [X][X] an [X] ||| , Herr [X][X] eine [X] ||| 0.0278341 1 ||| ||| 0.0344828
+, Mr [X][X] I [X] ||| , Herr [X][X] ich [X] ||| 0.0278341 1 ||| ||| 0.0909091
+, Mr [X][X] I [X][X] [X] ||| , Herr [X][X] ich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0344828
+, Mr [X][X] I feel [X] ||| , Herr [X][X] ich denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0526316
+, Mr Zimeray , [X] ||| , Herrn Zimeray , [X] ||| 0.0278341 1 ||| ||| 0.166667
+, Mr Zimeray , [X][X] [X] ||| , Herrn Zimeray , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142157
+, Mr Zimeray [X] ||| , Herrn Zimeray [X] ||| 0.0278341 1 ||| ||| 0.333333
+, Mr Zimeray [X][X] [X] ||| , Herrn Zimeray [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142157
+, Mr Zimeray [X][X] presented [X] ||| , Herrn Zimeray [X][X] eingereicht [X] ||| 0.0278341 1 ||| ||| 0.0588235
+, Mr [X] ||| , Herrn [X] ||| 0.0278341 1 ||| ||| 1
+, Mr [X][X] [X] ||| , Herrn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.308824
+, Mr [X][X] presented [X] ||| , Herrn [X][X] eingereicht [X] ||| 0.0278341 1 ||| ||| 0.0588235
+, [X] ||| , [X] ||| 0.717949 1 ||| ||| 39
+, on [X] ||| , [X] ||| 0.000713695 1 ||| ||| 39
+, on behalf [X] ||| , [X] ||| 0.000713695 1 ||| ||| 39
+, on behalf of [X] ||| , [X] ||| 0.000713695 1 ||| ||| 39
+, using [X] ||| , [X] ||| 0.000713695 1 ||| ||| 39
+indeed , [X] ||| , [X] ||| 0.000713695 1 ||| ||| 39
+representations , [X] ||| , [X] ||| 0.000713695 1 ||| ||| 39
+representations , using [X] ||| , [X] ||| 0.000713695 1 ||| ||| 39
+that [X] ||| , [X] ||| 0.0442338 1 ||| ||| 39
+to [X] ||| , [X] ||| 0.000713695 1 ||| ||| 39
+[X][X] , Madam President , [X] ||| , [X][X] , Frau Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] , Madam President , [X] ||| , [X][X] , Frau Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+[X][X] , Madam President [X] ||| , [X][X] , Frau Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] , Madam [X] ||| , [X][X] , Frau [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] , Madam [X][X] [X] ||| , [X][X] , Frau [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0633528
+[X][X] , Madam [X][X] [X] ||| , [X][X] , Frau [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+, [X][X] , [X] ||| , [X][X] , [X] ||| 0.137273 1 ||| ||| 1.80334
+, [X][X] [X] ||| , [X][X] , [X] ||| 0.00308695 1 ||| ||| 1.80334
+[X][X] , [X] ||| , [X][X] , [X] ||| 0.0075173 1 ||| ||| 1.80334
+[X][X] that [X] ||| , [X][X] , [X] ||| 0.00140316 1 ||| ||| 1.80334
+, [X][X] , [X][X] , [X] ||| , [X][X] , [X][X] , [X] ||| 0.01342 1 ||| ||| 0.0715198
+[X][X] , [X][X] , [X] ||| , [X][X] , [X][X] , [X] ||| 0.0144141 1 ||| ||| 0.0715198
+[X][X] , [X][X] , [X] ||| , [X][X] , [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+[X][X] , [X][X] . [X] ||| , [X][X] , [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] , [X][X] Governor [X] ||| , [X][X] , [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0176991
+[X][X] , [X][X] the Governor [X] ||| , [X][X] , [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0176991
+[X][X] , [X][X] President [X] ||| , [X][X] , [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0285714
+[X][X] , [X][X] President and [X] ||| , [X][X] , [X][X] Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.0175439
+, [X][X] , [X][X] [X] ||| , [X][X] , [X][X] [X] ||| 0.0152404 1 ||| ||| 0.977413
+[X][X] , [X][X] [X] ||| , [X][X] , [X][X] [X] ||| 0.00404825 1 ||| ||| 0.977413
+[X][X] , [X][X] [X] ||| , [X][X] , [X][X] [X] ||| 0.0074845 1 ||| ||| 0.977413
+[X][X] , [X][X] the [X] ||| , [X][X] , [X][X] [X] ||| 0.000343101 1 ||| ||| 0.977413
+[X][X] , [X][X] to [X] ||| , [X][X] , [X][X] [X] ||| 0.000374702 1 ||| ||| 0.977413
+[X][X] , [X][X] to the [X] ||| , [X][X] , [X][X] [X] ||| 0.000343101 1 ||| ||| 0.977413
+, [X][X] , raise [X][X] [X] ||| , [X][X] , [X][X] ansprechen [X] ||| 0.0278341 1 ||| ||| 0.0434783
+[X][X] , [X][X] [X] ||| , [X][X] , [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+, [X][X] , [X][X] an [X] ||| , [X][X] , [X][X] eine [X] ||| 0.0278341 1 ||| ||| 0.0344828
+, [X][X] , [X][X] presented [X] ||| , [X][X] , [X][X] eingereicht [X] ||| 0.0278341 1 ||| ||| 0.0588235
+[X][X] , [X][X] . [X] ||| , [X][X] , [X][X] ist . [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] , [X][X] [X] ||| , [X][X] , [X][X] ist [X] ||| 0.0278341 1 ||| ||| 0.0588235
+[X][X] , [X][X] and [X] ||| , [X][X] , [X][X] und [X] ||| 0.0159052 1 ||| ||| 0.0307018
+[X][X] , [X][X] and to [X] ||| , [X][X] , [X][X] und [X] ||| 0.0119289 1 ||| ||| 0.0307018
+, [X][X] , [X][X] to [X] ||| , [X][X] , [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] , to [X] ||| , [X][X] , bei [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] , to [X][X] Governor [X] ||| , [X][X] , bei [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.00884956
+[X][X] , to [X][X] [X] ||| , [X][X] , bei [X][X] [X] ||| 0.0211762 1 ||| ||| 0.105377
+[X][X] , to [X][X] the [X] ||| , [X][X] , bei [X][X] [X] ||| 0.00318239 1 ||| ||| 0.105377
+[X][X] , to [X][X] to [X] ||| , [X][X] , bei [X][X] [X] ||| 0.0034755 1 ||| ||| 0.105377
+[X][X] , to [X][X] and [X] ||| , [X][X] , bei [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0175439
+[X][X] , to the President [X] ||| , [X][X] , bei dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0285714
+[X][X] , to the [X] ||| , [X][X] , bei dem [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] , to the [X][X] [X] ||| , [X][X] , bei dem [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0515995
+, [X][X] , i.e. [X] ||| , [X][X] , d. h. [X] ||| 0.0278341 1 ||| ||| 0.142857
+, [X][X] , i.e. [X][X] [X] ||| , [X][X] , d. h. [X][X] [X] ||| 0.0278341 1 ||| ||| 0.087037
+, [X][X] , i.e. on [X] ||| , [X][X] , d. h. am [X] ||| 0.0278341 1 ||| ||| 0.0909091
+, [X][X] , [X] ||| , [X][X] , der [X] ||| 0.0125916 1 ||| ||| 0.276316
+[X][X] , [X] ||| , [X][X] , der [X] ||| 0.00265087 1 ||| ||| 0.276316
+[X][X] , who [X] ||| , [X][X] , der [X] ||| 0.0125916 1 ||| ||| 0.276316
+, [X][X] , which [X] ||| , [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.111111
+, [X][X] , which [X] ||| , [X][X] , die von [X] ||| 0.0278341 1 ||| ||| 0.0833333
+, [X][X] , which many [X] ||| , [X][X] , die von vielen [X] ||| 0.0278341 1 ||| ||| 0.05
+, [X][X] , I [X] ||| , [X][X] , ich [X] ||| 0.0278341 1 ||| ||| 0.0909091
+, [X][X] , I [X][X] [X] ||| , [X][X] , ich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0344828
+, [X][X] , I feel [X] ||| , [X][X] , ich denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0526316
+people signed , [X][X] [X] ||| , [X][X] , unterzeichnet worden [X] ||| 0.0102547 1 ||| ||| 0.22619
+signed , [X][X] [X] ||| , [X][X] , unterzeichnet worden [X] ||| 0.0175794 1 ||| ||| 0.22619
+people signed , [X][X] . [X] ||| , [X][X] , unterzeichnet worden ist . [X] ||| 0.00863818 1 ||| ||| 0.161111
+signed , [X][X] . [X] ||| , [X][X] , unterzeichnet worden ist . [X] ||| 0.0191959 1 ||| ||| 0.161111
+people signed , [X][X] [X] ||| , [X][X] , unterzeichnet worden ist [X] ||| 0.00811828 1 ||| ||| 0.20168
+signed , [X][X] [X] ||| , [X][X] , unterzeichnet worden ist [X] ||| 0.0197158 1 ||| ||| 0.20168
+, [X][X] . [X] ||| , [X][X] . [X] ||| 0.0188553 1 ||| ||| 0.657576
+[X][X] . [X] ||| , [X][X] . [X] ||| 0.00897875 1 ||| ||| 0.657576
+[X][X] 6 [X] ||| , [X][X] 6 [X] ||| 0.0278341 1 ||| ||| 0.2
+proposal [X][X] 6 that [X] ||| , [X][X] 6 vorschlägt , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+proposal [X][X] 6 [X] ||| , [X][X] 6 vorschlägt [X] ||| 0.0278341 1 ||| ||| 0.125
+, [X][X] prestigious office [X] ||| , [X][X] Amtes [X] ||| 0.0100385 1 ||| ||| 0.163101
+, using [X][X] prestigious office [X] ||| , [X][X] Amtes [X] ||| 0.0100385 1 ||| ||| 0.163101
+representations , [X][X] prestigious office [X] ||| , [X][X] Amtes [X] ||| 0.00775704 1 ||| ||| 0.163101
+, [X][X] prestigious office [X][X] [X] ||| , [X][X] Amtes [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0357143
+, [X][X] prestigious office and [X] ||| , [X][X] Amtes und [X] ||| 0.0278341 1 ||| ||| 0.0454545
+, [X][X] the start [X] ||| , [X][X] Beginn [X] ||| 0.0278341 1 ||| ||| 0.0588235
+, [X][X] the start [X][X] [X] ||| , [X][X] Beginn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] is appealing . [X] ||| , [X][X] Berufung geht . [X] ||| 0.0278341 1 ||| ||| 0.0454545
+[X][X] is appealing [X] ||| , [X][X] Berufung geht [X] ||| 0.0278341 1 ||| ||| 0.0555556
+, [X][X] Thursday prior [X] ||| , [X][X] Donnerstag [X] ||| 0.0278341 1 ||| ||| 0.175
+, [X][X] Thursday prior [X][X] [X] ||| , [X][X] Donnerstag [X][X] [X] ||| 0.0278341 1 ||| ||| 0.108824
+, [X][X] Thursday prior to [X] ||| , [X][X] Donnerstag zu [X] ||| 0.0278341 1 ||| ||| 0.12037
+[X][X] objection [X] ||| , [X][X] Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.333333
+[X][X] Madam President , [X] ||| , [X][X] Frau Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] Madam President , [X] ||| , [X][X] Frau Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+[X][X] Madam President [X] ||| , [X][X] Frau Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] Madam [X] ||| , [X][X] Frau [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] Madam [X][X] [X] ||| , [X][X] Frau [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0633528
+[X][X] Madam [X][X] [X] ||| , [X][X] Frau [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+, [X][X] Governor [X] ||| , [X][X] Gouverneur [X] ||| 0.0070839 1 ||| ||| 0.112263
+, [X][X] the Governor [X] ||| , [X][X] Gouverneur [X] ||| 0.0070839 1 ||| ||| 0.112263
+, [X][X] to the Governor [X] ||| , [X][X] Gouverneur [X] ||| 0.0070839 1 ||| ||| 0.112263
+[X][X] Governor [X] ||| , [X][X] Gouverneur [X] ||| 0.00219413 1 ||| ||| 0.112263
+[X][X] the Governor [X] ||| , [X][X] Gouverneur [X] ||| 0.00219413 1 ||| ||| 0.112263
+[X][X] to the Governor [X] ||| , [X][X] Gouverneur [X] ||| 0.00219413 1 ||| ||| 0.112263
+, [X][X] Governor of [X] ||| , [X][X] Gouverneur von [X] ||| 0.013917 1 ||| ||| 0.0444444
+, [X][X] the Governor of [X] ||| , [X][X] Gouverneur von [X] ||| 0.013917 1 ||| ||| 0.0444444
+, [X][X] of your [X] ||| , [X][X] Ihres [X] ||| 0.0101702 1 ||| ||| 0.195489
+, using [X][X] of your [X] ||| , [X][X] Ihres [X] ||| 0.0101702 1 ||| ||| 0.195489
+representations , [X][X] of your [X] ||| , [X][X] Ihres [X] ||| 0.0074938 1 ||| ||| 0.195489
+, [X][X] of your [X][X] [X] ||| , [X][X] Ihres [X][X] [X] ||| 0.0278341 1 ||| ||| 0.139992
+, [X][X] the victims [X] ||| , [X][X] Opfern [X] ||| 0.00556682 1 ||| ||| 0.25
+, [X][X] victims [X] ||| , [X][X] Opfern [X] ||| 0.00556682 1 ||| ||| 0.25
+, on [X][X] the victims [X] ||| , [X][X] Opfern [X] ||| 0.00556682 1 ||| ||| 0.25
+, on [X][X] victims [X] ||| , [X][X] Opfern [X] ||| 0.00556682 1 ||| ||| 0.25
+, on behalf [X][X] victims [X] ||| , [X][X] Opfern [X] ||| 0.00556682 1 ||| ||| 0.25
+[X][X] Parliament [X] ||| , [X][X] Parlament [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] Parliament [X][X] [X] ||| , [X][X] Parlament [X][X] [X] ||| 0.0154511 1 ||| ||| 0.121151
+[X][X] Parliament [X][X] an [X] ||| , [X][X] Parlament [X][X] [X] ||| 0.00459496 1 ||| ||| 0.121151
+[X][X] Parliament [X][X] an interest [X] ||| , [X][X] Parlament [X][X] [X] ||| 0.00389404 1 ||| ||| 0.121151
+[X][X] Parliament [X][X] interest [X] ||| , [X][X] Parlament [X][X] [X] ||| 0.00389404 1 ||| ||| 0.121151
+[X][X] Parliament has [X][X] [X] ||| , [X][X] Parlament [X][X] hat [X] ||| 0.0179643 1 ||| ||| 0.104201
+[X][X] Parliament has [X][X] an [X] ||| , [X][X] Parlament [X][X] hat [X] ||| 0.00534237 1 ||| ||| 0.104201
+[X][X] Parliament has [X][X] interest [X] ||| , [X][X] Parlament [X][X] hat [X] ||| 0.00452744 1 ||| ||| 0.104201
+[X][X] Parliament has consistently shown [X] ||| , [X][X] Parlament immer wieder befaßt hat [X] ||| 0.0278341 1 ||| ||| 0.030303
+[X][X] President , [X] ||| , [X][X] Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] President , [X] ||| , [X][X] Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+[X][X] President [X] ||| , [X][X] Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0666667
+, [X][X] President [X] ||| , [X][X] Präsidentschaftskandidaten [X] ||| 0.0237608 1 ||| ||| 0.195238
+[X][X] President [X] ||| , [X][X] Präsidentschaftskandidaten [X] ||| 0.00407327 1 ||| ||| 0.195238
+, [X][X] President [X][X] Governor [X] ||| , [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0171872 1 ||| ||| 0.0462705
+[X][X] President [X][X] Governor [X] ||| , [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.00532347 1 ||| ||| 0.0462705
+[X][X] President [X][X] the Governor [X] ||| , [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.00532347 1 ||| ||| 0.0462705
+, [X][X] President [X][X] [X] ||| , [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0173021 1 ||| ||| 0.247691
+, [X][X] President [X][X] the [X] ||| , [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.00535116 1 ||| ||| 0.247691
+[X][X] President [X][X] [X] ||| , [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.00382698 1 ||| ||| 0.247691
+[X][X] President [X][X] the [X] ||| , [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.00135391 1 ||| ||| 0.247691
+, [X][X] President [X][X] of [X] ||| , [X][X] Präsidentschaftskandidaten [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0222222
+, [X][X] President and [X] ||| , [X][X] Präsidentschaftskandidaten und [X] ||| 0.013373 1 ||| ||| 0.189215
+, [X][X] President and to [X] ||| , [X][X] Präsidentschaftskandidaten und [X] ||| 0.00817241 1 ||| ||| 0.189215
+[X][X] President and [X] ||| , [X][X] Präsidentschaftskandidaten und [X] ||| 0.00258076 1 ||| ||| 0.189215
+[X][X] President and to [X] ||| , [X][X] Präsidentschaftskandidaten und [X] ||| 0.00193557 1 ||| ||| 0.189215
+[X][X] President and to the [X] ||| , [X][X] Präsidentschaftskandidaten und [X] ||| 0.00177233 1 ||| ||| 0.189215
+, [X][X] President and [X][X] [X] ||| , [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.0206415 1 ||| ||| 0.0684928
+[X][X] President and [X][X] [X] ||| , [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.00359628 1 ||| ||| 0.0684928
+[X][X] President and to [X][X] [X] ||| , [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.00359628 1 ||| ||| 0.0684928
+[X][X] public prosecutor [X] ||| , [X][X] Staatsanwalt [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] public prosecutor [X][X] . [X] ||| , [X][X] Staatsanwalt [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0454545
+[X][X] public prosecutor [X][X] [X] ||| , [X][X] Staatsanwalt [X][X] [X] ||| 0.0278341 1 ||| ||| 0.10101
+[X][X] public prosecutor is appealing [X] ||| , [X][X] Staatsanwalt in Berufung geht [X] ||| 0.0278341 1 ||| ||| 0.0555556
+[X][X] public prosecutor [X] ||| , [X][X] Staatsanwalt in [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] public prosecutor [X][X] . [X] ||| , [X][X] Staatsanwalt in [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0454545
+[X][X] public prosecutor [X][X] [X] ||| , [X][X] Staatsanwalt in [X][X] [X] ||| 0.0278341 1 ||| ||| 0.10101
+, [X][X] do [X][X] suggested [X] ||| , [X][X] Vorschlag [X][X] folgen [X] ||| 0.0278341 1 ||| ||| 0.04
+, [X][X] as [X][X] suggested [X] ||| , [X][X] Vorschlag von [X][X] folgen [X] ||| 0.0278341 1 ||| ||| 0.04
+, [X][X] [X] ||| , [X][X] [X] ||| 0.767368 1 ||| ||| 15.263
+, [X][X] do [X] ||| , [X][X] [X] ||| 0.000759847 1 ||| ||| 15.263
+, [X][X] have [X] ||| , [X][X] [X] ||| 5.52615e-05 1 ||| ||| 15.263
+, [X][X] people [X] ||| , [X][X] [X] ||| 0.000260518 1 ||| ||| 15.263
+, [X][X] representations [X] ||| , [X][X] [X] ||| 0.000260518 1 ||| ||| 15.263
+, [X][X] the [X] ||| , [X][X] [X] ||| 0.000269203 1 ||| ||| 15.263
+, [X][X] to [X] ||| , [X][X] [X] ||| 0.000101313 1 ||| ||| 15.263
+, [X][X] to the [X] ||| , [X][X] [X] ||| 8.68395e-05 1 ||| ||| 15.263
+, [X][X] you [X] ||| , [X][X] [X] ||| 6.51297e-05 1 ||| ||| 15.263
+, [X][X] you have [X] ||| , [X][X] [X] ||| 5.52615e-05 1 ||| ||| 15.263
+, on [X][X] [X] ||| , [X][X] [X] ||| 0.000534063 1 ||| ||| 15.263
+, on [X][X] the [X] ||| , [X][X] [X] ||| 0.000182363 1 ||| ||| 15.263
+, on behalf [X][X] [X] ||| , [X][X] [X] ||| 0.000534063 1 ||| ||| 15.263
+, on behalf [X][X] the [X] ||| , [X][X] [X] ||| 0.000182363 1 ||| ||| 15.263
+, on behalf of [X][X] [X] ||| , [X][X] [X] ||| 0.000273545 1 ||| ||| 15.263
+, using [X][X] [X] ||| , [X][X] [X] ||| 0.000689493 1 ||| ||| 15.263
+representations , [X][X] [X] ||| , [X][X] [X] ||| 0.000809109 1 ||| ||| 15.263
+representations , using [X][X] [X] ||| , [X][X] [X] ||| 0.000444382 1 ||| ||| 15.263
+that [X][X] [X] ||| , [X][X] [X] ||| 0.000911816 1 ||| ||| 15.263
+, [X][X] do [X][X] . [X] ||| , [X][X] [X][X] . [X] ||| 0.0132543 1 ||| ||| 0.190909
+[X][X] , [X][X] . [X] ||| , [X][X] [X][X] . [X] ||| 0.0145798 1 ||| ||| 0.190909
+, [X][X] initiative [X][X] [X] ||| , [X][X] [X][X] Initiative [X] ||| 0.010888 1 ||| ||| 0.303315
+, [X][X] initiative [X][X] have [X] ||| , [X][X] [X][X] Initiative [X] ||| 0.00278079 1 ||| ||| 0.303315
+, [X][X] initiative [X][X] you [X] ||| , [X][X] [X][X] Initiative [X] ||| 0.00327737 1 ||| ||| 0.303315
+, [X][X] initiative of [X][X] [X] ||| , [X][X] [X][X] Initiative [X] ||| 0.010888 1 ||| ||| 0.303315
+, [X][X] do [X][X] [X] ||| , [X][X] [X][X] [X] ||| 0.00864202 1 ||| ||| 0.550461
+, [X][X] the [X][X] [X] ||| , [X][X] [X][X] [X] ||| 0.00112367 1 ||| ||| 0.550461
+, [X][X] to [X][X] [X] ||| , [X][X] [X][X] [X] ||| 0.00256839 1 ||| ||| 0.550461
+, [X][X] to the [X][X] [X] ||| , [X][X] [X][X] [X] ||| 0.00112367 1 ||| ||| 0.550461
+[X][X] , [X][X] [X] ||| , [X][X] [X][X] [X] ||| 0.0143764 1 ||| ||| 0.550461
+, [X][X] raise [X][X] , [X] ||| , [X][X] [X][X] ansprechen , [X] ||| 0.0278341 1 ||| ||| 0.0344828
+, [X][X] raise [X][X] [X] ||| , [X][X] [X][X] ansprechen [X] ||| 0.0278341 1 ||| ||| 0.0434783
+, [X][X] the [X][X] [X] ||| , [X][X] [X][X] das [X] ||| 0.013917 1 ||| ||| 0.153846
+, [X][X] to the [X][X] [X] ||| , [X][X] [X][X] das [X] ||| 0.013917 1 ||| ||| 0.153846
+, [X][X] a petition [X][X] [X] ||| , [X][X] [X][X] eine Petition [X] ||| 0.0278341 1 ||| ||| 0.0833333
+[X][X] has [X][X] [X] ||| , [X][X] [X][X] hat [X] ||| 0.0154511 1 ||| ||| 0.121151
+[X][X] has [X][X] an [X] ||| , [X][X] [X][X] hat [X] ||| 0.00459496 1 ||| ||| 0.121151
+[X][X] has [X][X] an interest [X] ||| , [X][X] [X][X] hat [X] ||| 0.00389404 1 ||| ||| 0.121151
+[X][X] has [X][X] interest [X] ||| , [X][X] [X][X] hat [X] ||| 0.00389404 1 ||| ||| 0.121151
+[X][X] , [X][X] . [X] ||| , [X][X] [X][X] ist . [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] , [X][X] [X] ||| , [X][X] [X][X] ist [X] ||| 0.0278341 1 ||| ||| 0.117647
+, [X][X] to [X][X] of [X] ||| , [X][X] [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0222222
+, [X][X] on Thursday prior [X] ||| , [X][X] am Donnerstag [X] ||| 0.0278341 1 ||| ||| 0.05
+, [X][X] on [X] ||| , [X][X] am [X] ||| 0.0278341 1 ||| ||| 0.0909091
+, [X][X] on [X][X] [X] ||| , [X][X] am [X][X] [X] ||| 0.0278341 1 ||| ||| 0.087037
+, [X][X] on [X][X] to [X] ||| , [X][X] am [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.037037
+, raise [X][X] , [X] ||| , [X][X] ansprechen , [X] ||| 0.0278341 1 ||| ||| 0.2
+, raise [X][X] , [X][X] [X] ||| , [X][X] ansprechen , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.177946
+, raise [X][X] , i.e. [X] ||| , [X][X] ansprechen , d. h. [X] ||| 0.0278341 1 ||| ||| 0.142857
+, raise [X][X] [X] ||| , [X][X] ansprechen [X] ||| 0.0278341 1 ||| ||| 0.333333
+[X][X] to [X] ||| , [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] to [X][X] Governor [X] ||| , [X][X] bei [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0176991
+[X][X] to [X][X] the Governor [X] ||| , [X][X] bei [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0176991
+[X][X] to [X][X] [X] ||| , [X][X] bei [X][X] [X] ||| 0.0190035 1 ||| ||| 0.117425
+[X][X] to [X][X] the [X] ||| , [X][X] bei [X][X] [X] ||| 0.00285587 1 ||| ||| 0.117425
+[X][X] to [X][X] to [X] ||| , [X][X] bei [X][X] [X] ||| 0.00311891 1 ||| ||| 0.117425
+[X][X] to [X][X] to the [X] ||| , [X][X] bei [X][X] [X] ||| 0.00285587 1 ||| ||| 0.117425
+[X][X] to [X][X] and [X] ||| , [X][X] bei [X][X] und [X] ||| 0.0159052 1 ||| ||| 0.0307018
+[X][X] to [X][X] and to [X] ||| , [X][X] bei [X][X] und [X] ||| 0.0119289 1 ||| ||| 0.0307018
+[X][X] to the President [X] ||| , [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0285714
+[X][X] to the President [X][X] [X] ||| , [X][X] bei dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0340556
+[X][X] to the President and [X] ||| , [X][X] bei dem Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.0175439
+[X][X] to the [X] ||| , [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] to the [X][X] Governor [X] ||| , [X][X] bei dem [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.00884956
+[X][X] to the [X][X] [X] ||| , [X][X] bei dem [X][X] [X] ||| 0.0186995 1 ||| ||| 0.0768056
+[X][X] to the [X][X] the [X] ||| , [X][X] bei dem [X][X] [X] ||| 0.00436623 1 ||| ||| 0.0768056
+[X][X] to the [X][X] to [X] ||| , [X][X] bei dem [X][X] [X] ||| 0.00476838 1 ||| ||| 0.0768056
+, [X][X] i.e. [X] ||| , [X][X] d. h. [X] ||| 0.0278341 1 ||| ||| 0.142857
+, [X][X] i.e. [X][X] [X] ||| , [X][X] d. h. [X][X] [X] ||| 0.0278341 1 ||| ||| 0.087037
+, [X][X] i.e. [X][X] to [X] ||| , [X][X] d. h. [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.037037
+, [X][X] i.e. on [X] ||| , [X][X] d. h. am [X] ||| 0.0278341 1 ||| ||| 0.0909091
+, [X][X] i.e. on [X][X] [X] ||| , [X][X] d. h. am [X][X] [X] ||| 0.0278341 1 ||| ||| 0.087037
+[X][X] the President [X] ||| , [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0285714
+[X][X] the President [X][X] Governor [X] ||| , [X][X] dem Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.00884956
+[X][X] the President [X][X] [X] ||| , [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0205603 1 ||| ||| 0.0461038
+[X][X] the President [X][X] the [X] ||| , [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.00727382 1 ||| ||| 0.0461038
+[X][X] the President and [X] ||| , [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0159052 1 ||| ||| 0.0307018
+[X][X] the President and to [X] ||| , [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0119289 1 ||| ||| 0.0307018
+[X][X] the President and [X][X] [X] ||| , [X][X] dem Präsidentschaftskandidaten und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.00884956
+, [X][X] do [X][X] suggested [X] ||| , [X][X] dem Vorschlag [X][X] folgen [X] ||| 0.0278341 1 ||| ||| 0.04
+, [X][X] as [X][X] suggested [X] ||| , [X][X] dem Vorschlag von [X][X] folgen [X] ||| 0.0278341 1 ||| ||| 0.04
+, [X][X] [X] ||| , [X][X] dem [X] ||| 0.0193481 1 ||| ||| 0.719299
+, [X][X] do [X] ||| , [X][X] dem [X] ||| 0.00644937 1 ||| ||| 0.719299
+[X][X] the [X] ||| , [X][X] dem [X] ||| 0.00203664 1 ||| ||| 0.719299
+, [X][X] do [X][X] . [X] ||| , [X][X] dem [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0454545
+[X][X] the [X][X] Governor [X] ||| , [X][X] dem [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0176991
+[X][X] the [X][X] the Governor [X] ||| , [X][X] dem [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0176991
+, [X][X] do [X][X] [X] ||| , [X][X] dem [X][X] [X] ||| 0.0136456 1 ||| ||| 0.174308
+[X][X] the [X][X] [X] ||| , [X][X] dem [X][X] [X] ||| 0.00823957 1 ||| ||| 0.174308
+[X][X] the [X][X] the [X] ||| , [X][X] dem [X][X] [X] ||| 0.00192389 1 ||| ||| 0.174308
+[X][X] the [X][X] to [X] ||| , [X][X] dem [X][X] [X] ||| 0.00210109 1 ||| ||| 0.174308
+[X][X] the [X][X] to the [X] ||| , [X][X] dem [X][X] [X] ||| 0.00192389 1 ||| ||| 0.174308
+, [X][X] feel [X] ||| , [X][X] denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0526316
+, [X][X] feel an [X] ||| , [X][X] denke , daß eine [X] ||| 0.0278341 1 ||| ||| 0.0344828
+, [X][X] [X] ||| , [X][X] der [X] ||| 0.0141187 1 ||| ||| 0.246429
+, [X][X] of the [X] ||| , [X][X] der [X] ||| 0.0056475 1 ||| ||| 0.246429
+, [X][X] the [X] ||| , [X][X] der [X] ||| 0.00403393 1 ||| ||| 0.246429
+, using [X][X] the [X] ||| , [X][X] der [X] ||| 0.00403393 1 ||| ||| 0.246429
+, [X][X] which [X] ||| , [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.111111
+, [X][X] which [X] ||| , [X][X] die von [X] ||| 0.0278341 1 ||| ||| 0.0833333
+, [X][X] which many [X] ||| , [X][X] die von vielen [X] ||| 0.0278341 1 ||| ||| 0.05
+, [X][X] raise this question [X] ||| , [X][X] diese Frage ansprechen [X] ||| 0.0278341 1 ||| ||| 0.0434783
+[X][X] this Parliament [X] ||| , [X][X] dieses Parlament [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] this Parliament [X][X] [X] ||| , [X][X] dieses Parlament [X][X] [X] ||| 0.0179643 1 ||| ||| 0.104201
+[X][X] this Parliament [X][X] an [X] ||| , [X][X] dieses Parlament [X][X] [X] ||| 0.00534237 1 ||| ||| 0.104201
+[X][X] this Parliament [X][X] interest [X] ||| , [X][X] dieses Parlament [X][X] [X] ||| 0.00452744 1 ||| ||| 0.104201
+[X][X] this Parliament has [X][X] [X] ||| , [X][X] dieses Parlament [X][X] hat [X] ||| 0.0278341 1 ||| ||| 0.0672522
+[X][X] this [X] ||| , [X][X] dieses [X] ||| 0.0278341 1 ||| ||| 0.166667
+[X][X] this [X][X] [X] ||| , [X][X] dieses [X][X] [X] ||| 0.0154511 1 ||| ||| 0.121151
+[X][X] this [X][X] an [X] ||| , [X][X] dieses [X][X] [X] ||| 0.00459496 1 ||| ||| 0.121151
+[X][X] this [X][X] an interest [X] ||| , [X][X] dieses [X][X] [X] ||| 0.00389404 1 ||| ||| 0.121151
+[X][X] this [X][X] interest [X] ||| , [X][X] dieses [X][X] [X] ||| 0.00389404 1 ||| ||| 0.121151
+, a petition [X][X] [X] ||| , [X][X] eine Petition [X] ||| 0.0278341 1 ||| ||| 0.2
+, a petition [X][X] presented [X] ||| , [X][X] eine Petition eingereicht [X] ||| 0.0278341 1 ||| ||| 0.2
+, [X][X] an [X] ||| , [X][X] eine [X] ||| 0.0278341 1 ||| ||| 0.201149
+, [X][X] an initiative [X][X] [X] ||| , [X][X] eine [X][X] Initiative [X] ||| 0.0278341 1 ||| ||| 0.118649
+, [X][X] an [X][X] [X] ||| , [X][X] eine [X][X] [X] ||| 0.0178835 1 ||| ||| 0.184666
+, [X][X] an [X][X] have [X] ||| , [X][X] eine [X][X] [X] ||| 0.00456746 1 ||| ||| 0.184666
+, [X][X] an [X][X] you [X] ||| , [X][X] eine [X][X] [X] ||| 0.00538309 1 ||| ||| 0.184666
+, [X][X] presented , [X] ||| , [X][X] eingereicht , [X] ||| 0.0278341 1 ||| ||| 0.2
+, [X][X] presented , [X][X] [X] ||| , [X][X] eingereicht , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.05
+, [X][X] presented , which [X] ||| , [X][X] eingereicht , die [X] ||| 0.0278341 1 ||| ||| 0.111111
+, [X][X] presented , which [X] ||| , [X][X] eingereicht , die von [X] ||| 0.0278341 1 ||| ||| 0.0833333
+, [X][X] presented [X] ||| , [X][X] eingereicht [X] ||| 0.0278341 1 ||| ||| 0.258824
+, [X][X] presented [X][X] [X] ||| , [X][X] eingereicht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.244444
+, [X][X] presented [X][X] many [X] ||| , [X][X] eingereicht [X][X] vielen [X] ||| 0.0278341 1 ||| ||| 0.05
+, [X][X] presented [X][X] [X] ||| , [X][X] eingereicht [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0833333
+, [X][X] presented [X][X] many [X] ||| , [X][X] eingereicht [X][X] von vielen [X] ||| 0.0278341 1 ||| ||| 0.05
+, [X][X] weight of your [X] ||| , [X][X] ganzen Einfluß Ihres [X] ||| 0.0278341 1 ||| ||| 0.0714286
+, [X][X] weight [X] ||| , [X][X] ganzen Einfluß [X] ||| 0.0167005 1 ||| ||| 0.277778
+representations , [X][X] weight [X] ||| , [X][X] ganzen Einfluß [X] ||| 0.0111336 1 ||| ||| 0.277778
+, [X][X] weight [X][X] [X] ||| , [X][X] ganzen Einfluß [X][X] [X] ||| 0.0171072 1 ||| ||| 0.34399
+representations , [X][X] weight [X][X] [X] ||| , [X][X] ganzen Einfluß [X][X] [X] ||| 0.0107269 1 ||| ||| 0.34399
+, [X][X] weight [X][X] the [X] ||| , [X][X] ganzen Einfluß [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0357143
+, [X][X] weight [X][X] and [X] ||| , [X][X] ganzen Einfluß [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0454545
+, I [X][X] [X] ||| , [X][X] ich [X] ||| 0.0204117 1 ||| ||| 0.340909
+, [X][X] I [X] ||| , [X][X] ich [X] ||| 0.00742243 1 ||| ||| 0.340909
+, [X][X] I [X][X] [X] ||| , [X][X] ich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0344828
+, I [X][X] [X] ||| , [X][X] ich dem [X] ||| 0.0278341 1 ||| ||| 0.166667
+, [X][X] I feel [X] ||| , [X][X] ich denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0526316
+, [X][X] I feel an [X] ||| , [X][X] ich denke , daß eine [X] ||| 0.0278341 1 ||| ||| 0.0344828
+[X][X] has consistently shown [X] ||| , [X][X] immer wieder befaßt hat [X] ||| 0.0167675 1 ||| ||| 0.050303
+[X][X] has consistently shown an [X] ||| , [X][X] immer wieder befaßt hat [X] ||| 0.0110666 1 ||| ||| 0.050303
+[X][X] is appealing . [X] ||| , [X][X] in Berufung geht . [X] ||| 0.0278341 1 ||| ||| 0.0454545
+[X][X] is appealing [X] ||| , [X][X] in Berufung geht [X] ||| 0.0278341 1 ||| ||| 0.0555556
+, to [X][X] the [X][X] [X] ||| , [X][X] in [X][X] das [X] ||| 0.0278341 1 ||| ||| 0.0769231
+her to do [X][X] possibly [X] ||| , [X][X] in ihrem Kräften stehende zu tun [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] annually [X] ||| , [X][X] jährlich [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] this Parliament [X] ||| , [X][X] sich dieses Parlament [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] this Parliament [X][X] [X] ||| , [X][X] sich dieses Parlament [X][X] [X] ||| 0.0179643 1 ||| ||| 0.104201
+[X][X] this Parliament [X][X] an [X] ||| , [X][X] sich dieses Parlament [X][X] [X] ||| 0.00534237 1 ||| ||| 0.104201
+[X][X] this Parliament [X][X] interest [X] ||| , [X][X] sich dieses Parlament [X][X] [X] ||| 0.00452744 1 ||| ||| 0.104201
+[X][X] this Parliament has [X][X] [X] ||| , [X][X] sich dieses Parlament [X][X] hat [X] ||| 0.0278341 1 ||| ||| 0.0672522
+[X][X] this [X] ||| , [X][X] sich dieses [X] ||| 0.0278341 1 ||| ||| 0.166667
+[X][X] this [X][X] [X] ||| , [X][X] sich dieses [X][X] [X] ||| 0.0154511 1 ||| ||| 0.121151
+[X][X] this [X][X] an [X] ||| , [X][X] sich dieses [X][X] [X] ||| 0.00459496 1 ||| ||| 0.121151
+[X][X] this [X][X] an interest [X] ||| , [X][X] sich dieses [X][X] [X] ||| 0.00389404 1 ||| ||| 0.121151
+[X][X] this [X][X] interest [X] ||| , [X][X] sich dieses [X][X] [X] ||| 0.00389404 1 ||| ||| 0.121151
+[X][X] and to the Governor [X] ||| , [X][X] und Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.00884956
+, [X][X] and [X] ||| , [X][X] und [X] ||| 0.00956765 1 ||| ||| 0.396709
+, [X][X] and to [X] ||| , [X][X] und [X] ||| 0.00389792 1 ||| ||| 0.396709
+, [X][X] and to the [X] ||| , [X][X] und [X] ||| 0.00334107 1 ||| ||| 0.396709
+, using [X][X] and [X] ||| , [X][X] und [X] ||| 0.0031892 1 ||| ||| 0.396709
+[X][X] and [X] ||| , [X][X] und [X] ||| 0.00123092 1 ||| ||| 0.396709
+[X][X] and to [X] ||| , [X][X] und [X] ||| 0.000923192 1 ||| ||| 0.396709
+[X][X] and to the [X] ||| , [X][X] und [X] ||| 0.000845333 1 ||| ||| 0.396709
+representations , [X][X] and [X] ||| , [X][X] und [X] ||| 0.0024194 1 ||| ||| 0.396709
+representations , using [X][X] and [X] ||| , [X][X] und [X] ||| 0.0024194 1 ||| ||| 0.396709
+, [X][X] and [X][X] [X] ||| , [X][X] und [X][X] [X] ||| 0.0118521 1 ||| ||| 0.119287
+, [X][X] and to [X][X] [X] ||| , [X][X] und [X][X] [X] ||| 0.0118521 1 ||| ||| 0.119287
+[X][X] and [X][X] [X] ||| , [X][X] und [X][X] [X] ||| 0.00206494 1 ||| ||| 0.119287
+[X][X] and to [X][X] [X] ||| , [X][X] und [X][X] [X] ||| 0.00206494 1 ||| ||| 0.119287
+, [X][X] and [X][X] of [X] ||| , [X][X] und [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0222222
+, [X][X] and the [X] ||| , [X][X] und der [X] ||| 0.013917 1 ||| ||| 0.0714286
+, using [X][X] and the [X] ||| , [X][X] und der [X] ||| 0.013917 1 ||| ||| 0.0714286
+people signed , [X][X] [X] ||| , [X][X] unterzeichnet worden [X] ||| 0.0102547 1 ||| ||| 0.22619
+signed , [X][X] [X] ||| , [X][X] unterzeichnet worden [X] ||| 0.0175794 1 ||| ||| 0.22619
+people signed , [X][X] . [X] ||| , [X][X] unterzeichnet worden ist . [X] ||| 0.00863818 1 ||| ||| 0.161111
+signed , [X][X] . [X] ||| , [X][X] unterzeichnet worden ist . [X] ||| 0.0191959 1 ||| ||| 0.161111
+people signed , [X][X] [X] ||| , [X][X] unterzeichnet worden ist [X] ||| 0.00811828 1 ||| ||| 0.20168
+signed , [X][X] [X] ||| , [X][X] unterzeichnet worden ist [X] ||| 0.0197158 1 ||| ||| 0.20168
+, [X][X] many [X] ||| , [X][X] vielen [X] ||| 0.0278341 1 ||| ||| 0.05
+, [X][X] [X] ||| , [X][X] von [X] ||| 0.0219743 1 ||| ||| 0.105555
+, [X][X] of [X] ||| , [X][X] von [X] ||| 0.00585981 1 ||| ||| 0.105555
+, [X][X] many [X] ||| , [X][X] von vielen [X] ||| 0.0278341 1 ||| ||| 0.05
+proposal [X][X] that [X] ||| , [X][X] vorschlägt , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+proposal [X][X] [X] ||| , [X][X] vorschlägt [X] ||| 0.0278341 1 ||| ||| 0.125
+, [X][X] wish , [X] ||| , [X][X] wollen , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+, [X][X] wish , [X][X] [X] ||| , [X][X] wollen , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.077961
+, [X][X] wish [X] ||| , [X][X] wollen [X] ||| 0.0278341 1 ||| ||| 0.166667
+, [X][X] wish [X][X] , [X] ||| , [X][X] wollen [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0344828
+, [X][X] wish [X][X] [X] ||| , [X][X] wollen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.077961
+would be [X][X] . [X] ||| , [X][X] wäre . [X] ||| 0.0278341 1 ||| ||| 0.166667
+would be [X][X] [X] ||| , [X][X] wäre [X] ||| 0.0278341 1 ||| ||| 0.25
+, [X][X] to the start [X] ||| , [X][X] zu Beginn [X] ||| 0.0278341 1 ||| ||| 0.0588235
+, [X][X] to [X] ||| , [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.12037
+, [X][X] to [X][X] [X] ||| , [X][X] zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.108824
+, on behalf of all [X] ||| , allen [X] ||| 0.0278341 1 ||| ||| 0.142857
+everything [X] ||| , alles [X] ||| 0.013917 1 ||| ||| 2
+everything she [X] ||| , alles [X] ||| 0.013917 1 ||| ||| 2
+her to do everything [X][X] [X] ||| , alles in ihrem [X][X] stehende zu tun [X] ||| 0.0278341 1 ||| ||| 0.75
+her to do everything [X][X] [X] ||| , alles in ihrem [X][X] zu tun [X] ||| 0.0278341 1 ||| ||| 0.75
+, including [X] ||| , auch [X] ||| 0.0278341 1 ||| ||| 1
+, including [X] ||| , auch von [X] ||| 0.0278341 1 ||| ||| 1
+, including myself [X] ||| , auch von mir selbst , [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] , including myself . [X] ||| , auch von mir selbst , [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] , including myself [X] ||| , auch von mir selbst , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142157
+[X][X] , including myself . [X] ||| , auch von mir selbst , [X][X] ist . [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] , including myself [X] ||| , auch von mir selbst , [X][X] ist [X] ||| 0.0278341 1 ||| ||| 0.0588235
+people signed , including myself [X] ||| , auch von mir selbst , unterzeichnet worden [X] ||| 0.0102547 1 ||| ||| 0.22619
+signed , including myself [X] ||| , auch von mir selbst , unterzeichnet worden [X] ||| 0.0175794 1 ||| ||| 0.22619
+signed , including myself . [X] ||| , auch von mir selbst , unterzeichnet worden ist . [X] ||| 0.0278341 1 ||| ||| 0.111111
+people signed , including myself [X] ||| , auch von mir selbst , unterzeichnet worden ist [X] ||| 0.00811828 1 ||| ||| 0.20168
+signed , including myself [X] ||| , auch von mir selbst , unterzeichnet worden ist [X] ||| 0.0197158 1 ||| ||| 0.20168
+, including myself [X] ||| , auch von mir selbst [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] , including myself . [X] ||| , auch von mir selbst [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] , including myself [X] ||| , auch von mir selbst [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142157
+[X][X] , including myself . [X] ||| , auch von mir selbst [X][X] ist . [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] , including myself [X] ||| , auch von mir selbst [X][X] ist [X] ||| 0.0278341 1 ||| ||| 0.0588235
+, to [X] ||| , bei [X] ||| 0.0278341 1 ||| ||| 1
+, to [X][X] Governor [X] ||| , bei [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0571428
+, to [X][X] the Governor [X] ||| , bei [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0571428
+, to [X][X] Governor of [X] ||| , bei [X][X] Gouverneur von [X] ||| 0.0278341 1 ||| ||| 0.0222222
+, to [X][X] [X] ||| , bei [X][X] [X] ||| 0.0203702 1 ||| ||| 0.562338
+, to [X][X] the [X] ||| , bei [X][X] [X] ||| 0.002357 1 ||| ||| 0.562338
+, to [X][X] to [X] ||| , bei [X][X] [X] ||| 0.00274984 1 ||| ||| 0.562338
+, to [X][X] to the [X] ||| , bei [X][X] [X] ||| 0.002357 1 ||| ||| 0.562338
+, to [X][X] the [X][X] [X] ||| , bei [X][X] [X][X] [X] ||| 0.00847124 1 ||| ||| 0.0730159
+, to [X][X] to [X][X] [X] ||| , bei [X][X] [X][X] [X] ||| 0.0193629 1 ||| ||| 0.0730159
+, to [X][X] and [X] ||| , bei [X][X] und [X] ||| 0.0172763 1 ||| ||| 0.146465
+, to [X][X] and to [X] ||| , bei [X][X] und [X] ||| 0.0105578 1 ||| ||| 0.146465
+, to [X][X] and [X][X] [X] ||| , bei [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0507937
+, to [X][X] of [X] ||| , bei [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0222222
+, to the President [X] ||| , bei dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.166667
+, to the President [X][X] [X] ||| , bei dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.153968
+, to the President and [X] ||| , bei dem Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.0909091
+, to the [X] ||| , bei dem [X] ||| 0.0278341 1 ||| ||| 0.333333
+, to the [X][X] Governor [X] ||| , bei dem [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.0285714
+, to the [X][X] [X] ||| , bei dem [X][X] [X] ||| 0.0195831 1 ||| ||| 0.348052
+, to the [X][X] the [X] ||| , bei dem [X][X] [X] ||| 0.00380815 1 ||| ||| 0.348052
+, to the [X][X] to [X] ||| , bei dem [X][X] [X] ||| 0.00444285 1 ||| ||| 0.348052
+, to the [X][X] of [X] ||| , bei dem [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0222222
+, i.e. [X] ||| , d. h. [X] ||| 0.0278341 1 ||| ||| 1
+, i.e. [X][X] the start [X] ||| , d. h. [X][X] Beginn [X] ||| 0.0278341 1 ||| ||| 0.0588235
+, i.e. [X][X] [X] ||| , d. h. [X][X] [X] ||| 0.0278341 1 ||| ||| 0.317157
+, i.e. [X][X] of the [X] ||| , d. h. [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.05
+, i.e. [X][X] to [X] ||| , d. h. [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.0833333
+, i.e. [X][X] to [X][X] [X] ||| , d. h. [X][X] zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.108824
+, i.e. on Thursday prior [X] ||| , d. h. am Donnerstag [X] ||| 0.0278341 1 ||| ||| 0.125
+, i.e. on [X] ||| , d. h. am [X] ||| 0.0278341 1 ||| ||| 0.333333
+, i.e. on [X][X] [X] ||| , d. h. am [X][X] [X] ||| 0.0278341 1 ||| ||| 0.317157
+, i.e. on [X][X] to [X] ||| , d. h. am [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.0833333
+, [X] ||| , daß [X] ||| 0.0804729 1 ||| ||| 6
+, that [X] ||| , daß [X] ||| 0.00463902 1 ||| ||| 6
+that [X] ||| , daß [X] ||| 0.28752 1 ||| ||| 6
+that [X][X] stability [X] ||| , daß [X][X] Stabilität [X] ||| 0.016582 1 ||| ||| 0.0883459
+that [X][X] stability is [X] ||| , daß [X][X] Stabilität [X] ||| 0.0112521 1 ||| ||| 0.0883459
+that [X][X] stability [X][X] [X] ||| , daß [X][X] Stabilität [X][X] [X] ||| 0.0192188 1 ||| ||| 0.0673077
+that [X][X] stability is [X][X] [X] ||| , daß [X][X] Stabilität [X][X] [X] ||| 0.0086153 1 ||| ||| 0.0673077
+that [X][X] stability [X][X] fundamental [X] ||| , daß [X][X] Stabilität [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0208333
+that [X][X] stability is a [X] ||| , daß [X][X] Stabilität einen [X] ||| 0.0278341 1 ||| ||| 0.025641
+that [X][X] environmental information [X] ||| , daß [X][X] Umweltinformationen [X] ||| 0.0278341 1 ||| ||| 0.047619
+that [X][X] , [X] ||| , daß [X][X] [X] ||| 0.0013661 1 ||| ||| 2.26387
+that [X][X] [X] ||| , daß [X][X] [X] ||| 0.204433 1 ||| ||| 2.26387
+that [X][X] have [X] ||| , daß [X][X] [X] ||| 0.00245898 1 ||| ||| 2.26387
+that [X][X] is [X] ||| , daß [X][X] [X] ||| 0.000439104 1 ||| ||| 2.26387
+that [X][X] , [X][X] [X] ||| , daß [X][X] [X][X] [X] ||| 0.00822932 1 ||| ||| 0.421239
+that [X][X] , [X][X] [X] ||| , daß [X][X] [X][X] [X] ||| 0.00734185 1 ||| ||| 0.421239
+that [X][X] have [X][X] [X] ||| , daß [X][X] [X][X] [X] ||| 0.0108863 1 ||| ||| 0.421239
+that [X][X] is [X][X] [X] ||| , daß [X][X] [X][X] [X] ||| 0.0013766 1 ||| ||| 0.421239
+that [X][X] , [X][X] access [X] ||| , daß [X][X] [X][X] der Zugang [X] ||| 0.0278341 1 ||| ||| 0.0909091
+that [X][X] made [X][X] [X] ||| , daß [X][X] [X][X] gemacht hat [X] ||| 0.0278341 1 ||| ||| 0.0454545
+that [X][X] have [X][X] and [X] ||| , daß [X][X] [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0526316
+that [X][X] , access [X] ||| , daß [X][X] der Zugang [X] ||| 0.013917 1 ||| ||| 0.181818
+that [X][X] access [X] ||| , daß [X][X] der Zugang [X] ||| 0.013917 1 ||| ||| 0.181818
+that [X][X] , access [X][X] [X] ||| , daß [X][X] der Zugang [X][X] [X] ||| 0.013917 1 ||| ||| 0.095238
+that [X][X] access [X][X] [X] ||| , daß [X][X] der Zugang [X][X] [X] ||| 0.013917 1 ||| ||| 0.095238
+that [X][X] , access to [X] ||| , daß [X][X] der Zugang zu [X] ||| 0.013917 1 ||| ||| 0.153846
+that [X][X] access to [X] ||| , daß [X][X] der Zugang zu [X] ||| 0.013917 1 ||| ||| 0.153846
+that [X][X] access to [X][X] [X] ||| , daß [X][X] der Zugang zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.047619
+that [X][X] of [X] ||| , daß [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.166667
+that [X][X] of [X][X] [X] ||| , daß [X][X] der [X][X] [X] ||| 0.0220049 1 ||| ||| 0.170534
+that [X][X] of [X][X] is [X] ||| , daß [X][X] der [X][X] [X] ||| 0.00582918 1 ||| ||| 0.170534
+that [X][X] of [X][X] a [X] ||| , daß [X][X] der [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.025641
+that [X][X] of [X][X] fundamental [X] ||| , daß [X][X] der [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0208333
+that [X][X] of relative stability [X] ||| , daß [X][X] der relativen Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0526316
+that [X][X] of relative [X] ||| , daß [X][X] der relativen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+that [X][X] of relative [X][X] [X] ||| , daß [X][X] der relativen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0821887
+that [X][X] made it clear [X] ||| , daß [X][X] deutlich gemacht hat [X] ||| 0.0278341 1 ||| ||| 0.0454545
+that [X][X] a [X] ||| , daß [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.051282
+that [X][X] is a [X] ||| , daß [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.051282
+that [X][X] a fundamental [X] ||| , daß [X][X] einen elementaren [X] ||| 0.013917 1 ||| ||| 0.0416666
+that [X][X] is a fundamental [X] ||| , daß [X][X] einen elementaren [X] ||| 0.013917 1 ||| ||| 0.0416666
+that [X][X] fundamental [X] ||| , daß [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0208333
+that [X][X] acquitted him [X] ||| , daß [X][X] ihn freigesprochen [X] ||| 0.013917 1 ||| ||| 0.133333
+that [X][X] have acquitted him [X] ||| , daß [X][X] ihn freigesprochen [X] ||| 0.013917 1 ||| ||| 0.133333
+that [X][X] acquitted him [X][X] [X] ||| , daß [X][X] ihn freigesprochen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0454545
+that [X][X] acquitted him and [X] ||| , daß [X][X] ihn freigesprochen und [X] ||| 0.0278341 1 ||| ||| 0.0526316
+that in Russia , [X][X] [X] ||| , daß [X][X] in Rußland [X] ||| 0.00618535 1 ||| ||| 0.5
+that in Russia [X][X] , [X] ||| , daß [X][X] in Rußland [X] ||| 0.00618535 1 ||| ||| 0.5
+that in Russia [X][X] [X] ||| , daß [X][X] in Rußland [X] ||| 0.0154634 1 ||| ||| 0.5
+that in Russia [X][X] access [X] ||| , daß [X][X] in Rußland der Zugang [X] ||| 0.0278341 1 ||| ||| 0.0909091
+that [X][X] relative stability [X] ||| , daß [X][X] relativen Stabilität [X] ||| 0.016582 1 ||| ||| 0.0883459
+that [X][X] relative stability is [X] ||| , daß [X][X] relativen Stabilität [X] ||| 0.0112521 1 ||| ||| 0.0883459
+that [X][X] relative stability [X][X] [X] ||| , daß [X][X] relativen Stabilität [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0464744
+that [X][X] relative [X] ||| , daß [X][X] relativen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+that [X][X] relative [X][X] [X] ||| , daß [X][X] relativen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0821887
+that [X][X] relative [X][X] a [X] ||| , daß [X][X] relativen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.025641
+that [X][X] relative [X][X] fundamental [X] ||| , daß [X][X] relativen [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0208333
+that [X][X] and [X] ||| , daß [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0526316
+that [X][X] and [X][X] [X] ||| , daß [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0454545
+that [X][X] and made [X][X] [X] ||| , daß [X][X] und [X][X] gemacht hat [X] ||| 0.0278341 1 ||| ||| 0.0454545
+that [X][X] to environmental information [X] ||| , daß [X][X] zu Umweltinformationen [X] ||| 0.0278341 1 ||| ||| 0.047619
+that [X][X] to [X] ||| , daß [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.0769231
+that [X][X] to [X][X] [X] ||| , daß [X][X] zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.047619
+that [X][X] , too , [X] ||| , daß auch [X][X] [X] ||| 0.00556681 1 ||| ||| 0.555556
+that [X][X] , too [X] ||| , daß auch [X][X] [X] ||| 0.00835024 1 ||| ||| 0.555556
+that [X][X] too , [X] ||| , daß auch [X][X] [X] ||| 0.00556681 1 ||| ||| 0.555556
+that [X][X] too [X] ||| , daß auch [X][X] [X] ||| 0.00835024 1 ||| ||| 0.555556
+that [X][X] , too [X][X] [X] ||| , daß auch [X][X] [X][X] [X] ||| 0.0107966 1 ||| ||| 0.555444
+that [X][X] too , [X][X] [X] ||| , daß auch [X][X] [X][X] [X] ||| 0.00624098 1 ||| ||| 0.555444
+that [X][X] too [X][X] [X] ||| , daß auch [X][X] [X][X] [X] ||| 0.0107966 1 ||| ||| 0.555444
+that [X][X] too [X][X] to [X] ||| , daß auch [X][X] [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.0769231
+that [X][X] too , access [X] ||| , daß auch [X][X] der Zugang [X] ||| 0.0278341 1 ||| ||| 0.0909091
+that in Russia , too [X] ||| , daß auch in Rußland [X] ||| 0.0278341 1 ||| ||| 0.166667
+that in [X][X] too , [X] ||| , daß auch in [X][X] [X] ||| 0.0111336 1 ||| ||| 0.277778
+that in [X][X] too [X] ||| , daß auch in [X][X] [X] ||| 0.0167005 1 ||| ||| 0.277778
+that in [X][X] too [X][X] [X] ||| , daß auch in [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.215451
+that the courts [X] ||| , daß das Gericht [X] ||| 0.0173963 1 ||| ||| 0.533333
+that the courts have [X] ||| , daß das Gericht [X] ||| 0.0104378 1 ||| ||| 0.533333
+that the courts [X][X] [X] ||| , daß das Gericht [X][X] [X] ||| 0.013917 1 ||| ||| 0.329506
+that the courts have [X][X] [X] ||| , daß das Gericht [X][X] [X] ||| 0.013917 1 ||| ||| 0.329506
+that the courts [X][X] and [X] ||| , daß das Gericht [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0526316
+that the courts [X][X] him [X] ||| , daß das Gericht ihn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0666667
+that the [X] ||| , daß das [X] ||| 0.0278341 1 ||| ||| 1
+that the [X][X] [X] ||| , daß das [X][X] [X] ||| 0.0278341 1 ||| ||| 0.364753
+that the [X][X] made [X][X] [X] ||| , daß das [X][X] [X][X] gemacht hat [X] ||| 0.0278341 1 ||| ||| 0.0454545
+that the [X][X] acquitted him [X] ||| , daß das [X][X] ihn freigesprochen [X] ||| 0.0278341 1 ||| ||| 0.0666667
+that the [X][X] and [X] ||| , daß das [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0526316
+that the [X][X] and [X][X] [X] ||| , daß das [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0454545
+that the principle [X] ||| , daß der Grundsatz [X] ||| 0.0278341 1 ||| ||| 0.333333
+that the principle [X][X] stability [X] ||| , daß der Grundsatz [X][X] Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0526316
+that the principle [X][X] [X] ||| , daß der Grundsatz [X][X] [X] ||| 0.0240318 1 ||| ||| 0.261443
+that the principle [X][X] is [X] ||| , daß der Grundsatz [X][X] [X] ||| 0.00380226 1 ||| ||| 0.261443
+that the principle [X][X] a [X] ||| , daß der Grundsatz [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.025641
+that the principle [X][X] fundamental [X] ||| , daß der Grundsatz [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0208333
+that the principle of [X] ||| , daß der Grundsatz der [X] ||| 0.0278341 1 ||| ||| 0.166667
+that the principle of [X][X] [X] ||| , daß der Grundsatz der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.13482
+that the principle of relative [X] ||| , daß der Grundsatz der relativen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+that the [X] ||| , daß der [X] ||| 0.0278341 1 ||| ||| 1
+that the [X][X] stability [X] ||| , daß der [X][X] Stabilität [X] ||| 0.016582 1 ||| ||| 0.0883459
+that the [X][X] stability is [X] ||| , daß der [X][X] Stabilität [X] ||| 0.0112521 1 ||| ||| 0.0883459
+that the [X][X] stability [X][X] [X] ||| , daß der [X][X] Stabilität [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0464744
+that the [X][X] [X] ||| , daß der [X][X] [X] ||| 0.0255121 1 ||| ||| 0.42811
+that the [X][X] is [X] ||| , daß der [X][X] [X] ||| 0.00232201 1 ||| ||| 0.42811
+that the [X][X] is [X][X] [X] ||| , daß der [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0208333
+that the [X][X] a [X] ||| , daß der [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.051282
+that the [X][X] is a [X] ||| , daß der [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.051282
+that the [X][X] a fundamental [X] ||| , daß der [X][X] einen elementaren [X] ||| 0.0278341 1 ||| ||| 0.0208333
+that the [X][X] fundamental [X] ||| , daß der [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0208333
+that the [X][X] relative stability [X] ||| , daß der [X][X] relativen Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0526316
+that the [X][X] relative [X] ||| , daß der [X][X] relativen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+that the [X][X] relative [X][X] [X] ||| , daß der [X][X] relativen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0821887
+, he [X] ||| , daß er [X] ||| 0.0278341 1 ||| ||| 1
+, using the [X] ||| , den [X] ||| 0.0173963 1 ||| ||| 0.533333
+representations , using the [X] ||| , den [X] ||| 0.0104378 1 ||| ||| 0.533333
+, using the [X][X] [X] ||| , den [X][X] [X] ||| 0.0171072 1 ||| ||| 0.34399
+representations , using the [X][X] [X] ||| , den [X][X] [X] ||| 0.0107269 1 ||| ||| 0.34399
+, using the [X][X] the [X] ||| , den [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0357143
+, using the [X][X] and [X] ||| , den [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0454545
+, using the weight [X] ||| , den ganzen Einfluß [X] ||| 0.0167005 1 ||| ||| 0.277778
+representations , using the weight [X] ||| , den ganzen Einfluß [X] ||| 0.0111336 1 ||| ||| 0.277778
+, using the weight [X][X] [X] ||| , den ganzen Einfluß [X][X] [X] ||| 0.0278341 1 ||| ||| 0.211421
+, [X][X] President [X] ||| , der Präsidentin [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0769231
+, [X][X] the [X][X] President [X] ||| , der Präsidentin [X][X] [X][X] das [X] ||| 0.0278341 1 ||| ||| 0.0769231
+, [X][X] Sri Lankan President [X] ||| , der Präsidentin von Sri Lanka [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0769231
+, [X][X] President [X] ||| , der Präsidentin von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0769231
+, [X][X] the [X][X] President [X] ||| , der Präsidentin von [X][X] [X][X] das [X] ||| 0.0278341 1 ||| ||| 0.0769231
+, [X] ||| , der [X] ||| 0.00927803 1 ||| ||| 3
+, who [X] ||| , der [X] ||| 0.160946 1 ||| ||| 3
+[X][X] that [X] ||| , der [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] 6 [X] ||| , der [X][X] 6 [X] ||| 0.0278341 1 ||| ||| 0.2
+proposal [X][X] 6 that [X] ||| , der [X][X] 6 vorschlägt , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+proposal [X][X] 6 [X] ||| , der [X][X] 6 vorschlägt [X] ||| 0.0278341 1 ||| ||| 0.125
+, [X][X] [X] ||| , der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0769231
+, [X][X] the [X][X] [X] ||| , der [X][X] [X][X] das [X] ||| 0.013917 1 ||| ||| 0.153846
+, [X][X] to the [X][X] [X] ||| , der [X][X] [X][X] das [X] ||| 0.013917 1 ||| ||| 0.153846
+, to [X][X] the [X][X] [X] ||| , der [X][X] in [X][X] das [X] ||| 0.0278341 1 ||| ||| 0.0769231
+proposal [X][X] that [X] ||| , der [X][X] vorschlägt , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+proposal [X][X] [X] ||| , der [X][X] vorschlägt [X] ||| 0.0278341 1 ||| ||| 0.125
+in paragraph 6 [X] ||| , der in Absatz 6 [X] ||| 0.0278341 1 ||| ||| 0.2
+proposal in paragraph 6 that [X] ||| , der in Absatz 6 vorschlägt , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+proposal in paragraph 6 [X] ||| , der in Absatz 6 vorschlägt [X] ||| 0.0278341 1 ||| ||| 0.125
+in paragraph [X] ||| , der in Absatz [X] ||| 0.0278341 1 ||| ||| 1
+in [X] ||| , der in [X] ||| 0.0278341 1 ||| ||| 1
+in [X][X] [X] ||| , der in [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+proposal in [X][X] that [X] ||| , der in [X][X] vorschlägt , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+proposal in [X][X] [X] ||| , der in [X][X] vorschlägt [X] ||| 0.0278341 1 ||| ||| 0.125
+you [X] ||| , die Sie [X] ||| 0.0278341 1 ||| ||| 1
+you [X][X] Governor [X] ||| , die Sie [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.0265487
+you [X][X] the Governor [X] ||| , die Sie [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.0265487
+you [X][X] to the Governor [X] ||| , die Sie [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.0265487
+you [X][X] President [X] ||| , die Sie [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0285714
+you [X][X] President [X][X] Governor [X] ||| , die Sie [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.00884956
+you [X][X] President [X][X] [X] ||| , die Sie [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0205603 1 ||| ||| 0.0461038
+you [X][X] President [X][X] the [X] ||| , die Sie [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.00727382 1 ||| ||| 0.0461038
+you [X][X] President and [X] ||| , die Sie [X][X] Präsidentschaftskandidaten und [X] ||| 0.0159052 1 ||| ||| 0.0307018
+you [X][X] President and to [X] ||| , die Sie [X][X] Präsidentschaftskandidaten und [X] ||| 0.0119289 1 ||| ||| 0.0307018
+you [X][X] President and [X][X] [X] ||| , die Sie [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.00884956
+you [X][X] [X] ||| , die Sie [X][X] [X] ||| 0.0256281 1 ||| ||| 0.470057
+you [X][X] the [X] ||| , die Sie [X][X] [X] ||| 0.000713425 1 ||| ||| 0.470057
+you [X][X] to [X] ||| , die Sie [X][X] [X] ||| 0.000779135 1 ||| ||| 0.470057
+you [X][X] to the [X] ||| , die Sie [X][X] [X] ||| 0.000713425 1 ||| ||| 0.470057
+you [X][X] to [X][X] [X] ||| , die Sie [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.00884956
+you [X][X] to [X] ||| , die Sie [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.1
+you [X][X] to [X][X] Governor [X] ||| , die Sie [X][X] bei [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.00884956
+you [X][X] to [X][X] [X] ||| , die Sie [X][X] bei [X][X] [X] ||| 0.0211762 1 ||| ||| 0.105377
+you [X][X] to [X][X] the [X] ||| , die Sie [X][X] bei [X][X] [X] ||| 0.00318239 1 ||| ||| 0.105377
+you [X][X] to [X][X] to [X] ||| , die Sie [X][X] bei [X][X] [X] ||| 0.0034755 1 ||| ||| 0.105377
+you [X][X] to [X][X] and [X] ||| , die Sie [X][X] bei [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0175439
+you [X][X] to the President [X] ||| , die Sie [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0285714
+you [X][X] to the [X] ||| , die Sie [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0526316
+you [X][X] to the [X][X] [X] ||| , die Sie [X][X] bei dem [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0515995
+you [X][X] the President [X] ||| , die Sie [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0285714
+you [X][X] the President [X][X] [X] ||| , die Sie [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0340556
+you [X][X] the President and [X] ||| , die Sie [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.0175439
+you [X][X] the [X] ||| , die Sie [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0526316
+you [X][X] the [X][X] Governor [X] ||| , die Sie [X][X] dem [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.00884956
+you [X][X] the [X][X] [X] ||| , die Sie [X][X] dem [X][X] [X] ||| 0.0186995 1 ||| ||| 0.0768056
+you [X][X] the [X][X] the [X] ||| , die Sie [X][X] dem [X][X] [X] ||| 0.00436623 1 ||| ||| 0.0768056
+you [X][X] the [X][X] to [X] ||| , die Sie [X][X] dem [X][X] [X] ||| 0.00476838 1 ||| ||| 0.0768056
+you [X][X] and [X] ||| , die Sie [X][X] und [X] ||| 0.0114227 1 ||| ||| 0.04275
+you [X][X] and to [X] ||| , die Sie [X][X] und [X] ||| 0.00856698 1 ||| ||| 0.04275
+you [X][X] and to the [X] ||| , die Sie [X][X] und [X] ||| 0.00784446 1 ||| ||| 0.04275
+you [X][X] and [X][X] [X] ||| , die Sie [X][X] und [X][X] [X] ||| 0.013917 1 ||| ||| 0.0176991
+you [X][X] and to [X][X] [X] ||| , die Sie [X][X] und [X][X] [X] ||| 0.013917 1 ||| ||| 0.0176991
+you represent , [X] ||| , die Sie vertreten , [X] ||| 0.0278341 1 ||| ||| 0.2
+you represent , [X][X] Governor [X] ||| , die Sie vertreten , [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.00884956
+you represent , [X][X] President [X] ||| , die Sie vertreten , [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0285714
+you represent , [X][X] [X] ||| , die Sie vertreten , [X][X] [X] ||| 0.0233939 1 ||| ||| 0.158009
+you represent , [X][X] the [X] ||| , die Sie vertreten , [X][X] [X] ||| 0.00212235 1 ||| ||| 0.158009
+you represent , [X][X] to [X] ||| , die Sie vertreten , [X][X] [X] ||| 0.00231783 1 ||| ||| 0.158009
+you represent , [X][X] and [X] ||| , die Sie vertreten , [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0175439
+you represent , to [X] ||| , die Sie vertreten , bei [X] ||| 0.0278341 1 ||| ||| 0.1
+you represent , to [X][X] [X] ||| , die Sie vertreten , bei [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0801709
+you represent , to the [X] ||| , die Sie vertreten , bei dem [X] ||| 0.0278341 1 ||| ||| 0.0526316
+you represent [X] ||| , die Sie vertreten [X] ||| 0.0278341 1 ||| ||| 1
+you represent [X][X] Governor [X] ||| , die Sie vertreten [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0176991
+you represent [X][X] the Governor [X] ||| , die Sie vertreten [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0176991
+you represent [X][X] President [X] ||| , die Sie vertreten [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0285714
+you represent [X][X] President [X][X] [X] ||| , die Sie vertreten [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0340556
+you represent [X][X] President and [X] ||| , die Sie vertreten [X][X] Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.0175439
+you represent [X][X] [X] ||| , die Sie vertreten [X][X] [X] ||| 0.0239944 1 ||| ||| 0.270057
+you represent [X][X] the [X] ||| , die Sie vertreten [X][X] [X] ||| 0.00124178 1 ||| ||| 0.270057
+you represent [X][X] to [X] ||| , die Sie vertreten [X][X] [X] ||| 0.00135615 1 ||| ||| 0.270057
+you represent [X][X] to the [X] ||| , die Sie vertreten [X][X] [X] ||| 0.00124178 1 ||| ||| 0.270057
+you represent [X][X] to [X][X] [X] ||| , die Sie vertreten [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.00884956
+you represent [X][X] the President [X] ||| , die Sie vertreten [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0285714
+you represent [X][X] the [X] ||| , die Sie vertreten [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0526316
+you represent [X][X] the [X][X] [X] ||| , die Sie vertreten [X][X] dem [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0515995
+you represent [X][X] and [X] ||| , die Sie vertreten [X][X] und [X] ||| 0.0159052 1 ||| ||| 0.0307018
+you represent [X][X] and to [X] ||| , die Sie vertreten [X][X] und [X] ||| 0.0119289 1 ||| ||| 0.0307018
+you represent [X][X] and [X][X] [X] ||| , die Sie vertreten [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.00884956
+, [X] ||| , die [X] ||| 0.00463902 1 ||| ||| 6
+, which [X] ||| , die [X] ||| 0.00463902 1 ||| ||| 6
+indeed , [X] ||| , die [X] ||| 0.00463902 1 ||| ||| 6
+that [X] ||| , die [X] ||| 0.0804729 1 ||| ||| 6
+which [X] ||| , die [X] ||| 0.00463902 1 ||| ||| 6
+[X][X] , [X] ||| , die [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] , [X][X] Governor [X] ||| , die [X][X] , [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0176991
+[X][X] , [X][X] the Governor [X] ||| , die [X][X] , [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0176991
+[X][X] , [X][X] President [X] ||| , die [X][X] , [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0285714
+[X][X] , [X][X] President and [X] ||| , die [X][X] , [X][X] Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.0175439
+[X][X] , [X][X] [X] ||| , die [X][X] , [X][X] [X] ||| 0.0217365 1 ||| ||| 0.170057
+[X][X] , [X][X] the [X] ||| , die [X][X] , [X][X] [X] ||| 0.00197199 1 ||| ||| 0.170057
+[X][X] , [X][X] to [X] ||| , die [X][X] , [X][X] [X] ||| 0.00215362 1 ||| ||| 0.170057
+[X][X] , [X][X] to the [X] ||| , die [X][X] , [X][X] [X] ||| 0.00197199 1 ||| ||| 0.170057
+[X][X] , [X][X] and [X] ||| , die [X][X] , [X][X] und [X] ||| 0.0159052 1 ||| ||| 0.0307018
+[X][X] , [X][X] and to [X] ||| , die [X][X] , [X][X] und [X] ||| 0.0119289 1 ||| ||| 0.0307018
+[X][X] , to [X] ||| , die [X][X] , bei [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] , to [X][X] Governor [X] ||| , die [X][X] , bei [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.00884956
+[X][X] , to [X][X] [X] ||| , die [X][X] , bei [X][X] [X] ||| 0.0211762 1 ||| ||| 0.105377
+[X][X] , to [X][X] the [X] ||| , die [X][X] , bei [X][X] [X] ||| 0.00318239 1 ||| ||| 0.105377
+[X][X] , to [X][X] to [X] ||| , die [X][X] , bei [X][X] [X] ||| 0.0034755 1 ||| ||| 0.105377
+[X][X] , to [X][X] and [X] ||| , die [X][X] , bei [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0175439
+[X][X] , to the President [X] ||| , die [X][X] , bei dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0285714
+[X][X] , to the [X] ||| , die [X][X] , bei dem [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] , to the [X][X] [X] ||| , die [X][X] , bei dem [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0515995
+that [X][X] . [X] ||| , die [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] Governor [X] ||| , die [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.0265487
+[X][X] the Governor [X] ||| , die [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.0265487
+[X][X] to the Governor [X] ||| , die [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.0265487
+[X][X] President [X] ||| , die [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0285714
+[X][X] President [X][X] Governor [X] ||| , die [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0176991
+[X][X] President [X][X] the Governor [X] ||| , die [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0176991
+[X][X] President [X][X] [X] ||| , die [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0205603 1 ||| ||| 0.0461038
+[X][X] President [X][X] the [X] ||| , die [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.00727382 1 ||| ||| 0.0461038
+[X][X] President and [X] ||| , die [X][X] Präsidentschaftskandidaten und [X] ||| 0.0114227 1 ||| ||| 0.04275
+[X][X] President and to [X] ||| , die [X][X] Präsidentschaftskandidaten und [X] ||| 0.00856698 1 ||| ||| 0.04275
+[X][X] President and to the [X] ||| , die [X][X] Präsidentschaftskandidaten und [X] ||| 0.00784446 1 ||| ||| 0.04275
+[X][X] President and [X][X] [X] ||| , die [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.013917 1 ||| ||| 0.0176991
+[X][X] President and to [X][X] [X] ||| , die [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.013917 1 ||| ||| 0.0176991
+, which [X][X] [X] ||| , die [X][X] [X] ||| 0.00476475 1 ||| ||| 0.834524
+that [X][X] [X] ||| , die [X][X] [X] ||| 0.00972805 1 ||| ||| 0.834524
+which [X][X] [X] ||| , die [X][X] [X] ||| 0.0133413 1 ||| ||| 0.834524
+[X][X] to [X] ||| , die [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] to [X][X] Governor [X] ||| , die [X][X] bei [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0176991
+[X][X] to [X][X] the Governor [X] ||| , die [X][X] bei [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0176991
+[X][X] to [X][X] [X] ||| , die [X][X] bei [X][X] [X] ||| 0.0190035 1 ||| ||| 0.117425
+[X][X] to [X][X] the [X] ||| , die [X][X] bei [X][X] [X] ||| 0.00285587 1 ||| ||| 0.117425
+[X][X] to [X][X] to [X] ||| , die [X][X] bei [X][X] [X] ||| 0.00311891 1 ||| ||| 0.117425
+[X][X] to [X][X] to the [X] ||| , die [X][X] bei [X][X] [X] ||| 0.00285587 1 ||| ||| 0.117425
+[X][X] to [X][X] and [X] ||| , die [X][X] bei [X][X] und [X] ||| 0.0159052 1 ||| ||| 0.0307018
+[X][X] to [X][X] and to [X] ||| , die [X][X] bei [X][X] und [X] ||| 0.0119289 1 ||| ||| 0.0307018
+[X][X] to the President [X] ||| , die [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0285714
+[X][X] to the President [X][X] [X] ||| , die [X][X] bei dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0340556
+[X][X] to the President and [X] ||| , die [X][X] bei dem Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.0175439
+[X][X] to the [X] ||| , die [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] to the [X][X] Governor [X] ||| , die [X][X] bei dem [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.00884956
+[X][X] to the [X][X] [X] ||| , die [X][X] bei dem [X][X] [X] ||| 0.0186995 1 ||| ||| 0.0768056
+[X][X] to the [X][X] the [X] ||| , die [X][X] bei dem [X][X] [X] ||| 0.00436623 1 ||| ||| 0.0768056
+[X][X] to the [X][X] to [X] ||| , die [X][X] bei dem [X][X] [X] ||| 0.00476838 1 ||| ||| 0.0768056
+[X][X] the President [X] ||| , die [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0285714
+[X][X] the President [X][X] Governor [X] ||| , die [X][X] dem Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.00884956
+[X][X] the President [X][X] [X] ||| , die [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0205603 1 ||| ||| 0.0461038
+[X][X] the President [X][X] the [X] ||| , die [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.00727382 1 ||| ||| 0.0461038
+[X][X] the President and [X] ||| , die [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0159052 1 ||| ||| 0.0307018
+[X][X] the President and to [X] ||| , die [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0119289 1 ||| ||| 0.0307018
+[X][X] the President and [X][X] [X] ||| , die [X][X] dem Präsidentschaftskandidaten und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.00884956
+[X][X] the [X] ||| , die [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] the [X][X] Governor [X] ||| , die [X][X] dem [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0176991
+[X][X] the [X][X] the Governor [X] ||| , die [X][X] dem [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0176991
+[X][X] the [X][X] [X] ||| , die [X][X] dem [X][X] [X] ||| 0.0161639 1 ||| ||| 0.0888538
+[X][X] the [X][X] the [X] ||| , die [X][X] dem [X][X] [X] ||| 0.00377419 1 ||| ||| 0.0888538
+[X][X] the [X][X] to [X] ||| , die [X][X] dem [X][X] [X] ||| 0.00412181 1 ||| ||| 0.0888538
+[X][X] the [X][X] to the [X] ||| , die [X][X] dem [X][X] [X] ||| 0.00377419 1 ||| ||| 0.0888538
+which [X][X] annually [X] ||| , die [X][X] jährlich [X] ||| 0.0278341 1 ||| ||| 0.2
+which fail to meet [X][X] [X] ||| , die [X][X] nicht erfüllen , [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] and to the Governor [X] ||| , die [X][X] und Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.00884956
+[X][X] and [X] ||| , die [X][X] und [X] ||| 0.0114227 1 ||| ||| 0.04275
+[X][X] and to [X] ||| , die [X][X] und [X] ||| 0.00856698 1 ||| ||| 0.04275
+[X][X] and to the [X] ||| , die [X][X] und [X] ||| 0.00784446 1 ||| ||| 0.04275
+[X][X] and [X][X] [X] ||| , die [X][X] und [X][X] [X] ||| 0.013917 1 ||| ||| 0.0176991
+[X][X] and to [X][X] [X] ||| , die [X][X] und [X][X] [X] ||| 0.013917 1 ||| ||| 0.0176991
+which [X][X] their fleet [X][X] [X] ||| , die ihr Soll [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+which [X][X] their [X][X] [X] ||| , die ihr [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+which [X][X] their [X][X] annually [X] ||| , die ihr [X][X] [X][X] jährlich [X] ||| 0.0278341 1 ||| ||| 0.2
+which fail [X][X] their [X][X] [X] ||| , die ihr [X][X] nicht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+, which [X] ||| , die von [X] ||| 0.0278341 1 ||| ||| 1
+, which [X][X] [X] ||| , die von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142857
+, which many [X] ||| , die von vielen [X] ||| 0.0177126 1 ||| ||| 0.392857
+, which many people [X] ||| , die von vielen [X] ||| 0.0101215 1 ||| ||| 0.392857
+that we [X] ||| , die wir [X] ||| 0.0278341 1 ||| ||| 1
+that we [X][X] . [X] ||| , die wir [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.125
+that we [X][X] [X] ||| , die wir [X][X] [X] ||| 0.0278341 1 ||| ||| 0.291667
+that we have [X][X] . [X] ||| , die wir [X][X] haben . [X] ||| 0.0278341 1 ||| ||| 0.125
+that we have [X][X] [X] ||| , die wir [X][X] haben [X] ||| 0.0278341 1 ||| ||| 0.166667
+that we have always upheld [X] ||| , die wir stets verteidigt haben [X] ||| 0.0278341 1 ||| ||| 0.166667
+that [X] ||| , dies [X] ||| 0.0278341 1 ||| ||| 1
+, raise this question , [X] ||| , diese Frage ansprechen , [X] ||| 0.0278341 1 ||| ||| 0.2
+, raise this question [X] ||| , diese Frage ansprechen [X] ||| 0.0278341 1 ||| ||| 0.333333
+, raise this question [X][X] [X] ||| , diese Frage ansprechen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.320803
+to subvert it [X] ||| , diesen zu unterlaufen , [X] ||| 0.0278341 1 ||| ||| 1
+to subvert it [X][X] . [X] ||| , diesen zu unterlaufen , [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.125
+to subvert it [X][X] [X] ||| , diesen zu unterlaufen , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.267857
+to subvert it [X] ||| , diesen zu unterlaufen [X] ||| 0.0278341 1 ||| ||| 1
+to subvert it [X][X] . [X] ||| , diesen zu unterlaufen [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.125
+to subvert it [X][X] [X] ||| , diesen zu unterlaufen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.267857
+an objection [X] ||| , einen Einwand gegen [X] ||| 0.0208756 1 ||| ||| 1.33333
+raise an objection [X] ||| , einen Einwand gegen [X] ||| 0.00695852 1 ||| ||| 1.33333
+an [X] ||| , einen [X] ||| 0.013917 1 ||| ||| 2
+raise an [X] ||| , einen [X] ||| 0.013917 1 ||| ||| 2
+, for [X] ||| , für [X] ||| 0.0278341 1 ||| ||| 1
+that there have been [X] ||| , gab es [X] ||| 0.0278341 1 ||| ||| 0.5
+, [X] ||| , geltend [X] ||| 0.0278341 1 ||| ||| 1
+, [X][X] [X] ||| , geltend [X][X] [X] ||| 0.0204117 1 ||| ||| 0.535714
+, [X][X] representations [X] ||| , geltend [X][X] [X] ||| 0.00742242 1 ||| ||| 0.535714
+, to [X] ||| , geltend zu [X] ||| 0.0278341 1 ||| ||| 1
+, to [X][X] [X] ||| , geltend zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142857
+, to make [X] ||| , geltend zu machen [X] ||| 0.0177126 1 ||| ||| 0.392857
+, to make representations [X] ||| , geltend zu machen [X] ||| 0.0101215 1 ||| ||| 0.392857
+, I [X] ||| , ich [X] ||| 0.0278341 1 ||| ||| 1
+, I [X][X] [X] ||| , ich [X][X] [X] ||| 0.0208091 1 ||| ||| 0.381636
+, I [X][X] have [X] ||| , ich [X][X] [X] ||| 0.00221011 1 ||| ||| 0.381636
+, I [X][X] you [X] ||| , ich [X][X] [X] ||| 0.00260477 1 ||| ||| 0.381636
+, I [X][X] you have [X] ||| , ich [X][X] [X] ||| 0.00221011 1 ||| ||| 0.381636
+, I [X][X] initiative [X][X] [X] ||| , ich [X][X] [X][X] Initiative [X] ||| 0.0278341 1 ||| ||| 0.118649
+, I feel [X] ||| , ich denke , daß [X] ||| 0.0278341 1 ||| ||| 0.333333
+, I feel [X][X] [X] ||| , ich denke , daß [X][X] [X] ||| 0.0178835 1 ||| ||| 0.184666
+, I feel [X][X] have [X] ||| , ich denke , daß [X][X] [X] ||| 0.00456746 1 ||| ||| 0.184666
+, I feel [X][X] you [X] ||| , ich denke , daß [X][X] [X] ||| 0.00538309 1 ||| ||| 0.184666
+, I feel an [X] ||| , ich denke , daß eine [X] ||| 0.0278341 1 ||| ||| 0.166667
+, I feel an [X][X] [X] ||| , ich denke , daß eine [X][X] [X] ||| 0.0278341 1 ||| ||| 0.118649
+, in Texas [X] ||| , in Texas [X] ||| 0.0278341 1 ||| ||| 0.333333
+, as [X] ||| , in [X] ||| 0.013917 1 ||| ||| 2
+, in [X] ||| , in [X] ||| 0.013917 1 ||| ||| 2
+[X][X] , as [X] ||| , in [X][X] [X] ||| 0.0278341 1 ||| ||| 1
+in [X] ||| , mit [X] ||| 0.0278341 1 ||| ||| 1
+in [X][X] Parliament [X] ||| , mit [X][X] Parlament [X] ||| 0.0278341 1 ||| ||| 0.0909091
+in [X][X] Parliament [X][X] [X] ||| , mit [X][X] Parlament [X][X] [X] ||| 0.0179643 1 ||| ||| 0.104201
+in [X][X] Parliament [X][X] an [X] ||| , mit [X][X] Parlament [X][X] [X] ||| 0.00534237 1 ||| ||| 0.104201
+in [X][X] Parliament [X][X] interest [X] ||| , mit [X][X] Parlament [X][X] [X] ||| 0.00452744 1 ||| ||| 0.104201
+in [X][X] Parliament has [X][X] [X] ||| , mit [X][X] Parlament [X][X] hat [X] ||| 0.0278341 1 ||| ||| 0.0672522
+in [X][X] [X] ||| , mit [X][X] [X] ||| 0.0238729 1 ||| ||| 0.378726
+in [X][X] an [X] ||| , mit [X][X] [X] ||| 0.00146988 1 ||| ||| 0.378726
+in [X][X] an interest [X] ||| , mit [X][X] [X] ||| 0.00124566 1 ||| ||| 0.378726
+in [X][X] interest [X] ||| , mit [X][X] [X] ||| 0.00124566 1 ||| ||| 0.378726
+in [X][X] has [X][X] [X] ||| , mit [X][X] [X][X] hat [X] ||| 0.0179643 1 ||| ||| 0.104201
+in [X][X] has [X][X] an [X] ||| , mit [X][X] [X][X] hat [X] ||| 0.00534237 1 ||| ||| 0.104201
+in [X][X] has [X][X] interest [X] ||| , mit [X][X] [X][X] hat [X] ||| 0.00452744 1 ||| ||| 0.104201
+in [X][X] has consistently shown [X] ||| , mit [X][X] immer wieder befaßt hat [X] ||| 0.0278341 1 ||| ||| 0.030303
+in which [X] ||| , mit dem [X] ||| 0.0278341 1 ||| ||| 1
+in which [X][X] [X] ||| , mit dem [X][X] [X] ||| 0.0207596 1 ||| ||| 0.212059
+in which [X][X] an [X] ||| , mit dem [X][X] [X] ||| 0.00262512 1 ||| ||| 0.212059
+in which [X][X] an interest [X] ||| , mit dem [X][X] [X] ||| 0.00222469 1 ||| ||| 0.212059
+in which [X][X] interest [X] ||| , mit dem [X][X] [X] ||| 0.00222469 1 ||| ||| 0.212059
+in which [X][X] has [X][X] [X] ||| , mit dem [X][X] [X][X] hat [X] ||| 0.0278341 1 ||| ||| 0.0672522
+in which [X] ||| , mit dem sich [X] ||| 0.0278341 1 ||| ||| 1
+in which [X][X] [X] ||| , mit dem sich [X][X] [X] ||| 0.0207596 1 ||| ||| 0.212059
+in which [X][X] an [X] ||| , mit dem sich [X][X] [X] ||| 0.00262512 1 ||| ||| 0.212059
+in which [X][X] an interest [X] ||| , mit dem sich [X][X] [X] ||| 0.00222469 1 ||| ||| 0.212059
+in which [X][X] interest [X] ||| , mit dem sich [X][X] [X] ||| 0.00222469 1 ||| ||| 0.212059
+in which [X][X] has [X][X] [X] ||| , mit dem sich [X][X] [X][X] hat [X] ||| 0.0278341 1 ||| ||| 0.0672522
+in which this Parliament [X] ||| , mit dem sich dieses Parlament [X] ||| 0.0278341 1 ||| ||| 0.0909091
+in which this Parliament [X][X] [X] ||| , mit dem sich dieses Parlament [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0672522
+in which this [X] ||| , mit dem sich dieses [X] ||| 0.0278341 1 ||| ||| 0.166667
+in which this [X][X] [X] ||| , mit dem sich dieses [X][X] [X] ||| 0.0179643 1 ||| ||| 0.104201
+in which this [X][X] an [X] ||| , mit dem sich dieses [X][X] [X] ||| 0.00534237 1 ||| ||| 0.104201
+in which this [X][X] interest [X] ||| , mit dem sich dieses [X][X] [X] ||| 0.00452744 1 ||| ||| 0.104201
+legally [X] ||| , rechtlich [X] ||| 0.0278341 1 ||| ||| 1
+legally inadmissible [X] ||| , rechtlich unzulässig [X] ||| 0.0278341 1 ||| ||| 1
+[X][X] legally inadmissible . [X] ||| , rechtlich unzulässig [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.166667
+[X][X] legally inadmissible [X] ||| , rechtlich unzulässig [X][X] [X] ||| 0.0278341 1 ||| ||| 0.25
+would be legally inadmissible . [X] ||| , rechtlich unzulässig wäre . [X] ||| 0.0278341 1 ||| ||| 0.166667
+would be legally inadmissible [X] ||| , rechtlich unzulässig wäre [X] ||| 0.0278341 1 ||| ||| 0.25
+rise , then , [X] ||| , sich [X] ||| 0.0278341 1 ||| ||| 1
+rise , then , [X][X] [X] ||| , sich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.833333
+, and [X] ||| , und [X] ||| 0.0278341 1 ||| ||| 1
+, and whether [X] ||| , und ob [X] ||| 0.0278341 1 ||| ||| 0.333333
+people signed [X] ||| , unterzeichnet worden [X] ||| 0.013917 1 ||| ||| 2
+signed [X] ||| , unterzeichnet worden [X] ||| 0.013917 1 ||| ||| 2
+people signed [X] ||| , unterzeichnet worden ist [X] ||| 0.013917 1 ||| ||| 2
+signed [X] ||| , unterzeichnet worden ist [X] ||| 0.013917 1 ||| ||| 2
+because [X] ||| , weil [X] ||| 0.0278341 1 ||| ||| 1
+because [X][X] . [X] ||| , weil [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0454545
+because [X][X] is appealing . [X] ||| , weil [X][X] Berufung geht . [X] ||| 0.0278341 1 ||| ||| 0.0454545
+because [X][X] is appealing [X] ||| , weil [X][X] Berufung geht [X] ||| 0.0278341 1 ||| ||| 0.0555556
+because [X][X] [X] ||| , weil [X][X] [X] ||| 0.0278341 1 ||| ||| 0.443867
+because [X][X] is appealing . [X] ||| , weil [X][X] in Berufung geht . [X] ||| 0.0278341 1 ||| ||| 0.0454545
+because [X][X] is appealing [X] ||| , weil [X][X] in Berufung geht [X] ||| 0.0278341 1 ||| ||| 0.0555556
+because [X][X] [X] ||| , weil [X][X] in [X] ||| 0.0278341 1 ||| ||| 0.142857
+because the public prosecutor [X] ||| , weil der Staatsanwalt [X] ||| 0.0278341 1 ||| ||| 0.2
+because the public prosecutor [X][X] [X] ||| , weil der Staatsanwalt [X][X] [X] ||| 0.0278341 1 ||| ||| 0.10101
+because the public prosecutor [X] ||| , weil der Staatsanwalt in [X] ||| 0.0278341 1 ||| ||| 0.142857
+because the public prosecutor [X][X] [X] ||| , weil der Staatsanwalt in [X][X] [X] ||| 0.0278341 1 ||| ||| 0.10101
+because the [X] ||| , weil der [X] ||| 0.0278341 1 ||| ||| 1
+because the [X][X] . [X] ||| , weil der [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0454545
+because the [X][X] is appealing [X] ||| , weil der [X][X] Berufung geht [X] ||| 0.0278341 1 ||| ||| 0.0555556
+because the [X][X] [X] ||| , weil der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.443867
+because the [X][X] is appealing [X] ||| , weil der [X][X] in Berufung geht [X] ||| 0.0278341 1 ||| ||| 0.0555556
+because the [X][X] [X] ||| , weil der [X][X] in [X] ||| 0.0278341 1 ||| ||| 0.142857
+for you , Madam President [X] ||| , wenn Sie , Frau Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0666667
+for you , Madam [X] ||| , wenn Sie , Frau [X] ||| 0.0278341 1 ||| ||| 0.125
+for you , Madam [X][X] [X] ||| , wenn Sie , Frau [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0633528
+for you , Madam [X][X] [X] ||| , wenn Sie , Frau [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+for you , [X] ||| , wenn Sie , [X] ||| 0.0278341 1 ||| ||| 0.25
+for you , [X][X] , [X] ||| , wenn Sie , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.037037
+for you , [X][X] , [X] ||| , wenn Sie , [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+for you , [X][X] [X] ||| , wenn Sie , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.13002
+for you , [X][X] [X] ||| , wenn Sie , [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+, if you [X] ||| , wenn Sie [X] ||| 0.00695852 1 ||| ||| 1.33333
+for you [X] ||| , wenn Sie [X] ||| 0.0208756 1 ||| ||| 1.33333
+, if you [X][X] , [X] ||| , wenn Sie [X][X] , [X] ||| 0.01342 1 ||| ||| 0.0715198
+for you [X][X] , [X] ||| , wenn Sie [X][X] , [X] ||| 0.0144141 1 ||| ||| 0.0715198
+for you [X][X] , [X] ||| , wenn Sie [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+for you [X][X] President , [X] ||| , wenn Sie [X][X] Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.037037
+for you [X][X] President , [X] ||| , wenn Sie [X][X] Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+for you [X][X] President [X] ||| , wenn Sie [X][X] Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0666667
+, if you [X][X] [X] ||| , wenn Sie [X][X] [X] ||| 0.0110886 1 ||| ||| 0.423889
+for you [X][X] [X] ||| , wenn Sie [X][X] [X] ||| 0.0167455 1 ||| ||| 0.423889
+for you [X][X] [X] ||| , wenn Sie [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+, if you wish , [X] ||| , wenn Sie wollen , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+, if you wish [X] ||| , wenn Sie wollen [X] ||| 0.0278341 1 ||| ||| 0.166667
+, if you wish [X][X] [X] ||| , wenn Sie wollen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.077961
+, if [X] ||| , wenn [X] ||| 0.013917 1 ||| ||| 2
+for [X] ||| , wenn [X] ||| 0.013917 1 ||| ||| 2
+, if [X][X] , [X] ||| , wenn [X][X] , [X] ||| 0.0214874 1 ||| ||| 0.162429
+for [X][X] , [X] ||| , wenn [X][X] , [X] ||| 0.00634672 1 ||| ||| 0.162429
+, if [X][X] , [X][X] [X] ||| , wenn [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.077961
+for [X][X] , [X] ||| , wenn [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+for [X][X] Madam President , [X] ||| , wenn [X][X] Frau Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.037037
+for [X][X] Madam President , [X] ||| , wenn [X][X] Frau Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+for [X][X] Madam President [X] ||| , wenn [X][X] Frau Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0666667
+for [X][X] Madam [X] ||| , wenn [X][X] Frau [X] ||| 0.0278341 1 ||| ||| 0.125
+for [X][X] Madam [X][X] [X] ||| , wenn [X][X] Frau [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0633528
+for [X][X] Madam [X][X] [X] ||| , wenn [X][X] Frau [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+for [X][X] President , [X] ||| , wenn [X][X] Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.037037
+for [X][X] President , [X] ||| , wenn [X][X] Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+for [X][X] President [X] ||| , wenn [X][X] Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0666667
+, if [X][X] [X] ||| , wenn [X][X] [X] ||| 0.0111109 1 ||| ||| 0.840556
+for [X][X] [X] ||| , wenn [X][X] [X] ||| 0.0167232 1 ||| ||| 0.840556
+, if [X][X] raise [X][X] [X] ||| , wenn [X][X] [X][X] ansprechen [X] ||| 0.0278341 1 ||| ||| 0.0434783
+for [X][X] [X] ||| , wenn [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+, I shall [X] ||| , werde ich [X] ||| 0.0185561 1 ||| ||| 0.75
+, I shall do [X] ||| , werde ich [X] ||| 0.00927803 1 ||| ||| 0.75
+, I shall [X][X] . [X] ||| , werde ich [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0454545
+, I shall [X][X] [X] ||| , werde ich [X][X] [X] ||| 0.013917 1 ||| ||| 0.170909
+, I shall do [X][X] [X] ||| , werde ich [X][X] [X] ||| 0.013917 1 ||| ||| 0.170909
+, I shall [X][X] suggested [X] ||| , werde ich dem Vorschlag [X][X] folgen [X] ||| 0.0278341 1 ||| ||| 0.04
+, I shall [X] ||| , werde ich dem [X] ||| 0.018556 1 ||| ||| 0.5
+, I shall do [X] ||| , werde ich dem [X] ||| 0.00927805 1 ||| ||| 0.5
+, I shall [X][X] . [X] ||| , werde ich dem [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0454545
+, I shall [X][X] [X] ||| , werde ich dem [X][X] [X] ||| 0.013917 1 ||| ||| 0.170909
+, I shall do [X][X] [X] ||| , werde ich dem [X][X] [X] ||| 0.013917 1 ||| ||| 0.170909
+, [X][X] has [X][X] [X] ||| , wurde [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+, [X][X] has [X][X] presented [X] ||| , wurde [X][X] [X][X] eingereicht [X] ||| 0.0278341 1 ||| ||| 0.2
+, a petition has [X][X] [X] ||| , wurde [X][X] eine Petition [X] ||| 0.0278341 1 ||| ||| 0.2
+, [X][X] has already been [X] ||| , wurde bereits [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+, on [X] ||| , zur [X] ||| 0.241419 1 ||| ||| 2
+, on [X][X] . [X] ||| , zur [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.4
+, on [X][X] [X] ||| , zur [X][X] [X] ||| 0.241419 1 ||| ||| 1.06667
+[X][X] , who [X] ||| , zählt [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.125
+Mr Kumar Ponnambalam , who [X] ||| , zählt auch Herr Kumar Ponnambalam , der [X] ||| 0.0278341 1 ||| ||| 0.125
+Mr Kumar Ponnambalam [X] ||| , zählt auch Herr Kumar Ponnambalam [X] ||| 0.0278341 1 ||| ||| 0.5
+Mr Kumar Ponnambalam [X][X] [X] ||| , zählt auch Herr Kumar Ponnambalam [X][X] [X] ||| 0.0278341 1 ||| ||| 0.125
+Mr [X] ||| , zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 1
+Mr [X][X] , who [X] ||| , zählt auch Herr [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.125
+Mr [X][X] [X] ||| , zählt auch Herr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.625
+[X][X] , who [X] ||| , zählt auch [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.125
+, [X] ||| - , [X] ||| 0.00695852 1 ||| ||| 4
+, on [X] ||| - , [X] ||| 0.00695852 1 ||| ||| 4
+, on behalf [X] ||| - , [X] ||| 0.00695852 1 ||| ||| 4
+, on behalf of [X] ||| - , [X] ||| 0.00695852 1 ||| ||| 4
+, [X][X] the victims [X] ||| - , [X][X] Opfern [X] ||| 0.00556682 1 ||| ||| 0.16129
+, [X][X] victims [X] ||| - , [X][X] Opfern [X] ||| 0.00556682 1 ||| ||| 0.16129
+, on [X][X] the victims [X] ||| - , [X][X] Opfern [X] ||| 0.00556682 1 ||| ||| 0.16129
+, on [X][X] victims [X] ||| - , [X][X] Opfern [X] ||| 0.00556682 1 ||| ||| 0.16129
+, on behalf [X][X] victims [X] ||| - , [X][X] Opfern [X] ||| 0.00556682 1 ||| ||| 0.16129
+, [X][X] [X] ||| - , [X][X] [X] ||| 0.00601799 1 ||| ||| 0.967493
+, [X][X] the [X] ||| - , [X][X] [X] ||| 0.00221302 1 ||| ||| 0.967493
+, on [X][X] [X] ||| - , [X][X] [X] ||| 0.00601799 1 ||| ||| 0.967493
+, on [X][X] the [X] ||| - , [X][X] [X] ||| 0.00221302 1 ||| ||| 0.967493
+, on behalf [X][X] [X] ||| - , [X][X] [X] ||| 0.00601799 1 ||| ||| 0.967493
+, on behalf [X][X] the [X] ||| - , [X][X] [X] ||| 0.00221302 1 ||| ||| 0.967493
+, on behalf of [X][X] [X] ||| - , [X][X] [X] ||| 0.00314106 1 ||| ||| 0.967493
+, on behalf of all [X] ||| - , allen [X] ||| 0.0278341 1 ||| ||| 0.1
+, [X] ||| - [X] ||| 0.160946 1 ||| ||| 3
+, including [X] ||| - [X] ||| 0.00927803 1 ||| ||| 3
+[X][X] the victims [X] ||| - [X][X] Opfern [X] ||| 0.013917 1 ||| ||| 0.0645162
+[X][X] victims [X] ||| - [X][X] Opfern [X] ||| 0.013917 1 ||| ||| 0.0645162
+[X][X] behalf [X][X] the victims [X] ||| - [X][X] [X][X] Opfern [X] ||| 0.00695852 1 ||| ||| 0.129032
+[X][X] behalf [X][X] victims [X] ||| - [X][X] [X][X] Opfern [X] ||| 0.00695852 1 ||| ||| 0.129032
+[X][X] behalf of [X][X] victims [X] ||| - [X][X] [X][X] Opfern [X] ||| 0.00695852 1 ||| ||| 0.129032
+[X][X] of [X][X] victims [X] ||| - [X][X] [X][X] Opfern [X] ||| 0.00695852 1 ||| ||| 0.129032
+[X][X] all the victims [X] ||| - [X][X] allen Opfern [X] ||| 0.013917 1 ||| ||| 0.0645162
+[X][X] of all the victims [X] ||| - [X][X] allen Opfern [X] ||| 0.013917 1 ||| ||| 0.0645162
+[X][X] all [X] ||| - [X][X] allen [X] ||| 0.00524411 1 ||| ||| 0.530769
+[X][X] all the [X] ||| - [X][X] allen [X] ||| 0.00403393 1 ||| ||| 0.530769
+[X][X] behalf of all [X] ||| - [X][X] allen [X] ||| 0.00524411 1 ||| ||| 0.530769
+[X][X] behalf of all the [X] ||| - [X][X] allen [X] ||| 0.00403393 1 ||| ||| 0.530769
+[X][X] of all [X] ||| - [X][X] allen [X] ||| 0.00524411 1 ||| ||| 0.530769
+[X][X] of all the [X] ||| - [X][X] allen [X] ||| 0.00403393 1 ||| ||| 0.530769
+[X][X] all [X][X] [X] ||| - [X][X] allen [X][X] [X] ||| 0.00927803 1 ||| ||| 0.0967743
+[X][X] behalf of all [X][X] [X] ||| - [X][X] allen [X][X] [X] ||| 0.00927803 1 ||| ||| 0.0967743
+[X][X] of all [X][X] [X] ||| - [X][X] allen [X][X] [X] ||| 0.00927803 1 ||| ||| 0.0967743
+indeed , including specifically [X] ||| - gerade [X] ||| 0.0278341 1 ||| ||| 0.5
+. [X] ||| . [X] ||| 0.925926 1 ||| ||| 27
+an interest . [X] ||| . [X] ||| 0.00103089 1 ||| ||| 27
+interest . [X] ||| . [X] ||| 0.00103089 1 ||| ||| 27
+143 [X] ||| 143 [X] ||| 0.0278341 1 ||| ||| 1
+143 [X][X] . [X] ||| 143 [X][X] ? [X] ||| 0.0278341 1 ||| ||| 0.166667
+143 [X][X] [X] ||| 143 [X][X] [X] ||| 0.0278341 1 ||| ||| 0.5
+143 concerning inadmissibility . [X] ||| 143 im Zusammenhang mit der Unzulässigkeit geben ? [X] ||| 0.0278341 1 ||| ||| 0.166667
+143 concerning inadmissibility [X] ||| 143 im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0278341 1 ||| ||| 0.333333
+143 concerning [X] ||| 143 im Zusammenhang mit der [X] ||| 0.0278341 1 ||| ||| 1
+143 concerning [X][X] [X] ||| 143 im Zusammenhang mit der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.166667
+Madam President [X] ||| 34jährigen [X] ||| 0.013917 1 ||| ||| 2
+President [X] ||| 34jährigen [X] ||| 0.013917 1 ||| ||| 2
+6 [X] ||| 6 [X] ||| 0.0278341 1 ||| ||| 1
+. [X] ||| ? [X] ||| 0.013917 1 ||| ||| 2
+? [X] ||| ? [X] ||| 0.013917 1 ||| ||| 2
+paragraph 6 [X] ||| Absatz 6 [X] ||| 0.0278341 1 ||| ||| 1
+paragraph [X] ||| Absatz [X] ||| 0.0278341 1 ||| ||| 1
+Alexander Nikitin . [X] ||| Alexander Nikitin . [X] ||| 0.0278341 1 ||| ||| 0.333333
+Alexander Nikitin [X] ||| Alexander Nikitin [X] ||| 0.115881 1 ||| ||| 4.16667
+Alexander Nikitin to [X] ||| Alexander Nikitin [X] ||| 0.00334009 1 ||| ||| 4.16667
+Alexander Nikitin to be [X] ||| Alexander Nikitin [X] ||| 0.00222673 1 ||| ||| 4.16667
+Alexander Nikitin to be accused [X] ||| Alexander Nikitin [X] ||| 0.00167005 1 ||| ||| 4.16667
+for Alexander Nikitin [X] ||| Alexander Nikitin [X] ||| 0.00334009 1 ||| ||| 4.16667
+for Alexander Nikitin to [X] ||| Alexander Nikitin [X] ||| 0.00222673 1 ||| ||| 4.16667
+for Alexander Nikitin to be [X] ||| Alexander Nikitin [X] ||| 0.00167005 1 ||| ||| 4.16667
+Alexander [X] ||| Alexander [X] ||| 0.160946 1 ||| ||| 3
+for Alexander [X] ||| Alexander [X] ||| 0.00927803 1 ||| ||| 3
+Alexander [X][X] [X] ||| Alexander [X][X] [X] ||| 0.0723879 1 ||| ||| 6.09552
+Alexander [X][X] accused [X] ||| Alexander [X][X] [X] ||| 0.00114158 1 ||| ||| 6.09552
+Alexander [X][X] accused of [X] ||| Alexander [X][X] [X] ||| 0.00114158 1 ||| ||| 6.09552
+Alexander [X][X] be [X] ||| Alexander [X][X] [X] ||| 0.0015221 1 ||| ||| 6.09552
+Alexander [X][X] be accused [X] ||| Alexander [X][X] [X] ||| 0.00114158 1 ||| ||| 6.09552
+Alexander [X][X] be accused of [X] ||| Alexander [X][X] [X] ||| 0.00114158 1 ||| ||| 6.09552
+Alexander [X][X] of [X] ||| Alexander [X][X] [X] ||| 0.00114158 1 ||| ||| 6.09552
+for Alexander [X][X] [X] ||| Alexander [X][X] [X] ||| 0.0502132 1 ||| ||| 6.09552
+for Alexander [X][X] accused [X] ||| Alexander [X][X] [X] ||| 0.00114158 1 ||| ||| 6.09552
+for Alexander [X][X] accused of [X] ||| Alexander [X][X] [X] ||| 0.0015221 1 ||| ||| 6.09552
+for Alexander [X][X] be [X] ||| Alexander [X][X] [X] ||| 0.00114158 1 ||| ||| 6.09552
+for Alexander [X][X] be accused [X] ||| Alexander [X][X] [X] ||| 0.00114158 1 ||| ||| 6.09552
+for Alexander [X][X] of [X] ||| Alexander [X][X] [X] ||| 0.0015221 1 ||| ||| 6.09552
+prestigious office [X] ||| Amtes [X] ||| 0.0278341 1 ||| ||| 1
+prestigious office [X][X] , [X] ||| Amtes [X][X] , [X] ||| 0.00537149 1 ||| ||| 0.112648
+prestigious office [X][X] [X] ||| Amtes [X][X] , [X] ||| 0.0224626 1 ||| ||| 0.112648
+prestigious office [X][X] , to [X] ||| Amtes [X][X] , bei [X] ||| 0.0278341 1 ||| ||| 0.0169492
+prestigious office [X][X] you [X] ||| Amtes [X][X] , die Sie [X] ||| 0.0278341 1 ||| ||| 0.0454545
+prestigious office [X][X] you [X][X] [X] ||| Amtes [X][X] , die Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0386883
+prestigious office [X][X] you represent [X] ||| Amtes [X][X] , die Sie vertreten [X] ||| 0.0278341 1 ||| ||| 0.0285714
+prestigious office [X][X] [X] ||| Amtes [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.0714286
+prestigious office [X][X] institution [X] ||| Amtes [X][X] Institution , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+prestigious office [X][X] institution [X][X] [X] ||| Amtes [X][X] Institution , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0672597
+prestigious office [X][X] institution you [X] ||| Amtes [X][X] Institution , die Sie [X] ||| 0.0278341 1 ||| ||| 0.0454545
+prestigious office [X][X] institution [X] ||| Amtes [X][X] Institution , die [X] ||| 0.0278341 1 ||| ||| 0.0714286
+prestigious office [X][X] institution [X][X] [X] ||| Amtes [X][X] Institution , die [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0672597
+prestigious office [X][X] institution [X] ||| Amtes [X][X] Institution [X] ||| 0.0278341 1 ||| ||| 0.125
+prestigious office [X][X] institution [X][X] [X] ||| Amtes [X][X] Institution [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0672597
+prestigious office [X][X] you [X] ||| Amtes [X][X] Sie [X] ||| 0.0278341 1 ||| ||| 0.0454545
+prestigious office [X][X] you [X][X] [X] ||| Amtes [X][X] Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0386883
+prestigious office [X][X] you represent [X] ||| Amtes [X][X] Sie vertreten [X] ||| 0.0278341 1 ||| ||| 0.0285714
+prestigious office [X][X] [X] ||| Amtes [X][X] [X] ||| 0.0278341 1 ||| ||| 0.650052
+prestigious office [X][X] to [X] ||| Amtes [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0169492
+prestigious office [X][X] you [X] ||| Amtes [X][X] die Sie [X] ||| 0.0278341 1 ||| ||| 0.0454545
+prestigious office [X][X] you [X][X] [X] ||| Amtes [X][X] die Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0386883
+prestigious office [X][X] you represent [X] ||| Amtes [X][X] die Sie vertreten [X] ||| 0.0278341 1 ||| ||| 0.0285714
+prestigious office [X][X] [X] ||| Amtes [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.0714286
+prestigious office [X][X] represent , [X] ||| Amtes [X][X] vertreten , [X] ||| 0.0278341 1 ||| ||| 0.0217391
+prestigious office [X][X] represent [X] ||| Amtes [X][X] vertreten [X] ||| 0.0278341 1 ||| ||| 0.0285714
+prestigious office [X][X] represent [X][X] [X] ||| Amtes [X][X] vertreten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0169492
+prestigious office and [X] ||| Amtes und [X] ||| 0.0278341 1 ||| ||| 0.5
+prestigious office and [X][X] , [X] ||| Amtes und [X][X] , [X] ||| 0.00537149 1 ||| ||| 0.112648
+prestigious office and [X][X] [X] ||| Amtes und [X][X] , [X] ||| 0.0224626 1 ||| ||| 0.112648
+prestigious office and [X][X] you [X] ||| Amtes und [X][X] , die Sie [X] ||| 0.0278341 1 ||| ||| 0.0454545
+prestigious office and [X][X] [X] ||| Amtes und [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.0714286
+prestigious office and [X][X] you [X] ||| Amtes und [X][X] Sie [X] ||| 0.0278341 1 ||| ||| 0.0454545
+prestigious office and [X][X] [X] ||| Amtes und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.400052
+prestigious office and [X][X] to [X] ||| Amtes und [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0169492
+prestigious office and [X][X] you [X] ||| Amtes und [X][X] die Sie [X] ||| 0.0278341 1 ||| ||| 0.0454545
+prestigious office and [X][X] [X] ||| Amtes und [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.0714286
+prestigious office and [X][X] represent [X] ||| Amtes und [X][X] vertreten [X] ||| 0.0278341 1 ||| ||| 0.0285714
+prestigious office and the institution [X] ||| Amtes und der Institution , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+prestigious office and the institution [X] ||| Amtes und der Institution , die [X] ||| 0.0278341 1 ||| ||| 0.0714286
+prestigious office and the institution [X] ||| Amtes und der Institution [X] ||| 0.0278341 1 ||| ||| 0.125
+prestigious office and the [X] ||| Amtes und der [X] ||| 0.0278341 1 ||| ||| 0.25
+prestigious office and the [X][X] [X] ||| Amtes und der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.112714
+form of quota penalties [X] ||| Art Quotenstrafe belegt [X] ||| 0.0278341 1 ||| ||| 0.25
+form of quota penalties [X][X] [X] ||| Art Quotenstrafe belegt [X][X] [X] ||| 0.0278341 1 ||| ||| 0.125
+form [X] ||| Art [X] ||| 0.013917 1 ||| ||| 2
+form of [X] ||| Art [X] ||| 0.013917 1 ||| ||| 2
+form [X][X] [X] ||| Art [X][X] [X] ||| 0.013917 1 ||| ||| 0.75
+form of [X][X] [X] ||| Art [X][X] [X] ||| 0.013917 1 ||| ||| 0.75
+form [X][X] should be [X] ||| Art [X][X] werden sollen [X] ||| 0.013917 1 ||| ||| 0.25
+form of [X][X] should be [X] ||| Art [X][X] werden sollen [X] ||| 0.013917 1 ||| ||| 0.25
+Rule 143 [X] ||| Artikel 143 [X] ||| 0.0278341 1 ||| ||| 1
+Rule 143 [X][X] . [X] ||| Artikel 143 [X][X] ? [X] ||| 0.0278341 1 ||| ||| 0.0909091
+Rule 143 [X][X] [X] ||| Artikel 143 [X][X] [X] ||| 0.0278341 1 ||| ||| 0.257576
+Rule 143 concerning inadmissibility . [X] ||| Artikel 143 im Zusammenhang mit der Unzulässigkeit geben ? [X] ||| 0.0278341 1 ||| ||| 0.0909091
+Rule 143 concerning inadmissibility [X] ||| Artikel 143 im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0278341 1 ||| ||| 0.166667
+Rule 143 concerning [X] ||| Artikel 143 im Zusammenhang mit der [X] ||| 0.0278341 1 ||| ||| 0.333333
+Rule 143 concerning [X][X] [X] ||| Artikel 143 im Zusammenhang mit der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0909091
+Rule [X] ||| Artikel [X] ||| 0.0278341 1 ||| ||| 1
+Rule [X][X] . [X] ||| Artikel [X][X] ? [X] ||| 0.0278341 1 ||| ||| 0.0909091
+Rule [X][X] inadmissibility . [X] ||| Artikel [X][X] Unzulässigkeit geben ? [X] ||| 0.0278341 1 ||| ||| 0.0909091
+Rule [X][X] inadmissibility [X] ||| Artikel [X][X] Unzulässigkeit geben [X] ||| 0.0278341 1 ||| ||| 0.166667
+Rule [X][X] [X] ||| Artikel [X][X] [X] ||| 0.0278341 1 ||| ||| 0.590909
+people assassinated very [X] ||| Attentatsopfern , die es in [X] ||| 0.0278341 1 ||| ||| 1
+people assassinated very [X][X] Lanka [X] ||| Attentatsopfern , die es in [X][X] Lanka [X] ||| 0.0278341 1 ||| ||| 0.0909091
+people assassinated very [X][X] Sri [X] ||| Attentatsopfern , die es in [X][X] Sri [X] ||| 0.0278341 1 ||| ||| 0.142857
+people assassinated very [X][X] [X] ||| Attentatsopfern , die es in [X][X] [X] ||| 0.0278341 1 ||| ||| 0.483766
+people assassinated very recently [X] ||| Attentatsopfern , die es in jüngster Zeit [X] ||| 0.0278341 1 ||| ||| 0.5
+people assassinated very recently [X][X] [X] ||| Attentatsopfern , die es in jüngster Zeit [X][X] [X] ||| 0.0278341 1 ||| ||| 0.233766
+people assassinated very recently in [X] ||| Attentatsopfern , die es in jüngster Zeit in [X] ||| 0.0278341 1 ||| ||| 0.25
+advice [X] ||| Auskunft [X] ||| 0.0278341 1 ||| ||| 1
+advice [X][X] 143 [X] ||| Auskunft [X][X] 143 [X] ||| 0.0278341 1 ||| ||| 0.166667
+advice [X][X] 143 [X][X] [X] ||| Auskunft [X][X] 143 [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+advice [X][X] 143 concerning inadmissibility [X] ||| Auskunft [X][X] 143 im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0278341 1 ||| ||| 0.0526316
+advice [X][X] 143 concerning [X] ||| Auskunft [X][X] 143 im Zusammenhang mit der [X] ||| 0.0278341 1 ||| ||| 0.0909091
+advice [X][X] inadmissibility [X] ||| Auskunft [X][X] Unzulässigkeit geben [X] ||| 0.0278341 1 ||| ||| 0.0526316
+advice [X][X] [X] ||| Auskunft [X][X] [X] ||| 0.0278341 1 ||| ||| 0.643541
+advice [X][X] concerning inadmissibility [X] ||| Auskunft [X][X] im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0278341 1 ||| ||| 0.0526316
+advice [X][X] concerning [X] ||| Auskunft [X][X] im Zusammenhang mit der [X] ||| 0.0278341 1 ||| ||| 0.0909091
+advice about Rule 143 [X] ||| Auskunft zu Artikel 143 [X] ||| 0.0278341 1 ||| ||| 0.166667
+advice about Rule 143 [X][X] [X] ||| Auskunft zu Artikel 143 [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+advice about Rule 143 concerning [X] ||| Auskunft zu Artikel 143 im Zusammenhang mit der [X] ||| 0.0278341 1 ||| ||| 0.0909091
+advice about Rule [X] ||| Auskunft zu Artikel [X] ||| 0.0278341 1 ||| ||| 0.333333
+advice about Rule [X][X] inadmissibility [X] ||| Auskunft zu Artikel [X][X] Unzulässigkeit geben [X] ||| 0.0278341 1 ||| ||| 0.0526316
+advice about Rule [X][X] [X] ||| Auskunft zu Artikel [X][X] [X] ||| 0.0278341 1 ||| ||| 0.143541
+advice about [X] ||| Auskunft zu [X] ||| 0.0278341 1 ||| ||| 1
+advice about [X][X] inadmissibility [X] ||| Auskunft zu [X][X] Unzulässigkeit geben [X] ||| 0.0278341 1 ||| ||| 0.0526316
+advice about [X][X] [X] ||| Auskunft zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.310207
+advice about [X][X] concerning inadmissibility [X] ||| Auskunft zu [X][X] im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0278341 1 ||| ||| 0.0526316
+advice about [X][X] concerning [X] ||| Auskunft zu [X][X] im Zusammenhang mit der [X] ||| 0.0278341 1 ||| ||| 0.0909091
+guidance programmes [X] ||| Ausrichtungsprogramme [X] ||| 0.013917 1 ||| ||| 2
+guidance programmes comes [X] ||| Ausrichtungsprogramme [X] ||| 0.013917 1 ||| ||| 2
+guidance programmes [X][X] [X] ||| Ausrichtungsprogramme [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.2
+guidance programmes [X][X] [X] ||| Ausrichtungsprogramme [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.166667
+guidance programmes [X][X] [X] ||| Ausrichtungsprogramme [X][X] [X] ||| 0.0278341 1 ||| ||| 0.616667
+guidance programmes [X][X] [X] ||| Ausrichtungsprogramme [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.166667
+guidance programmes comes before [X] ||| Ausrichtungsprogramme befassen , [X] ||| 0.0278341 1 ||| ||| 0.2
+guidance programmes comes before [X] ||| Ausrichtungsprogramme befassen , der [X] ||| 0.0278341 1 ||| ||| 0.166667
+guidance programmes comes before [X] ||| Ausrichtungsprogramme befassen [X] ||| 0.0278341 1 ||| ||| 0.25
+stay [X] ||| Aussetzung [X] ||| 0.0278341 1 ||| ||| 1
+a stay of execution [X] ||| Aussetzung der Vollstreckung des Todesurteils [X] ||| 0.0278341 1 ||| ||| 1
+a stay of execution [X][X] [X] ||| Aussetzung der Vollstreckung des Todesurteils [X][X] [X] ||| 0.0278341 1 ||| ||| 0.711111
+a stay of execution and [X] ||| Aussetzung der Vollstreckung des Todesurteils und [X] ||| 0.0278341 1 ||| ||| 0.5
+debate [X] ||| Aussprache [X] ||| 0.013917 1 ||| ||| 2
+presentation [X] ||| Aussprache [X] ||| 0.013917 1 ||| ||| 2
+presentation [X][X] . [X] ||| Aussprache [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0909091
+presentation [X][X] report . [X] ||| Aussprache [X][X] Bericht . [X] ||| 0.0278341 1 ||| ||| 0.0909091
+presentation [X][X] report [X] ||| Aussprache [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.166667
+presentation [X][X] [X] ||| Aussprache [X][X] [X] ||| 0.0278341 1 ||| ||| 0.590909
+debate on [X] ||| Aussprache im [X] ||| 0.0278341 1 ||| ||| 1
+presentation of [X] ||| Aussprache über [X] ||| 0.0278341 1 ||| ||| 1
+presentation of [X][X] . [X] ||| Aussprache über [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0909091
+presentation of [X][X] [X] ||| Aussprache über [X][X] [X] ||| 0.0278341 1 ||| ||| 0.257576
+presentation of the report . [X] ||| Aussprache über den Bericht . [X] ||| 0.0278341 1 ||| ||| 0.0909091
+presentation of the report [X] ||| Aussprache über den Bericht [X] ||| 0.0278341 1 ||| ||| 0.166667
+presentation of the [X] ||| Aussprache über den [X] ||| 0.0278341 1 ||| ||| 0.333333
+presentation of the [X][X] [X] ||| Aussprache über den [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0909091
+regret [X] ||| Bedauern [X] ||| 0.0278341 1 ||| ||| 1
+[X][X] regret [X] ||| Bedauern [X][X] [X] ||| 0.0278341 1 ||| ||| 0.75
+expressing [X][X] regret [X] ||| Bedauern [X][X] zum [X] ||| 0.0278341 1 ||| ||| 0.25
+Parliament 's regret [X] ||| Bedauern des Parlaments [X] ||| 0.0278341 1 ||| ||| 0.5
+expressing Parliament 's regret [X] ||| Bedauern des Parlaments zum [X] ||| 0.0278341 1 ||| ||| 0.25
+the start [X] ||| Beginn [X] ||| 0.0278341 1 ||| ||| 1
+the start [X][X] . [X] ||| Beginn [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0416667
+the start [X][X] presentation [X] ||| Beginn [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.2
+the start [X][X] presentation [X][X] [X] ||| Beginn [X][X] Aussprache [X][X] [X] ||| 0.0278341 1 ||| ||| 0.183824
+the start [X][X] presentation of [X] ||| Beginn [X][X] Aussprache über [X] ||| 0.0278341 1 ||| ||| 0.125
+the start [X][X] report . [X] ||| Beginn [X][X] Bericht . [X] ||| 0.0278341 1 ||| ||| 0.0416667
+the start [X][X] report [X] ||| Beginn [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.0588235
+the start [X][X] [X] ||| Beginn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.842157
+the start [X][X] the report [X] ||| Beginn [X][X] den Bericht [X] ||| 0.0278341 1 ||| ||| 0.0588235
+the start [X][X] the [X] ||| Beginn [X][X] den [X] ||| 0.0278341 1 ||| ||| 0.0833333
+the start [X][X] the [X][X] [X] ||| Beginn [X][X] den [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0416667
+the start [X][X] of [X] ||| Beginn [X][X] über [X] ||| 0.0278341 1 ||| ||| 0.125
+the start [X][X] of [X][X] [X] ||| Beginn [X][X] über [X][X] [X] ||| 0.0278341 1 ||| ||| 0.10049
+the start [X][X] of the [X] ||| Beginn [X][X] über den [X] ||| 0.0278341 1 ||| ||| 0.0833333
+the start of the presentation [X] ||| Beginn der Aussprache [X] ||| 0.0278341 1 ||| ||| 0.2
+the start of the [X] ||| Beginn der [X] ||| 0.0278341 1 ||| ||| 0.333333
+the start of the [X][X] [X] ||| Beginn der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.308824
+reprieve [X] ||| Begnadigung [X] ||| 0.0278341 1 ||| ||| 1
+reprieve [X][X] [X] ||| Begnadigung [X][X] [X] ||| 0.0278341 1 ||| ||| 0.25
+reprieve the condemned person [X] ||| Begnadigung des Verurteilten [X] ||| 0.0278341 1 ||| ||| 0.25
+reprieve the [X] ||| Begnadigung des [X] ||| 0.0278341 1 ||| ||| 1
+reprieve the [X][X] [X] ||| Begnadigung des [X][X] [X] ||| 0.0278341 1 ||| ||| 0.25
+report . [X] ||| Bericht . [X] ||| 0.0278341 1 ||| ||| 1
+report [X] ||| Bericht [X] ||| 0.241419 1 ||| ||| 2
+report [X][X] legislative proposal [X] ||| Bericht [X][X] Legislativvorschlag [X] ||| 0.0278341 1 ||| ||| 0.125
+report [X][X] [X] ||| Bericht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.375
+report , [X] ||| Bericht und [X] ||| 0.0278341 1 ||| ||| 1
+report , [X][X] legislative proposal [X] ||| Bericht und [X][X] Legislativvorschlag [X] ||| 0.0278341 1 ||| ||| 0.125
+report , [X][X] [X] ||| Bericht und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.375
+report , not a [X] ||| Bericht und keinen [X] ||| 0.0278341 1 ||| ||| 0.25
+report , not a [X][X] [X] ||| Bericht und keinen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.125
+appealing [X] ||| Berufung [X] ||| 0.0278341 1 ||| ||| 1
+is appealing . [X] ||| Berufung geht . [X] ||| 0.0278341 1 ||| ||| 0.5
+is appealing [X] ||| Berufung geht [X] ||| 0.0278341 1 ||| ||| 1
+visited [X] ||| Besuch [X] ||| 0.0278341 1 ||| ||| 1
+visited [X] ||| Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 1
+had visited [X] ||| Besuch abgestattet hatte [X] ||| 0.0278341 1 ||| ||| 1
+bomb explosions and killings [X] ||| Bombenexplosionen mit zahlreichen Toten [X] ||| 0.0167005 1 ||| ||| 0.833333
+of bomb explosions and killings [X] ||| Bombenexplosionen mit zahlreichen Toten [X] ||| 0.0111336 1 ||| ||| 0.833333
+bomb explosions and [X] ||| Bombenexplosionen mit zahlreichen [X] ||| 0.013917 1 ||| ||| 2
+of bomb explosions and [X] ||| Bombenexplosionen mit zahlreichen [X] ||| 0.013917 1 ||| ||| 2
+Bush , [X] ||| Bush , [X] ||| 0.0278341 1 ||| ||| 1
+Bush , who [X] ||| Bush , der [X] ||| 0.0278341 1 ||| ||| 0.333333
+Bush [X] ||| Bush [X] ||| 0.0278341 1 ||| ||| 1
+Bush [X][X] [X] ||| Bush [X][X] [X] ||| 0.0278341 1 ||| ||| 0.333333
+Cunha report [X] ||| Cunha-Bericht [X] ||| 0.0278341 1 ||| ||| 1
+Cunha report [X][X] [X] ||| Cunha-Bericht [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.037037
+Cunha report [X][X] [X] ||| Cunha-Bericht [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0285714
+Cunha report [X][X] guidance programmes [X] ||| Cunha-Bericht [X][X] Ausrichtungsprogramme [X] ||| 0.0278341 1 ||| ||| 0.1
+Cunha report [X][X] [X] ||| Cunha-Bericht [X][X] [X] ||| 0.0243923 1 ||| ||| 0.622086
+Cunha report [X][X] comes [X] ||| Cunha-Bericht [X][X] [X] ||| 0.00344178 1 ||| ||| 0.622086
+Cunha report [X][X] before [X] ||| Cunha-Bericht [X][X] befassen , [X] ||| 0.013917 1 ||| ||| 0.074074
+Cunha report [X][X] comes before [X] ||| Cunha-Bericht [X][X] befassen , [X] ||| 0.013917 1 ||| ||| 0.074074
+Cunha report [X][X] before [X] ||| Cunha-Bericht [X][X] befassen , der [X] ||| 0.013917 1 ||| ||| 0.0571428
+Cunha report [X][X] comes before [X] ||| Cunha-Bericht [X][X] befassen , der [X] ||| 0.013917 1 ||| ||| 0.0571428
+Cunha report [X][X] before [X] ||| Cunha-Bericht [X][X] befassen [X] ||| 0.013917 1 ||| ||| 0.105263
+Cunha report [X][X] comes before [X] ||| Cunha-Bericht [X][X] befassen [X] ||| 0.013917 1 ||| ||| 0.105263
+Cunha report [X][X] [X] ||| Cunha-Bericht [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0285714
+Cunha report on [X] ||| Cunha-Bericht über [X] ||| 0.0278341 1 ||| ||| 0.5
+Cunha report on [X][X] [X] ||| Cunha-Bericht über [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.037037
+Cunha report on [X][X] [X] ||| Cunha-Bericht über [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0285714
+Cunha report on [X][X] [X] ||| Cunha-Bericht über [X][X] [X] ||| 0.0220798 1 ||| ||| 0.372086
+Cunha report on [X][X] comes [X] ||| Cunha-Bericht über [X][X] [X] ||| 0.00575427 1 ||| ||| 0.372086
+Cunha report on [X][X] before [X] ||| Cunha-Bericht über [X][X] befassen , [X] ||| 0.0278341 1 ||| ||| 0.037037
+Cunha report on [X][X] before [X] ||| Cunha-Bericht über [X][X] befassen , der [X] ||| 0.0278341 1 ||| ||| 0.0285714
+Cunha report on [X][X] before [X] ||| Cunha-Bericht über [X][X] befassen [X] ||| 0.0278341 1 ||| ||| 0.0526316
+Cunha report on [X][X] [X] ||| Cunha-Bericht über [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0285714
+Cunha report on multiannual [X] ||| Cunha-Bericht über mehrjährige [X] ||| 0.0278341 1 ||| ||| 0.25
+Cunha report on multiannual [X][X] [X] ||| Cunha-Bericht über mehrjährige [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.037037
+Cunha report on multiannual [X][X] [X] ||| Cunha-Bericht über mehrjährige [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0285714
+Cunha report on multiannual [X][X] [X] ||| Cunha-Bericht über mehrjährige [X][X] [X] ||| 0.0278341 1 ||| ||| 0.295163
+Cunha report on multiannual [X][X] [X] ||| Cunha-Bericht über mehrjährige [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0285714
+[X][X] to [X] ||| Dokument [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] to [X][X] [X] ||| Dokument [X][X] bei [X][X] [X] ||| 0.0278341 1 ||| ||| 0.099537
+[X][X] to [X][X] merely [X] ||| Dokument [X][X] bei [X][X] lediglich um [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] to what [X] ||| Dokument [X][X] bei dem es [X] ||| 0.0278341 1 ||| ||| 0.111111
+[X][X] to what [X][X] [X] ||| Dokument [X][X] bei dem es [X][X] [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] to what is [X] ||| Dokument [X][X] bei dem es sich [X] ||| 0.0278341 1 ||| ||| 0.0625
+[X][X] to what is merely [X] ||| Dokument [X][X] bei dem es sich lediglich um [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] what [X] ||| Dokument [X][X] dem es [X] ||| 0.0278341 1 ||| ||| 0.111111
+[X][X] what [X][X] [X] ||| Dokument [X][X] dem es [X][X] [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] what is [X] ||| Dokument [X][X] dem es sich [X] ||| 0.0278341 1 ||| ||| 0.0625
+[X][X] what is merely [X] ||| Dokument [X][X] dem es sich lediglich um [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] merely [X] ||| Dokument [X][X] lediglich um [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] is [X] ||| Dokument [X][X] sich [X] ||| 0.0278341 1 ||| ||| 0.0625
+[X][X] is merely [X] ||| Dokument [X][X] sich lediglich um [X] ||| 0.0278341 1 ||| ||| 0.037037
+of [X] ||| Dokument zu [X] ||| 0.0278341 1 ||| ||| 1
+of [X][X] [X] ||| Dokument zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.910648
+of [X][X] to [X] ||| Dokument zu [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.2
+of [X][X] to [X][X] [X] ||| Dokument zu [X][X] bei [X][X] [X] ||| 0.0278341 1 ||| ||| 0.099537
+of [X][X] to [X][X] merely [X] ||| Dokument zu [X][X] bei [X][X] lediglich um [X] ||| 0.0278341 1 ||| ||| 0.037037
+of [X][X] to what [X] ||| Dokument zu [X][X] bei dem es [X] ||| 0.0278341 1 ||| ||| 0.111111
+of [X][X] to what [X][X] [X] ||| Dokument zu [X][X] bei dem es [X][X] [X] ||| 0.0278341 1 ||| ||| 0.037037
+of [X][X] to what is [X] ||| Dokument zu [X][X] bei dem es sich [X] ||| 0.0278341 1 ||| ||| 0.0625
+of [X][X] what [X] ||| Dokument zu [X][X] dem es [X] ||| 0.0278341 1 ||| ||| 0.111111
+of [X][X] what [X][X] [X] ||| Dokument zu [X][X] dem es [X][X] [X] ||| 0.0278341 1 ||| ||| 0.037037
+of [X][X] what is [X] ||| Dokument zu [X][X] dem es sich [X] ||| 0.0278341 1 ||| ||| 0.0625
+of [X][X] what is merely [X] ||| Dokument zu [X][X] dem es sich lediglich um [X] ||| 0.0278341 1 ||| ||| 0.037037
+of [X][X] merely [X] ||| Dokument zu [X][X] lediglich um [X] ||| 0.0278341 1 ||| ||| 0.037037
+of [X][X] is [X] ||| Dokument zu [X][X] sich [X] ||| 0.0278341 1 ||| ||| 0.0625
+of [X][X] is merely [X] ||| Dokument zu [X][X] sich lediglich um [X] ||| 0.0278341 1 ||| ||| 0.037037
+of that kind [X] ||| Dokument zu erheben , [X] ||| 0.0278341 1 ||| ||| 0.5
+of that kind [X][X] [X] ||| Dokument zu erheben , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.210648
+of that kind [X][X] merely [X] ||| Dokument zu erheben , [X][X] lediglich um [X] ||| 0.0278341 1 ||| ||| 0.037037
+of that kind [X][X] is [X] ||| Dokument zu erheben , [X][X] sich [X] ||| 0.0278341 1 ||| ||| 0.0625
+of that kind to [X] ||| Dokument zu erheben , bei [X] ||| 0.0278341 1 ||| ||| 0.2
+of that kind to [X][X] [X] ||| Dokument zu erheben , bei [X][X] [X] ||| 0.0278341 1 ||| ||| 0.099537
+of that kind to what [X] ||| Dokument zu erheben , bei dem es [X] ||| 0.0278341 1 ||| ||| 0.111111
+Thursday [X] ||| Donnerstag [X] ||| 0.00927803 1 ||| ||| 3
+Thursday prior [X] ||| Donnerstag [X] ||| 0.00927803 1 ||| ||| 3
+next Thursday [X] ||| Donnerstag [X] ||| 0.00927803 1 ||| ||| 3
+Thursday prior [X][X] presentation [X] ||| Donnerstag [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.0909091
+Thursday prior [X][X] presentation [X][X] [X] ||| Donnerstag [X][X] Aussprache [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+Thursday prior [X][X] presentation of [X] ||| Donnerstag [X][X] Aussprache über [X] ||| 0.0278341 1 ||| ||| 0.0666667
+Thursday prior [X][X] [X] ||| Donnerstag [X][X] [X] ||| 0.0278341 1 ||| ||| 0.487985
+Thursday prior [X][X] the [X] ||| Donnerstag [X][X] den [X] ||| 0.0278341 1 ||| ||| 0.0526316
+Thursday prior [X][X] of the [X] ||| Donnerstag [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.111111
+Thursday prior [X][X] of [X] ||| Donnerstag [X][X] über [X] ||| 0.0278341 1 ||| ||| 0.0666667
+Thursday prior [X][X] of the [X] ||| Donnerstag [X][X] über den [X] ||| 0.0278341 1 ||| ||| 0.0526316
+Thursday [X] ||| Donnerstag dieser Woche [X] ||| 0.013917 1 ||| ||| 2
+next Thursday [X] ||| Donnerstag dieser Woche [X] ||| 0.013917 1 ||| ||| 2
+Thursday [X] ||| Donnerstag dieser [X] ||| 0.013917 1 ||| ||| 2
+next Thursday [X] ||| Donnerstag dieser [X] ||| 0.013917 1 ||| ||| 2
+Thursday prior to the start [X] ||| Donnerstag zu Beginn [X] ||| 0.0278341 1 ||| ||| 0.166667
+Thursday prior to [X] ||| Donnerstag zu [X] ||| 0.0278341 1 ||| ||| 0.5
+Thursday prior to [X][X] presentation [X] ||| Donnerstag zu [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.0909091
+Thursday prior to [X][X] [X] ||| Donnerstag zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.487985
+Thursday prior to [X][X] the [X] ||| Donnerstag zu [X][X] den [X] ||| 0.0278341 1 ||| ||| 0.0526316
+Thursday prior to [X][X] of [X] ||| Donnerstag zu [X][X] über [X] ||| 0.0278341 1 ||| ||| 0.0666667
+objection [X] ||| Einwand gegen [X] ||| 0.0278341 1 ||| ||| 1
+resolutions [X] ||| Entschließungen [X] ||| 0.0278341 1 ||| ||| 1
+findings [X] ||| Ergebnissen [X] ||| 0.0278341 1 ||| ||| 1
+European Parliament [X] ||| Europäischen Parlament [X] ||| 0.241419 1 ||| ||| 2
+European Parliament [X][X] European Community [X] ||| Europäischen Parlament [X][X] Europäischen Union [X] ||| 0.0278341 1 ||| ||| 0.0181818
+European Parliament [X][X] European [X] ||| Europäischen Parlament [X][X] Europäischen [X] ||| 0.013917 1 ||| ||| 0.0444444
+European Parliament [X][X] the European [X] ||| Europäischen Parlament [X][X] Europäischen [X] ||| 0.013917 1 ||| ||| 0.0444444
+European Parliament [X][X] months ago [X] ||| Europäischen Parlament [X][X] Monaten [X] ||| 0.0278341 1 ||| ||| 0.0555556
+European Parliament [X][X] months ago [X] ||| Europäischen Parlament [X][X] Monaten einen [X] ||| 0.0278341 1 ||| ||| 0.0344828
+European Parliament [X][X] Community [X] ||| Europäischen Parlament [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0181818
+European Parliament [X][X] [X] ||| Europäischen Parlament [X][X] [X] ||| 0.0238036 1 ||| ||| 0.692186
+European Parliament [X][X] of [X] ||| Europäischen Parlament [X][X] [X] ||| 0.00143614 1 ||| ||| 0.692186
+European Parliament [X][X] of the [X] ||| Europäischen Parlament [X][X] [X] ||| 0.00129716 1 ||| ||| 0.692186
+European Parliament [X][X] the [X] ||| Europäischen Parlament [X][X] [X] ||| 0.00129716 1 ||| ||| 0.692186
+European Parliament [X][X] of [X][X] [X] ||| Europäischen Parlament [X][X] [X][X] [X] ||| 0.0191959 1 ||| ||| 0.0585858
+European Parliament [X][X] the [X][X] [X] ||| Europäischen Parlament [X][X] [X][X] [X] ||| 0.00863817 1 ||| ||| 0.0585858
+European Parliament [X][X] the [X] ||| Europäischen Parlament [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0909091
+European Parliament [X][X] the [X][X] [X] ||| Europäischen Parlament [X][X] der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.108376
+European Parliament [X][X] the whole [X] ||| Europäischen Parlament [X][X] der gesamten [X] ||| 0.0278341 1 ||| ||| 0.0526316
+European Parliament [X][X] [X] ||| Europäischen Parlament [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0344828
+European Parliament [X][X] whole [X] ||| Europäischen Parlament [X][X] gesamten [X] ||| 0.016582 1 ||| ||| 0.0883459
+European Parliament [X][X] whole of [X] ||| Europäischen Parlament [X][X] gesamten [X] ||| 0.0112521 1 ||| ||| 0.0883459
+European Parliament [X][X] whole [X][X] [X] ||| Europäischen Parlament [X][X] gesamten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.040404
+European Parliament just [X] ||| Europäischen Parlament erst [X] ||| 0.0278341 1 ||| ||| 0.333333
+European Parliament just [X][X] [X] ||| Europäischen Parlament erst [X][X] [X] ||| 0.0278341 1 ||| ||| 0.173372
+European Parliament just [X][X] [X] ||| Europäischen Parlament erst [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0344828
+European Parliament just [X] ||| Europäischen Parlament erst vor [X] ||| 0.0278341 1 ||| ||| 0.25
+European Parliament just [X][X] [X] ||| Europäischen Parlament erst vor [X][X] [X] ||| 0.0278341 1 ||| ||| 0.173372
+European Parliament just [X][X] [X] ||| Europäischen Parlament erst vor [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0344828
+European Parliament just a few [X] ||| Europäischen Parlament erst vor wenigen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+European Parliament and [X] ||| Europäischen Parlament und [X] ||| 0.0278341 1 ||| ||| 0.333333
+European Parliament and [X][X] European [X] ||| Europäischen Parlament und [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.0222222
+European Parliament and [X][X] Community [X] ||| Europäischen Parlament und [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0181818
+European Parliament and [X][X] [X] ||| Europäischen Parlament und [X][X] [X] ||| 0.0219197 1 ||| ||| 0.319889
+European Parliament and [X][X] of [X] ||| Europäischen Parlament und [X][X] [X] ||| 0.00310756 1 ||| ||| 0.319889
+European Parliament and [X][X] the [X] ||| Europäischen Parlament und [X][X] [X] ||| 0.00280683 1 ||| ||| 0.319889
+European Parliament and [X][X] whole [X] ||| Europäischen Parlament und [X][X] gesamten [X] ||| 0.0278341 1 ||| ||| 0.0526316
+European Parliament and by [X] ||| Europäischen Parlament und von [X] ||| 0.0278341 1 ||| ||| 0.166667
+European Parliament and by [X][X] [X] ||| Europäischen Parlament und von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.161008
+European Parliament and by the [X] ||| Europäischen Parlament und von der [X] ||| 0.0278341 1 ||| ||| 0.0909091
+European Parliament , [X] ||| Europäischen Parlaments [X] ||| 0.00668018 1 ||| ||| 2.08333
+European Parliament , a [X] ||| Europäischen Parlaments [X] ||| 0.00445345 1 ||| ||| 2.08333
+European Parliament , a date [X] ||| Europäischen Parlaments [X] ||| 0.00334009 1 ||| ||| 2.08333
+European Parliament [X] ||| Europäischen Parlaments [X] ||| 0.0133604 1 ||| ||| 2.08333
+European Community [X] ||| Europäischen Union [X] ||| 0.0098238 1 ||| ||| 2.83333
+European Union [X] ||| Europäischen Union [X] ||| 0.0098238 1 ||| ||| 2.83333
+of the European Community [X] ||| Europäischen Union [X] ||| 0.0032746 1 ||| ||| 2.83333
+the European Community [X] ||| Europäischen Union [X] ||| 0.0049119 1 ||| ||| 2.83333
+European [X] ||| Europäischen [X] ||| 0.714286 1 ||| ||| 7
+of the European [X] ||| Europäischen [X] ||| 0.0039763 1 ||| ||| 7
+the European [X] ||| Europäischen [X] ||| 0.0039763 1 ||| ||| 7
+European [X][X] European Community [X] ||| Europäischen [X][X] Europäischen Union [X] ||| 0.013917 1 ||| ||| 0.0363636
+European [X][X] the European Community [X] ||| Europäischen [X][X] Europäischen Union [X] ||| 0.013917 1 ||| ||| 0.0363636
+European [X][X] European [X] ||| Europäischen [X][X] Europäischen [X] ||| 0.00927803 1 ||| ||| 0.0666666
+European [X][X] of the European [X] ||| Europäischen [X][X] Europäischen [X] ||| 0.00927803 1 ||| ||| 0.0666666
+European [X][X] the European [X] ||| Europäischen [X][X] Europäischen [X] ||| 0.00927803 1 ||| ||| 0.0666666
+European [X][X] months ago [X] ||| Europäischen [X][X] Monaten [X] ||| 0.0278341 1 ||| ||| 0.0555556
+European [X][X] months ago [X] ||| Europäischen [X][X] Monaten einen [X] ||| 0.0278341 1 ||| ||| 0.0344828
+European [X][X] Community [X] ||| Europäischen [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0181818
+European [X][X] [X] ||| Europäischen [X][X] [X] ||| 0.512136 1 ||| ||| 6.52552
+European [X][X] a [X] ||| Europäischen [X][X] [X] ||| 0.00142181 1 ||| ||| 6.52552
+European [X][X] a date [X] ||| Europäischen [X][X] [X] ||| 0.00106636 1 ||| ||| 6.52552
+European [X][X] a date has [X] ||| Europäischen [X][X] [X] ||| 0.00106636 1 ||| ||| 6.52552
+European [X][X] been [X] ||| Europäischen [X][X] [X] ||| 0.00106636 1 ||| ||| 6.52552
+European [X][X] been set [X] ||| Europäischen [X][X] [X] ||| 0.00106636 1 ||| ||| 6.52552
+European [X][X] date [X] ||| Europäischen [X][X] [X] ||| 0.00106636 1 ||| ||| 6.52552
+European [X][X] date has [X] ||| Europäischen [X][X] [X] ||| 0.00106636 1 ||| ||| 6.52552
+European [X][X] date has been [X] ||| Europäischen [X][X] [X] ||| 0.00106636 1 ||| ||| 6.52552
+European [X][X] has [X] ||| Europäischen [X][X] [X] ||| 0.00106636 1 ||| ||| 6.52552
+European [X][X] has been [X] ||| Europäischen [X][X] [X] ||| 0.00106636 1 ||| ||| 6.52552
+European [X][X] has been set [X] ||| Europäischen [X][X] [X] ||| 0.00106636 1 ||| ||| 6.52552
+European [X][X] of [X] ||| Europäischen [X][X] [X] ||| 0.000152337 1 ||| ||| 6.52552
+European [X][X] of the [X] ||| Europäischen [X][X] [X] ||| 0.000137595 1 ||| ||| 6.52552
+European [X][X] set [X] ||| Europäischen [X][X] [X] ||| 0.00106636 1 ||| ||| 6.52552
+European [X][X] the [X] ||| Europäischen [X][X] [X] ||| 0.000137595 1 ||| ||| 6.52552
+European [X][X] of [X][X] Community [X] ||| Europäischen [X][X] [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0181818
+European [X][X] of [X][X] [X] ||| Europäischen [X][X] [X][X] [X] ||| 0.0146495 1 ||| ||| 0.0767676
+European [X][X] of the [X][X] [X] ||| Europäischen [X][X] [X][X] [X] ||| 0.00659229 1 ||| ||| 0.0767676
+European [X][X] the [X][X] [X] ||| Europäischen [X][X] [X][X] [X] ||| 0.00659229 1 ||| ||| 0.0767676
+European [X][X] the [X] ||| Europäischen [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0909091
+European [X][X] the [X][X] European [X] ||| Europäischen [X][X] der [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.0222222
+European [X][X] the [X][X] Community [X] ||| Europäischen [X][X] der [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0181818
+European [X][X] the [X][X] [X] ||| Europäischen [X][X] der [X][X] [X] ||| 0.0214496 1 ||| ||| 0.140634
+European [X][X] the [X][X] the [X] ||| Europäischen [X][X] der [X][X] [X] ||| 0.00638448 1 ||| ||| 0.140634
+European [X][X] the whole [X] ||| Europäischen [X][X] der gesamten [X] ||| 0.016582 1 ||| ||| 0.0883459
+European [X][X] the whole of [X] ||| Europäischen [X][X] der gesamten [X] ||| 0.0112521 1 ||| ||| 0.0883459
+European [X][X] the whole [X][X] [X] ||| Europäischen [X][X] der gesamten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.040404
+European [X][X] [X] ||| Europäischen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0344828
+European [X][X] whole [X] ||| Europäischen [X][X] gesamten [X] ||| 0.0121468 1 ||| ||| 0.120604
+European [X][X] whole of [X] ||| Europäischen [X][X] gesamten [X] ||| 0.00824247 1 ||| ||| 0.120604
+European [X][X] whole of the [X] ||| Europäischen [X][X] gesamten [X] ||| 0.00744482 1 ||| ||| 0.120604
+European [X][X] whole [X][X] Community [X] ||| Europäischen [X][X] gesamten [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0181818
+European [X][X] whole [X][X] [X] ||| Europäischen [X][X] gesamten [X][X] [X] ||| 0.013917 1 ||| ||| 0.080808
+European [X][X] whole of [X][X] [X] ||| Europäischen [X][X] gesamten [X][X] [X] ||| 0.013917 1 ||| ||| 0.080808
+European [X][X] by [X] ||| Europäischen [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.166667
+European [X][X] by [X][X] European [X] ||| Europäischen [X][X] von [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.0222222
+European [X][X] by [X][X] Community [X] ||| Europäischen [X][X] von [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0181818
+European [X][X] by [X][X] [X] ||| Europäischen [X][X] von [X][X] [X] ||| 0.0195716 1 ||| ||| 0.22898
+European [X][X] by [X][X] of [X] ||| Europäischen [X][X] von [X][X] [X] ||| 0.00434131 1 ||| ||| 0.22898
+European [X][X] by [X][X] the [X] ||| Europäischen [X][X] von [X][X] [X] ||| 0.00392119 1 ||| ||| 0.22898
+European [X][X] by the [X] ||| Europäischen [X][X] von der [X] ||| 0.0278341 1 ||| ||| 0.0909091
+European [X][X] by the [X][X] [X] ||| Europäischen [X][X] von der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.108376
+European [X][X] by the whole [X] ||| Europäischen [X][X] von der gesamten [X] ||| 0.0278341 1 ||| ||| 0.0526316
+European [X][X] [X] ||| Europäischen [X][X] vor [X] ||| 0.0278341 1 ||| ||| 0.25
+European [X][X] a few [X] ||| Europäischen [X][X] vor wenigen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+European [X][X] a few [X][X] [X] ||| Europäischen [X][X] vor wenigen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0900383
+European [X][X] a few [X][X] [X] ||| Europäischen [X][X] vor wenigen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0344828
+European [X][X] a few [X] ||| Europäischen [X][X] wenigen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+European [X][X] a few [X][X] [X] ||| Europäischen [X][X] wenigen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0900383
+European [X][X] a few [X][X] [X] ||| Europäischen [X][X] wenigen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0344828
+Evans , [X] ||| Evans , [X] ||| 0.0278341 1 ||| ||| 1
+Evans , [X][X] [X] ||| Evans , [X][X] [X] ||| 0.0256947 1 ||| ||| 0.35163
+Evans , [X][X] you [X] ||| Evans , [X][X] [X] ||| 0.00213939 1 ||| ||| 0.35163
+Evans , [X][X] initiative [X][X] [X] ||| Evans , [X][X] [X][X] Initiative [X] ||| 0.0278341 1 ||| ||| 0.067027
+Evans , [X][X] an [X] ||| Evans , [X][X] eine [X] ||| 0.0278341 1 ||| ||| 0.0909091
+Evans , [X][X] an [X][X] [X] ||| Evans , [X][X] eine [X][X] [X] ||| 0.0278341 1 ||| ||| 0.067027
+Evans , I [X] ||| Evans , ich [X] ||| 0.0278341 1 ||| ||| 0.333333
+Evans , I [X][X] [X] ||| Evans , ich [X][X] [X] ||| 0.0237669 1 ||| ||| 0.184963
+Evans , I [X][X] you [X] ||| Evans , ich [X][X] [X] ||| 0.00406715 1 ||| ||| 0.184963
+Evans , I feel [X] ||| Evans , ich denke , daß [X] ||| 0.0278341 1 ||| ||| 0.166667
+Evans , I feel [X][X] [X] ||| Evans , ich denke , daß [X][X] [X] ||| 0.0278341 1 ||| ||| 0.067027
+Evans , I feel an [X] ||| Evans , ich denke , daß eine [X] ||| 0.0278341 1 ||| ||| 0.0909091
+Evans [X] ||| Evans [X] ||| 0.160946 1 ||| ||| 3
+Evans has [X] ||| Evans [X] ||| 0.00927803 1 ||| ||| 3
+Evans [X][X] [X] ||| Evans [X][X] [X] ||| 0.0267358 1 ||| ||| 0.684963
+Evans [X][X] you [X] ||| Evans [X][X] [X] ||| 0.00109827 1 ||| ||| 0.684963
+Evans [X][X] initiative [X][X] [X] ||| Evans [X][X] [X][X] Initiative [X] ||| 0.011582 1 ||| ||| 0.161081
+Evans [X][X] initiative [X][X] you [X] ||| Evans [X][X] [X][X] Initiative [X] ||| 0.00467015 1 ||| ||| 0.161081
+Evans [X][X] initiative of [X][X] [X] ||| Evans [X][X] [X][X] Initiative [X] ||| 0.011582 1 ||| ||| 0.161081
+Evans [X][X] feel [X] ||| Evans [X][X] denke , daß [X] ||| 0.0278341 1 ||| ||| 0.166667
+Evans [X][X] feel [X][X] [X] ||| Evans [X][X] denke , daß [X][X] [X] ||| 0.0198358 1 ||| ||| 0.094054
+Evans [X][X] feel [X][X] you [X] ||| Evans [X][X] denke , daß [X][X] [X] ||| 0.0079983 1 ||| ||| 0.094054
+Evans [X][X] feel an [X] ||| Evans [X][X] denke , daß eine [X] ||| 0.0278341 1 ||| ||| 0.0909091
+Evans [X][X] feel an [X][X] [X] ||| Evans [X][X] denke , daß eine [X][X] [X] ||| 0.0278341 1 ||| ||| 0.067027
+Evans [X][X] an [X] ||| Evans [X][X] eine [X] ||| 0.0278341 1 ||| ||| 0.0909091
+Evans [X][X] an initiative [X][X] [X] ||| Evans [X][X] eine [X][X] Initiative [X] ||| 0.0278341 1 ||| ||| 0.067027
+Evans [X][X] an [X][X] [X] ||| Evans [X][X] eine [X][X] [X] ||| 0.0198358 1 ||| ||| 0.094054
+Evans [X][X] an [X][X] you [X] ||| Evans [X][X] eine [X][X] [X] ||| 0.0079983 1 ||| ||| 0.094054
+case [X] ||| Fall [X] ||| 0.57504 1 ||| ||| 3
+case [X][X] . [X] ||| Fall [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0909091
+case [X][X] Nikitin . [X] ||| Fall [X][X] Nikitin . [X] ||| 0.0278341 1 ||| ||| 0.0909091
+case [X][X] Nikitin [X] ||| Fall [X][X] Nikitin [X] ||| 0.0278341 1 ||| ||| 0.166667
+case [X][X] [X] ||| Fall [X][X] [X] ||| 0.0278341 1 ||| ||| 0.590909
+case of Alexander Nikitin . [X] ||| Fall von Alexander Nikitin . [X] ||| 0.0278341 1 ||| ||| 0.0909091
+case of Alexander Nikitin [X] ||| Fall von Alexander Nikitin [X] ||| 0.0278341 1 ||| ||| 0.166667
+case of Alexander [X] ||| Fall von Alexander [X] ||| 0.0278341 1 ||| ||| 0.333333
+case of Alexander [X][X] [X] ||| Fall von Alexander [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0909091
+case of [X] ||| Fall von [X] ||| 0.0278341 1 ||| ||| 1
+case of [X][X] . [X] ||| Fall von [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0909091
+case of [X][X] [X] ||| Fall von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.257576
+fisheries policy [X] ||| Fischereipolitik darstellt [X] ||| 0.0278341 1 ||| ||| 1
+fisheries policy [X][X] [X] ||| Fischereipolitik darstellt [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0454545
+fisheries policy [X][X] proposal [X] ||| Fischereipolitik darstellt [X][X] Vorschlag [X] ||| 0.0278341 1 ||| ||| 0.125
+fisheries policy [X][X] proposal [X][X] [X] ||| Fischereipolitik darstellt [X][X] Vorschlag [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0454545
+fisheries policy [X][X] proposal [X][X] [X] ||| Fischereipolitik darstellt [X][X] Vorschlag [X][X] [X] ||| 0.0278341 1 ||| ||| 0.128788
+fisheries policy [X][X] [X] ||| Fischereipolitik darstellt [X][X] [X] ||| 0.0278341 1 ||| ||| 0.503788
+fisheries policy and [X] ||| Fischereipolitik darstellt und [X] ||| 0.0278341 1 ||| ||| 0.5
+fisheries policy and [X][X] [X] ||| Fischereipolitik darstellt und [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0454545
+fisheries policy and [X][X] [X] ||| Fischereipolitik darstellt und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.253788
+fisheries policy and a proposal [X] ||| Fischereipolitik darstellt und ein Vorschlag [X] ||| 0.0278341 1 ||| ||| 0.125
+fisheries policy and a [X] ||| Fischereipolitik darstellt und ein [X] ||| 0.0278341 1 ||| ||| 0.25
+fisheries policy and a [X][X] [X] ||| Fischereipolitik darstellt und ein [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0454545
+fisheries policy and a [X][X] [X] ||| Fischereipolitik darstellt und ein [X][X] [X] ||| 0.0278341 1 ||| ||| 0.128788
+question [X] ||| Frage [X] ||| 0.241419 1 ||| ||| 2
+question [X][X] that [X] ||| Frage [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.1
+question [X][X] [X] ||| Frage [X][X] [X] ||| 0.0278341 1 ||| ||| 0.766667
+question [X][X] something that [X] ||| Frage [X][X] eine Angelegenheit , die [X] ||| 0.0278341 1 ||| ||| 0.1
+question [X][X] something [X] ||| Frage [X][X] eine Angelegenheit [X] ||| 0.0278341 1 ||| ||| 0.166667
+question relates [X] ||| Frage betrifft [X] ||| 0.0185561 1 ||| ||| 1.5
+question relates to [X] ||| Frage betrifft [X] ||| 0.00927803 1 ||| ||| 1.5
+question relates [X][X] that [X] ||| Frage betrifft [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.1
+question relates [X][X] [X] ||| Frage betrifft [X][X] [X] ||| 0.020243 1 ||| ||| 0.366667
+question relates to [X][X] [X] ||| Frage betrifft [X][X] [X] ||| 0.00759111 1 ||| ||| 0.366667
+question relates to something that [X] ||| Frage betrifft eine Angelegenheit , die [X] ||| 0.0278341 1 ||| ||| 0.1
+question relates to something [X] ||| Frage betrifft eine Angelegenheit [X] ||| 0.0278341 1 ||| ||| 0.166667
+Madam President , [X] ||| Frau Präsidentin ! [X] ||| 0.0278341 1 ||| ||| 0.5
+Madam President , [X][X] [X] ||| Frau Präsidentin ! [X][X] Sie [X] ||| 0.0278341 1 ||| ||| 0.0769231
+Madam President , [X][X] [X] ||| Frau Präsidentin ! [X][X] [X] ||| 0.0278341 1 ||| ||| 0.201923
+Madam President , I [X] ||| Frau Präsidentin ! ich [X] ||| 0.0278341 1 ||| ||| 0.25
+Madam President , I [X][X] [X] ||| Frau Präsidentin ! ich [X][X] Sie [X] ||| 0.0278341 1 ||| ||| 0.0769231
+Madam President , I [X][X] [X] ||| Frau Präsidentin ! ich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.201923
+Madam President , [X] ||| Frau Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.999999
+Madam President , [X][X] . [X] ||| Frau Präsidentin , [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.125
+Madam President , [X][X] [X] ||| Frau Präsidentin , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.347222
+Madam President , [X] ||| Frau Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.25
+Madam President , on [X] ||| Frau Präsidentin , zur [X] ||| 0.0278341 1 ||| ||| 0.333334
+Madam President , on [X][X] [X] ||| Frau Präsidentin , zur [X][X] [X] ||| 0.0278341 1 ||| ||| 0.347222
+Madam President [X] ||| Frau Präsidentin [X] ||| 0.57504 1 ||| ||| 3
+Madam President [X][X] . [X] ||| Frau Präsidentin [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.125
+Madam President [X][X] [X] ||| Frau Präsidentin [X][X] [X] ||| 0.0278341 1 ||| ||| 0.680556
+Madam [X] ||| Frau [X] ||| 1 1 ||| ||| 4
+Madam [X][X] . [X] ||| Frau [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.125
+Madam [X][X] [X] ||| Frau [X][X] Sie [X] ||| 0.0278341 1 ||| ||| 0.0769231
+Madam [X][X] [X] ||| Frau [X][X] [X] ||| 0.57504 1 ||| ||| 2.88248
+Madam [X][X] [X] ||| Frau [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.25
+Madam [X][X] I [X] ||| Frau [X][X] ich [X] ||| 0.0278341 1 ||| ||| 0.25
+Madam [X][X] I [X][X] [X] ||| Frau [X][X] ich [X][X] Sie [X] ||| 0.0278341 1 ||| ||| 0.0769231
+Madam [X][X] I [X][X] [X] ||| Frau [X][X] ich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.201923
+Madam [X][X] should like to [X] ||| Frau [X][X] möchte Sie [X] ||| 0.0278341 1 ||| ||| 0.0769231
+Madam [X][X] should like to [X] ||| Frau [X][X] möchte [X] ||| 0.0278341 1 ||| ||| 0.125
+Madam [X][X] on [X] ||| Frau [X][X] zur [X] ||| 0.0278341 1 ||| ||| 0.333334
+Madam [X][X] on [X][X] . [X] ||| Frau [X][X] zur [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.125
+Madam [X][X] on [X][X] [X] ||| Frau [X][X] zur [X][X] [X] ||| 0.0278341 1 ||| ||| 0.347222
+courts [X] ||| Gericht [X] ||| 0.013917 1 ||| ||| 2
+courts have [X] ||| Gericht [X] ||| 0.013917 1 ||| ||| 2
+courts [X][X] that [X] ||| Gericht [X][X] , daß [X] ||| 0.013917 1 ||| ||| 0.095238
+courts have [X][X] that [X] ||| Gericht [X][X] , daß [X] ||| 0.013917 1 ||| ||| 0.095238
+courts [X][X] [X] ||| Gericht [X][X] [X] ||| 0.013917 1 ||| ||| 0.85635
+courts have [X][X] [X] ||| Gericht [X][X] [X] ||| 0.013917 1 ||| ||| 0.85635
+courts [X][X] made [X][X] that [X] ||| Gericht [X][X] [X][X] gemacht hat , daß [X] ||| 0.0278341 1 ||| ||| 0.047619
+courts [X][X] made [X][X] [X] ||| Gericht [X][X] [X][X] gemacht hat [X] ||| 0.013917 1 ||| ||| 0.111111
+courts have [X][X] made [X][X] [X] ||| Gericht [X][X] [X][X] gemacht hat [X] ||| 0.013917 1 ||| ||| 0.111111
+courts [X][X] made it clear [X] ||| Gericht [X][X] deutlich gemacht hat [X] ||| 0.0278341 1 ||| ||| 0.0555556
+courts [X][X] and [X] ||| Gericht [X][X] und [X] ||| 0.013917 1 ||| ||| 0.25
+courts have [X][X] and [X] ||| Gericht [X][X] und [X] ||| 0.013917 1 ||| ||| 0.25
+courts [X][X] and [X][X] that [X] ||| Gericht [X][X] und [X][X] , daß [X] ||| 0.0278341 1 ||| ||| 0.047619
+courts [X][X] and [X][X] [X] ||| Gericht [X][X] und [X][X] [X] ||| 0.013917 1 ||| ||| 0.20635
+courts have [X][X] and [X][X] [X] ||| Gericht [X][X] und [X][X] [X] ||| 0.013917 1 ||| ||| 0.20635
+courts [X][X] and made [X][X] [X] ||| Gericht [X][X] und [X][X] gemacht hat [X] ||| 0.0278341 1 ||| ||| 0.0555556
+courts [X][X] him [X] ||| Gericht ihn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+courts [X][X] him [X][X] that [X] ||| Gericht ihn [X][X] [X][X] , daß [X] ||| 0.0278341 1 ||| ||| 0.047619
+courts [X][X] him [X][X] [X] ||| Gericht ihn [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.103175
+courts [X][X] him and [X] ||| Gericht ihn [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.125
+courts [X][X] him and [X][X] [X] ||| Gericht ihn [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.103175
+courts have acquitted him [X] ||| Gericht ihn freigesprochen [X] ||| 0.0278341 1 ||| ||| 0.2
+courts have acquitted him [X][X] [X] ||| Gericht ihn freigesprochen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.103175
+courts have acquitted him and [X] ||| Gericht ihn freigesprochen und [X] ||| 0.0278341 1 ||| ||| 0.125
+a point of order . [X] ||| Geschäftsordnung . [X] ||| 0.0278341 1 ||| ||| 1
+a point of order [X] ||| Geschäftsordnung [X] ||| 0.241419 1 ||| ||| 2
+Governor [X] ||| Gouverneur [X] ||| 0.00927803 1 ||| ||| 3
+the Governor [X] ||| Gouverneur [X] ||| 0.00927803 1 ||| ||| 3
+to the Governor [X] ||| Gouverneur [X] ||| 0.00927803 1 ||| ||| 3
+Governor [X][X] , [X] ||| Gouverneur [X][X] , [X] ||| 0.0121424 1 ||| ||| 0.254701
+the Governor [X][X] , [X] ||| Gouverneur [X][X] , [X] ||| 0.00840628 1 ||| ||| 0.254701
+to the Governor [X][X] , [X] ||| Gouverneur [X][X] , [X] ||| 0.00728544 1 ||| ||| 0.254701
+Governor [X][X] , who [X] ||| Gouverneur [X][X] , der [X] ||| 0.0156567 1 ||| ||| 0.126984
+the Governor [X][X] , who [X] ||| Gouverneur [X][X] , der [X] ||| 0.0121774 1 ||| ||| 0.126984
+Governor [X][X] Bush , [X] ||| Gouverneur [X][X] Bush , [X] ||| 0.0164474 1 ||| ||| 0.188034
+the Governor [X][X] Bush , [X] ||| Gouverneur [X][X] Bush , [X] ||| 0.0113867 1 ||| ||| 0.188034
+Governor [X][X] Bush , who [X] ||| Gouverneur [X][X] Bush , der [X] ||| 0.0278341 1 ||| ||| 0.0714286
+Governor [X][X] Bush [X] ||| Gouverneur [X][X] Bush [X] ||| 0.0125826 1 ||| ||| 0.368687
+the Governor [X][X] Bush [X] ||| Gouverneur [X][X] Bush [X] ||| 0.00838835 1 ||| ||| 0.368687
+to the Governor [X][X] Bush [X] ||| Gouverneur [X][X] Bush [X] ||| 0.0068632 1 ||| ||| 0.368687
+Governor [X][X] Bush [X][X] [X] ||| Gouverneur [X][X] Bush [X][X] [X] ||| 0.0156567 1 ||| ||| 0.126984
+the Governor [X][X] Bush [X][X] [X] ||| Gouverneur [X][X] Bush [X][X] [X] ||| 0.0121774 1 ||| ||| 0.126984
+Governor [X][X] [X] ||| Gouverneur [X][X] [X] ||| 0.0122644 1 ||| ||| 1.35989
+the Governor [X][X] [X] ||| Gouverneur [X][X] [X] ||| 0.00839705 1 ||| ||| 1.35989
+to the Governor [X][X] [X] ||| Gouverneur [X][X] [X] ||| 0.0071726 1 ||| ||| 1.35989
+Governor [X][X] who [X] ||| Gouverneur [X][X] der [X] ||| 0.0112335 1 ||| ||| 0.176984
+the Governor [X][X] who [X] ||| Gouverneur [X][X] der [X] ||| 0.00873716 1 ||| ||| 0.176984
+to the Governor [X][X] who [X] ||| Gouverneur [X][X] der [X] ||| 0.00786344 1 ||| ||| 0.176984
+Governor of Texas , Mr [X] ||| Gouverneur von Texas , George W. [X] ||| 0.0278341 1 ||| ||| 0.25
+Governor of [X] ||| Gouverneur von [X] ||| 0.0151822 1 ||| ||| 1.83333
+the Governor of [X] ||| Gouverneur von [X] ||| 0.00759112 1 ||| ||| 1.83333
+to the Governor of [X] ||| Gouverneur von [X] ||| 0.00506074 1 ||| ||| 1.83333
+Governor of [X][X] , [X] ||| Gouverneur von [X][X] , [X] ||| 0.0164474 1 ||| ||| 0.188034
+the Governor of [X][X] , [X] ||| Gouverneur von [X][X] , [X] ||| 0.0113867 1 ||| ||| 0.188034
+Governor of [X][X] , who [X] ||| Gouverneur von [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0714286
+Governor of [X][X] Bush , [X] ||| Gouverneur von [X][X] Bush , [X] ||| 0.0278341 1 ||| ||| 0.111111
+Governor of [X][X] Bush [X] ||| Gouverneur von [X][X] Bush [X] ||| 0.0167005 1 ||| ||| 0.277778
+the Governor of [X][X] Bush [X] ||| Gouverneur von [X][X] Bush [X] ||| 0.0111336 1 ||| ||| 0.277778
+Governor of [X][X] Bush [X][X] [X] ||| Gouverneur von [X][X] Bush [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0714286
+Governor of [X][X] [X] ||| Gouverneur von [X][X] [X] ||| 0.0122644 1 ||| ||| 1.35989
+the Governor of [X][X] [X] ||| Gouverneur von [X][X] [X] ||| 0.00839705 1 ||| ||| 1.35989
+to the Governor of [X][X] [X] ||| Gouverneur von [X][X] [X] ||| 0.0071726 1 ||| ||| 1.35989
+Governor of [X][X] who [X] ||| Gouverneur von [X][X] der [X] ||| 0.0156567 1 ||| ||| 0.126984
+the Governor of [X][X] who [X] ||| Gouverneur von [X][X] der [X] ||| 0.0121774 1 ||| ||| 0.126984
+principle [X] ||| Grundsatz [X] ||| 0.0278341 1 ||| ||| 1
+principle [X][X] legal principle [X] ||| Grundsatz [X][X] Rechtsgrundsatz [X] ||| 0.0278341 1 ||| ||| 0.0294118
+principle [X][X] stability [X] ||| Grundsatz [X][X] Stabilität [X] ||| 0.0173963 1 ||| ||| 0.266667
+principle [X][X] stability is [X] ||| Grundsatz [X][X] Stabilität [X] ||| 0.0104378 1 ||| ||| 0.266667
+principle [X][X] stability [X][X] [X] ||| Grundsatz [X][X] Stabilität [X][X] [X] ||| 0.0179222 1 ||| ||| 0.182884
+principle [X][X] stability is [X][X] [X] ||| Grundsatz [X][X] Stabilität [X][X] [X] ||| 0.00991189 1 ||| ||| 0.182884
+principle [X][X] stability [X][X] fundamental [X] ||| Grundsatz [X][X] Stabilität [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0357143
+principle [X][X] stability is a [X] ||| Grundsatz [X][X] Stabilität einen [X] ||| 0.0278341 1 ||| ||| 0.0526316
+principle [X][X] [X] ||| Grundsatz [X][X] [X] ||| 0.0244304 1 ||| ||| 0.817758
+principle [X][X] is [X] ||| Grundsatz [X][X] [X] ||| 0.00340371 1 ||| ||| 0.817758
+principle [X][X] is [X][X] [X] ||| Grundsatz [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0651261
+principle [X][X] a [X] ||| Grundsatz [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.105263
+principle [X][X] is a [X] ||| Grundsatz [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.105263
+principle [X][X] a [X][X] [X] ||| Grundsatz [X][X] einen [X][X] [X] ||| 0.013917 1 ||| ||| 0.0588236
+principle [X][X] is a [X][X] [X] ||| Grundsatz [X][X] einen [X][X] [X] ||| 0.013917 1 ||| ||| 0.0588236
+principle [X][X] a fundamental [X] ||| Grundsatz [X][X] einen elementaren [X] ||| 0.013917 1 ||| ||| 0.0714286
+principle [X][X] is a fundamental [X] ||| Grundsatz [X][X] einen elementaren [X] ||| 0.013917 1 ||| ||| 0.0714286
+principle [X][X] a fundamental [X][X] [X] ||| Grundsatz [X][X] einen elementaren [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0294118
+principle [X][X] fundamental legal principle [X] ||| Grundsatz [X][X] elementaren Rechtsgrundsatz [X] ||| 0.0278341 1 ||| ||| 0.0294118
+principle [X][X] fundamental [X] ||| Grundsatz [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0357143
+principle [X][X] fundamental [X][X] [X] ||| Grundsatz [X][X] elementaren [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0294118
+principle of [X] ||| Grundsatz der [X] ||| 0.0278341 1 ||| ||| 1
+principle of [X][X] legal principle [X] ||| Grundsatz der [X][X] Rechtsgrundsatz [X] ||| 0.0278341 1 ||| ||| 0.0294118
+principle of [X][X] [X] ||| Grundsatz der [X][X] [X] ||| 0.0220883 1 ||| ||| 0.484424
+principle of [X][X] is [X] ||| Grundsatz der [X][X] [X] ||| 0.00574581 1 ||| ||| 0.484424
+principle of [X][X] is [X][X] [X] ||| Grundsatz der [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0651261
+principle of [X][X] a [X] ||| Grundsatz der [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.105263
+principle of [X][X] is a [X] ||| Grundsatz der [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.105263
+principle of [X][X] a [X][X] [X] ||| Grundsatz der [X][X] einen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0294118
+principle of [X][X] a fundamental [X] ||| Grundsatz der [X][X] einen elementaren [X] ||| 0.0278341 1 ||| ||| 0.0357143
+principle of [X][X] fundamental [X] ||| Grundsatz der [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0357143
+principle of [X][X] fundamental [X][X] [X] ||| Grundsatz der [X][X] elementaren [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0294118
+principle of relative stability [X] ||| Grundsatz der relativen Stabilität [X] ||| 0.0173963 1 ||| ||| 0.266667
+principle of relative stability is [X] ||| Grundsatz der relativen Stabilität [X] ||| 0.0104378 1 ||| ||| 0.266667
+principle of relative stability [X][X] [X] ||| Grundsatz der relativen Stabilität [X][X] [X] ||| 0.0278341 1 ||| ||| 0.117758
+principle of relative [X] ||| Grundsatz der relativen [X] ||| 0.0278341 1 ||| ||| 0.333333
+principle of relative [X][X] [X] ||| Grundsatz der relativen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.217758
+principle of relative [X][X] a [X] ||| Grundsatz der relativen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0526316
+principle of relative [X][X] fundamental [X] ||| Grundsatz der relativen [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0357143
+principle [X] ||| Grundsatzes [X] ||| 0.0278341 1 ||| ||| 1
+principle [X][X] stability [X] ||| Grundsatzes [X][X] Stabilität [X] ||| 0.0278341 1 ||| ||| 0.166667
+principle [X][X] [X] ||| Grundsatzes [X][X] [X] ||| 0.0278341 1 ||| ||| 0.5
+principle of [X] ||| Grundsatzes der [X] ||| 0.0278341 1 ||| ||| 1
+principle of [X][X] [X] ||| Grundsatzes der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.166667
+principle of relative stability [X] ||| Grundsatzes der relativen Stabilität [X] ||| 0.0278341 1 ||| ||| 0.166667
+principle of relative [X] ||| Grundsatzes der relativen [X] ||| 0.0278341 1 ||| ||| 0.333333
+principles that [X] ||| Grundsätzen , die [X] ||| 0.0278341 1 ||| ||| 1
+principles that [X][X] . [X] ||| Grundsätzen , die [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0769231
+principles that [X][X] [X] ||| Grundsätzen , die [X][X] [X] ||| 0.0278341 1 ||| ||| 0.167832
+principles that we [X] ||| Grundsätzen , die wir [X] ||| 0.0278341 1 ||| ||| 0.333333
+principles that we [X][X] . [X] ||| Grundsätzen , die wir [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0769231
+principles that we [X][X] [X] ||| Grundsätzen , die wir [X][X] [X] ||| 0.0278341 1 ||| ||| 0.167832
+principles that we have [X][X] [X] ||| Grundsätzen , die wir [X][X] haben [X] ||| 0.0278341 1 ||| ||| 0.0909091
+principles [X] ||| Grundsätzen [X] ||| 0.0278341 1 ||| ||| 1
+principles [X][X] . [X] ||| Grundsätzen [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0769231
+principles [X][X] [X] ||| Grundsätzen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.501166
+principles [X][X] have [X][X] . [X] ||| Grundsätzen [X][X] [X][X] haben . [X] ||| 0.0278341 1 ||| ||| 0.0769231
+principles [X][X] have [X][X] [X] ||| Grundsätzen [X][X] [X][X] haben [X] ||| 0.0278341 1 ||| ||| 0.0909091
+principles [X][X] have always upheld [X] ||| Grundsätzen [X][X] stets verteidigt haben [X] ||| 0.0278341 1 ||| ||| 0.0909091
+House [X] ||| Haus [X] ||| 0.0278341 1 ||| ||| 1
+House [X][X] [X] ||| Haus [X][X] [X] ||| 0.0238105 1 ||| ||| 0.761957
+House [X][X] do [X] ||| Haus [X][X] [X] ||| 0.00402357 1 ||| ||| 0.761957
+House [X][X] I [X][X] [X] ||| Haus [X][X] [X][X] ich [X] ||| 0.0278341 1 ||| ||| 0.0666667
+House [X][X] I [X][X] [X] ||| Haus [X][X] [X][X] ich dem [X] ||| 0.0278341 1 ||| ||| 0.0434783
+House [X][X] [X] ||| Haus [X][X] dem [X] ||| 0.0207275 1 ||| ||| 0.17029
+House [X][X] do [X] ||| Haus [X][X] dem [X] ||| 0.00710657 1 ||| ||| 0.17029
+House [X][X] I shall [X] ||| Haus [X][X] werde ich [X] ||| 0.0181527 1 ||| ||| 0.191667
+House [X][X] I shall do [X] ||| Haus [X][X] werde ich [X] ||| 0.00968143 1 ||| ||| 0.191667
+House [X][X] I shall [X] ||| Haus [X][X] werde ich dem [X] ||| 0.018291 1 ||| ||| 0.126812
+House [X][X] I shall do [X] ||| Haus [X][X] werde ich dem [X] ||| 0.00954313 1 ||| ||| 0.126812
+House agrees , [X] ||| Haus damit einverstanden ist , [X] ||| 0.0278341 1 ||| ||| 0.333333
+House agrees , [X][X] [X] ||| Haus damit einverstanden ist , [X][X] [X] ||| 0.0206815 1 ||| ||| 0.428623
+House agrees , [X][X] do [X] ||| Haus damit einverstanden ist , [X][X] [X] ||| 0.00715264 1 ||| ||| 0.428623
+House agrees , [X][X] [X] ||| Haus damit einverstanden ist , [X][X] dem [X] ||| 0.0207275 1 ||| ||| 0.17029
+House agrees , [X][X] do [X] ||| Haus damit einverstanden ist , [X][X] dem [X] ||| 0.00710657 1 ||| ||| 0.17029
+House agrees , I [X][X] [X] ||| Haus damit einverstanden ist , [X][X] ich [X] ||| 0.0278341 1 ||| ||| 0.0666667
+House agrees , I [X][X] [X] ||| Haus damit einverstanden ist , [X][X] ich dem [X] ||| 0.0278341 1 ||| ||| 0.0434783
+House agrees , I shall [X] ||| Haus damit einverstanden ist , werde ich [X] ||| 0.0278341 1 ||| ||| 0.125
+House agrees , I shall [X] ||| Haus damit einverstanden ist , werde ich dem [X] ||| 0.0278341 1 ||| ||| 0.0833333
+House agrees [X] ||| Haus damit einverstanden ist [X] ||| 0.0278341 1 ||| ||| 1
+House agrees [X][X] [X] ||| Haus damit einverstanden ist [X][X] [X] ||| 0.0206815 1 ||| ||| 0.428623
+House agrees [X][X] do [X] ||| Haus damit einverstanden ist [X][X] [X] ||| 0.00715264 1 ||| ||| 0.428623
+House agrees [X][X] [X] ||| Haus damit einverstanden ist [X][X] dem [X] ||| 0.0207275 1 ||| ||| 0.17029
+House agrees [X][X] do [X] ||| Haus damit einverstanden ist [X][X] dem [X] ||| 0.00710657 1 ||| ||| 0.17029
+Mr Evans , [X] ||| Herr Evans , [X] ||| 0.0278341 1 ||| ||| 0.333333
+Mr Evans , [X][X] [X] ||| Herr Evans , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.175799
+Mr Evans , [X][X] an [X] ||| Herr Evans , [X][X] eine [X] ||| 0.0278341 1 ||| ||| 0.0526316
+Mr Evans , I [X] ||| Herr Evans , ich [X] ||| 0.0278341 1 ||| ||| 0.166667
+Mr Evans , I [X][X] [X] ||| Herr Evans , ich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0848896
+Mr Evans , I feel [X] ||| Herr Evans , ich denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0909091
+Mr Evans [X] ||| Herr Evans [X] ||| 0.0278341 1 ||| ||| 1
+Mr Evans [X][X] [X] ||| Herr Evans [X][X] [X] ||| 0.0278341 1 ||| ||| 0.342465
+Mr Evans [X][X] initiative [X][X] [X] ||| Herr Evans [X][X] [X][X] Initiative [X] ||| 0.0278341 1 ||| ||| 0.0322581
+Mr Evans [X][X] feel [X] ||| Herr Evans [X][X] denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0909091
+Mr Evans [X][X] feel [X][X] [X] ||| Herr Evans [X][X] denke , daß [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0322581
+Mr Evans [X][X] feel an [X] ||| Herr Evans [X][X] denke , daß eine [X] ||| 0.0278341 1 ||| ||| 0.0526316
+Mr Evans [X][X] an [X] ||| Herr Evans [X][X] eine [X] ||| 0.0278341 1 ||| ||| 0.0526316
+Mr Evans [X][X] an [X][X] [X] ||| Herr Evans [X][X] eine [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0322581
+Mr Kumar Ponnambalam , who [X] ||| Herr Kumar Ponnambalam , der [X] ||| 0.0278341 1 ||| ||| 0.2
+Mr Kumar Ponnambalam [X] ||| Herr Kumar Ponnambalam [X] ||| 0.0278341 1 ||| ||| 0.5
+Mr Kumar Ponnambalam [X][X] [X] ||| Herr Kumar Ponnambalam [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+Mr [X] ||| Herr [X] ||| 0.241419 1 ||| ||| 2
+Mr [X][X] , who [X] ||| Herr [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.2
+Mr [X][X] [X] ||| Herr [X][X] [X] ||| 0.241419 1 ||| ||| 1.3758
+Mr [X][X] initiative [X][X] [X] ||| Herr [X][X] [X][X] Initiative [X] ||| 0.013917 1 ||| ||| 0.0645162
+Mr [X][X] initiative of [X][X] [X] ||| Herr [X][X] [X][X] Initiative [X] ||| 0.013917 1 ||| ||| 0.0645162
+Mr [X][X] feel [X] ||| Herr [X][X] denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0909091
+Mr [X][X] feel [X][X] [X] ||| Herr [X][X] denke , daß [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0322581
+Mr [X][X] feel an [X] ||| Herr [X][X] denke , daß eine [X] ||| 0.0278341 1 ||| ||| 0.0526316
+Mr [X][X] feel an [X][X] [X] ||| Herr [X][X] denke , daß eine [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0322581
+Mr [X][X] an [X] ||| Herr [X][X] eine [X] ||| 0.0278341 1 ||| ||| 0.0526316
+Mr [X][X] an initiative [X][X] [X] ||| Herr [X][X] eine [X][X] Initiative [X] ||| 0.0278341 1 ||| ||| 0.0322581
+Mr [X][X] an [X][X] [X] ||| Herr [X][X] eine [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0322581
+Mr [X][X] I [X] ||| Herr [X][X] ich [X] ||| 0.0278341 1 ||| ||| 0.166667
+Mr [X][X] I [X][X] [X] ||| Herr [X][X] ich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0848896
+Mr [X][X] I feel [X] ||| Herr [X][X] ich denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0909091
+Mr [X][X] I feel [X][X] [X] ||| Herr [X][X] ich denke , daß [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0322581
+Mr [X][X] I feel an [X] ||| Herr [X][X] ich denke , daß eine [X] ||| 0.0278341 1 ||| ||| 0.0526316
+Mr Evans [X] ||| Herrn Evans [X] ||| 0.0185561 1 ||| ||| 1.5
+Mr Evans has [X] ||| Herrn Evans [X] ||| 0.00927803 1 ||| ||| 1.5
+Mr Zimeray , [X] ||| Herrn Zimeray , [X] ||| 0.0278341 1 ||| ||| 0.333333
+Mr Zimeray , [X][X] , [X] ||| Herrn Zimeray , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0769231
+Mr Zimeray , [X][X] [X] ||| Herrn Zimeray , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.301923
+Mr Zimeray , [X][X] presented [X] ||| Herrn Zimeray , [X][X] eingereicht [X] ||| 0.0278341 1 ||| ||| 0.1
+Mr Zimeray [X] ||| Herrn Zimeray [X] ||| 0.0278341 1 ||| ||| 1
+Mr Zimeray [X][X] , [X] ||| Herrn Zimeray [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0769231
+Mr Zimeray [X][X] [X] ||| Herrn Zimeray [X][X] [X] ||| 0.0278341 1 ||| ||| 0.301923
+Mr Zimeray [X][X] presented , [X] ||| Herrn Zimeray [X][X] eingereicht , [X] ||| 0.0278341 1 ||| ||| 0.0769231
+Mr Zimeray [X][X] presented [X] ||| Herrn Zimeray [X][X] eingereicht [X] ||| 0.0278341 1 ||| ||| 0.1
+Mr [X] ||| Herrn [X] ||| 0.241419 1 ||| ||| 2
+Mr [X][X] , [X] ||| Herrn [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0769231
+Mr [X][X] [X] ||| Herrn [X][X] [X] ||| 0.241419 1 ||| ||| 1.13526
+Mr [X][X] a petition [X][X] [X] ||| Herrn [X][X] [X][X] eine Petition [X] ||| 0.0278341 1 ||| ||| 0.125
+Mr [X][X] presented , [X] ||| Herrn [X][X] eingereicht , [X] ||| 0.0278341 1 ||| ||| 0.0769231
+Mr [X][X] presented [X] ||| Herrn [X][X] eingereicht [X] ||| 0.0278341 1 ||| ||| 0.1
+execution [X] ||| Hinrichtung [X] ||| 0.0278341 1 ||| ||| 1
+execution [X][X] [X] ||| Hinrichtung [X][X] [X] ||| 0.0278341 1 ||| ||| 0.5
+execution of a [X] ||| Hinrichtung eines [X] ||| 0.0278341 1 ||| ||| 0.5
+of your prestigious office [X] ||| Ihres Amtes [X] ||| 0.0278341 1 ||| ||| 0.333333
+of your prestigious office [X][X] [X] ||| Ihres Amtes [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0555556
+of your prestigious office [X][X] [X] ||| Ihres Amtes [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.0416667
+of your prestigious office [X][X] [X] ||| Ihres Amtes [X][X] [X] ||| 0.0278341 1 ||| ||| 0.392279
+of your prestigious office [X][X] [X] ||| Ihres Amtes [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.0416667
+of your prestigious office and [X] ||| Ihres Amtes und [X] ||| 0.0278341 1 ||| ||| 0.2
+of your [X] ||| Ihres [X] ||| 0.0278341 1 ||| ||| 1
+of your [X][X] , [X] ||| Ihres [X][X] , [X] ||| 0.00747782 1 ||| ||| 0.0759638
+of your [X][X] [X] ||| Ihres [X][X] , [X] ||| 0.0203563 1 ||| ||| 0.0759638
+of your [X][X] you [X] ||| Ihres [X][X] , die Sie [X] ||| 0.0278341 1 ||| ||| 0.04
+of your [X][X] you [X][X] [X] ||| Ihres [X][X] , die Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0204082
+of your [X][X] you represent [X] ||| Ihres [X][X] , die Sie vertreten [X] ||| 0.0278341 1 ||| ||| 0.0263158
+of your [X][X] [X] ||| Ihres [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.0416667
+of your [X][X] institution [X] ||| Ihres [X][X] Institution , [X] ||| 0.0278341 1 ||| ||| 0.0555556
+of your [X][X] institution [X][X] [X] ||| Ihres [X][X] Institution , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.046724
+of your [X][X] institution you [X] ||| Ihres [X][X] Institution , die Sie [X] ||| 0.0278341 1 ||| ||| 0.04
+of your [X][X] institution [X] ||| Ihres [X][X] Institution , die [X] ||| 0.0278341 1 ||| ||| 0.0416667
+of your [X][X] institution [X][X] [X] ||| Ihres [X][X] Institution , die [X][X] [X] ||| 0.0278341 1 ||| ||| 0.046724
+of your [X][X] institution [X] ||| Ihres [X][X] Institution [X] ||| 0.0278341 1 ||| ||| 0.0833333
+of your [X][X] institution [X][X] [X] ||| Ihres [X][X] Institution [X][X] [X] ||| 0.0278341 1 ||| ||| 0.046724
+of your [X][X] you [X] ||| Ihres [X][X] Sie [X] ||| 0.0278341 1 ||| ||| 0.04
+of your [X][X] you [X][X] [X] ||| Ihres [X][X] Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0204082
+of your [X][X] you represent [X] ||| Ihres [X][X] Sie vertreten [X] ||| 0.0278341 1 ||| ||| 0.0263158
+of your [X][X] [X] ||| Ihres [X][X] [X] ||| 0.0278341 1 ||| ||| 0.925613
+of your [X][X] the institution [X] ||| Ihres [X][X] der Institution , [X] ||| 0.0278341 1 ||| ||| 0.0555556
+of your [X][X] the institution [X] ||| Ihres [X][X] der Institution , die [X] ||| 0.0278341 1 ||| ||| 0.0416667
+of your [X][X] the institution [X] ||| Ihres [X][X] der Institution [X] ||| 0.0278341 1 ||| ||| 0.0833333
+of your [X][X] the [X] ||| Ihres [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.125
+of your [X][X] the [X][X] [X] ||| Ihres [X][X] der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0867239
+of your [X][X] you [X] ||| Ihres [X][X] die Sie [X] ||| 0.0278341 1 ||| ||| 0.04
+of your [X][X] you [X][X] [X] ||| Ihres [X][X] die Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0204082
+of your [X][X] you represent [X] ||| Ihres [X][X] die Sie vertreten [X] ||| 0.0278341 1 ||| ||| 0.0263158
+of your [X][X] [X] ||| Ihres [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.0416667
+of your [X][X] and [X] ||| Ihres [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.2
+of your [X][X] and [X][X] [X] ||| Ihres [X][X] und [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0555556
+of your [X][X] and [X][X] [X] ||| Ihres [X][X] und [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.0416667
+of your [X][X] and [X][X] [X] ||| Ihres [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.26728
+of your [X][X] and [X][X] [X] ||| Ihres [X][X] und [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.0416667
+of your [X][X] and the [X] ||| Ihres [X][X] und der [X] ||| 0.0278341 1 ||| ||| 0.125
+of your [X][X] represent , [X] ||| Ihres [X][X] vertreten , [X] ||| 0.0278341 1 ||| ||| 0.0204082
+of your [X][X] represent [X] ||| Ihres [X][X] vertreten [X] ||| 0.0278341 1 ||| ||| 0.0263158
+initiative [X] ||| Initiative [X] ||| 0.013917 1 ||| ||| 2
+initiative of [X] ||| Initiative [X] ||| 0.013917 1 ||| ||| 2
+institution [X] ||| Institution , [X] ||| 0.0278341 1 ||| ||| 1
+institution [X][X] , [X] ||| Institution , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.1
+institution [X][X] , [X][X] President [X] ||| Institution , [X][X] , [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0222222
+institution [X][X] , [X][X] [X] ||| Institution , [X][X] , [X][X] [X] ||| 0.0221142 1 ||| ||| 0.124106
+institution [X][X] , [X][X] the [X] ||| Institution , [X][X] , [X][X] [X] ||| 0.00276886 1 ||| ||| 0.124106
+institution [X][X] , [X][X] to [X] ||| Institution , [X][X] , [X][X] [X] ||| 0.00295102 1 ||| ||| 0.124106
+institution [X][X] , [X][X] and [X] ||| Institution , [X][X] , [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0163934
+institution [X][X] , to [X] ||| Institution , [X][X] , bei [X] ||| 0.0278341 1 ||| ||| 0.0588235
+institution [X][X] , to [X][X] [X] ||| Institution , [X][X] , bei [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0641192
+institution [X][X] , to the [X] ||| Institution , [X][X] , bei dem [X] ||| 0.0278341 1 ||| ||| 0.0344828
+institution [X][X] President [X] ||| Institution , [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0222222
+institution [X][X] President [X][X] [X] ||| Institution , [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0187552 1 ||| ||| 0.0378493
+institution [X][X] President [X][X] the [X] ||| Institution , [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.00907894 1 ||| ||| 0.0378493
+institution [X][X] President and [X] ||| Institution , [X][X] Präsidentschaftskandidaten und [X] ||| 0.0154408 1 ||| ||| 0.0295513
+institution [X][X] President and to [X] ||| Institution , [X][X] Präsidentschaftskandidaten und [X] ||| 0.0123933 1 ||| ||| 0.0295513
+institution [X][X] [X] ||| Institution , [X][X] [X] ||| 0.025707 1 ||| ||| 0.495275
+institution [X][X] the [X] ||| Institution , [X][X] [X] ||| 0.000693819 1 ||| ||| 0.495275
+institution [X][X] to [X] ||| Institution , [X][X] [X] ||| 0.000739464 1 ||| ||| 0.495275
+institution [X][X] to the [X] ||| Institution , [X][X] [X] ||| 0.000693819 1 ||| ||| 0.495275
+institution [X][X] to [X] ||| Institution , [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0588235
+institution [X][X] to [X][X] [X] ||| Institution , [X][X] bei [X][X] [X] ||| 0.0199135 1 ||| ||| 0.0896228
+institution [X][X] to [X][X] the [X] ||| Institution , [X][X] bei [X][X] [X] ||| 0.0038342 1 ||| ||| 0.0896228
+institution [X][X] to [X][X] to [X] ||| Institution , [X][X] bei [X][X] [X] ||| 0.00408644 1 ||| ||| 0.0896228
+institution [X][X] to [X][X] and [X] ||| Institution , [X][X] bei [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0163934
+institution [X][X] to the President [X] ||| Institution , [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0222222
+institution [X][X] to the [X] ||| Institution , [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0344828
+institution [X][X] to the [X][X] [X] ||| Institution , [X][X] bei dem [X][X] [X] ||| 0.0278341 1 ||| ||| 0.041897
+institution [X][X] the President [X] ||| Institution , [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0222222
+institution [X][X] the President [X][X] [X] ||| Institution , [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0255036
+institution [X][X] the President and [X] ||| Institution , [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.0163934
+institution [X][X] the [X] ||| Institution , [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0344828
+institution [X][X] the [X][X] [X] ||| Institution , [X][X] dem [X][X] [X] ||| 0.017302 1 ||| ||| 0.0674006
+institution [X][X] the [X][X] the [X] ||| Institution , [X][X] dem [X][X] [X] ||| 0.00509834 1 ||| ||| 0.0674006
+institution [X][X] the [X][X] to [X] ||| Institution , [X][X] dem [X][X] [X] ||| 0.00543375 1 ||| ||| 0.0674006
+institution [X][X] and [X] ||| Institution , [X][X] und [X] ||| 0.0108909 1 ||| ||| 0.041897
+institution [X][X] and to [X] ||| Institution , [X][X] und [X] ||| 0.0087414 1 ||| ||| 0.041897
+institution [X][X] and to the [X] ||| Institution , [X][X] und [X] ||| 0.00820182 1 ||| ||| 0.041897
+institution you [X] ||| Institution , die Sie [X] ||| 0.0278341 1 ||| ||| 1
+institution you [X][X] President [X] ||| Institution , die Sie [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0222222
+institution you [X][X] President [X][X] [X] ||| Institution , die Sie [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0255036
+institution you [X][X] President and [X] ||| Institution , die Sie [X][X] Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.0163934
+institution you [X][X] [X] ||| Institution , die Sie [X][X] [X] ||| 0.0242662 1 ||| ||| 0.295275
+institution you [X][X] the [X] ||| Institution , die Sie [X][X] [X] ||| 0.00116377 1 ||| ||| 0.295275
+institution you [X][X] to [X] ||| Institution , die Sie [X][X] [X] ||| 0.00124033 1 ||| ||| 0.295275
+institution you [X][X] to the [X] ||| Institution , die Sie [X][X] [X] ||| 0.00116377 1 ||| ||| 0.295275
+institution you [X][X] to [X] ||| Institution , die Sie [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0588235
+institution you [X][X] to [X][X] [X] ||| Institution , die Sie [X][X] bei [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0641192
+institution you [X][X] to the [X] ||| Institution , die Sie [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0344828
+institution you [X][X] the President [X] ||| Institution , die Sie [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0222222
+institution you [X][X] the [X] ||| Institution , die Sie [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0344828
+institution you [X][X] the [X][X] [X] ||| Institution , die Sie [X][X] dem [X][X] [X] ||| 0.0278341 1 ||| ||| 0.041897
+institution you [X][X] and [X] ||| Institution , die Sie [X][X] und [X] ||| 0.0154408 1 ||| ||| 0.0295513
+institution you [X][X] and to [X] ||| Institution , die Sie [X][X] und [X] ||| 0.0123933 1 ||| ||| 0.0295513
+institution you represent , [X] ||| Institution , die Sie vertreten , [X] ||| 0.0278341 1 ||| ||| 0.1
+institution you represent , [X][X] [X] ||| Institution , die Sie vertreten , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.098602
+institution you represent , to [X] ||| Institution , die Sie vertreten , bei [X] ||| 0.0278341 1 ||| ||| 0.0588235
+institution you represent [X] ||| Institution , die Sie vertreten [X] ||| 0.0278341 1 ||| ||| 0.2
+institution you represent [X][X] President [X] ||| Institution , die Sie vertreten [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0222222
+institution you represent [X][X] [X] ||| Institution , die Sie vertreten [X][X] [X] ||| 0.0239535 1 ||| ||| 0.18293
+institution you represent [X][X] the [X] ||| Institution , die Sie vertreten [X][X] [X] ||| 0.00187849 1 ||| ||| 0.18293
+institution you represent [X][X] to [X] ||| Institution , die Sie vertreten [X][X] [X] ||| 0.00200207 1 ||| ||| 0.18293
+institution you represent [X][X] the [X] ||| Institution , die Sie vertreten [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0344828
+institution you represent [X][X] and [X] ||| Institution , die Sie vertreten [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0163934
+institution [X] ||| Institution , die [X] ||| 0.0278341 1 ||| ||| 1
+institution [X][X] , [X] ||| Institution , die [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.1
+institution [X][X] , [X][X] President [X] ||| Institution , die [X][X] , [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0222222
+institution [X][X] , [X][X] [X] ||| Institution , die [X][X] , [X][X] [X] ||| 0.0221142 1 ||| ||| 0.124106
+institution [X][X] , [X][X] the [X] ||| Institution , die [X][X] , [X][X] [X] ||| 0.00276886 1 ||| ||| 0.124106
+institution [X][X] , [X][X] to [X] ||| Institution , die [X][X] , [X][X] [X] ||| 0.00295102 1 ||| ||| 0.124106
+institution [X][X] , [X][X] and [X] ||| Institution , die [X][X] , [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0163934
+institution [X][X] , to [X] ||| Institution , die [X][X] , bei [X] ||| 0.0278341 1 ||| ||| 0.0588235
+institution [X][X] , to [X][X] [X] ||| Institution , die [X][X] , bei [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0641192
+institution [X][X] , to the [X] ||| Institution , die [X][X] , bei dem [X] ||| 0.0278341 1 ||| ||| 0.0344828
+institution [X][X] President [X] ||| Institution , die [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0222222
+institution [X][X] President [X][X] [X] ||| Institution , die [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0187552 1 ||| ||| 0.0378493
+institution [X][X] President [X][X] the [X] ||| Institution , die [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.00907894 1 ||| ||| 0.0378493
+institution [X][X] President and [X] ||| Institution , die [X][X] Präsidentschaftskandidaten und [X] ||| 0.0154408 1 ||| ||| 0.0295513
+institution [X][X] President and to [X] ||| Institution , die [X][X] Präsidentschaftskandidaten und [X] ||| 0.0123933 1 ||| ||| 0.0295513
+institution [X][X] [X] ||| Institution , die [X][X] [X] ||| 0.025707 1 ||| ||| 0.495275
+institution [X][X] the [X] ||| Institution , die [X][X] [X] ||| 0.000693819 1 ||| ||| 0.495275
+institution [X][X] to [X] ||| Institution , die [X][X] [X] ||| 0.000739464 1 ||| ||| 0.495275
+institution [X][X] to the [X] ||| Institution , die [X][X] [X] ||| 0.000693819 1 ||| ||| 0.495275
+institution [X][X] to [X] ||| Institution , die [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0588235
+institution [X][X] to [X][X] [X] ||| Institution , die [X][X] bei [X][X] [X] ||| 0.0199135 1 ||| ||| 0.0896228
+institution [X][X] to [X][X] the [X] ||| Institution , die [X][X] bei [X][X] [X] ||| 0.0038342 1 ||| ||| 0.0896228
+institution [X][X] to [X][X] to [X] ||| Institution , die [X][X] bei [X][X] [X] ||| 0.00408644 1 ||| ||| 0.0896228
+institution [X][X] to [X][X] and [X] ||| Institution , die [X][X] bei [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0163934
+institution [X][X] to the President [X] ||| Institution , die [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0222222
+institution [X][X] to the [X] ||| Institution , die [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0344828
+institution [X][X] to the [X][X] [X] ||| Institution , die [X][X] bei dem [X][X] [X] ||| 0.0278341 1 ||| ||| 0.041897
+institution [X][X] the President [X] ||| Institution , die [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0222222
+institution [X][X] the President [X][X] [X] ||| Institution , die [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0255036
+institution [X][X] the President and [X] ||| Institution , die [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.0163934
+institution [X][X] the [X] ||| Institution , die [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0344828
+institution [X][X] the [X][X] [X] ||| Institution , die [X][X] dem [X][X] [X] ||| 0.017302 1 ||| ||| 0.0674006
+institution [X][X] the [X][X] the [X] ||| Institution , die [X][X] dem [X][X] [X] ||| 0.00509834 1 ||| ||| 0.0674006
+institution [X][X] the [X][X] to [X] ||| Institution , die [X][X] dem [X][X] [X] ||| 0.00543375 1 ||| ||| 0.0674006
+institution [X][X] and [X] ||| Institution , die [X][X] und [X] ||| 0.0108909 1 ||| ||| 0.041897
+institution [X][X] and to [X] ||| Institution , die [X][X] und [X] ||| 0.0087414 1 ||| ||| 0.041897
+institution [X][X] and to the [X] ||| Institution , die [X][X] und [X] ||| 0.00820182 1 ||| ||| 0.041897
+institution [X] ||| Institution [X] ||| 0.0278341 1 ||| ||| 1
+institution [X][X] , [X] ||| Institution [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.1
+institution [X][X] , [X][X] President [X] ||| Institution [X][X] , [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0222222
+institution [X][X] , [X][X] [X] ||| Institution [X][X] , [X][X] [X] ||| 0.0221142 1 ||| ||| 0.124106
+institution [X][X] , [X][X] the [X] ||| Institution [X][X] , [X][X] [X] ||| 0.00276886 1 ||| ||| 0.124106
+institution [X][X] , [X][X] to [X] ||| Institution [X][X] , [X][X] [X] ||| 0.00295102 1 ||| ||| 0.124106
+institution [X][X] , [X][X] and [X] ||| Institution [X][X] , [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0163934
+institution [X][X] , to [X] ||| Institution [X][X] , bei [X] ||| 0.0278341 1 ||| ||| 0.0588235
+institution [X][X] , to [X][X] [X] ||| Institution [X][X] , bei [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0641192
+institution [X][X] , to the [X] ||| Institution [X][X] , bei dem [X] ||| 0.0278341 1 ||| ||| 0.0344828
+institution [X][X] President [X] ||| Institution [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0222222
+institution [X][X] President [X][X] [X] ||| Institution [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0187552 1 ||| ||| 0.0378493
+institution [X][X] President [X][X] the [X] ||| Institution [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.00907894 1 ||| ||| 0.0378493
+institution [X][X] President and [X] ||| Institution [X][X] Präsidentschaftskandidaten und [X] ||| 0.0154408 1 ||| ||| 0.0295513
+institution [X][X] President and to [X] ||| Institution [X][X] Präsidentschaftskandidaten und [X] ||| 0.0123933 1 ||| ||| 0.0295513
+institution [X][X] [X] ||| Institution [X][X] [X] ||| 0.025707 1 ||| ||| 0.495275
+institution [X][X] the [X] ||| Institution [X][X] [X] ||| 0.000693819 1 ||| ||| 0.495275
+institution [X][X] to [X] ||| Institution [X][X] [X] ||| 0.000739464 1 ||| ||| 0.495275
+institution [X][X] to the [X] ||| Institution [X][X] [X] ||| 0.000693819 1 ||| ||| 0.495275
+institution [X][X] to [X] ||| Institution [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0588235
+institution [X][X] to [X][X] [X] ||| Institution [X][X] bei [X][X] [X] ||| 0.0199135 1 ||| ||| 0.0896228
+institution [X][X] to [X][X] the [X] ||| Institution [X][X] bei [X][X] [X] ||| 0.0038342 1 ||| ||| 0.0896228
+institution [X][X] to [X][X] to [X] ||| Institution [X][X] bei [X][X] [X] ||| 0.00408644 1 ||| ||| 0.0896228
+institution [X][X] to [X][X] and [X] ||| Institution [X][X] bei [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0163934
+institution [X][X] to the President [X] ||| Institution [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0222222
+institution [X][X] to the [X] ||| Institution [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0344828
+institution [X][X] to the [X][X] [X] ||| Institution [X][X] bei dem [X][X] [X] ||| 0.0278341 1 ||| ||| 0.041897
+institution [X][X] the President [X] ||| Institution [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0222222
+institution [X][X] the President [X][X] [X] ||| Institution [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0255036
+institution [X][X] the President and [X] ||| Institution [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.0163934
+institution [X][X] the [X] ||| Institution [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0344828
+institution [X][X] the [X][X] [X] ||| Institution [X][X] dem [X][X] [X] ||| 0.017302 1 ||| ||| 0.0674006
+institution [X][X] the [X][X] the [X] ||| Institution [X][X] dem [X][X] [X] ||| 0.00509834 1 ||| ||| 0.0674006
+institution [X][X] the [X][X] to [X] ||| Institution [X][X] dem [X][X] [X] ||| 0.00543375 1 ||| ||| 0.0674006
+institution [X][X] and [X] ||| Institution [X][X] und [X] ||| 0.0108909 1 ||| ||| 0.041897
+institution [X][X] and to [X] ||| Institution [X][X] und [X] ||| 0.0087414 1 ||| ||| 0.041897
+institution [X][X] and to the [X] ||| Institution [X][X] und [X] ||| 0.00820182 1 ||| ||| 0.041897
+year , [X] ||| Jahres- , [X] ||| 0.0278341 1 ||| ||| 1
+year [X] ||| Jahres- [X] ||| 0.0278341 1 ||| ||| 1
+Members [X] ||| Kolleginnen und Kollegen - [X] ||| 0.00463902 1 ||| ||| 6
+Members have [X] ||| Kolleginnen und Kollegen - [X] ||| 0.00463902 1 ||| ||| 6
+number of Members [X] ||| Kolleginnen und Kollegen - [X] ||| 0.00463902 1 ||| ||| 6
+number of Members have [X] ||| Kolleginnen und Kollegen - [X] ||| 0.00463902 1 ||| ||| 6
+of Members [X] ||| Kolleginnen und Kollegen - [X] ||| 0.00463902 1 ||| ||| 6
+of Members have [X] ||| Kolleginnen und Kollegen - [X] ||| 0.00463902 1 ||| ||| 6
+Members [X] ||| Kolleginnen und Kollegen [X] ||| 0.00463902 1 ||| ||| 6
+Members have [X] ||| Kolleginnen und Kollegen [X] ||| 0.00463902 1 ||| ||| 6
+number of Members [X] ||| Kolleginnen und Kollegen [X] ||| 0.00463902 1 ||| ||| 6
+number of Members have [X] ||| Kolleginnen und Kollegen [X] ||| 0.00463902 1 ||| ||| 6
+of Members [X] ||| Kolleginnen und Kollegen [X] ||| 0.00463902 1 ||| ||| 6
+of Members have [X] ||| Kolleginnen und Kollegen [X] ||| 0.00463902 1 ||| ||| 6
+accused of criminal activity [X] ||| Kriminalität [X] ||| 0.00695852 1 ||| ||| 4
+be accused of criminal activity [X] ||| Kriminalität [X] ||| 0.00695852 1 ||| ||| 4
+criminal activity [X] ||| Kriminalität [X] ||| 0.00695852 1 ||| ||| 4
+of criminal activity [X] ||| Kriminalität [X] ||| 0.00695852 1 ||| ||| 4
+accused of criminal activity and [X] ||| Kriminalität und [X] ||| 0.00642326 1 ||| ||| 1.08333
+criminal activity and [X] ||| Kriminalität und [X] ||| 0.0128465 1 ||| ||| 1.08333
+of criminal activity and [X] ||| Kriminalität und [X] ||| 0.00856433 1 ||| ||| 1.08333
+possibly [X] ||| Kräften [X] ||| 0.00695852 1 ||| ||| 4
+possibly can [X] ||| Kräften [X] ||| 0.00695852 1 ||| ||| 4
+she possibly [X] ||| Kräften [X] ||| 0.00695852 1 ||| ||| 4
+she possibly can [X] ||| Kräften [X] ||| 0.00695852 1 ||| ||| 4
+possibly [X] ||| Kräften stehende [X] ||| 0.00695852 1 ||| ||| 4
+possibly can [X] ||| Kräften stehende [X] ||| 0.00695852 1 ||| ||| 4
+she possibly [X] ||| Kräften stehende [X] ||| 0.00695852 1 ||| ||| 4
+she possibly can [X] ||| Kräften stehende [X] ||| 0.00695852 1 ||| ||| 4
+Kumar Ponnambalam , who [X] ||| Kumar Ponnambalam , der [X] ||| 0.0278341 1 ||| ||| 0.333333
+Kumar Ponnambalam [X] ||| Kumar Ponnambalam [X] ||| 0.0278341 1 ||| ||| 1
+Kumar Ponnambalam [X][X] [X] ||| Kumar Ponnambalam [X][X] [X] ||| 0.0278341 1 ||| ||| 0.333333
+Lanka [X] ||| Lanka [X] ||| 0.160946 1 ||| ||| 3
+Lankan [X] ||| Lanka [X] ||| 0.00927803 1 ||| ||| 3
+Lanka [X][X] Kumar Ponnambalam [X] ||| Lanka [X][X] Kumar Ponnambalam [X] ||| 0.0278341 1 ||| ||| 0.047619
+Lanka [X][X] [X] ||| Lanka [X][X] [X] ||| 0.0278341 1 ||| ||| 0.172619
+Lanka [X] ||| Lanka zu [X] ||| 0.0278341 1 ||| ||| 1
+Lanka [X][X] Kumar Ponnambalam [X] ||| Lanka zu [X][X] Kumar Ponnambalam [X] ||| 0.0278341 1 ||| ||| 0.047619
+Lanka [X][X] [X] ||| Lanka zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.172619
+Lanka [X] ||| Lanka zu beklagen [X] ||| 0.0278341 1 ||| ||| 1
+Lanka [X][X] Kumar Ponnambalam [X] ||| Lanka zu beklagen [X][X] Kumar Ponnambalam [X] ||| 0.0278341 1 ||| ||| 0.047619
+Lanka [X][X] [X] ||| Lanka zu beklagen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.172619
+Lanka was [X] ||| Lanka zu beklagen gab , [X] ||| 0.0278341 1 ||| ||| 1
+Lanka was [X][X] [X] ||| Lanka zu beklagen gab , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.047619
+Lanka was [X] ||| Lanka zu beklagen gab , zählt [X] ||| 0.0278341 1 ||| ||| 1
+Lanka was [X][X] [X] ||| Lanka zu beklagen gab , zählt [X][X] [X] ||| 0.0278341 1 ||| ||| 0.047619
+Lanka was Mr Kumar Ponnambalam [X] ||| Lanka zu beklagen gab , zählt auch Herr Kumar Ponnambalam [X] ||| 0.0278341 1 ||| ||| 0.047619
+Lanka was Mr [X] ||| Lanka zu beklagen gab , zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 0.125
+Lanka was Mr [X][X] [X] ||| Lanka zu beklagen gab , zählt auch Herr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.047619
+Lanka was [X] ||| Lanka zu beklagen gab , zählt auch [X] ||| 0.0278341 1 ||| ||| 1
+Lanka was [X][X] [X] ||| Lanka zu beklagen gab , zählt auch [X][X] [X] ||| 0.0278341 1 ||| ||| 0.047619
+Lanka was [X] ||| Lanka zu beklagen gab [X] ||| 0.0278341 1 ||| ||| 1
+Lanka was [X][X] [X] ||| Lanka zu beklagen gab [X][X] [X] ||| 0.0278341 1 ||| ||| 0.047619
+Lanka [X] ||| Lanka übermitteln [X] ||| 0.0278341 1 ||| ||| 1
+Lanka [X][X] [X] ||| Lanka übermitteln [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.2
+Lanka [X][X] [X] ||| Lanka übermitteln [X][X] [X] ||| 0.0278341 1 ||| ||| 0.783333
+Lanka [X][X] [X] ||| Lanka übermitteln [X][X] würden , [X] ||| 0.0278341 1 ||| ||| 0.2
+Lanka [X][X] [X] ||| Lanka übermitteln [X][X] würden [X] ||| 0.0278341 1 ||| ||| 0.25
+Lanka and [X] ||| Lanka übermitteln und [X] ||| 0.0278341 1 ||| ||| 1
+Lanka and urging [X] ||| Lanka übermitteln und sie auffordern [X] ||| 0.0278341 1 ||| ||| 0.333333
+Lanka and urging [X] ||| Lanka übermitteln und sie auffordern würden , [X] ||| 0.0278341 1 ||| ||| 0.2
+Lanka and urging [X] ||| Lanka übermitteln und sie auffordern würden [X] ||| 0.0278341 1 ||| ||| 0.25
+legislative proposal [X] ||| Legislativvorschlag [X] ||| 0.0278341 1 ||| ||| 1
+countries [X] ||| Länder , [X] ||| 0.0278341 1 ||| ||| 1
+countries [X][X] [X] ||| Länder , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+countries which [X] ||| Länder , die [X] ||| 0.0278341 1 ||| ||| 1
+countries which [X][X] [X] ||| Länder , die [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+countries which [X][X] their [X][X] [X] ||| Länder , die ihr [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+countries [X] ||| Länder [X] ||| 0.0278341 1 ||| ||| 1
+countries [X][X] [X] ||| Länder [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+countries [X] ||| Ländern [X] ||| 0.0278341 1 ||| ||| 1
+countries [X][X] European Union [X] ||| Ländern [X][X] Europäischen Union [X] ||| 0.0278341 1 ||| ||| 0.142857
+countries [X][X] European [X] ||| Ländern [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.25
+countries [X][X] Union [X] ||| Ländern [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.142857
+countries [X][X] [X] ||| Ländern [X][X] [X] ||| 0.0278341 1 ||| ||| 0.892857
+countries of the European Union [X] ||| Ländern der Europäischen Union [X] ||| 0.0278341 1 ||| ||| 0.142857
+countries of the European [X] ||| Ländern der Europäischen [X] ||| 0.0278341 1 ||| ||| 0.25
+countries of the [X] ||| Ländern der [X] ||| 0.0278341 1 ||| ||| 0.5
+countries of the [X][X] [X] ||| Ländern der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142857
+reconciliation to [X] ||| Lösung [X] ||| 0.0278341 1 ||| ||| 1
+reconciliation to [X][X] situation [X] ||| Lösung [X][X] Situation [X] ||| 0.0278341 1 ||| ||| 0.0714286
+reconciliation to [X][X] [X] ||| Lösung [X][X] [X] ||| 0.0278341 1 ||| ||| 0.446429
+reconciliation to [X][X] difficult situation [X] ||| Lösung [X][X] schwierigen Situation [X] ||| 0.0278341 1 ||| ||| 0.0714286
+reconciliation to [X][X] difficult [X] ||| Lösung [X][X] schwierigen [X] ||| 0.0278341 1 ||| ||| 0.125
+reconciliation to a [X] ||| Lösung dieser [X] ||| 0.0278341 1 ||| ||| 0.5
+reconciliation to a [X][X] situation [X] ||| Lösung dieser [X][X] Situation [X] ||| 0.0278341 1 ||| ||| 0.0714286
+reconciliation to a [X][X] [X] ||| Lösung dieser [X][X] [X] ||| 0.0278341 1 ||| ||| 0.196429
+reconciliation to a very [X] ||| Lösung dieser sehr [X] ||| 0.0278341 1 ||| ||| 0.25
+reconciliation to a very [X][X] [X] ||| Lösung dieser sehr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0714286
+reconciliation to a very difficult [X] ||| Lösung dieser sehr schwierigen [X] ||| 0.0278341 1 ||| ||| 0.125
+34 year-old man who [X] ||| Mannes [X] ||| 0.00927803 1 ||| ||| 3
+man who [X] ||| Mannes [X] ||| 0.00927803 1 ||| ||| 3
+year-old man who [X] ||| Mannes [X] ||| 0.00927803 1 ||| ||| 3
+Member , Mr Zimeray , [X] ||| Mitglieds , Herrn Zimeray , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+Member , Mr Zimeray [X] ||| Mitglieds , Herrn Zimeray [X] ||| 0.0278341 1 ||| ||| 0.166667
+Member , Mr Zimeray [X][X] [X] ||| Mitglieds , Herrn Zimeray [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0555556
+Member , Mr [X] ||| Mitglieds , Herrn [X] ||| 0.0278341 1 ||| ||| 0.333333
+Member , Mr [X][X] [X] ||| Mitglieds , Herrn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.146465
+Member , [X] ||| Mitglieds , [X] ||| 0.0278341 1 ||| ||| 1
+Member , [X][X] , [X] ||| Mitglieds , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+Member , [X][X] , [X][X] [X] ||| Mitglieds , [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0555556
+Member , [X][X] [X] ||| Mitglieds , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.313131
+Member [X] ||| Mitglieds [X] ||| 0.0278341 1 ||| ||| 1
+Member [X][X] , [X] ||| Mitglieds [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+Member [X][X] , [X][X] [X] ||| Mitglieds [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0555556
+Member [X][X] Zimeray , [X] ||| Mitglieds [X][X] Zimeray , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+Member [X][X] Zimeray , [X][X] [X] ||| Mitglieds [X][X] Zimeray , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0555556
+Member [X][X] Zimeray [X] ||| Mitglieds [X][X] Zimeray [X] ||| 0.0278341 1 ||| ||| 0.166667
+Member [X][X] Zimeray [X][X] [X] ||| Mitglieds [X][X] Zimeray [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0555556
+Member [X][X] [X] ||| Mitglieds [X][X] [X] ||| 0.0278341 1 ||| ||| 0.646465
+Member [X][X] a petition [X][X] [X] ||| Mitglieds [X][X] [X][X] eine Petition [X] ||| 0.0278341 1 ||| ||| 0.0555556
+months ago [X] ||| Monaten [X] ||| 0.0278341 1 ||| ||| 1
+months ago [X] ||| Monaten einen [X] ||| 0.0278341 1 ||| ||| 1
+Nikitin . [X] ||| Nikitin . [X] ||| 0.0278341 1 ||| ||| 1
+Nikitin [X] ||| Nikitin [X] ||| 0.0804729 1 ||| ||| 6
+Nikitin to [X] ||| Nikitin [X] ||| 0.00463902 1 ||| ||| 6
+Nikitin to be [X] ||| Nikitin [X] ||| 0.00463902 1 ||| ||| 6
+Nikitin to be accused [X] ||| Nikitin [X] ||| 0.00463902 1 ||| ||| 6
+Nikitin to be accused of [X] ||| Nikitin [X] ||| 0.00463902 1 ||| ||| 6
+Nikitin [X][X] [X] ||| Nikitin [X][X] [X] ||| 0.00695852 1 ||| ||| 1.26803
+Nikitin to [X][X] [X] ||| Nikitin [X][X] [X] ||| 0.00695852 1 ||| ||| 1.26803
+Nikitin to be [X][X] [X] ||| Nikitin [X][X] [X] ||| 0.00695852 1 ||| ||| 1.26803
+Nikitin to be accused [X][X] [X] ||| Nikitin [X][X] [X] ||| 0.00695852 1 ||| ||| 1.26803
+the victims [X] ||| Opfern [X] ||| 0.013917 1 ||| ||| 2
+victims [X] ||| Opfern [X] ||| 0.013917 1 ||| ||| 2
+victims [X][X] [X] ||| Opfern [X][X] [X] ||| 0.0278341 1 ||| ||| 1
+House [X] ||| Parlament [X] ||| 0.00556682 1 ||| ||| 5
+Parliament [X] ||| Parlament [X] ||| 0.345024 1 ||| ||| 5
+you [X] ||| Parlament [X] ||| 0.00556682 1 ||| ||| 5
+House [X][X] ) [X] ||| Parlament [X][X] ) [X] ||| 0.0278341 1 ||| ||| 0.125
+Parliament [X][X] . [X] ||| Parlament [X][X] . [X] ||| 0.00927803 1 ||| ||| 0.25
+Parliament [X][X] an interest . [X] ||| Parlament [X][X] . [X] ||| 0.00927803 1 ||| ||| 0.25
+Parliament [X][X] interest . [X] ||| Parlament [X][X] . [X] ||| 0.00927803 1 ||| ||| 0.25
+you [X][X] debate [X] ||| Parlament [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.05
+you [X][X] debate on [X] ||| Parlament [X][X] Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.0277778
+Parliament [X][X] European Community [X] ||| Parlament [X][X] Europäischen Union [X] ||| 0.013917 1 ||| ||| 0.0444444
+Parliament [X][X] the European Community [X] ||| Parlament [X][X] Europäischen Union [X] ||| 0.013917 1 ||| ||| 0.0444444
+Parliament [X][X] European [X] ||| Parlament [X][X] Europäischen [X] ||| 0.00927803 1 ||| ||| 0.0857142
+Parliament [X][X] of the European [X] ||| Parlament [X][X] Europäischen [X] ||| 0.00927803 1 ||| ||| 0.0857142
+Parliament [X][X] the European [X] ||| Parlament [X][X] Europäischen [X] ||| 0.00927803 1 ||| ||| 0.0857142
+Parliament [X][X] months ago [X] ||| Parlament [X][X] Monaten [X] ||| 0.0278341 1 ||| ||| 0.0833333
+Parliament [X][X] months ago [X] ||| Parlament [X][X] Monaten einen [X] ||| 0.0278341 1 ||| ||| 0.0555556
+Parliament [X][X] Community [X] ||| Parlament [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0222222
+House [X][X] [X] ||| Parlament [X][X] [X] ||| 0.0614891 1 ||| ||| 4.22067
+Parliament [X][X] [X] ||| Parlament [X][X] [X] ||| 0.10489 1 ||| ||| 4.22067
+Parliament [X][X] an [X] ||| Parlament [X][X] [X] ||| 0.00131894 1 ||| ||| 4.22067
+Parliament [X][X] an interest [X] ||| Parlament [X][X] [X] ||| 0.00109912 1 ||| ||| 4.22067
+Parliament [X][X] interest [X] ||| Parlament [X][X] [X] ||| 0.00109912 1 ||| ||| 4.22067
+Parliament [X][X] of [X] ||| Parlament [X][X] [X] ||| 0.000366373 1 ||| ||| 4.22067
+Parliament [X][X] of the [X] ||| Parlament [X][X] [X] ||| 0.000314033 1 ||| ||| 4.22067
+Parliament [X][X] the [X] ||| Parlament [X][X] [X] ||| 0.000314033 1 ||| ||| 4.22067
+you [X][X] [X] ||| Parlament [X][X] [X] ||| 0.00414001 1 ||| ||| 4.22067
+Parliament [X][X] of [X][X] Community [X] ||| Parlament [X][X] [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0222222
+Parliament [X][X] an [X][X] [X] ||| Parlament [X][X] [X][X] [X] ||| 0.0129892 1 ||| ||| 0.178571
+Parliament [X][X] of [X][X] [X] ||| Parlament [X][X] [X][X] [X] ||| 0.00791726 1 ||| ||| 0.178571
+Parliament [X][X] of the [X][X] [X] ||| Parlament [X][X] [X][X] [X] ||| 0.0034638 1 ||| ||| 0.178571
+Parliament [X][X] the [X][X] [X] ||| Parlament [X][X] [X][X] [X] ||| 0.0034638 1 ||| ||| 0.178571
+Parliament [X][X] the [X] ||| Parlament [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.166667
+Parliament [X][X] the [X][X] European [X] ||| Parlament [X][X] der [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.0285714
+Parliament [X][X] the [X][X] Community [X] ||| Parlament [X][X] der [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0222222
+Parliament [X][X] the [X][X] [X] ||| Parlament [X][X] der [X][X] [X] ||| 0.0212591 1 ||| ||| 0.201587
+Parliament [X][X] the [X][X] the [X] ||| Parlament [X][X] der [X][X] [X] ||| 0.00657499 1 ||| ||| 0.201587
+Parliament [X][X] the whole [X] ||| Parlament [X][X] der gesamten [X] ||| 0.0172763 1 ||| ||| 0.146465
+Parliament [X][X] the whole of [X] ||| Parlament [X][X] der gesamten [X] ||| 0.0105578 1 ||| ||| 0.146465
+Parliament [X][X] the whole [X][X] [X] ||| Parlament [X][X] der gesamten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0507937
+Parliament [X][X] [X] ||| Parlament [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0555556
+you [X][X] a debate [X] ||| Parlament [X][X] einer Aussprache [X] ||| 0.0278341 1 ||| ||| 0.05
+you [X][X] a debate on [X] ||| Parlament [X][X] einer Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.0277778
+House [X][X] a [X] ||| Parlament [X][X] einer [X] ||| 0.0198815 1 ||| ||| 0.35
+you [X][X] a [X] ||| Parlament [X][X] einer [X] ||| 0.0079526 1 ||| ||| 0.35
+House [X][X] a [X][X] ) [X] ||| Parlament [X][X] einer [X][X] ) [X] ||| 0.0278341 1 ||| ||| 0.125
+House [X][X] a [X][X] [X] ||| Parlament [X][X] einer [X][X] [X] ||| 0.0256424 1 ||| ||| 0.352778
+you [X][X] a [X][X] [X] ||| Parlament [X][X] einer [X][X] [X] ||| 0.00219166 1 ||| ||| 0.352778
+Parliament [X][X] whole [X] ||| Parlament [X][X] gesamten [X] ||| 0.0130375 1 ||| ||| 0.194084
+Parliament [X][X] whole of [X] ||| Parlament [X][X] gesamten [X] ||| 0.00796739 1 ||| ||| 0.194084
+Parliament [X][X] whole of the [X] ||| Parlament [X][X] gesamten [X] ||| 0.00682918 1 ||| ||| 0.194084
+Parliament [X][X] whole [X][X] Community [X] ||| Parlament [X][X] gesamten [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0222222
+Parliament [X][X] whole [X][X] [X] ||| Parlament [X][X] gesamten [X][X] [X] ||| 0.0139171 1 ||| ||| 0.101587
+Parliament [X][X] whole of [X][X] [X] ||| Parlament [X][X] gesamten [X][X] [X] ||| 0.0139171 1 ||| ||| 0.101587
+Parliament has [X][X] . [X] ||| Parlament [X][X] hat . [X] ||| 0.013917 1 ||| ||| 0.166667
+Parliament has [X][X] interest . [X] ||| Parlament [X][X] hat . [X] ||| 0.013917 1 ||| ||| 0.166667
+Parliament has [X][X] [X] ||| Parlament [X][X] hat [X] ||| 0.0157977 1 ||| ||| 1.23333
+Parliament has [X][X] an [X] ||| Parlament [X][X] hat [X] ||| 0.00451364 1 ||| ||| 1.23333
+Parliament has [X][X] an interest [X] ||| Parlament [X][X] hat [X] ||| 0.00376137 1 ||| ||| 1.23333
+Parliament has [X][X] interest [X] ||| Parlament [X][X] hat [X] ||| 0.00376137 1 ||| ||| 1.23333
+Parliament has [X][X] an [X][X] [X] ||| Parlament [X][X] hat [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0833333
+you [X][X] on [X] ||| Parlament [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0277778
+you [X][X] [X] ||| Parlament [X][X] nach [X] ||| 0.0278341 1 ||| ||| 0.2
+you [X][X] a debate [X] ||| Parlament [X][X] nach einer Aussprache [X] ||| 0.0278341 1 ||| ||| 0.05
+you [X][X] a debate on [X] ||| Parlament [X][X] nach einer Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.0277778
+you [X][X] a [X] ||| Parlament [X][X] nach einer [X] ||| 0.0278341 1 ||| ||| 0.1
+you [X][X] a [X][X] [X] ||| Parlament [X][X] nach einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0277778
+you have [X] ||| Parlament besteht [X] ||| 0.0278341 1 ||| ||| 1
+you have [X][X] debate [X] ||| Parlament besteht [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.05
+you have [X][X] debate on [X] ||| Parlament besteht [X][X] Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.0277778
+you have [X][X] [X] ||| Parlament besteht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.177778
+you have [X][X] on [X] ||| Parlament besteht [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0277778
+you have requested [X] ||| Parlament besteht der Wunsch [X] ||| 0.0278341 1 ||| ||| 0.25
+you have requested [X][X] [X] ||| Parlament besteht der Wunsch [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0777778
+you have requested [X][X] on [X] ||| Parlament besteht der Wunsch [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0277778
+you have requested [X] ||| Parlament besteht der Wunsch nach [X] ||| 0.0278341 1 ||| ||| 0.2
+you have requested [X][X] [X] ||| Parlament besteht der Wunsch nach [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0777778
+you have requested [X][X] on [X] ||| Parlament besteht der Wunsch nach [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0277778
+you have requested a debate [X] ||| Parlament besteht der Wunsch nach einer Aussprache [X] ||| 0.0278341 1 ||| ||| 0.05
+you have requested a [X] ||| Parlament besteht der Wunsch nach einer [X] ||| 0.0278341 1 ||| ||| 0.1
+you have requested a [X][X] [X] ||| Parlament besteht der Wunsch nach einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0277778
+you have [X] ||| Parlament besteht der [X] ||| 0.0278341 1 ||| ||| 1
+you have [X][X] debate [X] ||| Parlament besteht der [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.05
+you have [X][X] debate on [X] ||| Parlament besteht der [X][X] Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.0277778
+you have [X][X] [X] ||| Parlament besteht der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.177778
+you have [X][X] on [X] ||| Parlament besteht der [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0277778
+House rose and observed [X] ||| Parlament erhebt sich zu [X] ||| 0.0278341 1 ||| ||| 0.5
+House rose and observed [X][X] [X] ||| Parlament erhebt sich zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.325
+House rose and observed a [X] ||| Parlament erhebt sich zu einer [X] ||| 0.0278341 1 ||| ||| 0.25
+Parliament just [X] ||| Parlament erst [X] ||| 0.0278341 1 ||| ||| 1
+Parliament just [X][X] months ago [X] ||| Parlament erst [X][X] Monaten [X] ||| 0.0278341 1 ||| ||| 0.0833333
+Parliament just [X][X] months ago [X] ||| Parlament erst [X][X] Monaten einen [X] ||| 0.0278341 1 ||| ||| 0.0555556
+Parliament just [X][X] [X] ||| Parlament erst [X][X] [X] ||| 0.0278341 1 ||| ||| 0.305556
+Parliament just [X][X] [X] ||| Parlament erst [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0555556
+Parliament just [X] ||| Parlament erst vor [X] ||| 0.0278341 1 ||| ||| 1
+Parliament just [X][X] months ago [X] ||| Parlament erst vor [X][X] Monaten [X] ||| 0.0278341 1 ||| ||| 0.0833333
+Parliament just [X][X] months ago [X] ||| Parlament erst vor [X][X] Monaten einen [X] ||| 0.0278341 1 ||| ||| 0.0555556
+Parliament just [X][X] [X] ||| Parlament erst vor [X][X] [X] ||| 0.0278341 1 ||| ||| 0.305556
+Parliament just [X][X] [X] ||| Parlament erst vor [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0555556
+Parliament just a few [X] ||| Parlament erst vor wenigen [X] ||| 0.0278341 1 ||| ||| 0.166667
+Parliament just a few [X][X] [X] ||| Parlament erst vor wenigen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.138889
+Parliament just a few [X][X] [X] ||| Parlament erst vor wenigen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0555556
+Parliament has consistently shown [X] ||| Parlament immer wieder befaßt hat [X] ||| 0.0173963 1 ||| ||| 0.533333
+Parliament has consistently shown an [X] ||| Parlament immer wieder befaßt hat [X] ||| 0.0104378 1 ||| ||| 0.533333
+Parliament has consistently shown [X][X] [X] ||| Parlament immer wieder befaßt hat [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0833333
+Parliament and [X] ||| Parlament und [X] ||| 0.0278341 1 ||| ||| 1
+Parliament and [X][X] European Community [X] ||| Parlament und [X][X] Europäischen Union [X] ||| 0.0278341 1 ||| ||| 0.0222222
+Parliament and [X][X] European [X] ||| Parlament und [X][X] Europäischen [X] ||| 0.013917 1 ||| ||| 0.0571428
+Parliament and [X][X] the European [X] ||| Parlament und [X][X] Europäischen [X] ||| 0.013917 1 ||| ||| 0.0571428
+Parliament and [X][X] Community [X] ||| Parlament und [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0222222
+Parliament and [X][X] [X] ||| Parlament und [X][X] [X] ||| 0.0203702 1 ||| ||| 0.562338
+Parliament and [X][X] of [X] ||| Parlament und [X][X] [X] ||| 0.00274984 1 ||| ||| 0.562338
+Parliament and [X][X] of the [X] ||| Parlament und [X][X] [X] ||| 0.002357 1 ||| ||| 0.562338
+Parliament and [X][X] the [X] ||| Parlament und [X][X] [X] ||| 0.002357 1 ||| ||| 0.562338
+Parliament and [X][X] of [X][X] [X] ||| Parlament und [X][X] [X][X] [X] ||| 0.0193629 1 ||| ||| 0.0730159
+Parliament and [X][X] the [X][X] [X] ||| Parlament und [X][X] [X][X] [X] ||| 0.00847124 1 ||| ||| 0.0730159
+Parliament and [X][X] whole [X] ||| Parlament und [X][X] gesamten [X] ||| 0.0172763 1 ||| ||| 0.146465
+Parliament and [X][X] whole of [X] ||| Parlament und [X][X] gesamten [X] ||| 0.0105578 1 ||| ||| 0.146465
+Parliament and [X][X] whole [X][X] [X] ||| Parlament und [X][X] gesamten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0507937
+Parliament and by [X] ||| Parlament und von [X] ||| 0.0278341 1 ||| ||| 0.333333
+Parliament and by [X][X] European [X] ||| Parlament und von [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.0285714
+Parliament and by [X][X] Community [X] ||| Parlament und von [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0222222
+Parliament and by [X][X] [X] ||| Parlament und von [X][X] [X] ||| 0.0195831 1 ||| ||| 0.348052
+Parliament and by [X][X] of [X] ||| Parlament und von [X][X] [X] ||| 0.00444285 1 ||| ||| 0.348052
+Parliament and by [X][X] the [X] ||| Parlament und von [X][X] [X] ||| 0.00380815 1 ||| ||| 0.348052
+Parliament and by the [X] ||| Parlament und von der [X] ||| 0.0278341 1 ||| ||| 0.166667
+Parliament and by the [X][X] [X] ||| Parlament und von der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.153968
+Parliament and by the whole [X] ||| Parlament und von der gesamten [X] ||| 0.0278341 1 ||| ||| 0.0909091
+Parliament , [X] ||| Parlaments [X] ||| 0.00556682 1 ||| ||| 5
+Parliament , a [X] ||| Parlaments [X] ||| 0.00556682 1 ||| ||| 5
+Parliament , a date [X] ||| Parlaments [X] ||| 0.00556682 1 ||| ||| 5
+Parliament , a date has [X] ||| Parlaments [X] ||| 0.00556682 1 ||| ||| 5
+Parliament [X] ||| Parlaments [X] ||| 0.00556682 1 ||| ||| 5
+petition [X] ||| Petition [X] ||| 0.0278341 1 ||| ||| 1
+plenary part-session [X] ||| Plenartagung [X] ||| 0.0278341 1 ||| ||| 1
+plenary part-session of [X] ||| Plenartagung des [X] ||| 0.0278341 1 ||| ||| 0.5
+positions [X] ||| Position [X] ||| 0.0278341 1 ||| ||| 1
+press [X] ||| Presse [X] ||| 0.0278341 1 ||| ||| 1
+press [X][X] [X] ||| Presse [X][X] [X] ||| 0.0278341 1 ||| ||| 0.333333
+press and [X] ||| Presse und [X] ||| 0.0278341 1 ||| ||| 1
+press and television [X] ||| Presse und dem Fernsehen [X] ||| 0.0278341 1 ||| ||| 0.333333
+President , [X] ||| Präsidentin ! [X] ||| 0.0278341 1 ||| ||| 1
+President , [X][X] [X] ||| Präsidentin ! [X][X] Sie [X] ||| 0.0278341 1 ||| ||| 0.125
+President , [X][X] [X] ||| Präsidentin ! [X][X] [X] ||| 0.0278341 1 ||| ||| 0.325
+President , I [X] ||| Präsidentin ! ich [X] ||| 0.0278341 1 ||| ||| 0.5
+President , I [X][X] [X] ||| Präsidentin ! ich [X][X] Sie [X] ||| 0.0278341 1 ||| ||| 0.125
+President , I [X][X] [X] ||| Präsidentin ! ich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.325
+President , [X] ||| Präsidentin , [X] ||| 0.57504 1 ||| ||| 3
+President , [X][X] . [X] ||| Präsidentin , [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.222222
+President , [X][X] [X] ||| Präsidentin , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.622222
+President , [X] ||| Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 1
+President , on [X] ||| Präsidentin , zur [X] ||| 0.0278341 1 ||| ||| 0.666666
+President , on [X][X] . [X] ||| Präsidentin , zur [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.222222
+President , on [X][X] [X] ||| Präsidentin , zur [X][X] [X] ||| 0.0278341 1 ||| ||| 0.622222
+President [X] ||| Präsidentin [X] ||| 1 1 ||| ||| 4
+President [X][X] . [X] ||| Präsidentin [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.222222
+President [X][X] [X] ||| Präsidentin [X][X] [X] ||| 0.184241 1 ||| ||| 1.68889
+[X][X] President [X] ||| Präsidentin [X][X] [X] ||| 0.00659229 1 ||| ||| 1.68889
+[X][X] the [X][X] President [X] ||| Präsidentin [X][X] [X][X] das [X] ||| 0.013917 1 ||| ||| 0.133333
+[X][X] to the [X][X] President [X] ||| Präsidentin [X][X] [X][X] das [X] ||| 0.013917 1 ||| ||| 0.133333
+to [X][X] the [X][X] President [X] ||| Präsidentin [X][X] in [X][X] das [X] ||| 0.0278341 1 ||| ||| 0.0666667
+Sri Lankan President [X] ||| Präsidentin von Sri Lanka [X] ||| 0.0278341 1 ||| ||| 0.333333
+[X][X] Sri Lankan President [X] ||| Präsidentin von Sri Lanka [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] the Sri Lankan President [X] ||| Präsidentin von Sri Lanka [X][X] das [X] ||| 0.0278341 1 ||| ||| 0.0666667
+to [X][X] Sri Lankan President [X] ||| Präsidentin von Sri Lanka in [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0666667
+President [X] ||| Präsidentin von [X] ||| 0.0278341 1 ||| ||| 1
+[X][X] President [X] ||| Präsidentin von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.4
+[X][X] the [X][X] President [X] ||| Präsidentin von [X][X] [X][X] das [X] ||| 0.013917 1 ||| ||| 0.133333
+[X][X] to the [X][X] President [X] ||| Präsidentin von [X][X] [X][X] das [X] ||| 0.013917 1 ||| ||| 0.133333
+to [X][X] the [X][X] President [X] ||| Präsidentin von [X][X] in [X][X] das [X] ||| 0.0278341 1 ||| ||| 0.0666667
+President [X] ||| Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 1
+President [X][X] Bush [X] ||| Präsidentschaftskandidaten [X][X] Bush [X] ||| 0.0278341 1 ||| ||| 0.0322581
+President [X][X] Governor [X] ||| Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.222222
+President [X][X] the Governor [X] ||| Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.222222
+President [X][X] Governor [X][X] Bush [X] ||| Präsidentschaftskandidaten [X][X] Gouverneur [X][X] Bush [X] ||| 0.0278341 1 ||| ||| 0.0322581
+President [X][X] Governor [X][X] [X] ||| Präsidentschaftskandidaten [X][X] Gouverneur [X][X] [X] ||| 0.013917 1 ||| ||| 0.169779
+President [X][X] the Governor [X][X] [X] ||| Präsidentschaftskandidaten [X][X] Gouverneur [X][X] [X] ||| 0.013917 1 ||| ||| 0.169779
+President [X][X] Governor of [X] ||| Präsidentschaftskandidaten [X][X] Gouverneur von [X] ||| 0.013917 1 ||| ||| 0.133333
+President [X][X] the Governor of [X] ||| Präsidentschaftskandidaten [X][X] Gouverneur von [X] ||| 0.013917 1 ||| ||| 0.133333
+President [X][X] Governor of [X][X] [X] ||| Präsidentschaftskandidaten [X][X] Gouverneur von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0848896
+President [X][X] Texas , Mr [X] ||| Präsidentschaftskandidaten [X][X] Texas , George W. [X] ||| 0.0278341 1 ||| ||| 0.0526316
+President [X][X] [X] ||| Präsidentschaftskandidaten [X][X] [X] ||| 0.185118 1 ||| ||| 1.42933
+President [X][X] the [X] ||| Präsidentschaftskandidaten [X][X] [X] ||| 0.00649116 1 ||| ||| 1.42933
+President [X][X] the [X][X] Bush [X] ||| Präsidentschaftskandidaten [X][X] [X][X] Bush [X] ||| 0.0278341 1 ||| ||| 0.0322581
+President [X][X] the [X][X] [X] ||| Präsidentschaftskandidaten [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.151556
+President [X][X] of [X] ||| Präsidentschaftskandidaten [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0666667
+President [X][X] of [X][X] Bush [X] ||| Präsidentschaftskandidaten [X][X] von [X][X] Bush [X] ||| 0.0278341 1 ||| ||| 0.0322581
+President [X][X] of [X][X] [X] ||| Präsidentschaftskandidaten [X][X] von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0848896
+President and to the Governor [X] ||| Präsidentschaftskandidaten und Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.111111
+President and [X] ||| Präsidentschaftskandidaten und [X] ||| 0.0151822 1 ||| ||| 1.83333
+President and to [X] ||| Präsidentschaftskandidaten und [X] ||| 0.00759112 1 ||| ||| 1.83333
+President and to the [X] ||| Präsidentschaftskandidaten und [X] ||| 0.00506074 1 ||| ||| 1.83333
+President and [X][X] Bush [X] ||| Präsidentschaftskandidaten und [X][X] Bush [X] ||| 0.013917 1 ||| ||| 0.0645162
+President and to [X][X] Bush [X] ||| Präsidentschaftskandidaten und [X][X] Bush [X] ||| 0.013917 1 ||| ||| 0.0645162
+President and [X][X] [X] ||| Präsidentschaftskandidaten und [X][X] [X] ||| 0.010801 1 ||| ||| 0.67689
+President and to [X][X] [X] ||| Präsidentschaftskandidaten und [X][X] [X] ||| 0.010801 1 ||| ||| 0.67689
+President and to the [X][X] [X] ||| Präsidentschaftskandidaten und [X][X] [X] ||| 0.00623207 1 ||| ||| 0.67689
+President and [X][X] of [X] ||| Präsidentschaftskandidaten und [X][X] von [X] ||| 0.013917 1 ||| ||| 0.133333
+President and to [X][X] of [X] ||| Präsidentschaftskandidaten und [X][X] von [X] ||| 0.013917 1 ||| ||| 0.133333
+President and [X][X] of [X][X] [X] ||| Präsidentschaftskandidaten und [X][X] von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0848896
+of quota penalties [X] ||| Quotenstrafe belegt [X] ||| 0.013917 1 ||| ||| 2
+quota penalties [X] ||| Quotenstrafe belegt [X] ||| 0.013917 1 ||| ||| 2
+of quota penalties [X][X] [X] ||| Quotenstrafe belegt [X][X] [X] ||| 0.0119289 1 ||| ||| 0.583333
+quota penalties [X][X] [X] ||| Quotenstrafe belegt [X][X] [X] ||| 0.0159052 1 ||| ||| 0.583333
+of quota penalties should be [X] ||| Quotenstrafe belegt werden sollen [X] ||| 0.0119289 1 ||| ||| 0.583333
+quota penalties should be [X] ||| Quotenstrafe belegt werden sollen [X] ||| 0.0159052 1 ||| ||| 0.583333
+right [X] ||| Recht [X] ||| 0.0278341 1 ||| ||| 1
+legal principle [X] ||| Rechtsgrundsatz [X] ||| 0.0278341 1 ||| ||| 1
+legal principle [X][X] fisheries policy [X] ||| Rechtsgrundsatz [X][X] Fischereipolitik darstellt [X] ||| 0.0278341 1 ||| ||| 0.111111
+legal principle [X][X] proposal [X] ||| Rechtsgrundsatz [X][X] Vorschlag [X] ||| 0.0278341 1 ||| ||| 0.05
+legal principle [X][X] [X] ||| Rechtsgrundsatz [X][X] [X] ||| 0.0278341 1 ||| ||| 0.840278
+legal principle [X][X] a proposal [X] ||| Rechtsgrundsatz [X][X] ein Vorschlag [X] ||| 0.0278341 1 ||| ||| 0.05
+legal principle [X][X] a [X] ||| Rechtsgrundsatz [X][X] ein [X] ||| 0.0278341 1 ||| ||| 0.0625
+legal principle [X][X] common [X] ||| Rechtsgrundsatz [X][X] gemeinsamen [X] ||| 0.0278341 1 ||| ||| 0.2
+legal principle [X][X] common [X][X] [X] ||| Rechtsgrundsatz [X][X] gemeinsamen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.306944
+legal principle [X][X] and [X] ||| Rechtsgrundsatz [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0833333
+legal principle [X][X] and [X][X] [X] ||| Rechtsgrundsatz [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.05
+legal principle [X][X] and a [X] ||| Rechtsgrundsatz [X][X] und ein [X] ||| 0.0278341 1 ||| ||| 0.0625
+legal principle of the [X] ||| Rechtsgrundsatz der [X] ||| 0.0278341 1 ||| ||| 0.333333
+legal principle of the [X][X] [X] ||| Rechtsgrundsatz der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.306944
+legal principle of the common [X] ||| Rechtsgrundsatz der gemeinsamen [X] ||| 0.0278341 1 ||| ||| 0.2
+Russia , [X] ||| Rußland [X] ||| 0.013917 1 ||| ||| 2
+Russia [X] ||| Rußland [X] ||| 0.013917 1 ||| ||| 2
+minute ' s silence ) [X] ||| Schweigeminute . ) [X] ||| 0.0278341 1 ||| ||| 0.5
+minute ' s silence [X] ||| Schweigeminute . [X] ||| 0.0278341 1 ||| ||| 1
+minute ' s silence . [X] ||| Schweigeminute zu erheben . [X] ||| 0.0278341 1 ||| ||| 0.5
+minute ' s silence [X] ||| Schweigeminute zu erheben [X] ||| 0.0278341 1 ||| ||| 1
+you , Madam President , [X] ||| Sie , Frau Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+you , Madam President , [X] ||| Sie , Frau Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.0666667
+you , Madam President [X] ||| Sie , Frau Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.166667
+you , Madam [X] ||| Sie , Frau [X] ||| 0.0278341 1 ||| ||| 0.333333
+you , Madam [X][X] [X] ||| Sie , Frau [X][X] [X] ||| 0.0278341 1 ||| ||| 0.157576
+you , Madam [X][X] [X] ||| Sie , Frau [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0666667
+you , [X] ||| Sie , [X] ||| 0.0278341 1 ||| ||| 1
+you , [X][X] , [X] ||| Sie , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+you , [X][X] , [X] ||| Sie , [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0666667
+you , [X][X] [X] ||| Sie , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.324242
+you , [X][X] [X] ||| Sie , [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0666667
+you [X] ||| Sie [X] ||| 0.833333 1 ||| ||| 6
+your [X] ||| Sie [X] ||| 0.00463902 1 ||| ||| 6
+you [X][X] , [X] ||| Sie [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.167832
+you [X][X] , [X][X] [X] ||| Sie [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+you [X][X] , i.e. [X] ||| Sie [X][X] , d. h. [X] ||| 0.0278341 1 ||| ||| 0.0666667
+you [X][X] , i.e. on [X] ||| Sie [X][X] , d. h. am [X] ||| 0.0278341 1 ||| ||| 0.0526316
+you [X][X] , [X] ||| Sie [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] in [X] ||| Sie [X][X] , mit [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] in which [X] ||| Sie [X][X] , mit dem [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] in which [X] ||| Sie [X][X] , mit dem sich [X] ||| 0.0278341 1 ||| ||| 0.0714286
+[X][X] case [X] ||| Sie [X][X] Fall [X] ||| 0.0278341 1 ||| ||| 0.25
+draw your attention [X][X] case [X] ||| Sie [X][X] Fall aufmerksam machen , [X] ||| 0.0278341 1 ||| ||| 0.111111
+draw your attention [X][X] case [X] ||| Sie [X][X] Fall aufmerksam machen [X] ||| 0.0278341 1 ||| ||| 0.142857
+you [X][X] Governor [X] ||| Sie [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.0545454
+you [X][X] the Governor [X] ||| Sie [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.0545454
+you [X][X] to the Governor [X] ||| Sie [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.0545454
+you [X][X] President , [X] ||| Sie [X][X] Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+you [X][X] President , [X] ||| Sie [X][X] Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.0666667
+you [X][X] President [X] ||| Sie [X][X] Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.166667
+you [X][X] President [X] ||| Sie [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0526316
+you [X][X] President [X][X] Governor [X] ||| Sie [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.0181818
+you [X][X] President [X][X] [X] ||| Sie [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0205561 1 ||| ||| 0.0932781
+you [X][X] President [X][X] the [X] ||| Sie [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.00727801 1 ||| ||| 0.0932781
+you [X][X] President and [X] ||| Sie [X][X] Präsidentschaftskandidaten und [X] ||| 0.0157865 1 ||| ||| 0.0607986
+you [X][X] President and to [X] ||| Sie [X][X] Präsidentschaftskandidaten und [X] ||| 0.0120476 1 ||| ||| 0.0607986
+you [X][X] President and [X][X] [X] ||| Sie [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0181818
+you [X][X] [X] ||| Sie [X][X] [X] ||| 0.554476 1 ||| ||| 2.10005
+you [X][X] the [X] ||| Sie [X][X] [X] ||| 0.000323269 1 ||| ||| 2.10005
+you [X][X] to [X] ||| Sie [X][X] [X] ||| 0.000348791 1 ||| ||| 2.10005
+you [X][X] to the [X] ||| Sie [X][X] [X] ||| 0.000323269 1 ||| ||| 2.10005
+you [X][X] to [X][X] [X] ||| Sie [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0181818
+you [X][X] raise [X][X] , [X] ||| Sie [X][X] [X][X] ansprechen , [X] ||| 0.0278341 1 ||| ||| 0.0769231
+you [X][X] raise [X][X] [X] ||| Sie [X][X] [X][X] ansprechen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+you [X][X] on [X] ||| Sie [X][X] am [X] ||| 0.0278341 1 ||| ||| 0.0526316
+draw your attention [X][X] [X] ||| Sie [X][X] aufmerksam machen , [X] ||| 0.0278341 1 ||| ||| 0.111111
+draw your attention [X][X] in [X] ||| Sie [X][X] aufmerksam machen , mit [X] ||| 0.0278341 1 ||| ||| 0.1
+draw your attention [X][X] [X] ||| Sie [X][X] aufmerksam machen [X] ||| 0.0278341 1 ||| ||| 0.142857
+you [X][X] to [X] ||| Sie [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.166667
+you [X][X] to [X][X] Governor [X] ||| Sie [X][X] bei [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.0181818
+you [X][X] to [X][X] [X] ||| Sie [X][X] bei [X][X] [X] ||| 0.0210063 1 ||| ||| 0.206708
+you [X][X] to [X][X] the [X] ||| Sie [X][X] bei [X][X] [X] ||| 0.00328424 1 ||| ||| 0.206708
+you [X][X] to [X][X] to [X] ||| Sie [X][X] bei [X][X] [X] ||| 0.00354353 1 ||| ||| 0.206708
+you [X][X] to [X][X] and [X] ||| Sie [X][X] bei [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0344828
+you [X][X] to the President [X] ||| Sie [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0526316
+you [X][X] to the [X] ||| Sie [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0909091
+you [X][X] to the [X][X] [X] ||| Sie [X][X] bei dem [X][X] [X] ||| 0.0278341 1 ||| ||| 0.103371
+you [X][X] i.e. [X] ||| Sie [X][X] d. h. [X] ||| 0.0278341 1 ||| ||| 0.0666667
+you [X][X] i.e. on [X] ||| Sie [X][X] d. h. am [X] ||| 0.0278341 1 ||| ||| 0.0526316
+you [X][X] the President [X] ||| Sie [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0526316
+you [X][X] the President [X][X] [X] ||| Sie [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0688879
+you [X][X] the President and [X] ||| Sie [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.0344828
+[X][X] which [X] ||| Sie [X][X] dem [X] ||| 0.013917 1 ||| ||| 0.181818
+you [X][X] the [X] ||| Sie [X][X] dem [X] ||| 0.013917 1 ||| ||| 0.181818
+you [X][X] the [X][X] Governor [X] ||| Sie [X][X] dem [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.0181818
+you [X][X] the [X][X] [X] ||| Sie [X][X] dem [X][X] [X] ||| 0.018674 1 ||| ||| 0.154077
+you [X][X] the [X][X] the [X] ||| Sie [X][X] dem [X][X] [X] ||| 0.0044061 1 ||| ||| 0.154077
+you [X][X] the [X][X] to [X] ||| Sie [X][X] dem [X][X] [X] ||| 0.00475396 1 ||| ||| 0.154077
+[X][X] which [X] ||| Sie [X][X] dem sich [X] ||| 0.0278341 1 ||| ||| 0.0714286
+you [X][X] [X] ||| Sie [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0666667
+you [X][X] raise this question [X] ||| Sie [X][X] diese Frage ansprechen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] in [X] ||| Sie [X][X] mit [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] in which [X] ||| Sie [X][X] mit dem [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] in which [X] ||| Sie [X][X] mit dem sich [X] ||| 0.0278341 1 ||| ||| 0.0714286
+you [X][X] and [X] ||| Sie [X][X] und [X] ||| 0.0112667 1 ||| ||| 0.0851888
+you [X][X] and to [X] ||| Sie [X][X] und [X] ||| 0.00859827 1 ||| ||| 0.0851888
+you [X][X] and to the [X] ||| Sie [X][X] und [X] ||| 0.00796911 1 ||| ||| 0.0851888
+you [X][X] and [X][X] [X] ||| Sie [X][X] und [X][X] [X] ||| 0.013917 1 ||| ||| 0.0363636
+you [X][X] and to [X][X] [X] ||| Sie [X][X] und [X][X] [X] ||| 0.013917 1 ||| ||| 0.0363636
+to [X] ||| Sie auf [X] ||| 0.0278341 1 ||| ||| 1
+to [X][X] [X] ||| Sie auf [X][X] [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] to [X][X] [X] ||| Sie auf [X][X] [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.111111
+[X][X] to [X][X] in [X] ||| Sie auf [X][X] [X][X] , mit [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] to [X][X] in which [X] ||| Sie auf [X][X] [X][X] , mit dem [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] to [X][X] in which [X] ||| Sie auf [X][X] [X][X] , mit dem sich [X] ||| 0.0278341 1 ||| ||| 0.0714286
+[X][X] to [X][X] [X] ||| Sie auf [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.253968
+[X][X] to [X][X] in [X] ||| Sie auf [X][X] [X][X] mit [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] to [X][X] in which [X] ||| Sie auf [X][X] [X][X] mit dem [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] to [X][X] in which [X] ||| Sie auf [X][X] [X][X] mit dem sich [X] ||| 0.0278341 1 ||| ||| 0.0714286
+draw your attention to [X][X] [X] ||| Sie auf [X][X] aufmerksam machen , [X] ||| 0.0278341 1 ||| ||| 0.111111
+draw your attention to [X][X] [X] ||| Sie auf [X][X] aufmerksam machen [X] ||| 0.0278341 1 ||| ||| 0.142857
+to a case [X] ||| Sie auf einen Fall [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] to a case [X] ||| Sie auf einen Fall [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.111111
+[X][X] to a case [X][X] [X] ||| Sie auf einen Fall [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.162338
+[X][X] to a case [X][X] [X] ||| Sie auf einen Fall [X][X] , [X][X] sich [X] ||| 0.0278341 1 ||| ||| 0.0714286
+[X][X] to a case in [X] ||| Sie auf einen Fall [X][X] , mit [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] to a case [X] ||| Sie auf einen Fall [X][X] [X] ||| 0.0278341 1 ||| ||| 0.253968
+[X][X] to a case [X][X] [X] ||| Sie auf einen Fall [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.324675
+[X][X] to a case [X][X] [X] ||| Sie auf einen Fall [X][X] [X][X] sich [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] to a case in [X] ||| Sie auf einen Fall [X][X] mit [X] ||| 0.0278341 1 ||| ||| 0.1
+to a [X] ||| Sie auf einen [X] ||| 0.0278341 1 ||| ||| 1
+you represent , [X] ||| Sie vertreten , [X] ||| 0.0278341 1 ||| ||| 0.333333
+you represent , [X][X] Governor [X] ||| Sie vertreten , [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.0181818
+you represent , [X][X] President [X] ||| Sie vertreten , [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0526316
+you represent , [X][X] [X] ||| Sie vertreten , [X][X] [X] ||| 0.0230919 1 ||| ||| 0.297617
+you represent , [X][X] the [X] ||| Sie vertreten , [X][X] [X] ||| 0.00228105 1 ||| ||| 0.297617
+you represent , [X][X] to [X] ||| Sie vertreten , [X][X] [X] ||| 0.00246114 1 ||| ||| 0.297617
+you represent , [X][X] and [X] ||| Sie vertreten , [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0344828
+you represent , to [X] ||| Sie vertreten , bei [X] ||| 0.0278341 1 ||| ||| 0.166667
+you represent , to [X][X] [X] ||| Sie vertreten , bei [X][X] [X] ||| 0.0278341 1 ||| ||| 0.156002
+you represent , to the [X] ||| Sie vertreten , bei dem [X] ||| 0.0278341 1 ||| ||| 0.0909091
+you represent [X] ||| Sie vertreten [X] ||| 0.0278341 1 ||| ||| 1
+you represent [X][X] Governor [X] ||| Sie vertreten [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0363636
+you represent [X][X] the Governor [X] ||| Sie vertreten [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0363636
+you represent [X][X] President [X] ||| Sie vertreten [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0526316
+you represent [X][X] President [X][X] [X] ||| Sie vertreten [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0688879
+you represent [X][X] President and [X] ||| Sie vertreten [X][X] Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.0344828
+you represent [X][X] [X] ||| Sie vertreten [X][X] [X] ||| 0.0235567 1 ||| ||| 0.488674
+you represent [X][X] the [X] ||| Sie vertreten [X][X] [X] ||| 0.00138923 1 ||| ||| 0.488674
+you represent [X][X] to [X] ||| Sie vertreten [X][X] [X] ||| 0.00149891 1 ||| ||| 0.488674
+you represent [X][X] to the [X] ||| Sie vertreten [X][X] [X] ||| 0.00138923 1 ||| ||| 0.488674
+you represent [X][X] to [X][X] [X] ||| Sie vertreten [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0181818
+you represent [X][X] the President [X] ||| Sie vertreten [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0526316
+you represent [X][X] the [X] ||| Sie vertreten [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0909091
+you represent [X][X] the [X][X] [X] ||| Sie vertreten [X][X] dem [X][X] [X] ||| 0.0278341 1 ||| ||| 0.103371
+you represent [X][X] and [X] ||| Sie vertreten [X][X] und [X] ||| 0.0157865 1 ||| ||| 0.0607986
+you represent [X][X] and to [X] ||| Sie vertreten [X][X] und [X] ||| 0.0120476 1 ||| ||| 0.0607986
+you represent [X][X] and [X][X] [X] ||| Sie vertreten [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0181818
+you wish , [X] ||| Sie wollen , [X] ||| 0.0278341 1 ||| ||| 0.333333
+you wish , [X][X] , [X] ||| Sie wollen , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0769231
+you wish , [X][X] [X] ||| Sie wollen , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.28713
+you wish , [X][X] on [X] ||| Sie wollen , [X][X] am [X] ||| 0.0278341 1 ||| ||| 0.0526316
+you wish , raise [X][X] [X] ||| Sie wollen , [X][X] ansprechen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+you wish , [X][X] i.e. [X] ||| Sie wollen , [X][X] d. h. [X] ||| 0.0278341 1 ||| ||| 0.0666667
+you wish [X] ||| Sie wollen [X] ||| 0.0278341 1 ||| ||| 1
+you wish [X][X] , [X] ||| Sie wollen [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0769231
+you wish [X][X] , [X][X] [X] ||| Sie wollen [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+you wish [X][X] , i.e. [X] ||| Sie wollen [X][X] , d. h. [X] ||| 0.0278341 1 ||| ||| 0.0666667
+you wish [X][X] [X] ||| Sie wollen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.28713
+you wish [X][X] on [X] ||| Sie wollen [X][X] am [X] ||| 0.0278341 1 ||| ||| 0.0526316
+you wish [X][X] i.e. [X] ||| Sie wollen [X][X] d. h. [X] ||| 0.0278341 1 ||| ||| 0.0666667
+you wish [X][X] i.e. on [X] ||| Sie wollen [X][X] d. h. am [X] ||| 0.0278341 1 ||| ||| 0.0526316
+keeping with [X] ||| Sinne [X] ||| 0.0278341 1 ||| ||| 1
+keeping with [X][X] [X] ||| Sinne [X][X] [X] ||| 0.0278341 1 ||| ||| 0.25
+keeping with the positions [X] ||| Sinne der Position [X] ||| 0.0278341 1 ||| ||| 0.25
+keeping with the [X] ||| Sinne der [X] ||| 0.0278341 1 ||| ||| 0.5
+situation [X] ||| Situation [X] ||| 0.0278341 1 ||| ||| 1
+session [X] ||| Sitzungsperiode [X] ||| 0.0278341 1 ||| ||| 1
+fleet [X] ||| Soll [X] ||| 0.0278341 1 ||| ||| 1
+fleet [X][X] [X] ||| Soll [X][X] [X] ||| 0.0278341 1 ||| ||| 0.5
+fleet reduction targets [X] ||| Soll zur Flottenverkleinerung [X] ||| 0.0278341 1 ||| ||| 0.5
+Sri Lanka [X] ||| Sri Lanka [X] ||| 0.160946 1 ||| ||| 3
+Sri Lankan [X] ||| Sri Lanka [X] ||| 0.00927803 1 ||| ||| 3
+Sri Lanka [X][X] [X] ||| Sri Lanka [X][X] [X] ||| 0.0100203 1 ||| ||| 0.173611
+[X][X] Sri Lankan [X] ||| Sri Lanka [X][X] [X] ||| 0.0178138 1 ||| ||| 0.173611
+[X][X] the Sri Lankan [X] ||| Sri Lanka [X][X] das [X] ||| 0.013917 1 ||| ||| 0.222222
+[X][X] to the Sri Lankan [X] ||| Sri Lanka [X][X] das [X] ||| 0.013917 1 ||| ||| 0.222222
+to [X][X] Sri Lankan [X] ||| Sri Lanka in [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111111
+to [X][X] the Sri Lankan [X] ||| Sri Lanka in [X][X] das [X] ||| 0.0278341 1 ||| ||| 0.111111
+Sri Lanka [X] ||| Sri Lanka zu [X] ||| 0.0278341 1 ||| ||| 1
+Sri Lanka [X][X] [X] ||| Sri Lanka zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0625
+Sri Lanka [X] ||| Sri Lanka zu beklagen [X] ||| 0.0278341 1 ||| ||| 1
+Sri Lanka [X][X] [X] ||| Sri Lanka zu beklagen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0625
+Sri Lanka was [X] ||| Sri Lanka zu beklagen gab , [X] ||| 0.0278341 1 ||| ||| 0.166667
+Sri Lanka was [X] ||| Sri Lanka zu beklagen gab , zählt [X] ||| 0.0278341 1 ||| ||| 0.142857
+Sri Lanka was Mr [X] ||| Sri Lanka zu beklagen gab , zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 0.0625
+Sri Lanka was [X] ||| Sri Lanka zu beklagen gab , zählt auch [X] ||| 0.0278341 1 ||| ||| 0.125
+Sri Lanka was [X] ||| Sri Lanka zu beklagen gab [X] ||| 0.0278341 1 ||| ||| 0.2
+Sri Lanka [X] ||| Sri Lanka übermitteln [X] ||| 0.0278341 1 ||| ||| 1
+Sri Lanka [X][X] [X] ||| Sri Lanka übermitteln [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.1
+Sri Lanka [X][X] [X] ||| Sri Lanka übermitteln [X][X] [X] ||| 0.0278341 1 ||| ||| 0.391667
+Sri Lanka [X][X] [X] ||| Sri Lanka übermitteln [X][X] würden , [X] ||| 0.0278341 1 ||| ||| 0.1
+Sri Lanka [X][X] [X] ||| Sri Lanka übermitteln [X][X] würden [X] ||| 0.0278341 1 ||| ||| 0.125
+Sri Lanka and [X] ||| Sri Lanka übermitteln und [X] ||| 0.0278341 1 ||| ||| 0.333333
+Sri Lanka and urging [X] ||| Sri Lanka übermitteln und sie auffordern [X] ||| 0.0278341 1 ||| ||| 0.166667
+Sri Lanka and urging [X] ||| Sri Lanka übermitteln und sie auffordern würden , [X] ||| 0.0278341 1 ||| ||| 0.1
+Sri Lanka and urging [X] ||| Sri Lanka übermitteln und sie auffordern würden [X] ||| 0.0278341 1 ||| ||| 0.125
+Sri [X] ||| Sri [X] ||| 1 1 ||| ||| 4
+Sri [X][X] [X] ||| Sri [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.266667
+Sri [X][X] [X] ||| Sri [X][X] , zählt [X] ||| 0.0278341 1 ||| ||| 0.142857
+Sri [X][X] Mr [X] ||| Sri [X][X] , zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 0.0625
+Sri [X][X] [X] ||| Sri [X][X] , zählt auch [X] ||| 0.0278341 1 ||| ||| 0.125
+Sri [X][X] Mr [X] ||| Sri [X][X] Herr [X] ||| 0.0278341 1 ||| ||| 0.0625
+Sri [X][X] [X] ||| Sri [X][X] [X] ||| 0.241419 1 ||| ||| 1.42202
+Sri [X][X] Mr [X] ||| Sri [X][X] auch Herr [X] ||| 0.0278341 1 ||| ||| 0.0625
+Sri [X][X] [X] ||| Sri [X][X] auch [X] ||| 0.0278341 1 ||| ||| 0.125
+Sri [X][X] urging [X] ||| Sri [X][X] sie auffordern [X] ||| 0.0278341 1 ||| ||| 0.166667
+Sri [X][X] urging [X] ||| Sri [X][X] sie auffordern würden , [X] ||| 0.0278341 1 ||| ||| 0.1
+Sri [X][X] urging [X] ||| Sri [X][X] sie auffordern würden [X] ||| 0.0278341 1 ||| ||| 0.125
+Sri [X][X] [X] ||| Sri [X][X] würden , [X] ||| 0.0278341 1 ||| ||| 0.1
+Sri [X][X] [X] ||| Sri [X][X] würden [X] ||| 0.0278341 1 ||| ||| 0.125
+Sri [X][X] [X] ||| Sri [X][X] zählt [X] ||| 0.0278341 1 ||| ||| 0.142857
+Sri [X][X] Mr [X] ||| Sri [X][X] zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 0.0625
+Sri [X][X] [X] ||| Sri [X][X] zählt auch [X] ||| 0.0278341 1 ||| ||| 0.125
+public prosecutor [X] ||| Staatsanwalt [X] ||| 0.0278341 1 ||| ||| 1
+public prosecutor [X][X] . [X] ||| Staatsanwalt [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.125
+public prosecutor [X][X] [X] ||| Staatsanwalt [X][X] [X] ||| 0.0278341 1 ||| ||| 0.325
+public prosecutor is appealing . [X] ||| Staatsanwalt in Berufung geht . [X] ||| 0.0278341 1 ||| ||| 0.125
+public prosecutor is appealing [X] ||| Staatsanwalt in Berufung geht [X] ||| 0.0278341 1 ||| ||| 0.2
+public prosecutor [X] ||| Staatsanwalt in [X] ||| 0.0278341 1 ||| ||| 1
+public prosecutor [X][X] . [X] ||| Staatsanwalt in [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.125
+public prosecutor [X][X] [X] ||| Staatsanwalt in [X][X] [X] ||| 0.0278341 1 ||| ||| 0.325
+stability [X] ||| Stabilität [X] ||| 0.160946 1 ||| ||| 3
+stability is [X] ||| Stabilität [X] ||| 0.00927803 1 ||| ||| 3
+stability [X][X] legal principle [X] ||| Stabilität [X][X] Rechtsgrundsatz [X] ||| 0.013917 1 ||| ||| 0.142857
+stability is [X][X] legal principle [X] ||| Stabilität [X][X] Rechtsgrundsatz [X] ||| 0.013917 1 ||| ||| 0.142857
+stability [X][X] legal principle [X][X] [X] ||| Stabilität [X][X] Rechtsgrundsatz [X][X] [X] ||| 0.0278341 1 ||| ||| 0.104278
+stability [X][X] [X] ||| Stabilität [X][X] [X] ||| 0.0184737 1 ||| ||| 1.01808
+stability is [X][X] [X] ||| Stabilität [X][X] [X] ||| 0.00936041 1 ||| ||| 1.01808
+stability [X][X] of the [X] ||| Stabilität [X][X] der [X] ||| 0.013917 1 ||| ||| 0.117647
+stability is [X][X] of the [X] ||| Stabilität [X][X] der [X] ||| 0.013917 1 ||| ||| 0.117647
+stability [X][X] of the common [X] ||| Stabilität [X][X] der gemeinsamen [X] ||| 0.0278341 1 ||| ||| 0.0454545
+stability [X][X] fundamental legal principle [X] ||| Stabilität [X][X] elementaren Rechtsgrundsatz [X] ||| 0.0278341 1 ||| ||| 0.0714286
+stability [X][X] fundamental [X] ||| Stabilität [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.166667
+stability [X][X] fundamental [X][X] [X] ||| Stabilität [X][X] elementaren [X][X] [X] ||| 0.0278341 1 ||| ||| 0.175707
+stability [X][X] fundamental [X][X] common [X] ||| Stabilität [X][X] elementaren [X][X] gemeinsamen [X] ||| 0.0278341 1 ||| ||| 0.0454545
+stability [X][X] common [X] ||| Stabilität [X][X] gemeinsamen [X] ||| 0.013917 1 ||| ||| 0.090909
+stability is [X][X] common [X] ||| Stabilität [X][X] gemeinsamen [X] ||| 0.013917 1 ||| ||| 0.090909
+stability is a [X] ||| Stabilität einen [X] ||| 0.0278341 1 ||| ||| 0.333333
+stability is a [X][X] [X] ||| Stabilität einen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.175707
+stability is a [X][X] common [X] ||| Stabilität einen [X][X] gemeinsamen [X] ||| 0.0278341 1 ||| ||| 0.0454545
+stability is a fundamental [X] ||| Stabilität einen elementaren [X] ||| 0.0278341 1 ||| ||| 0.166667
+stability is a fundamental [X][X] [X] ||| Stabilität einen elementaren [X][X] [X] ||| 0.0278341 1 ||| ||| 0.175707
+says [X] ||| Strafen [X] ||| 0.0278341 1 ||| ||| 1
+few days , [X] ||| Tagen [X] ||| 0.013917 1 ||| ||| 2
+few days [X] ||| Tagen [X] ||| 0.013917 1 ||| ||| 2
+part-session [X] ||| Tagung [X] ||| 0.0278341 1 ||| ||| 1
+part-session [X][X] European Parliament , [X] ||| Tagung [X][X] Europäischen Parlaments [X] ||| 0.0108244 1 ||| ||| 0.233766
+part-session [X][X] European Parliament [X] ||| Tagung [X][X] Europäischen Parlaments [X] ||| 0.0170097 1 ||| ||| 0.233766
+part-session [X][X] European [X] ||| Tagung [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.25
+part-session [X][X] European [X][X] [X] ||| Tagung [X][X] Europäischen [X][X] [X] ||| 0.0156456 1 ||| ||| 0.731935
+part-session [X][X] European [X][X] a [X] ||| Tagung [X][X] Europäischen [X][X] [X] ||| 0.00292524 1 ||| ||| 0.731935
+part-session [X][X] European [X][X] been [X] ||| Tagung [X][X] Europäischen [X][X] [X] ||| 0.00316901 1 ||| ||| 0.731935
+part-session [X][X] European [X][X] date [X] ||| Tagung [X][X] Europäischen [X][X] [X] ||| 0.00292524 1 ||| ||| 0.731935
+part-session [X][X] European [X][X] has [X] ||| Tagung [X][X] Europäischen [X][X] [X] ||| 0.00316901 1 ||| ||| 0.731935
+part-session [X][X] Parliament , [X] ||| Tagung [X][X] Parlaments [X] ||| 0.00814439 1 ||| ||| 0.310689
+part-session [X][X] Parliament , a [X] ||| Tagung [X][X] Parlaments [X] ||| 0.00689141 1 ||| ||| 0.310689
+part-session [X][X] Parliament [X] ||| Tagung [X][X] Parlaments [X] ||| 0.0127983 1 ||| ||| 0.310689
+part-session [X][X] , [X] ||| Tagung [X][X] [X] ||| 0.00110991 1 ||| ||| 2.2798
+part-session [X][X] , a [X] ||| Tagung [X][X] [X] ||| 0.000939153 1 ||| ||| 2.2798
+part-session [X][X] , a date [X] ||| Tagung [X][X] [X] ||| 0.000939153 1 ||| ||| 2.2798
+part-session [X][X] [X] ||| Tagung [X][X] [X] ||| 0.138116 1 ||| ||| 2.2798
+part-session [X][X] a [X] ||| Tagung [X][X] [X] ||| 0.000939153 1 ||| ||| 2.2798
+part-session [X][X] a date [X] ||| Tagung [X][X] [X] ||| 0.000939153 1 ||| ||| 2.2798
+part-session [X][X] a date has [X] ||| Tagung [X][X] [X] ||| 0.00101742 1 ||| ||| 2.2798
+part-session [X][X] been [X] ||| Tagung [X][X] [X] ||| 0.00101742 1 ||| ||| 2.2798
+part-session [X][X] date [X] ||| Tagung [X][X] [X] ||| 0.000939153 1 ||| ||| 2.2798
+part-session [X][X] date has [X] ||| Tagung [X][X] [X] ||| 0.00101742 1 ||| ||| 2.2798
+part-session [X][X] date has been [X] ||| Tagung [X][X] [X] ||| 0.00101742 1 ||| ||| 2.2798
+part-session [X][X] has [X] ||| Tagung [X][X] [X] ||| 0.00101742 1 ||| ||| 2.2798
+part-session [X][X] has been [X] ||| Tagung [X][X] [X] ||| 0.00101742 1 ||| ||| 2.2798
+part-session of the European Parliament [X] ||| Tagung des Europäischen Parlaments [X] ||| 0.0278341 1 ||| ||| 0.142857
+part-session of the European [X] ||| Tagung des Europäischen [X] ||| 0.0278341 1 ||| ||| 0.25
+part-session of the European [X][X] [X] ||| Tagung des Europäischen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.411422
+part-session of the [X] ||| Tagung des [X] ||| 0.0278341 1 ||| ||| 0.5
+part-session of the [X][X] , [X] ||| Tagung des [X][X] [X] ||| 0.00262024 1 ||| ||| 0.965701
+part-session of the [X][X] [X] ||| Tagung des [X][X] [X] ||| 0.0159758 1 ||| ||| 0.965701
+part-session of the [X][X] a [X] ||| Tagung des [X][X] [X] ||| 0.00221713 1 ||| ||| 0.965701
+part-session of the [X][X] been [X] ||| Tagung des [X][X] [X] ||| 0.00240189 1 ||| ||| 0.965701
+part-session of the [X][X] date [X] ||| Tagung des [X][X] [X] ||| 0.00221713 1 ||| ||| 0.965701
+part-session of the [X][X] has [X] ||| Tagung des [X][X] [X] ||| 0.00240189 1 ||| ||| 0.965701
+Texas , Mr Bush , [X] ||| Texas , George W. Bush , [X] ||| 0.0278341 1 ||| ||| 0.25
+Texas , Mr Bush [X] ||| Texas , George W. Bush [X] ||| 0.0278341 1 ||| ||| 0.5
+Texas , Mr Bush [X][X] [X] ||| Texas , George W. Bush [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142857
+Texas , Mr [X] ||| Texas , George W. [X] ||| 0.0278341 1 ||| ||| 1
+Texas , Mr [X][X] [X] ||| Texas , George W. [X][X] [X] ||| 0.0278341 1 ||| ||| 0.392857
+Texas , Mr [X][X] who [X] ||| Texas , George W. [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.142857
+Texas [X] ||| Texas [X] ||| 0.0278341 1 ||| ||| 1
+killings [X] ||| Toten [X] ||| 0.0278341 1 ||| ||| 1
+environmental information [X] ||| Umweltinformationen [X] ||| 0.0278341 1 ||| ||| 1
+environmental information [X][X] . [X] ||| Umweltinformationen [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.142857
+environmental information is [X][X] right [X] ||| Umweltinformationen [X][X] Recht ist [X] ||| 0.0278341 1 ||| ||| 0.111111
+environmental information [X][X] [X] ||| Umweltinformationen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.253968
+environmental information is [X][X] . [X] ||| Umweltinformationen [X][X] ist . [X] ||| 0.0278341 1 ||| ||| 0.142857
+environmental information is [X][X] [X] ||| Umweltinformationen [X][X] ist [X] ||| 0.013917 1 ||| ||| 0.222222
+environmental information is a [X][X] [X] ||| Umweltinformationen [X][X] ist [X] ||| 0.013917 1 ||| ||| 0.222222
+environmental information [X][X] constitutional right [X] ||| Umweltinformationen konstitutionelles Recht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111111
+Community [X] ||| Union [X] ||| 0.013917 1 ||| ||| 2
+Union [X] ||| Union [X] ||| 0.013917 1 ||| ||| 2
+inadmissibility . [X] ||| Unzulässigkeit geben ? [X] ||| 0.0278341 1 ||| ||| 1
+inadmissibility [X] ||| Unzulässigkeit geben [X] ||| 0.0278341 1 ||| ||| 1
+America [X] ||| Vereinigten Staaten [X] ||| 0.0278341 1 ||| ||| 1
+condemned person [X] ||| Verurteilten [X] ||| 0.0278341 1 ||| ||| 1
+proposal to subvert it [X] ||| Vorschlag , diesen zu unterlaufen , [X] ||| 0.0278341 1 ||| ||| 0.333333
+proposal to subvert it [X][X] [X] ||| Vorschlag , diesen zu unterlaufen , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.215909
+proposal to subvert it [X] ||| Vorschlag , diesen zu unterlaufen [X] ||| 0.0278341 1 ||| ||| 0.5
+proposal to subvert it [X][X] [X] ||| Vorschlag , diesen zu unterlaufen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.215909
+proposal [X] ||| Vorschlag [X] ||| 0.0278341 1 ||| ||| 1
+proposal [X][X] [X] ||| Vorschlag [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.333333
+proposal [X][X] would be [X][X] [X] ||| Vorschlag [X][X] , [X][X] wäre [X] ||| 0.0278341 1 ||| ||| 0.0909091
+proposal [X][X] . [X] ||| Vorschlag [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] Evans has suggested . [X] ||| Vorschlag [X][X] Evans folgen . [X] ||| 0.0278341 1 ||| ||| 0.253968
+[X][X] Evans has suggested [X] ||| Vorschlag [X][X] Evans folgen [X] ||| 0.0200405 1 ||| ||| 0.324675
+do [X][X] Evans has suggested [X] ||| Vorschlag [X][X] Evans folgen [X] ||| 0.00779355 1 ||| ||| 0.324675
+[X][X] Mr Evans has suggested [X] ||| Vorschlag [X][X] Herrn Evans folgen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] Mr [X][X] suggested . [X] ||| Vorschlag [X][X] Herrn [X][X] folgen . [X] ||| 0.0278341 1 ||| ||| 0.111111
+[X][X] Mr [X][X] suggested [X] ||| Vorschlag [X][X] Herrn [X][X] folgen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+proposal [X][X] [X] ||| Vorschlag [X][X] [X] ||| 0.241419 1 ||| ||| 1.04924
+proposal [X][X] would be [X][X] [X] ||| Vorschlag [X][X] [X][X] wäre [X] ||| 0.0278341 1 ||| ||| 0.181818
+[X][X] has suggested . [X] ||| Vorschlag [X][X] folgen . [X] ||| 0.00968143 1 ||| ||| 0.730158
+[X][X] suggested . [X] ||| Vorschlag [X][X] folgen . [X] ||| 0.00968143 1 ||| ||| 0.730158
+do [X][X] has suggested . [X] ||| Vorschlag [X][X] folgen . [X] ||| 0.00423562 1 ||| ||| 0.730158
+do [X][X] suggested . [X] ||| Vorschlag [X][X] folgen . [X] ||| 0.00423562 1 ||| ||| 0.730158
+[X][X] has suggested [X] ||| Vorschlag [X][X] folgen [X] ||| 0.0100203 1 ||| ||| 0.64935
+[X][X] suggested [X] ||| Vorschlag [X][X] folgen [X] ||| 0.0100203 1 ||| ||| 0.64935
+do [X][X] has suggested [X] ||| Vorschlag [X][X] folgen [X] ||| 0.00389678 1 ||| ||| 0.64935
+do [X][X] suggested [X] ||| Vorschlag [X][X] folgen [X] ||| 0.00389678 1 ||| ||| 0.64935
+as Mr Evans has suggested [X] ||| Vorschlag von Herrn Evans folgen [X] ||| 0.0278341 1 ||| ||| 0.142857
+as Mr [X][X] suggested . [X] ||| Vorschlag von Herrn [X][X] folgen . [X] ||| 0.0278341 1 ||| ||| 0.142857
+as Mr [X][X] suggested [X] ||| Vorschlag von Herrn [X][X] folgen [X] ||| 0.0170097 1 ||| ||| 0.233766
+do as Mr [X][X] suggested [X] ||| Vorschlag von Herrn [X][X] folgen [X] ||| 0.0108244 1 ||| ||| 0.233766
+as [X][X] has suggested . [X] ||| Vorschlag von [X][X] folgen . [X] ||| 0.0100203 1 ||| ||| 0.396825
+as [X][X] suggested . [X] ||| Vorschlag von [X][X] folgen . [X] ||| 0.0100203 1 ||| ||| 0.396825
+do as [X][X] suggested . [X] ||| Vorschlag von [X][X] folgen . [X] ||| 0.00779355 1 ||| ||| 0.396825
+as [X][X] has suggested [X] ||| Vorschlag von [X][X] folgen [X] ||| 0.00850486 1 ||| ||| 0.467532
+as [X][X] suggested [X] ||| Vorschlag von [X][X] folgen [X] ||| 0.00850486 1 ||| ||| 0.467532
+do as [X][X] has suggested [X] ||| Vorschlag von [X][X] folgen [X] ||| 0.00541219 1 ||| ||| 0.467532
+do as [X][X] suggested [X] ||| Vorschlag von [X][X] folgen [X] ||| 0.00541219 1 ||| ||| 0.467532
+resumption [X] ||| Wiederaufnahme [X] ||| 0.0278341 1 ||| ||| 1
+resumption [X][X] session [X] ||| Wiederaufnahme [X][X] Sitzungsperiode [X] ||| 0.0278341 1 ||| ||| 0.25
+resumption [X][X] [X] ||| Wiederaufnahme [X][X] [X] ||| 0.0278341 1 ||| ||| 0.75
+resumption of the session [X] ||| Wiederaufnahme der Sitzungsperiode [X] ||| 0.0278341 1 ||| ||| 0.25
+resumption of the [X] ||| Wiederaufnahme der [X] ||| 0.0278341 1 ||| ||| 0.5
+[X][X] of a [X] ||| Woche [X][X] eines [X] ||| 0.0278341 1 ||| ||| 0.2
+the execution [X] ||| Woche die Hinrichtung [X] ||| 0.0278341 1 ||| ||| 1
+the execution [X][X] [X] ||| Woche die Hinrichtung [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+the execution of a [X] ||| Woche die Hinrichtung eines [X] ||| 0.0278341 1 ||| ||| 0.2
+the [X] ||| Woche die [X] ||| 0.0278341 1 ||| ||| 1
+the [X][X] [X] ||| Woche die [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+have requested [X] ||| Wunsch [X] ||| 0.00556682 1 ||| ||| 5
+request [X] ||| Wunsch [X] ||| 0.00556682 1 ||| ||| 5
+requested [X] ||| Wunsch [X] ||| 0.0965675 1 ||| ||| 5
+the request [X] ||| Wunsch [X] ||| 0.00556682 1 ||| ||| 5
+request [X][X] , Mr Zimeray [X] ||| Wunsch [X][X] , Herrn Zimeray [X] ||| 0.0278341 1 ||| ||| 0.0357143
+request [X][X] , Mr [X] ||| Wunsch [X][X] , Herrn [X] ||| 0.0155353 1 ||| ||| 0.0942983
+the request [X][X] , Mr [X] ||| Wunsch [X][X] , Herrn [X] ||| 0.0122988 1 ||| ||| 0.0942983
+request [X][X] , Mr [X][X] [X] ||| Wunsch [X][X] , Herrn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.027027
+[X][X] have requested , [X] ||| Wunsch [X][X] , [X] ||| 0.0038662 1 ||| ||| 0.423491
+[X][X] have requested , on [X] ||| Wunsch [X][X] , [X] ||| 0.0025279 1 ||| ||| 0.423491
+[X][X] requested , [X] ||| Wunsch [X][X] , [X] ||| 0.0038662 1 ||| ||| 0.423491
+[X][X] requested , on [X] ||| Wunsch [X][X] , [X] ||| 0.0025279 1 ||| ||| 0.423491
+[X][X] requested , on behalf [X] ||| Wunsch [X][X] , [X] ||| 0.00219085 1 ||| ||| 0.423491
+request [X][X] , [X] ||| Wunsch [X][X] , [X] ||| 0.00725346 1 ||| ||| 0.423491
+the request [X][X] , [X] ||| Wunsch [X][X] , [X] ||| 0.0056016 1 ||| ||| 0.423491
+request [X][X] , [X][X] , [X] ||| Wunsch [X][X] , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.027027
+request [X][X] , [X][X] [X] ||| Wunsch [X][X] , [X][X] [X] ||| 0.0152015 1 ||| ||| 0.11488
+the request [X][X] , [X][X] [X] ||| Wunsch [X][X] , [X][X] [X] ||| 0.0126326 1 ||| ||| 0.11488
+[X][X] have requested , [X] ||| Wunsch [X][X] - , [X] ||| 0.00718418 1 ||| ||| 0.227903
+[X][X] have requested , on [X] ||| Wunsch [X][X] - , [X] ||| 0.00469735 1 ||| ||| 0.227903
+[X][X] requested , [X] ||| Wunsch [X][X] - , [X] ||| 0.00718418 1 ||| ||| 0.227903
+[X][X] requested , on [X] ||| Wunsch [X][X] - , [X] ||| 0.00469735 1 ||| ||| 0.227903
+[X][X] requested , on behalf [X] ||| Wunsch [X][X] - , [X] ||| 0.00407104 1 ||| ||| 0.227903
+[X][X] have requested [X] ||| Wunsch [X][X] - [X] ||| 0.013917 1 ||| ||| 0.095238
+[X][X] requested [X] ||| Wunsch [X][X] - [X] ||| 0.013917 1 ||| ||| 0.095238
+[X][X] have requested [X][X] [X] ||| Wunsch [X][X] - [X][X] [X] ||| 0.00779504 1 ||| ||| 0.371547
+[X][X] have requested [X][X] behalf [X] ||| Wunsch [X][X] - [X][X] [X] ||| 0.00249713 1 ||| ||| 0.371547
+[X][X] have requested [X][X] of [X] ||| Wunsch [X][X] - [X][X] [X] ||| 0.00241659 1 ||| ||| 0.371547
+[X][X] requested [X][X] [X] ||| Wunsch [X][X] - [X][X] [X] ||| 0.00779504 1 ||| ||| 0.371547
+[X][X] requested [X][X] behalf [X] ||| Wunsch [X][X] - [X][X] [X] ||| 0.00249713 1 ||| ||| 0.371547
+[X][X] requested [X][X] behalf of [X] ||| Wunsch [X][X] - [X][X] [X] ||| 0.00241659 1 ||| ||| 0.371547
+[X][X] requested [X][X] of [X] ||| Wunsch [X][X] - [X][X] [X] ||| 0.00241659 1 ||| ||| 0.371547
+request [X][X] Mr Zimeray , [X] ||| Wunsch [X][X] Herrn Zimeray , [X] ||| 0.0278341 1 ||| ||| 0.027027
+request [X][X] Mr Zimeray [X] ||| Wunsch [X][X] Herrn Zimeray [X] ||| 0.0152639 1 ||| ||| 0.0651261
+the request [X][X] Mr Zimeray [X] ||| Wunsch [X][X] Herrn Zimeray [X] ||| 0.0125702 1 ||| ||| 0.0651261
+request [X][X] Mr [X] ||| Wunsch [X][X] Herrn [X] ||| 0.0155353 1 ||| ||| 0.0942983
+the request [X][X] Mr [X] ||| Wunsch [X][X] Herrn [X] ||| 0.0122988 1 ||| ||| 0.0942983
+request [X][X] Mr [X][X] [X] ||| Wunsch [X][X] Herrn [X][X] [X] ||| 0.0151197 1 ||| ||| 0.0497543
+the request [X][X] Mr [X][X] [X] ||| Wunsch [X][X] Herrn [X][X] [X] ||| 0.0127144 1 ||| ||| 0.0497543
+[X][X] Members have requested , [X] ||| Wunsch [X][X] Kolleginnen und Kollegen - , [X] ||| 0.0278341 1 ||| ||| 0.0588235
+[X][X] Members have requested [X] ||| Wunsch [X][X] Kolleginnen und Kollegen - [X] ||| 0.013917 1 ||| ||| 0.095238
+[X][X] of Members have requested [X] ||| Wunsch [X][X] Kolleginnen und Kollegen - [X] ||| 0.013917 1 ||| ||| 0.095238
+[X][X] Members have requested [X][X] [X] ||| Wunsch [X][X] Kolleginnen und Kollegen - [X][X] [X] ||| 0.0278341 1 ||| ||| 0.104053
+[X][X] Members have requested [X] ||| Wunsch [X][X] Kolleginnen und Kollegen [X] ||| 0.013917 1 ||| ||| 0.153846
+[X][X] of Members have requested [X] ||| Wunsch [X][X] Kolleginnen und Kollegen [X] ||| 0.013917 1 ||| ||| 0.153846
+[X][X] Members have requested [X][X] [X] ||| Wunsch [X][X] Kolleginnen und Kollegen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.104053
+request [X][X] Member , Mr [X] ||| Wunsch [X][X] Mitglieds , Herrn [X] ||| 0.0278341 1 ||| ||| 0.0526316
+request [X][X] Member , [X] ||| Wunsch [X][X] Mitglieds , [X] ||| 0.0159052 1 ||| ||| 0.145833
+the request [X][X] Member , [X] ||| Wunsch [X][X] Mitglieds , [X] ||| 0.0119289 1 ||| ||| 0.145833
+request [X][X] Member , [X][X] [X] ||| Wunsch [X][X] Mitglieds , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0627413
+request [X][X] Member [X] ||| Wunsch [X][X] Mitglieds [X] ||| 0.016373 1 ||| ||| 0.242857
+the request [X][X] Member [X] ||| Wunsch [X][X] Mitglieds [X] ||| 0.0114611 1 ||| ||| 0.242857
+request [X][X] Member [X][X] , [X] ||| Wunsch [X][X] Mitglieds [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.027027
+request [X][X] Member [X][X] Zimeray [X] ||| Wunsch [X][X] Mitglieds [X][X] Zimeray [X] ||| 0.0278341 1 ||| ||| 0.0357143
+request [X][X] Member [X][X] [X] ||| Wunsch [X][X] Mitglieds [X][X] [X] ||| 0.015352 1 ||| ||| 0.209179
+the request [X][X] Member [X][X] [X] ||| Wunsch [X][X] Mitglieds [X][X] [X] ||| 0.0124821 1 ||| ||| 0.209179
+request [X][X] Zimeray , [X] ||| Wunsch [X][X] Zimeray , [X] ||| 0.0151197 1 ||| ||| 0.0497543
+the request [X][X] Zimeray , [X] ||| Wunsch [X][X] Zimeray , [X] ||| 0.0127144 1 ||| ||| 0.0497543
+request [X][X] Zimeray [X] ||| Wunsch [X][X] Zimeray [X] ||| 0.0152639 1 ||| ||| 0.0651261
+the request [X][X] Zimeray [X] ||| Wunsch [X][X] Zimeray [X] ||| 0.0125702 1 ||| ||| 0.0651261
+[X][X] have requested [X] ||| Wunsch [X][X] [X] ||| 0.00140234 1 ||| ||| 2.47195
+[X][X] requested [X] ||| Wunsch [X][X] [X] ||| 0.00140234 1 ||| ||| 2.47195
+request [X][X] [X] ||| Wunsch [X][X] [X] ||| 0.106605 1 ||| ||| 2.47195
+requested [X][X] [X] ||| Wunsch [X][X] [X] ||| 0.00422249 1 ||| ||| 2.47195
+the request [X][X] [X] ||| Wunsch [X][X] [X] ||| 0.00851599 1 ||| ||| 2.47195
+[X][X] of [X][X] requested , [X] ||| Wunsch [X][X] [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0588235
+[X][X] of [X][X] requested , [X] ||| Wunsch [X][X] [X][X] - , [X] ||| 0.0278341 1 ||| ||| 0.0588235
+[X][X] of [X][X] requested [X] ||| Wunsch [X][X] [X][X] - [X] ||| 0.0278341 1 ||| ||| 0.047619
+[X][X] have requested [X][X] [X] ||| Wunsch [X][X] [X][X] [X] ||| 0.00667612 1 ||| ||| 0.867636
+[X][X] have requested [X][X] behalf [X] ||| Wunsch [X][X] [X][X] [X] ||| 0.00213869 1 ||| ||| 0.867636
+[X][X] have requested [X][X] of [X] ||| Wunsch [X][X] [X][X] [X] ||| 0.0020697 1 ||| ||| 0.867636
+[X][X] of [X][X] requested [X] ||| Wunsch [X][X] [X][X] [X] ||| 0.00399536 1 ||| ||| 0.867636
+[X][X] requested [X][X] [X] ||| Wunsch [X][X] [X][X] [X] ||| 0.00667612 1 ||| ||| 0.867636
+[X][X] requested [X][X] behalf [X] ||| Wunsch [X][X] [X][X] [X] ||| 0.00213869 1 ||| ||| 0.867636
+[X][X] requested [X][X] behalf of [X] ||| Wunsch [X][X] [X][X] [X] ||| 0.0020697 1 ||| ||| 0.867636
+[X][X] requested [X][X] of [X] ||| Wunsch [X][X] [X][X] [X] ||| 0.0020697 1 ||| ||| 0.867636
+request [X][X] French Member , [X] ||| Wunsch [X][X] französischen Mitglieds , [X] ||| 0.0278341 1 ||| ||| 0.0833333
+request [X][X] French Member [X] ||| Wunsch [X][X] französischen Mitglieds [X] ||| 0.016373 1 ||| ||| 0.242857
+the request [X][X] French Member [X] ||| Wunsch [X][X] französischen Mitglieds [X] ||| 0.0114611 1 ||| ||| 0.242857
+request [X][X] French Member [X][X] [X] ||| Wunsch [X][X] französischen Mitglieds [X][X] [X] ||| 0.0278341 1 ||| ||| 0.115373
+request [X][X] French [X] ||| Wunsch [X][X] französischen [X] ||| 0.0167004 1 ||| ||| 0.416667
+the request [X][X] French [X] ||| Wunsch [X][X] französischen [X] ||| 0.0111337 1 ||| ||| 0.416667
+request [X][X] French [X][X] , [X] ||| Wunsch [X][X] französischen [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.027027
+request [X][X] French [X][X] Mr [X] ||| Wunsch [X][X] französischen [X][X] Herrn [X] ||| 0.0278341 1 ||| ||| 0.0526316
+request [X][X] French [X][X] Zimeray [X] ||| Wunsch [X][X] französischen [X][X] Zimeray [X] ||| 0.0278341 1 ||| ||| 0.0357143
+request [X][X] French [X][X] [X] ||| Wunsch [X][X] französischen [X][X] [X] ||| 0.0155792 1 ||| ||| 0.355012
+the request [X][X] French [X][X] [X] ||| Wunsch [X][X] französischen [X][X] [X] ||| 0.0122549 1 ||| ||| 0.355012
+requested [X][X] on [X] ||| Wunsch [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.125
+request of a [X] ||| Wunsch eines [X] ||| 0.0167005 1 ||| ||| 0.833333
+the request of a [X] ||| Wunsch eines [X] ||| 0.0111336 1 ||| ||| 0.833333
+request of a [X][X] , [X] ||| Wunsch eines [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.11036
+request of a [X][X] Mr [X] ||| Wunsch eines [X][X] Herrn [X] ||| 0.0278341 1 ||| ||| 0.0526316
+request of a [X][X] Zimeray [X] ||| Wunsch eines [X][X] Zimeray [X] ||| 0.0278341 1 ||| ||| 0.0357143
+request of a [X][X] [X] ||| Wunsch eines [X][X] [X] ||| 0.0159016 1 ||| ||| 0.597869
+the request of a [X][X] [X] ||| Wunsch eines [X][X] [X] ||| 0.0119325 1 ||| ||| 0.597869
+request of a French Member [X] ||| Wunsch eines französischen Mitglieds [X] ||| 0.0278341 1 ||| ||| 0.142857
+request of a French [X] ||| Wunsch eines französischen [X] ||| 0.0167004 1 ||| ||| 0.416667
+the request of a French [X] ||| Wunsch eines französischen [X] ||| 0.0111337 1 ||| ||| 0.416667
+request of a French [X][X] [X] ||| Wunsch eines französischen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.198706
+a [X][X] have requested , [X] ||| Wunsch einiger [X][X] , [X] ||| 0.00761775 1 ||| ||| 0.214932
+a [X][X] requested , [X] ||| Wunsch einiger [X][X] , [X] ||| 0.00761775 1 ||| ||| 0.214932
+a [X][X] requested , on [X] ||| Wunsch einiger [X][X] , [X] ||| 0.00498084 1 ||| ||| 0.214932
+a number [X][X] requested , [X] ||| Wunsch einiger [X][X] , [X] ||| 0.00761775 1 ||| ||| 0.214932
+a [X][X] have requested , [X] ||| Wunsch einiger [X][X] - , [X] ||| 0.00761775 1 ||| ||| 0.214932
+a [X][X] requested , [X] ||| Wunsch einiger [X][X] - , [X] ||| 0.00761775 1 ||| ||| 0.214932
+a [X][X] requested , on [X] ||| Wunsch einiger [X][X] - , [X] ||| 0.00498084 1 ||| ||| 0.214932
+a number [X][X] requested , [X] ||| Wunsch einiger [X][X] - , [X] ||| 0.00761775 1 ||| ||| 0.214932
+a [X][X] have requested [X] ||| Wunsch einiger [X][X] - [X] ||| 0.00556682 1 ||| ||| 0.238095
+a [X][X] requested [X] ||| Wunsch einiger [X][X] - [X] ||| 0.00556682 1 ||| ||| 0.238095
+a number [X][X] have requested [X] ||| Wunsch einiger [X][X] - [X] ||| 0.00556682 1 ||| ||| 0.238095
+a number [X][X] requested [X] ||| Wunsch einiger [X][X] - [X] ||| 0.00556682 1 ||| ||| 0.238095
+a number of [X][X] requested [X] ||| Wunsch einiger [X][X] - [X] ||| 0.00556682 1 ||| ||| 0.238095
+a [X][X] have requested [X][X] [X] ||| Wunsch einiger [X][X] - [X][X] [X] ||| 0.00766702 1 ||| ||| 0.37775
+a [X][X] requested [X][X] [X] ||| Wunsch einiger [X][X] - [X][X] [X] ||| 0.00766702 1 ||| ||| 0.37775
+a [X][X] requested [X][X] behalf [X] ||| Wunsch einiger [X][X] - [X][X] [X] ||| 0.00245613 1 ||| ||| 0.37775
+a [X][X] requested [X][X] of [X] ||| Wunsch einiger [X][X] - [X][X] [X] ||| 0.0023769 1 ||| ||| 0.37775
+a number [X][X] requested [X][X] [X] ||| Wunsch einiger [X][X] - [X][X] [X] ||| 0.00766702 1 ||| ||| 0.37775
+a [X][X] have requested [X] ||| Wunsch einiger [X][X] [X] ||| 0.00556682 1 ||| ||| 0.62271
+a [X][X] requested [X] ||| Wunsch einiger [X][X] [X] ||| 0.00556682 1 ||| ||| 0.62271
+a number [X][X] have requested [X] ||| Wunsch einiger [X][X] [X] ||| 0.00556682 1 ||| ||| 0.62271
+a number [X][X] requested [X] ||| Wunsch einiger [X][X] [X] ||| 0.00556682 1 ||| ||| 0.62271
+a number of [X][X] requested [X] ||| Wunsch einiger [X][X] [X] ||| 0.00556682 1 ||| ||| 0.62271
+a [X][X] have requested [X][X] [X] ||| Wunsch einiger [X][X] [X][X] [X] ||| 0.00766702 1 ||| ||| 0.755501
+a [X][X] requested [X][X] [X] ||| Wunsch einiger [X][X] [X][X] [X] ||| 0.00766702 1 ||| ||| 0.755501
+a [X][X] requested [X][X] behalf [X] ||| Wunsch einiger [X][X] [X][X] [X] ||| 0.00245613 1 ||| ||| 0.755501
+a [X][X] requested [X][X] of [X] ||| Wunsch einiger [X][X] [X][X] [X] ||| 0.0023769 1 ||| ||| 0.755501
+a number [X][X] requested [X][X] [X] ||| Wunsch einiger [X][X] [X][X] [X] ||| 0.00766702 1 ||| ||| 0.755501
+requested [X] ||| Wunsch nach [X] ||| 0.0278341 1 ||| ||| 1
+requested [X][X] [X] ||| Wunsch nach [X][X] [X] ||| 0.0278341 1 ||| ||| 0.375
+requested [X][X] on [X] ||| Wunsch nach [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.125
+requested a debate [X] ||| Wunsch nach einer Aussprache [X] ||| 0.0278341 1 ||| ||| 0.25
+requested a debate on [X] ||| Wunsch nach einer Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.125
+requested a [X] ||| Wunsch nach einer [X] ||| 0.0278341 1 ||| ||| 1
+requested a [X][X] [X] ||| Wunsch nach einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.125
+Zimeray , [X] ||| Zimeray , [X] ||| 0.0278341 1 ||| ||| 1
+Zimeray , [X][X] , [X] ||| Zimeray , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.125
+Zimeray , [X][X] , which [X] ||| Zimeray , [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.0769231
+Zimeray , [X][X] , which [X] ||| Zimeray , [X][X] , die von [X] ||| 0.0278341 1 ||| ||| 0.0555556
+Zimeray , [X][X] [X] ||| Zimeray , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.590812
+Zimeray , [X][X] which [X] ||| Zimeray , [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.0769231
+Zimeray , [X][X] which [X] ||| Zimeray , [X][X] die von [X] ||| 0.0278341 1 ||| ||| 0.0555556
+Zimeray , a petition [X][X] [X] ||| Zimeray , [X][X] eine Petition [X] ||| 0.0278341 1 ||| ||| 0.166667
+Zimeray , [X][X] presented , [X] ||| Zimeray , [X][X] eingereicht , [X] ||| 0.0278341 1 ||| ||| 0.125
+Zimeray , [X][X] presented [X] ||| Zimeray , [X][X] eingereicht [X] ||| 0.0278341 1 ||| ||| 0.166667
+Zimeray , [X][X] presented [X][X] [X] ||| Zimeray , [X][X] eingereicht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.132479
+Zimeray , [X][X] presented [X][X] [X] ||| Zimeray , [X][X] eingereicht [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0555556
+Zimeray , [X][X] [X] ||| Zimeray , [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0555556
+Zimeray , [X][X] has [X][X] [X] ||| Zimeray , wurde [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.166667
+Zimeray [X] ||| Zimeray [X] ||| 0.0278341 1 ||| ||| 1
+Zimeray [X][X] , [X] ||| Zimeray [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.125
+Zimeray [X][X] , which [X] ||| Zimeray [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.0769231
+Zimeray [X][X] , which [X] ||| Zimeray [X][X] , die von [X] ||| 0.0278341 1 ||| ||| 0.0555556
+Zimeray [X][X] [X] ||| Zimeray [X][X] [X] ||| 0.0278341 1 ||| ||| 0.590812
+Zimeray [X][X] which [X] ||| Zimeray [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.0769231
+Zimeray [X][X] which [X] ||| Zimeray [X][X] die von [X] ||| 0.0278341 1 ||| ||| 0.0555556
+Zimeray [X][X] presented , [X] ||| Zimeray [X][X] eingereicht , [X] ||| 0.0278341 1 ||| ||| 0.125
+Zimeray [X][X] presented , which [X] ||| Zimeray [X][X] eingereicht , die [X] ||| 0.0278341 1 ||| ||| 0.0769231
+Zimeray [X][X] presented , which [X] ||| Zimeray [X][X] eingereicht , die von [X] ||| 0.0278341 1 ||| ||| 0.0555556
+Zimeray [X][X] presented [X] ||| Zimeray [X][X] eingereicht [X] ||| 0.0278341 1 ||| ||| 0.166667
+Zimeray [X][X] presented [X][X] [X] ||| Zimeray [X][X] eingereicht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.132479
+Zimeray [X][X] presented [X][X] [X] ||| Zimeray [X][X] eingereicht [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0555556
+Zimeray [X][X] [X] ||| Zimeray [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0555556
+[X][X] ) [X] ||| [X][X] ) [X] ||| 0.241419 1 ||| ||| 1.125
+[X][X] , Madam President , [X] ||| [X][X] , Frau Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.142337
+[X][X] , Madam President , [X] ||| [X][X] , Frau Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.0815346
+[X][X] , Madam President [X] ||| [X][X] , Frau Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.229545
+[X][X] , Madam [X] ||| [X][X] , Frau [X] ||| 0.0278341 1 ||| ||| 0.403095
+[X][X] , Madam [X][X] [X] ||| [X][X] , Frau [X][X] [X] ||| 0.0278341 1 ||| ||| 0.223871
+[X][X] , Madam [X][X] [X] ||| [X][X] , Frau [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0815346
+[X][X] , Mr Zimeray , [X] ||| [X][X] , Herrn Zimeray , [X] ||| 0.0278341 1 ||| ||| 0.1381
+[X][X] , Mr Zimeray [X] ||| [X][X] , Herrn Zimeray [X] ||| 0.0246543 1 ||| ||| 0.257456
+the [X][X] , Mr Zimeray [X] ||| [X][X] , Herrn Zimeray [X] ||| 0.00317977 1 ||| ||| 0.257456
+[X][X] , Mr [X] ||| [X][X] , Herrn [X] ||| 0.0249798 1 ||| ||| 0.406319
+the [X][X] , Mr [X] ||| [X][X] , Herrn [X] ||| 0.0028543 1 ||| ||| 0.406319
+[X][X] , Mr [X][X] [X] ||| [X][X] , Herrn [X][X] [X] ||| 0.0239007 1 ||| ||| 0.160827
+the [X][X] , Mr [X][X] [X] ||| [X][X] , Herrn [X][X] [X] ||| 0.00393337 1 ||| ||| 0.160827
+, [X][X] [X] ||| [X][X] , [X] ||| 0.000149413 1 ||| ||| 11.6431
+[X][X] , [X] ||| [X][X] , [X] ||| 0.878278 1 ||| ||| 11.6431
+[X][X] , on [X] ||| [X][X] , [X] ||| 9.19462e-05 1 ||| ||| 11.6431
+[X][X] , on behalf [X] ||| [X][X] , [X] ||| 7.96867e-05 1 ||| ||| 11.6431
+[X][X] , on behalf of [X] ||| [X][X] , [X] ||| 7.71163e-05 1 ||| ||| 11.6431
+[X][X] that [X] ||| [X][X] , [X] ||| 0.00163461 1 ||| ||| 11.6431
+indeed , [X][X] [X] ||| [X][X] , [X] ||| 0.000170757 1 ||| ||| 11.6431
+the [X][X] , [X] ||| [X][X] , [X] ||| 0.000865758 1 ||| ||| 11.6431
+to [X][X] , [X] ||| [X][X] , [X] ||| 0.000159374 1 ||| ||| 11.6431
+to the [X][X] , [X] ||| [X][X] , [X] ||| 0.000159374 1 ||| ||| 11.6431
+[X][X] , [X][X] , [X] ||| [X][X] , [X][X] , [X] ||| 0.0255968 1 ||| ||| 0.697446
+the [X][X] , [X][X] , [X] ||| [X][X] , [X][X] , [X] ||| 0.0022373 1 ||| ||| 0.697446
+[X][X] , [X][X] , i.e. [X] ||| [X][X] , [X][X] , d. h. [X] ||| 0.0278341 1 ||| ||| 0.110145
+[X][X] , [X][X] , [X] ||| [X][X] , [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0815346
+[X][X] signed , [X][X] [X] ||| [X][X] , [X][X] , unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.087037
+[X][X] signed , [X][X] [X] ||| [X][X] , [X][X] , unterzeichnet worden ist [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] , [X][X] . [X] ||| [X][X] , [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] , [X][X] Thursday prior [X] ||| [X][X] , [X][X] Donnerstag [X] ||| 0.0278341 1 ||| ||| 0.163095
+[X][X] , [X][X] Governor [X] ||| [X][X] , [X][X] Gouverneur [X] ||| 0.0139171 1 ||| ||| 0.0778722
+[X][X] , [X][X] the Governor [X] ||| [X][X] , [X][X] Gouverneur [X] ||| 0.0139171 1 ||| ||| 0.0778722
+[X][X] , [X][X] President [X] ||| [X][X] , [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.156856
+[X][X] , [X][X] President and [X] ||| [X][X] , [X][X] Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.0916759
+[X][X] , [X][X] [X] ||| [X][X] , [X][X] [X] ||| 0.869271 1 ||| ||| 6.0502
+[X][X] , [X][X] do [X] ||| [X][X] , [X][X] [X] ||| 0.0010365 1 ||| ||| 6.0502
+[X][X] , [X][X] people [X] ||| [X][X] , [X][X] [X] ||| 0.000230026 1 ||| ||| 6.0502
+[X][X] , [X][X] the [X] ||| [X][X] , [X][X] [X] ||| 0.000298635 1 ||| ||| 6.0502
+[X][X] , [X][X] to [X] ||| [X][X] , [X][X] [X] ||| 0.000322844 1 ||| ||| 6.0502
+[X][X] , [X][X] to the [X] ||| [X][X] , [X][X] [X] ||| 0.000298635 1 ||| ||| 6.0502
+[X][X] that [X][X] [X] ||| [X][X] , [X][X] [X] ||| 0.000511169 1 ||| ||| 6.0502
+the [X][X] , [X][X] [X] ||| [X][X] , [X][X] [X] ||| 0.0009409 1 ||| ||| 6.0502
+[X][X] , [X][X] on [X] ||| [X][X] , [X][X] am [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] , raise [X][X] , [X] ||| [X][X] , [X][X] ansprechen , [X] ||| 0.0278341 1 ||| ||| 0.161406
+[X][X] , raise [X][X] [X] ||| [X][X] , [X][X] ansprechen [X] ||| 0.0278341 1 ||| ||| 0.234878
+[X][X] , [X][X] i.e. [X] ||| [X][X] , [X][X] d. h. [X] ||| 0.0278341 1 ||| ||| 0.110145
+[X][X] , [X][X] i.e. on [X] ||| [X][X] , [X][X] d. h. am [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] , [X][X] [X] ||| [X][X] , [X][X] dem [X] ||| 0.0205396 1 ||| ||| 0.330685
+[X][X] , [X][X] do [X] ||| [X][X] , [X][X] dem [X] ||| 0.00729452 1 ||| ||| 0.330685
+[X][X] , [X][X] [X] ||| [X][X] , [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0815346
+[X][X] , a petition [X][X] [X] ||| [X][X] , [X][X] eine Petition [X] ||| 0.0278341 1 ||| ||| 0.263889
+[X][X] , [X][X] an [X] ||| [X][X] , [X][X] eine [X] ||| 0.0278341 1 ||| ||| 0.112755
+[X][X] , [X][X] presented , [X] ||| [X][X] , [X][X] eingereicht , [X] ||| 0.0278341 1 ||| ||| 0.0769231
+[X][X] , [X][X] presented [X] ||| [X][X] , [X][X] eingereicht [X] ||| 0.0278341 1 ||| ||| 0.158824
+[X][X] , I [X][X] [X] ||| [X][X] , [X][X] ich [X] ||| 0.0278341 1 ||| ||| 0.138636
+[X][X] , I [X][X] [X] ||| [X][X] , [X][X] ich dem [X] ||| 0.0278341 1 ||| ||| 0.0866631
+[X][X] , [X][X] and [X] ||| [X][X] , [X][X] und [X] ||| 0.0157658 1 ||| ||| 0.161851
+[X][X] , [X][X] and to [X] ||| [X][X] , [X][X] und [X] ||| 0.0120683 1 ||| ||| 0.161851
+[X][X] signed , [X][X] [X] ||| [X][X] , [X][X] unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.087037
+[X][X] signed , [X][X] [X] ||| [X][X] , [X][X] unterzeichnet worden ist [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] , [X][X] wish , [X] ||| [X][X] , [X][X] wollen , [X] ||| 0.0278341 1 ||| ||| 0.122619
+[X][X] , [X][X] wish [X] ||| [X][X] , [X][X] wollen [X] ||| 0.0219561 1 ||| ||| 0.22549
+the [X][X] , [X][X] wish [X] ||| [X][X] , [X][X] wollen [X] ||| 0.00587801 1 ||| ||| 0.22549
+[X][X] would be [X][X] . [X] ||| [X][X] , [X][X] wäre . [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] would be [X][X] [X] ||| [X][X] , [X][X] wäre [X] ||| 0.0278341 1 ||| ||| 0.3171
+[X][X] , [X][X] to [X] ||| [X][X] , [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.087037
+[X][X] signed , including myself [X] ||| [X][X] , auch von mir selbst , unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.087037
+[X][X] signed , including myself [X] ||| [X][X] , auch von mir selbst , unterzeichnet worden ist [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] , to [X] ||| [X][X] , bei [X] ||| 0.0278341 1 ||| ||| 0.51661
+[X][X] , to [X][X] Governor [X] ||| [X][X] , bei [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.0389361
+[X][X] , to [X][X] [X] ||| [X][X] , bei [X][X] [X] ||| 0.0210913 1 ||| ||| 0.557644
+[X][X] , to [X][X] the [X] ||| [X][X] , bei [X][X] [X] ||| 0.00324005 1 ||| ||| 0.557644
+[X][X] , to [X][X] to [X] ||| [X][X] , bei [X][X] [X] ||| 0.00350271 1 ||| ||| 0.557644
+[X][X] , to [X][X] and [X] ||| [X][X] , bei [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0916759
+[X][X] , to the President [X] ||| [X][X] , bei dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.156856
+[X][X] , to the [X] ||| [X][X] , bei dem [X] ||| 0.0278341 1 ||| ||| 0.280024
+[X][X] , to the [X][X] [X] ||| [X][X] , bei dem [X][X] [X] ||| 0.0278341 1 ||| ||| 0.265701
+[X][X] , i.e. [X] ||| [X][X] , d. h. [X] ||| 0.0278341 1 ||| ||| 0.553002
+[X][X] , i.e. [X][X] [X] ||| [X][X] , d. h. [X][X] [X] ||| 0.0278341 1 ||| ||| 0.250132
+[X][X] , i.e. [X][X] to [X] ||| [X][X] , d. h. [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.087037
+[X][X] , i.e. on [X] ||| [X][X] , d. h. am [X] ||| 0.0278341 1 ||| ||| 0.32608
+[X][X] , i.e. on [X][X] [X] ||| [X][X] , d. h. am [X][X] [X] ||| 0.0278341 1 ||| ||| 0.250132
+[X][X] , [X] ||| [X][X] , daß [X] ||| 0.00421321 1 ||| ||| 1.6516
+[X][X] that [X] ||| [X][X] , daß [X] ||| 0.196277 1 ||| ||| 1.6516
+have [X][X] that [X] ||| [X][X] , daß [X] ||| 0.000991343 1 ||| ||| 1.6516
+[X][X] that [X][X] stability [X] ||| [X][X] , daß [X][X] Stabilität [X] ||| 0.0153567 1 ||| ||| 0.0464743
+[X][X] that [X][X] stability is [X] ||| [X][X] , daß [X][X] Stabilität [X] ||| 0.0124774 1 ||| ||| 0.0464743
+[X][X] that [X][X] , [X] ||| [X][X] , daß [X][X] [X] ||| 0.00348421 1 ||| ||| 1.14709
+[X][X] that [X][X] [X] ||| [X][X] , daß [X][X] [X] ||| 0.0212934 1 ||| ||| 1.14709
+[X][X] that [X][X] have [X] ||| [X][X] , daß [X][X] [X] ||| 0.00255093 1 ||| ||| 1.14709
+[X][X] that [X][X] is [X] ||| [X][X] , daß [X][X] [X] ||| 0.000505519 1 ||| ||| 1.14709
+[X][X] that [X][X] , access [X] ||| [X][X] , daß [X][X] der Zugang [X] ||| 0.013917 1 ||| ||| 0.181818
+[X][X] that [X][X] access [X] ||| [X][X] , daß [X][X] der Zugang [X] ||| 0.013917 1 ||| ||| 0.181818
+[X][X] that [X][X] of [X] ||| [X][X] , daß [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] that [X][X] of relative [X] ||| [X][X] , daß [X][X] der relativen [X] ||| 0.0278341 1 ||| ||| 0.0344828
+[X][X] that [X][X] a [X] ||| [X][X] , daß [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.0338984
+[X][X] that [X][X] is a [X] ||| [X][X] , daß [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.0338984
+[X][X] that in Russia [X][X] [X] ||| [X][X] , daß [X][X] in Rußland [X] ||| 0.0278341 1 ||| ||| 0.29359
+[X][X] that [X][X] relative stability [X] ||| [X][X] , daß [X][X] relativen Stabilität [X] ||| 0.0278341 1 ||| ||| 0.025641
+[X][X] that [X][X] relative [X] ||| [X][X] , daß [X][X] relativen [X] ||| 0.0278341 1 ||| ||| 0.0344828
+[X][X] that [X][X] , too [X] ||| [X][X] , daß auch [X][X] [X] ||| 0.0094121 1 ||| ||| 0.44359
+[X][X] that [X][X] too , [X] ||| [X][X] , daß auch [X][X] [X] ||| 0.00900989 1 ||| ||| 0.44359
+[X][X] that [X][X] too [X] ||| [X][X] , daß auch [X][X] [X] ||| 0.0094121 1 ||| ||| 0.44359
+[X][X] that in [X][X] too [X] ||| [X][X] , daß auch in [X][X] [X] ||| 0.0278341 1 ||| ||| 0.15
+[X][X] that the courts [X] ||| [X][X] , daß das Gericht [X] ||| 0.0162036 1 ||| ||| 0.251593
+[X][X] that the courts have [X] ||| [X][X] , daß das Gericht [X] ||| 0.0116305 1 ||| ||| 0.251593
+[X][X] that the [X] ||| [X][X] , daß das [X] ||| 0.0278341 1 ||| ||| 0.233766
+[X][X] that the [X][X] [X] ||| [X][X] , daß das [X][X] [X] ||| 0.0278341 1 ||| ||| 0.105128
+[X][X] that the principle [X] ||| [X][X] , daß der Grundsatz [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] that the principle [X][X] [X] ||| [X][X] , daß der Grundsatz [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0979063
+[X][X] that the principle of [X] ||| [X][X] , daß der Grundsatz der [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] that the [X] ||| [X][X] , daß der [X] ||| 0.0278341 1 ||| ||| 0.166667
+[X][X] that the [X][X] stability [X] ||| [X][X] , daß der [X][X] Stabilität [X] ||| 0.0278341 1 ||| ||| 0.025641
+[X][X] that the [X][X] [X] ||| [X][X] , daß der [X][X] [X] ||| 0.0244504 1 ||| ||| 0.171371
+[X][X] that the [X][X] is [X] ||| [X][X] , daß der [X][X] [X] ||| 0.00338374 1 ||| ||| 0.171371
+[X][X] that the [X][X] a [X] ||| [X][X] , daß der [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0169492
+[X][X] that the [X][X] relative [X] ||| [X][X] , daß der [X][X] relativen [X] ||| 0.0278341 1 ||| ||| 0.0344828
+[X][X] , he [X] ||| [X][X] , daß er [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] , [X] ||| [X][X] , der [X] ||| 0.00662939 1 ||| ||| 2.19671
+[X][X] , who [X] ||| [X][X] , der [X] ||| 0.166823 1 ||| ||| 2.19671
+the [X][X] , who [X] ||| [X][X] , der [X] ||| 0.000703935 1 ||| ||| 2.19671
+to [X][X] , who [X] ||| [X][X] , der [X] ||| 0.000633541 1 ||| ||| 2.19671
+to the [X][X] , who [X] ||| [X][X] , der [X] ||| 0.000633541 1 ||| ||| 2.19671
+[X][X] you [X] ||| [X][X] , die Sie [X] ||| 0.0278341 1 ||| ||| 0.414866
+[X][X] you [X][X] President [X] ||| [X][X] , die Sie [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0163934
+[X][X] you [X][X] [X] ||| [X][X] , die Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.241197
+[X][X] you [X][X] to [X] ||| [X][X] , die Sie [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0661201
+[X][X] you [X][X] to the [X] ||| [X][X] , die Sie [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0353335
+[X][X] you [X][X] the President [X] ||| [X][X] , die Sie [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0163934
+[X][X] you [X][X] the [X] ||| [X][X] , die Sie [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0353335
+[X][X] you represent , [X] ||| [X][X] , die Sie vertreten , [X] ||| 0.0278341 1 ||| ||| 0.12335
+[X][X] you represent , [X][X] [X] ||| [X][X] , die Sie vertreten , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.051727
+[X][X] you represent , to [X] ||| [X][X] , die Sie vertreten , bei [X] ||| 0.0278341 1 ||| ||| 0.0661201
+[X][X] you represent [X] ||| [X][X] , die Sie vertreten [X] ||| 0.0278341 1 ||| ||| 0.207519
+[X][X] you represent [X][X] President [X] ||| [X][X] , die Sie vertreten [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0163934
+[X][X] you represent [X][X] [X] ||| [X][X] , die Sie vertreten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.117847
+[X][X] you represent [X][X] the [X] ||| [X][X] , die Sie vertreten [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0353335
+, [X][X] [X] ||| [X][X] , die [X] ||| 0.000819515 1 ||| ||| 2.12276
+[X][X] , which [X] ||| [X][X] , die [X] ||| 0.00465093 1 ||| ||| 2.12276
+[X][X] that [X] ||| [X][X] , die [X] ||| 0.159852 1 ||| ||| 2.12276
+[X][X] which [X] ||| [X][X] , die [X] ||| 0.00327806 1 ||| ||| 2.12276
+indeed , [X][X] [X] ||| [X][X] , die [X] ||| 0.000655612 1 ||| ||| 2.12276
+[X][X] that [X][X] . [X] ||| [X][X] , die [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] , which [X][X] [X] ||| [X][X] , die [X][X] [X] ||| 0.00876256 1 ||| ||| 0.158824
+[X][X] that [X][X] [X] ||| [X][X] , die [X][X] [X] ||| 0.0190715 1 ||| ||| 0.158824
+[X][X] , which [X] ||| [X][X] , die von [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] , which [X][X] [X] ||| [X][X] , die von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] , which many [X] ||| [X][X] , die von vielen [X] ||| 0.020243 1 ||| ||| 0.183333
+[X][X] , which many people [X] ||| [X][X] , die von vielen [X] ||| 0.00759113 1 ||| ||| 0.183333
+[X][X] that we [X] ||| [X][X] , die wir [X] ||| 0.0278341 1 ||| ||| 0.291667
+[X][X] that we [X][X] . [X] ||| [X][X] , die wir [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] that we [X][X] [X] ||| [X][X] , die wir [X][X] [X] ||| 0.0278341 1 ||| ||| 0.108824
+[X][X] that we have [X][X] [X] ||| [X][X] , die wir [X][X] haben [X] ||| 0.0278341 1 ||| ||| 0.0588235
+[X][X] , raise this question [X] ||| [X][X] , diese Frage ansprechen [X] ||| 0.0278341 1 ||| ||| 0.234878
+[X][X] to subvert it [X] ||| [X][X] , diesen zu unterlaufen , [X] ||| 0.0278341 1 ||| ||| 0.30303
+[X][X] to subvert it [X][X] [X] ||| [X][X] , diesen zu unterlaufen , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0833333
+[X][X] to subvert it [X] ||| [X][X] , diesen zu unterlaufen [X] ||| 0.0278341 1 ||| ||| 0.535014
+[X][X] to subvert it [X][X] [X] ||| [X][X] , diesen zu unterlaufen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0833333
+[X][X] an objection [X] ||| [X][X] , einen Einwand gegen [X] ||| 0.0187244 1 ||| ||| 0.206782
+[X][X] raise an objection [X] ||| [X][X] , einen Einwand gegen [X] ||| 0.00910971 1 ||| ||| 0.206782
+[X][X] an [X] ||| [X][X] , einen [X] ||| 0.018282 1 ||| ||| 0.455483
+[X][X] raise an [X] ||| [X][X] , einen [X] ||| 0.00955213 1 ||| ||| 0.455483
+Thursday [X][X] , for [X] ||| [X][X] , für Donnerstag [X] ||| 0.0119289 1 ||| ||| 0.583333
+next Thursday [X][X] , for [X] ||| [X][X] , für Donnerstag [X] ||| 0.0159052 1 ||| ||| 0.583333
+[X][X] , for [X] ||| [X][X] , für [X] ||| 0.0278341 1 ||| ||| 0.242857
+[X][X] that there have been [X] ||| [X][X] , gab es [X] ||| 0.0278341 1 ||| ||| 0.111111
+[X][X] , I [X] ||| [X][X] , ich [X] ||| 0.0278341 1 ||| ||| 0.310207
+[X][X] , I [X][X] [X] ||| [X][X] , ich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.145013
+[X][X] , I feel [X] ||| [X][X] , ich denke , daß [X] ||| 0.0278341 1 ||| ||| 0.178023
+[X][X] , I feel [X][X] [X] ||| [X][X] , ich denke , daß [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0322581
+[X][X] , I feel an [X] ||| [X][X] , ich denke , daß eine [X] ||| 0.0278341 1 ||| ||| 0.112755
+, in Texas [X][X] , [X] ||| [X][X] , in Texas , [X] ||| 0.0278341 1 ||| ||| 0.277778
+, in Texas [X][X] [X] ||| [X][X] , in Texas [X] ||| 0.0278341 1 ||| ||| 0.291667
+[X][X] in [X] ||| [X][X] , mit [X] ||| 0.0278341 1 ||| ||| 0.367857
+[X][X] in [X][X] [X] ||| [X][X] , mit [X][X] [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] in which [X] ||| [X][X] , mit dem [X] ||| 0.0278341 1 ||| ||| 0.215909
+[X][X] in which [X] ||| [X][X] , mit dem sich [X] ||| 0.0278341 1 ||| ||| 0.162338
+[X][X] in which this [X] ||| [X][X] , mit dem sich dieses [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] would be legally inadmissible [X] ||| [X][X] , rechtlich unzulässig wäre [X] ||| 0.0278341 1 ||| ||| 0.3171
+people signed [X][X] [X] ||| [X][X] , unterzeichnet worden [X] ||| 0.0102547 1 ||| ||| 0.22619
+signed [X][X] [X] ||| [X][X] , unterzeichnet worden [X] ||| 0.0175794 1 ||| ||| 0.22619
+people signed [X][X] . [X] ||| [X][X] , unterzeichnet worden ist . [X] ||| 0.00863818 1 ||| ||| 0.161111
+signed [X][X] . [X] ||| [X][X] , unterzeichnet worden ist . [X] ||| 0.0191959 1 ||| ||| 0.161111
+people signed [X][X] [X] ||| [X][X] , unterzeichnet worden ist [X] ||| 0.00811828 1 ||| ||| 0.20168
+signed [X][X] [X] ||| [X][X] , unterzeichnet worden ist [X] ||| 0.0197158 1 ||| ||| 0.20168
+[X][X] because [X] ||| [X][X] , weil [X] ||| 0.0278341 1 ||| ||| 0.0238095
+[X][X] because the [X] ||| [X][X] , weil der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+[X][X] for you , Madam [X] ||| [X][X] , wenn Sie , Frau [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] for you , [X] ||| [X][X] , wenn Sie , [X] ||| 0.0278341 1 ||| ||| 0.0625
+[X][X] for you , [X][X] [X] ||| [X][X] , wenn Sie , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0559441
+[X][X] , if you [X] ||| [X][X] , wenn Sie [X] ||| 0.0172586 1 ||| ||| 0.451191
+[X][X] for you [X] ||| [X][X] , wenn Sie [X] ||| 0.00616903 1 ||| ||| 0.451191
+the [X][X] , if you [X] ||| [X][X] , wenn Sie [X] ||| 0.00440645 1 ||| ||| 0.451191
+[X][X] for you [X][X] , [X] ||| [X][X] , wenn Sie [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.025641
+[X][X] for you [X][X] President [X] ||| [X][X] , wenn Sie [X][X] Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.030303
+[X][X] , if you [X][X] [X] ||| [X][X] , wenn Sie [X][X] [X] ||| 0.017572 1 ||| ||| 0.26023
+[X][X] for you [X][X] [X] ||| [X][X] , wenn Sie [X][X] [X] ||| 0.0102621 1 ||| ||| 0.26023
+[X][X] , if you wish [X] ||| [X][X] , wenn Sie wollen [X] ||| 0.0278341 1 ||| ||| 0.177871
+[X][X] , if [X] ||| [X][X] , wenn [X] ||| 0.018 1 ||| ||| 0.880555
+[X][X] for [X] ||| [X][X] , wenn [X] ||| 0.00632194 1 ||| ||| 0.880555
+the [X][X] , if [X] ||| [X][X] , wenn [X] ||| 0.00351219 1 ||| ||| 0.880555
+[X][X] , if [X][X] , [X] ||| [X][X] , wenn [X][X] , [X] ||| 0.0230203 1 ||| ||| 0.14826
+[X][X] for [X][X] , [X] ||| [X][X] , wenn [X][X] , [X] ||| 0.0048138 1 ||| ||| 0.14826
+[X][X] for [X][X] Madam President [X] ||| [X][X] , wenn [X][X] Frau Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.030303
+[X][X] for [X][X] Madam [X] ||| [X][X] , wenn [X][X] Frau [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] for [X][X] President , [X] ||| [X][X] , wenn [X][X] Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.025641
+[X][X] for [X][X] President [X] ||| [X][X] , wenn [X][X] Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.030303
+[X][X] , if [X][X] [X] ||| [X][X] , wenn [X][X] [X] ||| 0.0163762 1 ||| ||| 0.581553
+[X][X] for [X][X] [X] ||| [X][X] , wenn [X][X] [X] ||| 0.00758339 1 ||| ||| 0.581553
+the [X][X] , if [X][X] [X] ||| [X][X] , wenn [X][X] [X] ||| 0.00387451 1 ||| ||| 0.581553
+[X][X] , I shall [X] ||| [X][X] , werde ich [X] ||| 0.0177506 1 ||| ||| 0.382684
+[X][X] , I shall do [X] ||| [X][X] , werde ich [X] ||| 0.0100835 1 ||| ||| 0.382684
+[X][X] , I shall [X] ||| [X][X] , werde ich dem [X] ||| 0.017949 1 ||| ||| 0.244022
+[X][X] , I shall do [X] ||| [X][X] , werde ich dem [X] ||| 0.00988513 1 ||| ||| 0.244022
+[X][X] , on [X] ||| [X][X] , zur [X] ||| 0.0278341 1 ||| ||| 0.333334
+[X][X] , on [X][X] . [X] ||| [X][X] , zur [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] , on [X][X] [X] ||| [X][X] , zur [X][X] [X] ||| 0.0278341 1 ||| ||| 0.347222
+[X][X] Mr Kumar Ponnambalam [X] ||| [X][X] , zählt auch Herr Kumar Ponnambalam [X] ||| 0.0278341 1 ||| ||| 0.047619
+[X][X] Mr [X] ||| [X][X] , zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 0.223214
+[X][X] Mr [X][X] [X] ||| [X][X] , zählt auch Herr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.047619
+[X][X] , [X] ||| [X][X] - , [X] ||| 0.0100524 1 ||| ||| 0.162876
+[X][X] , on [X] ||| [X][X] - , [X] ||| 0.00657272 1 ||| ||| 0.162876
+[X][X] , on behalf [X] ||| [X][X] - , [X] ||| 0.00569636 1 ||| ||| 0.162876
+[X][X] , on behalf of [X] ||| [X][X] - , [X] ||| 0.00551262 1 ||| ||| 0.162876
+, [X][X] [X] ||| [X][X] - [X] ||| 0.0278341 1 ||| ||| 0.333333
+, [X][X] . [X] ||| [X][X] . [X] ||| 0.000110668 1 ||| ||| 15.7194
+[X][X] . [X] ||| [X][X] . [X] ||| 0.751346 1 ||| ||| 15.7194
+[X][X] an interest . [X] ||| [X][X] . [X] ||| 0.000644094 1 ||| ||| 15.7194
+[X][X] interest . [X] ||| [X][X] . [X] ||| 0.000644094 1 ||| ||| 15.7194
+do [X][X] . [X] ||| [X][X] . [X] ||| 0.000357714 1 ||| ||| 15.7194
+has [X][X] . [X] ||| [X][X] . [X] ||| 0.000354137 1 ||| ||| 15.7194
+have [X][X] . [X] ||| [X][X] . [X] ||| 0.000442672 1 ||| ||| 15.7194
+have just [X][X] . [X] ||| [X][X] . [X] ||| 0.000442672 1 ||| ||| 15.7194
+have just suggested [X][X] . [X] ||| [X][X] . [X] ||| 0.000442672 1 ||| ||| 15.7194
+just [X][X] . [X] ||| [X][X] . [X] ||| 0.000590228 1 ||| ||| 15.7194
+just suggested [X][X] . [X] ||| [X][X] . [X] ||| 0.000590228 1 ||| ||| 15.7194
+people [X][X] . [X] ||| [X][X] . [X] ||| 8.85343e-05 1 ||| ||| 15.7194
+suggested [X][X] . [X] ||| [X][X] . [X] ||| 0.000885343 1 ||| ||| 15.7194
+you [X][X] . [X] ||| [X][X] . [X] ||| 0.000442672 1 ||| ||| 15.7194
+you have [X][X] . [X] ||| [X][X] . [X] ||| 0.000442672 1 ||| ||| 15.7194
+you have just [X][X] . [X] ||| [X][X] . [X] ||| 0.000442672 1 ||| ||| 15.7194
+[X][X] 143 [X] ||| [X][X] 143 [X] ||| 0.0278341 1 ||| ||| 0.696429
+[X][X] 143 [X][X] . [X] ||| [X][X] 143 [X][X] ? [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] 143 [X][X] [X] ||| [X][X] 143 [X][X] [X] ||| 0.0278341 1 ||| ||| 0.196172
+[X][X] 143 concerning inadmissibility . [X] ||| [X][X] 143 im Zusammenhang mit der Unzulässigkeit geben ? [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] 143 concerning inadmissibility [X] ||| [X][X] 143 im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0278341 1 ||| ||| 0.143541
+[X][X] 143 concerning [X] ||| [X][X] 143 im Zusammenhang mit der [X] ||| 0.0278341 1 ||| ||| 0.324242
+[X][X] 143 concerning [X][X] [X] ||| [X][X] 143 im Zusammenhang mit der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] 6 [X] ||| [X][X] 6 [X] ||| 0.0278341 1 ||| ||| 0.783333
+proposal [X][X] 6 that [X] ||| [X][X] 6 vorschlägt , [X] ||| 0.0278341 1 ||| ||| 0.415909
+proposal [X][X] 6 [X] ||| [X][X] 6 vorschlägt [X] ||| 0.0278341 1 ||| ||| 0.541667
+[X][X] . [X] ||| [X][X] ? [X] ||| 0.0278341 1 ||| ||| 0.643541
+[X][X] Alexander Nikitin . [X] ||| [X][X] Alexander Nikitin . [X] ||| 0.0278341 1 ||| ||| 0.203664
+[X][X] Alexander Nikitin [X] ||| [X][X] Alexander Nikitin [X] ||| 0.0278341 1 ||| ||| 0.34469
+[X][X] Alexander [X] ||| [X][X] Alexander [X] ||| 0.0278341 1 ||| ||| 0.643541
+[X][X] Alexander [X][X] [X] ||| [X][X] Alexander [X][X] [X] ||| 0.0278341 1 ||| ||| 0.203664
+[X][X] prestigious office [X] ||| [X][X] Amtes [X] ||| 0.0239998 1 ||| ||| 0.989885
+representations [X][X] prestigious office [X] ||| [X][X] Amtes [X] ||| 0.00127811 1 ||| ||| 0.989885
+using [X][X] prestigious office [X] ||| [X][X] Amtes [X] ||| 0.00255623 1 ||| ||| 0.989885
+[X][X] prestigious office [X][X] , [X] ||| [X][X] Amtes [X][X] , [X] ||| 0.00272045 1 ||| ||| 0.208805
+[X][X] prestigious office [X][X] [X] ||| [X][X] Amtes [X][X] , [X] ||| 0.0215109 1 ||| ||| 0.208805
+using [X][X] prestigious office [X][X] [X] ||| [X][X] Amtes [X][X] , [X] ||| 0.00360275 1 ||| ||| 0.208805
+[X][X] prestigious office [X][X] you [X] ||| [X][X] Amtes [X][X] , die Sie [X] ||| 0.0278341 1 ||| ||| 0.0694118
+[X][X] prestigious office [X][X] [X] ||| [X][X] Amtes [X][X] , die [X] ||| 0.0238328 1 ||| ||| 0.141966
+using [X][X] prestigious office [X][X] [X] ||| [X][X] Amtes [X][X] , die [X] ||| 0.00400126 1 ||| ||| 0.141966
+[X][X] prestigious office [X][X] institution [X] ||| [X][X] Amtes [X][X] Institution , [X] ||| 0.0278341 1 ||| ||| 0.16137
+[X][X] prestigious office [X][X] institution [X] ||| [X][X] Amtes [X][X] Institution , die [X] ||| 0.0278341 1 ||| ||| 0.121558
+[X][X] prestigious office [X][X] institution [X] ||| [X][X] Amtes [X][X] Institution [X] ||| 0.0278341 1 ||| ||| 0.24
+[X][X] prestigious office [X][X] you [X] ||| [X][X] Amtes [X][X] Sie [X] ||| 0.0278341 1 ||| ||| 0.0694118
+[X][X] prestigious office [X][X] [X] ||| [X][X] Amtes [X][X] [X] ||| 0.212366 1 ||| ||| 1.16391
+using [X][X] prestigious office [X][X] [X] ||| [X][X] Amtes [X][X] [X] ||| 0.00334961 1 ||| ||| 1.16391
+[X][X] prestigious office [X][X] you [X] ||| [X][X] Amtes [X][X] die Sie [X] ||| 0.0278341 1 ||| ||| 0.0694118
+[X][X] prestigious office [X][X] [X] ||| [X][X] Amtes [X][X] die [X] ||| 0.0238328 1 ||| ||| 0.141966
+using [X][X] prestigious office [X][X] [X] ||| [X][X] Amtes [X][X] die [X] ||| 0.00400126 1 ||| ||| 0.141966
+[X][X] prestigious office [X][X] represent [X] ||| [X][X] Amtes [X][X] vertreten [X] ||| 0.0278341 1 ||| ||| 0.0263158
+[X][X] prestigious office and [X] ||| [X][X] Amtes und [X] ||| 0.0236236 1 ||| ||| 0.700134
+representations [X][X] prestigious office and [X] ||| [X][X] Amtes und [X] ||| 0.00137088 1 ||| ||| 0.700134
+using [X][X] prestigious office and [X] ||| [X][X] Amtes und [X] ||| 0.00283967 1 ||| ||| 0.700134
+[X][X] prestigious office and [X][X] [X] ||| [X][X] Amtes und [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.16137
+[X][X] prestigious office and [X][X] [X] ||| [X][X] Amtes und [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.121558
+[X][X] prestigious office and [X][X] [X] ||| [X][X] Amtes und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.639064
+[X][X] prestigious office and [X][X] [X] ||| [X][X] Amtes und [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.121558
+[X][X] prestigious office and the [X] ||| [X][X] Amtes und der [X] ||| 0.0278341 1 ||| ||| 0.384774
+[X][X] Rule 143 [X] ||| [X][X] Artikel 143 [X] ||| 0.0278341 1 ||| ||| 0.363095
+[X][X] Rule 143 [X][X] [X] ||| [X][X] Artikel 143 [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] Rule 143 concerning inadmissibility [X] ||| [X][X] Artikel 143 im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] Rule 143 concerning [X] ||| [X][X] Artikel 143 im Zusammenhang mit der [X] ||| 0.0278341 1 ||| ||| 0.157576
+[X][X] Rule [X] ||| [X][X] Artikel [X] ||| 0.0278341 1 ||| ||| 0.708333
+[X][X] Rule [X][X] inadmissibility [X] ||| [X][X] Artikel [X][X] Unzulässigkeit geben [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] Rule [X][X] [X] ||| [X][X] Artikel [X][X] [X] ||| 0.0278341 1 ||| ||| 0.210207
+[X][X] people assassinated very [X] ||| [X][X] Attentatsopfern , die es in [X] ||| 0.0278341 1 ||| ||| 0.476191
+[X][X] people assassinated very [X][X] [X] ||| [X][X] Attentatsopfern , die es in [X][X] [X] ||| 0.0278341 1 ||| ||| 0.273352
+[X][X] people assassinated very recently [X] ||| [X][X] Attentatsopfern , die es in jüngster Zeit [X] ||| 0.0278341 1 ||| ||| 0.3
+[X][X] advice [X] ||| [X][X] Auskunft [X] ||| 0.0278341 1 ||| ||| 0.333333
+[X][X] advice [X][X] 143 [X] ||| [X][X] Auskunft [X][X] 143 [X] ||| 0.0278341 1 ||| ||| 0.0714286
+[X][X] advice [X][X] [X] ||| [X][X] Auskunft [X][X] [X] ||| 0.0278341 1 ||| ||| 0.196429
+[X][X] advice about Rule 143 [X] ||| [X][X] Auskunft zu Artikel 143 [X] ||| 0.0278341 1 ||| ||| 0.0714286
+[X][X] advice about Rule [X] ||| [X][X] Auskunft zu Artikel [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] advice about [X] ||| [X][X] Auskunft zu [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] advice about [X][X] [X] ||| [X][X] Auskunft zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0714286
+[X][X] guidance programmes [X] ||| [X][X] Ausrichtungsprogramme [X] ||| 0.0164119 1 ||| ||| 0.59359
+[X][X] guidance programmes comes [X] ||| [X][X] Ausrichtungsprogramme [X] ||| 0.0114222 1 ||| ||| 0.59359
+[X][X] guidance programmes [X][X] [X] ||| [X][X] Ausrichtungsprogramme [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.103704
+[X][X] guidance programmes [X][X] [X] ||| [X][X] Ausrichtungsprogramme [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.081203
+[X][X] guidance programmes [X][X] [X] ||| [X][X] Ausrichtungsprogramme [X][X] [X] ||| 0.0278341 1 ||| ||| 0.328447
+[X][X] guidance programmes [X][X] [X] ||| [X][X] Ausrichtungsprogramme [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.081203
+[X][X] guidance programmes comes before [X] ||| [X][X] Ausrichtungsprogramme befassen , [X] ||| 0.0278341 1 ||| ||| 0.103704
+[X][X] guidance programmes comes before [X] ||| [X][X] Ausrichtungsprogramme befassen , der [X] ||| 0.0278341 1 ||| ||| 0.081203
+[X][X] guidance programmes comes before [X] ||| [X][X] Ausrichtungsprogramme befassen [X] ||| 0.0278341 1 ||| ||| 0.143541
+[X][X] a stay of execution [X] ||| [X][X] Aussetzung der Vollstreckung des Todesurteils [X] ||| 0.241419 1 ||| ||| 1.5
+[X][X] debate [X] ||| [X][X] Aussprache [X] ||| 0.0105074 1 ||| ||| 1.68075
+[X][X] presentation [X] ||| [X][X] Aussprache [X] ||| 0.150283 1 ||| ||| 1.68075
+[X][X] presentation [X][X] . [X] ||| [X][X] Aussprache [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.121544
+[X][X] presentation [X][X] report . [X] ||| [X][X] Aussprache [X][X] Bericht . [X] ||| 0.0278341 1 ||| ||| 0.121544
+[X][X] presentation [X][X] report [X] ||| [X][X] Aussprache [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.175707
+[X][X] presentation [X][X] [X] ||| [X][X] Aussprache [X][X] [X] ||| 0.0278341 1 ||| ||| 0.624882
+[X][X] debate on [X] ||| [X][X] Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.326852
+[X][X] presentation of [X] ||| [X][X] Aussprache über [X] ||| 0.0278341 1 ||| ||| 0.591667
+[X][X] presentation of [X][X] . [X] ||| [X][X] Aussprache über [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.121544
+[X][X] presentation of [X][X] [X] ||| [X][X] Aussprache über [X][X] [X] ||| 0.0278341 1 ||| ||| 0.29725
+[X][X] presentation of the report [X] ||| [X][X] Aussprache über den Bericht [X] ||| 0.0278341 1 ||| ||| 0.175707
+[X][X] presentation of the [X] ||| [X][X] Aussprache über den [X] ||| 0.0278341 1 ||| ||| 0.327632
+[X][X] presentation of the [X][X] [X] ||| [X][X] Aussprache über den [X][X] [X] ||| 0.0278341 1 ||| ||| 0.121544
+[X][X] the start [X] ||| [X][X] Beginn [X] ||| 0.0278341 1 ||| ||| 0.413524
+[X][X] the start [X][X] presentation [X] ||| [X][X] Beginn [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.203409
+[X][X] the start [X][X] [X] ||| [X][X] Beginn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.679652
+[X][X] the start [X][X] the [X] ||| [X][X] Beginn [X][X] den [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] the start [X][X] of [X] ||| [X][X] Beginn [X][X] über [X] ||| 0.0278341 1 ||| ||| 0.116667
+[X][X] the start of the [X] ||| [X][X] Beginn der [X] ||| 0.0278341 1 ||| ||| 0.306944
+[X][X] reprieve [X] ||| [X][X] Begnadigung [X] ||| 0.0245913 1 ||| ||| 0.858333
+power [X][X] reprieve [X] ||| [X][X] Begnadigung [X] ||| 0.00324281 1 ||| ||| 0.858333
+[X][X] reprieve [X][X] [X] ||| [X][X] Begnadigung [X][X] [X] ||| 0.0278341 1 ||| ||| 0.138095
+[X][X] reprieve the condemned person [X] ||| [X][X] Begnadigung des Verurteilten [X] ||| 0.0278341 1 ||| ||| 0.138095
+[X][X] reprieve the [X] ||| [X][X] Begnadigung des [X] ||| 0.0278341 1 ||| ||| 0.354701
+[X][X] reprieve the [X][X] [X] ||| [X][X] Begnadigung des [X][X] [X] ||| 0.0278341 1 ||| ||| 0.138095
+[X][X] report . [X] ||| [X][X] Bericht . [X] ||| 0.0278341 1 ||| ||| 0.37912
+[X][X] report [X] ||| [X][X] Bericht [X] ||| 0.241419 1 ||| ||| 1.35496
+[X][X] report [X][X] legislative proposal [X] ||| [X][X] Bericht [X][X] Legislativvorschlag [X] ||| 0.0278341 1 ||| ||| 0.132748
+[X][X] report [X][X] [X] ||| [X][X] Bericht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.316082
+[X][X] report , [X] ||| [X][X] Bericht und [X] ||| 0.0278341 1 ||| ||| 0.34469
+[X][X] report , [X][X] [X] ||| [X][X] Bericht und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.316082
+[X][X] report , not a [X] ||| [X][X] Bericht und keinen [X] ||| 0.0278341 1 ||| ||| 0.183333
+[X][X] is appealing . [X] ||| [X][X] Berufung geht . [X] ||| 0.0278341 1 ||| ||| 0.32803
+[X][X] is appealing [X] ||| [X][X] Berufung geht [X] ||| 0.0278341 1 ||| ||| 0.457479
+visited [X][X] [X] ||| [X][X] Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited [X][X] [X] ||| [X][X] Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] bomb explosions and killings [X] ||| [X][X] Bombenexplosionen mit zahlreichen Toten [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] bomb explosions and [X] ||| [X][X] Bombenexplosionen mit zahlreichen [X] ||| 0.013917 1 ||| ||| 0.5
+[X][X] of bomb explosions and [X] ||| [X][X] Bombenexplosionen mit zahlreichen [X] ||| 0.013917 1 ||| ||| 0.5
+[X][X] Bush , [X] ||| [X][X] Bush , [X] ||| 0.0214544 1 ||| ||| 0.917338
+the [X][X] Bush , [X] ||| [X][X] Bush , [X] ||| 0.00233402 1 ||| ||| 0.917338
+to [X][X] Bush , [X] ||| [X][X] Bush , [X] ||| 0.00202282 1 ||| ||| 0.917338
+to the [X][X] Bush , [X] ||| [X][X] Bush , [X] ||| 0.00202282 1 ||| ||| 0.917338
+[X][X] Bush , who [X] ||| [X][X] Bush , der [X] ||| 0.022242 1 ||| ||| 0.525397
+the [X][X] Bush , who [X] ||| [X][X] Bush , der [X] ||| 0.00294319 1 ||| ||| 0.525397
+to [X][X] Bush , who [X] ||| [X][X] Bush , der [X] ||| 0.00264887 1 ||| ||| 0.525397
+[X][X] Bush [X] ||| [X][X] Bush [X] ||| 0.193935 1 ||| ||| 1.48933
+the [X][X] Bush [X] ||| [X][X] Bush [X] ||| 0.00207656 1 ||| ||| 1.48933
+to [X][X] Bush [X] ||| [X][X] Bush [X] ||| 0.001699 1 ||| ||| 1.48933
+to the [X][X] Bush [X] ||| [X][X] Bush [X] ||| 0.001699 1 ||| ||| 1.48933
+[X][X] Bush [X][X] [X] ||| [X][X] Bush [X][X] [X] ||| 0.0203093 1 ||| ||| 0.575397
+the [X][X] Bush [X][X] [X] ||| [X][X] Bush [X][X] [X] ||| 0.00268743 1 ||| ||| 0.575397
+to [X][X] Bush [X][X] [X] ||| [X][X] Bush [X][X] [X] ||| 0.00241869 1 ||| ||| 0.575397
+to the [X][X] Bush [X][X] [X] ||| [X][X] Bush [X][X] [X] ||| 0.00241869 1 ||| ||| 0.575397
+Thursday [X][X] [X] ||| [X][X] Donnerstag [X] ||| 0.00620506 1 ||| ||| 1.12143
+[X][X] Thursday prior [X] ||| [X][X] Donnerstag [X] ||| 0.0133556 1 ||| ||| 1.12143
+next Thursday [X][X] [X] ||| [X][X] Donnerstag [X] ||| 0.0082734 1 ||| ||| 1.12143
+[X][X] Thursday prior [X][X] presentation [X] ||| [X][X] Donnerstag [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] Thursday prior [X][X] [X] ||| [X][X] Donnerstag [X][X] [X] ||| 0.0278341 1 ||| ||| 0.298247
+[X][X] Thursday prior to [X] ||| [X][X] Donnerstag zu [X] ||| 0.0278341 1 ||| ||| 0.313228
+[X][X] Thursday prior to [X][X] [X] ||| [X][X] Donnerstag zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.298247
+[X][X] objection [X] ||| [X][X] Einwand gegen [X] ||| 0.241419 1 ||| ||| 1.22244
+[X][X] European Parliament [X] ||| [X][X] Europäischen Parlament [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] European Parliament [X][X] [X] ||| [X][X] Europäischen Parlament [X][X] [X] ||| 0.0219196 1 ||| ||| 0.269141
+[X][X] European Parliament [X][X] of [X] ||| [X][X] Europäischen Parlament [X][X] [X] ||| 0.00304172 1 ||| ||| 0.269141
+[X][X] European Parliament [X][X] the [X] ||| [X][X] Europäischen Parlament [X][X] [X] ||| 0.00287274 1 ||| ||| 0.269141
+[X][X] European Parliament [X][X] the [X] ||| [X][X] Europäischen Parlament [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.047619
+[X][X] European Parliament [X][X] whole [X] ||| [X][X] Europäischen Parlament [X][X] gesamten [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] European Parliament and [X] ||| [X][X] Europäischen Parlament und [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] European Parliament and [X][X] [X] ||| [X][X] Europäischen Parlament und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.140523
+[X][X] European Parliament and by [X] ||| [X][X] Europäischen Parlament und von [X] ||| 0.0278341 1 ||| ||| 0.0714286
+[X][X] European Parliament , [X] ||| [X][X] Europäischen Parlaments [X] ||| 0.00692451 1 ||| ||| 0.939657
+[X][X] European Parliament , a [X] ||| [X][X] Europäischen Parlaments [X] ||| 0.00556986 1 ||| ||| 0.939657
+[X][X] European Parliament [X] ||| [X][X] Europäischen Parlaments [X] ||| 0.0153397 1 ||| ||| 0.939657
+[X][X] European Community [X] ||| [X][X] Europäischen Union [X] ||| 0.0059933 1 ||| ||| 1.33174
+[X][X] European Union [X] ||| [X][X] Europäischen Union [X] ||| 0.0121765 1 ||| ||| 1.33174
+[X][X] of the European Community [X] ||| [X][X] Europäischen Union [X] ||| 0.00367102 1 ||| ||| 1.33174
+[X][X] the European Community [X] ||| [X][X] Europäischen Union [X] ||| 0.0059933 1 ||| ||| 1.33174
+[X][X] European [X] ||| [X][X] Europäischen [X] ||| 0.784318 1 ||| ||| 3.89426
+[X][X] of the European [X] ||| [X][X] Europäischen [X] ||| 0.00188983 1 ||| ||| 3.89426
+[X][X] the European [X] ||| [X][X] Europäischen [X] ||| 0.00331932 1 ||| ||| 3.89426
+with [X][X] European [X] ||| [X][X] Europäischen [X] ||| 0.000794163 1 ||| ||| 3.89426
+[X][X] European [X][X] [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.111567 1 ||| ||| 3.22085
+[X][X] European [X][X] a [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.00162496 1 ||| ||| 3.22085
+[X][X] European [X][X] a date [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.00162496 1 ||| ||| 3.22085
+[X][X] European [X][X] been [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.00180038 1 ||| ||| 3.22085
+[X][X] European [X][X] been set [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.00108023 1 ||| ||| 3.22085
+[X][X] European [X][X] date [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.00162496 1 ||| ||| 3.22085
+[X][X] European [X][X] date has [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.00180038 1 ||| ||| 3.22085
+[X][X] European [X][X] has [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.00180038 1 ||| ||| 3.22085
+[X][X] European [X][X] has been [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.00180038 1 ||| ||| 3.22085
+[X][X] European [X][X] of [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.000254172 1 ||| ||| 3.22085
+[X][X] European [X][X] of the [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.000240051 1 ||| ||| 3.22085
+[X][X] European [X][X] set [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.00108023 1 ||| ||| 3.22085
+[X][X] European [X][X] the [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.000240051 1 ||| ||| 3.22085
+[X][X] European [X][X] the [X] ||| [X][X] Europäischen [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.047619
+[X][X] European [X][X] the whole [X] ||| [X][X] Europäischen [X][X] der gesamten [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] European [X][X] whole [X] ||| [X][X] Europäischen [X][X] gesamten [X] ||| 0.0152639 1 ||| ||| 0.0651261
+[X][X] European [X][X] whole of [X] ||| [X][X] Europäischen [X][X] gesamten [X] ||| 0.0125702 1 ||| ||| 0.0651261
+[X][X] European [X][X] by [X] ||| [X][X] Europäischen [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0714286
+[X][X] European [X][X] by the [X] ||| [X][X] Europäischen [X][X] von der [X] ||| 0.0278341 1 ||| ||| 0.047619
+[X][X] Evans , [X] ||| [X][X] Evans , [X] ||| 0.0278341 1 ||| ||| 0.257576
+[X][X] Evans , [X][X] [X] ||| [X][X] Evans , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.147238
+[X][X] Evans , [X][X] an [X] ||| [X][X] Evans , [X][X] eine [X] ||| 0.0278341 1 ||| ||| 0.0601238
+[X][X] Evans , I [X] ||| [X][X] Evans , ich [X] ||| 0.0278341 1 ||| ||| 0.143541
+[X][X] Evans , I [X][X] [X] ||| [X][X] Evans , ich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0601238
+[X][X] Evans , I feel [X] ||| [X][X] Evans , ich denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0871143
+[X][X] Evans [X] ||| [X][X] Evans [X] ||| 0.148198 1 ||| ||| 1.68333
+[X][X] Evans has [X] ||| [X][X] Evans [X] ||| 0.00537391 1 ||| ||| 1.68333
+do [X][X] Evans [X] ||| [X][X] Evans [X] ||| 0.00330702 1 ||| ||| 1.68333
+do [X][X] Evans has [X] ||| [X][X] Evans [X] ||| 0.00206689 1 ||| ||| 1.68333
+[X][X] Evans [X][X] [X] ||| [X][X] Evans [X][X] [X] ||| 0.0278341 1 ||| ||| 0.290779
+[X][X] Evans [X][X] feel [X] ||| [X][X] Evans [X][X] denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0871143
+[X][X] Evans [X][X] feel an [X] ||| [X][X] Evans [X][X] denke , daß eine [X] ||| 0.0278341 1 ||| ||| 0.0601238
+[X][X] Evans [X][X] an [X] ||| [X][X] Evans [X][X] eine [X] ||| 0.0278341 1 ||| ||| 0.0601238
+[X][X] case [X] ||| [X][X] Fall [X] ||| 0.241419 1 ||| ||| 1.08333
+[X][X] case [X][X] . [X] ||| [X][X] Fall [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0601238
+[X][X] case [X][X] Nikitin . [X] ||| [X][X] Fall [X][X] Nikitin . [X] ||| 0.0278341 1 ||| ||| 0.0601238
+[X][X] case [X][X] Nikitin [X] ||| [X][X] Fall [X][X] Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0871143
+[X][X] case [X][X] [X] ||| [X][X] Fall [X][X] [X] ||| 0.0278341 1 ||| ||| 0.290779
+draw your attention [X][X] case [X] ||| [X][X] Fall aufmerksam machen , [X] ||| 0.0278341 1 ||| ||| 0.253968
+draw your attention [X][X] case [X] ||| [X][X] Fall aufmerksam machen [X] ||| 0.0278341 1 ||| ||| 0.342857
+[X][X] case of Alexander Nikitin [X] ||| [X][X] Fall von Alexander Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0871143
+[X][X] case of Alexander [X] ||| [X][X] Fall von Alexander [X] ||| 0.0278341 1 ||| ||| 0.143541
+[X][X] case of Alexander [X][X] [X] ||| [X][X] Fall von Alexander [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0601238
+[X][X] case of [X] ||| [X][X] Fall von [X] ||| 0.0278341 1 ||| ||| 0.257576
+[X][X] case of [X][X] . [X] ||| [X][X] Fall von [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0601238
+[X][X] case of [X][X] [X] ||| [X][X] Fall von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.147238
+[X][X] fisheries policy [X] ||| [X][X] Fischereipolitik darstellt [X] ||| 0.0250044 1 ||| ||| 0.546465
+is [X][X] fisheries policy [X] ||| [X][X] Fischereipolitik darstellt [X] ||| 0.00282972 1 ||| ||| 0.546465
+[X][X] fisheries policy [X][X] proposal [X] ||| [X][X] Fischereipolitik darstellt [X][X] Vorschlag [X] ||| 0.0278341 1 ||| ||| 0.108824
+[X][X] fisheries policy [X][X] [X] ||| [X][X] Fischereipolitik darstellt [X][X] [X] ||| 0.0278341 1 ||| ||| 0.298247
+[X][X] fisheries policy and [X] ||| [X][X] Fischereipolitik darstellt und [X] ||| 0.0278341 1 ||| ||| 0.306944
+[X][X] fisheries policy and [X][X] [X] ||| [X][X] Fischereipolitik darstellt und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.108824
+[X][X] fisheries policy and a [X] ||| [X][X] Fischereipolitik darstellt und ein [X] ||| 0.0278341 1 ||| ||| 0.189423
+[X][X] Madam President , [X] ||| [X][X] Frau Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.233246
+[X][X] Madam President , [X] ||| [X][X] Frau Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.148201
+[X][X] Madam President [X] ||| [X][X] Frau Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.396212
+[X][X] Madam [X] ||| [X][X] Frau [X] ||| 0.0278341 1 ||| ||| 0.736429
+[X][X] Madam [X][X] [X] ||| [X][X] Frau [X][X] [X] ||| 0.0278341 1 ||| ||| 0.381447
+[X][X] Madam [X][X] [X] ||| [X][X] Frau [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.148201
+[X][X] courts [X] ||| [X][X] Gericht [X] ||| 0.017014 1 ||| ||| 0.784926
+[X][X] courts have [X] ||| [X][X] Gericht [X] ||| 0.0108201 1 ||| ||| 0.784926
+[X][X] courts [X][X] [X] ||| [X][X] Gericht [X][X] [X] ||| 0.013917 1 ||| ||| 0.329506
+[X][X] courts have [X][X] [X] ||| [X][X] Gericht [X][X] [X] ||| 0.013917 1 ||| ||| 0.329506
+[X][X] courts [X][X] and [X] ||| [X][X] Gericht [X][X] und [X] ||| 0.013917 1 ||| ||| 0.105263
+[X][X] courts have [X][X] and [X] ||| [X][X] Gericht [X][X] und [X] ||| 0.013917 1 ||| ||| 0.105263
+[X][X] courts [X][X] him [X] ||| [X][X] Gericht ihn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] courts [X][X] him and [X] ||| [X][X] Gericht ihn [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] courts have acquitted him [X] ||| [X][X] Gericht ihn freigesprochen [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] a point of order [X] ||| [X][X] Geschäftsordnung [X] ||| 0.241419 1 ||| ||| 1.28889
+[X][X] Governor [X] ||| [X][X] Gouverneur [X] ||| 0.0106945 1 ||| ||| 1.31002
+[X][X] the Governor [X] ||| [X][X] Gouverneur [X] ||| 0.0106945 1 ||| ||| 1.31002
+[X][X] to the Governor [X] ||| [X][X] Gouverneur [X] ||| 0.00644509 1 ||| ||| 1.31002
+[X][X] Governor [X][X] , [X] ||| [X][X] Gouverneur [X][X] , [X] ||| 0.013917 1 ||| ||| 0.0714286
+[X][X] the Governor [X][X] , [X] ||| [X][X] Gouverneur [X][X] , [X] ||| 0.013917 1 ||| ||| 0.0714286
+[X][X] Governor [X][X] Bush , [X] ||| [X][X] Gouverneur [X][X] Bush , [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] Governor [X][X] Bush [X] ||| [X][X] Gouverneur [X][X] Bush [X] ||| 0.013917 1 ||| ||| 0.155425
+[X][X] the Governor [X][X] Bush [X] ||| [X][X] Gouverneur [X][X] Bush [X] ||| 0.013917 1 ||| ||| 0.155425
+[X][X] Governor [X][X] [X] ||| [X][X] Gouverneur [X][X] [X] ||| 0.0113748 1 ||| ||| 0.675249
+[X][X] the Governor [X][X] [X] ||| [X][X] Gouverneur [X][X] [X] ||| 0.0113748 1 ||| ||| 0.675249
+[X][X] to the Governor [X][X] [X] ||| [X][X] Gouverneur [X][X] [X] ||| 0.00508459 1 ||| ||| 0.675249
+[X][X] Governor of [X] ||| [X][X] Gouverneur von [X] ||| 0.0106541 1 ||| ||| 0.749148
+[X][X] the Governor of [X] ||| [X][X] Gouverneur von [X] ||| 0.0106541 1 ||| ||| 0.749148
+[X][X] to the Governor of [X] ||| [X][X] Gouverneur von [X] ||| 0.00652586 1 ||| ||| 0.749148
+[X][X] Governor of [X][X] , [X] ||| [X][X] Gouverneur von [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] Governor of [X][X] Bush [X] ||| [X][X] Gouverneur von [X][X] Bush [X] ||| 0.0278341 1 ||| ||| 0.0777126
+[X][X] Governor of [X][X] [X] ||| [X][X] Gouverneur von [X][X] [X] ||| 0.013917 1 ||| ||| 0.551898
+[X][X] the Governor of [X][X] [X] ||| [X][X] Gouverneur von [X][X] [X] ||| 0.013917 1 ||| ||| 0.551898
+[X][X] principle [X] ||| [X][X] Grundsatz [X] ||| 0.0278341 1 ||| ||| 0.590909
+[X][X] principle [X][X] stability [X] ||| [X][X] Grundsatz [X][X] Stabilität [X] ||| 0.0160437 1 ||| ||| 0.195618
+[X][X] principle [X][X] stability is [X] ||| [X][X] Grundsatz [X][X] Stabilität [X] ||| 0.0117904 1 ||| ||| 0.195618
+[X][X] principle [X][X] [X] ||| [X][X] Grundsatz [X][X] [X] ||| 0.0236976 1 ||| ||| 0.557578
+[X][X] principle [X][X] is [X] ||| [X][X] Grundsatz [X][X] [X] ||| 0.00413651 1 ||| ||| 0.557578
+[X][X] principle [X][X] a [X] ||| [X][X] Grundsatz [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.125997
+[X][X] principle [X][X] is a [X] ||| [X][X] Grundsatz [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.125997
+[X][X] principle [X][X] a fundamental [X] ||| [X][X] Grundsatz [X][X] einen elementaren [X] ||| 0.0278341 1 ||| ||| 0.0380747
+[X][X] principle [X][X] fundamental [X] ||| [X][X] Grundsatz [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0380747
+[X][X] principle of [X] ||| [X][X] Grundsatz der [X] ||| 0.0278341 1 ||| ||| 0.310207
+[X][X] principle of [X][X] [X] ||| [X][X] Grundsatz der [X][X] [X] ||| 0.0217574 1 ||| ||| 0.379555
+[X][X] principle of [X][X] is [X] ||| [X][X] Grundsatz der [X][X] [X] ||| 0.00607666 1 ||| ||| 0.379555
+[X][X] principle of [X][X] a [X] ||| [X][X] Grundsatz der [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0629983
+[X][X] principle of [X][X] fundamental [X] ||| [X][X] Grundsatz der [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0380747
+[X][X] principle of relative stability [X] ||| [X][X] Grundsatz der relativen Stabilität [X] ||| 0.0278341 1 ||| ||| 0.112755
+[X][X] principle of relative [X] ||| [X][X] Grundsatz der relativen [X] ||| 0.0278341 1 ||| ||| 0.178023
+[X][X] principle of relative [X][X] [X] ||| [X][X] Grundsatz der relativen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.183936
+[X][X] principle [X] ||| [X][X] Grundsatzes [X] ||| 0.0278341 1 ||| ||| 0.333333
+[X][X] principle [X][X] stability [X] ||| [X][X] Grundsatzes [X][X] Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0526316
+done [X][X] principle [X][X] stability [X] ||| [X][X] Grundsatzes [X][X] Stabilität verhängt [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] principle [X][X] [X] ||| [X][X] Grundsatzes [X][X] [X] ||| 0.0278341 1 ||| ||| 0.143541
+done [X][X] principle [X][X] [X] ||| [X][X] Grundsatzes [X][X] verhängt [X] ||| 0.0278341 1 ||| ||| 0.0666667
+be done [X][X] principle [X][X] [X] ||| [X][X] Grundsatzes [X][X] verhängt werden [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] principle of [X] ||| [X][X] Grundsatzes der [X] ||| 0.0278341 1 ||| ||| 0.166667
+[X][X] principle of [X][X] [X] ||| [X][X] Grundsatzes der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+done [X][X] principle of [X][X] [X] ||| [X][X] Grundsatzes der [X][X] verhängt [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] principle of relative stability [X] ||| [X][X] Grundsatzes der relativen Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] principle of relative [X] ||| [X][X] Grundsatzes der relativen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] principles that [X] ||| [X][X] Grundsätzen , die [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] principles that we [X] ||| [X][X] Grundsätzen , die wir [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] principles [X] ||| [X][X] Grundsätzen [X] ||| 0.0278341 1 ||| ||| 0.5
+[X][X] principles [X][X] [X] ||| [X][X] Grundsätzen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] House [X] ||| [X][X] Haus [X] ||| 0.0278341 1 ||| ||| 0.333333
+[X][X] House [X][X] [X] ||| [X][X] Haus [X][X] [X] ||| 0.0227663 1 ||| ||| 0.262793
+[X][X] House [X][X] do [X] ||| [X][X] Haus [X][X] [X] ||| 0.00506778 1 ||| ||| 0.262793
+[X][X] House [X][X] [X] ||| [X][X] Haus [X][X] dem [X] ||| 0.0201633 1 ||| ||| 0.0636592
+[X][X] House [X][X] do [X] ||| [X][X] Haus [X][X] dem [X] ||| 0.00767083 1 ||| ||| 0.0636592
+[X][X] House [X][X] I shall [X] ||| [X][X] Haus [X][X] werde ich [X] ||| 0.0278341 1 ||| ||| 0.047619
+[X][X] House [X][X] I shall [X] ||| [X][X] Haus [X][X] werde ich dem [X] ||| 0.0278341 1 ||| ||| 0.0285714
+[X][X] House agrees , [X] ||| [X][X] Haus damit einverstanden ist , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] House agrees , [X][X] [X] ||| [X][X] Haus damit einverstanden ist , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.124037
+[X][X] House agrees , [X][X] [X] ||| [X][X] Haus damit einverstanden ist , [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0461153
+[X][X] House agrees [X] ||| [X][X] Haus damit einverstanden ist [X] ||| 0.0278341 1 ||| ||| 0.166667
+[X][X] House agrees [X][X] [X] ||| [X][X] Haus damit einverstanden ist [X][X] [X] ||| 0.020086 1 ||| ||| 0.171884
+[X][X] House agrees [X][X] do [X] ||| [X][X] Haus damit einverstanden ist [X][X] [X] ||| 0.00774811 1 ||| ||| 0.171884
+[X][X] House agrees [X][X] [X] ||| [X][X] Haus damit einverstanden ist [X][X] dem [X] ||| 0.0201633 1 ||| ||| 0.0636592
+[X][X] House agrees [X][X] do [X] ||| [X][X] Haus damit einverstanden ist [X][X] dem [X] ||| 0.00767083 1 ||| ||| 0.0636592
+[X][X] Mr Evans , [X] ||| [X][X] Herr Evans , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] Mr Evans , [X][X] [X] ||| [X][X] Herr Evans , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0601238
+[X][X] Mr Evans , I [X] ||| [X][X] Herr Evans , ich [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] Mr Evans [X] ||| [X][X] Herr Evans [X] ||| 0.0278341 1 ||| ||| 0.166667
+[X][X] Mr Evans [X][X] [X] ||| [X][X] Herr Evans [X][X] [X] ||| 0.0278341 1 ||| ||| 0.112755
+[X][X] Mr Evans [X][X] feel [X] ||| [X][X] Herr Evans [X][X] denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0344828
+[X][X] Mr Evans [X][X] an [X] ||| [X][X] Herr Evans [X][X] eine [X] ||| 0.0278341 1 ||| ||| 0.025641
+[X][X] Mr Kumar Ponnambalam [X] ||| [X][X] Herr Kumar Ponnambalam [X] ||| 0.0278341 1 ||| ||| 0.047619
+[X][X] Mr [X] ||| [X][X] Herr [X] ||| 0.0278341 1 ||| ||| 0.556547
+[X][X] Mr [X][X] [X] ||| [X][X] Herr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.251283
+[X][X] Mr [X][X] feel [X] ||| [X][X] Herr [X][X] denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0344828
+[X][X] Mr [X][X] feel an [X] ||| [X][X] Herr [X][X] denke , daß eine [X] ||| 0.0278341 1 ||| ||| 0.025641
+[X][X] Mr [X][X] an [X] ||| [X][X] Herr [X][X] eine [X] ||| 0.0278341 1 ||| ||| 0.025641
+[X][X] Mr [X][X] I [X] ||| [X][X] Herr [X][X] ich [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] Mr [X][X] I feel [X] ||| [X][X] Herr [X][X] ich denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0344828
+[X][X] Mr Evans [X] ||| [X][X] Herrn Evans [X] ||| 0.0171287 1 ||| ||| 0.325
+[X][X] Mr Evans has [X] ||| [X][X] Herrn Evans [X] ||| 0.0107054 1 ||| ||| 0.325
+[X][X] Mr Zimeray , [X] ||| [X][X] Herrn Zimeray , [X] ||| 0.0253212 1 ||| ||| 0.251736
+the [X][X] Mr Zimeray , [X] ||| [X][X] Herrn Zimeray , [X] ||| 0.00251292 1 ||| ||| 0.251736
+[X][X] Mr Zimeray , [X][X] [X] ||| [X][X] Herrn Zimeray , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0555556
+[X][X] Mr Zimeray [X] ||| [X][X] Herrn Zimeray [X] ||| 0.0259039 1 ||| ||| 0.424123
+the [X][X] Mr Zimeray [X] ||| [X][X] Herrn Zimeray [X] ||| 0.00193022 1 ||| ||| 0.424123
+[X][X] Mr Zimeray [X][X] [X] ||| [X][X] Herrn Zimeray [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0555556
+[X][X] Mr [X] ||| [X][X] Herrn [X] ||| 0.233304 1 ||| ||| 1.23965
+the [X][X] Mr [X] ||| [X][X] Herrn [X] ||| 0.000935549 1 ||| ||| 1.23965
+[X][X] Mr [X][X] [X] ||| [X][X] Herrn [X][X] [X] ||| 0.0263708 1 ||| ||| 0.432292
+the [X][X] Mr [X][X] [X] ||| [X][X] Herrn [X][X] [X] ||| 0.00146335 1 ||| ||| 0.432292
+[X][X] of your prestigious office [X] ||| [X][X] Ihres Amtes [X] ||| 0.0278341 1 ||| ||| 0.320187
+[X][X] of your [X] ||| [X][X] Ihres [X] ||| 0.0201962 1 ||| ||| 0.712406
+representations [X][X] of your [X] ||| [X][X] Ihres [X] ||| 0.00205635 1 ||| ||| 0.712406
+using [X][X] of your [X] ||| [X][X] Ihres [X] ||| 0.00558151 1 ||| ||| 0.712406
+[X][X] of your [X][X] [X] ||| [X][X] Ihres [X][X] , [X] ||| 0.0192256 1 ||| ||| 0.0873874
+using [X][X] of your [X][X] [X] ||| [X][X] Ihres [X][X] , [X] ||| 0.00860847 1 ||| ||| 0.0873874
+[X][X] of your [X][X] [X] ||| [X][X] Ihres [X][X] , die [X] ||| 0.0192034 1 ||| ||| 0.0658164
+using [X][X] of your [X][X] [X] ||| [X][X] Ihres [X][X] , die [X] ||| 0.00863073 1 ||| ||| 0.0658164
+[X][X] of your [X][X] institution [X] ||| [X][X] Ihres [X][X] Institution , [X] ||| 0.0278341 1 ||| ||| 0.0603604
+[X][X] of your [X][X] institution [X] ||| [X][X] Ihres [X][X] Institution , die [X] ||| 0.0278341 1 ||| ||| 0.0454082
+[X][X] of your [X][X] institution [X] ||| [X][X] Ihres [X][X] Institution [X] ||| 0.0278341 1 ||| ||| 0.09
+[X][X] of your [X][X] [X] ||| [X][X] Ihres [X][X] [X] ||| 0.0197068 1 ||| ||| 1.30944
+representations [X][X] of your [X][X] [X] ||| [X][X] Ihres [X][X] [X] ||| 0.00169919 1 ||| ||| 1.30944
+using [X][X] of your [X][X] [X] ||| [X][X] Ihres [X][X] [X] ||| 0.00642806 1 ||| ||| 1.30944
+[X][X] of your [X][X] the [X] ||| [X][X] Ihres [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.159774
+[X][X] of your [X][X] [X] ||| [X][X] Ihres [X][X] die [X] ||| 0.0192034 1 ||| ||| 0.0658164
+using [X][X] of your [X][X] [X] ||| [X][X] Ihres [X][X] die [X] ||| 0.00863073 1 ||| ||| 0.0658164
+[X][X] of your [X][X] and [X] ||| [X][X] Ihres [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.251366
+initiative [X][X] [X] ||| [X][X] Initiative [X] ||| 0.00584681 1 ||| ||| 4.02381
+initiative [X][X] have [X] ||| [X][X] Initiative [X] ||| 0.000988192 1 ||| ||| 4.02381
+initiative [X][X] have just [X] ||| [X][X] Initiative [X] ||| 0.000988192 1 ||| ||| 4.02381
+initiative [X][X] have just suggested [X] ||| [X][X] Initiative [X] ||| 0.000988192 1 ||| ||| 4.02381
+initiative [X][X] just [X] ||| [X][X] Initiative [X] ||| 0.000988192 1 ||| ||| 4.02381
+initiative [X][X] just suggested [X] ||| [X][X] Initiative [X] ||| 0.000988192 1 ||| ||| 4.02381
+initiative [X][X] suggested [X] ||| [X][X] Initiative [X] ||| 0.000988192 1 ||| ||| 4.02381
+initiative [X][X] you [X] ||| [X][X] Initiative [X] ||| 0.00115289 1 ||| ||| 4.02381
+initiative [X][X] you have [X] ||| [X][X] Initiative [X] ||| 0.000988192 1 ||| ||| 4.02381
+initiative [X][X] you have just [X] ||| [X][X] Initiative [X] ||| 0.000988192 1 ||| ||| 4.02381
+initiative of [X][X] [X] ||| [X][X] Initiative [X] ||| 0.00584681 1 ||| ||| 4.02381
+initiative of [X][X] have [X] ||| [X][X] Initiative [X] ||| 0.000988192 1 ||| ||| 4.02381
+initiative of [X][X] have just [X] ||| [X][X] Initiative [X] ||| 0.000988192 1 ||| ||| 4.02381
+initiative of [X][X] just [X] ||| [X][X] Initiative [X] ||| 0.000988192 1 ||| ||| 4.02381
+initiative of [X][X] just suggested [X] ||| [X][X] Initiative [X] ||| 0.000988192 1 ||| ||| 4.02381
+initiative of [X][X] suggested [X] ||| [X][X] Initiative [X] ||| 0.000988192 1 ||| ||| 4.02381
+initiative of [X][X] you [X] ||| [X][X] Initiative [X] ||| 0.00115289 1 ||| ||| 4.02381
+initiative of [X][X] you have [X] ||| [X][X] Initiative [X] ||| 0.000988192 1 ||| ||| 4.02381
+[X][X] institution [X] ||| [X][X] Institution , [X] ||| 0.0264129 1 ||| ||| 0.529307
+using [X][X] institution [X] ||| [X][X] Institution , [X] ||| 0.00142124 1 ||| ||| 0.529307
+[X][X] institution [X][X] , [X] ||| [X][X] Institution , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0707187
+[X][X] institution [X][X] , to [X] ||| [X][X] Institution , [X][X] , bei [X] ||| 0.0278341 1 ||| ||| 0.0358171
+[X][X] institution [X][X] [X] ||| [X][X] Institution , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.22898
+[X][X] institution [X][X] to [X] ||| [X][X] Institution , [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0358171
+[X][X] institution [X][X] to the [X] ||| [X][X] Institution , [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0149254
+[X][X] institution [X][X] the [X] ||| [X][X] Institution , [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0149254
+[X][X] institution you [X] ||| [X][X] Institution , die Sie [X] ||| 0.0278341 1 ||| ||| 0.214866
+[X][X] institution you [X][X] [X] ||| [X][X] Institution , die Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.121461
+[X][X] institution you [X][X] to [X] ||| [X][X] Institution , die Sie [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0358171
+[X][X] institution you [X][X] the [X] ||| [X][X] Institution , die Sie [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0149254
+[X][X] institution you represent , [X] ||| [X][X] Institution , die Sie vertreten , [X] ||| 0.0278341 1 ||| ||| 0.0707187
+[X][X] institution you represent [X] ||| [X][X] Institution , die Sie vertreten [X] ||| 0.0278341 1 ||| ||| 0.107519
+[X][X] institution you represent [X][X] [X] ||| [X][X] Institution , die Sie vertreten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0507425
+[X][X] institution [X] ||| [X][X] Institution , die [X] ||| 0.02646 1 ||| ||| 0.413394
+using [X][X] institution [X] ||| [X][X] Institution , die [X] ||| 0.0013741 1 ||| ||| 0.413394
+[X][X] institution [X][X] , [X] ||| [X][X] Institution , die [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0707187
+[X][X] institution [X][X] , to [X] ||| [X][X] Institution , die [X][X] , bei [X] ||| 0.0278341 1 ||| ||| 0.0358171
+[X][X] institution [X][X] [X] ||| [X][X] Institution , die [X][X] [X] ||| 0.0278341 1 ||| ||| 0.22898
+[X][X] institution [X][X] to [X] ||| [X][X] Institution , die [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0358171
+[X][X] institution [X][X] to the [X] ||| [X][X] Institution , die [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0149254
+[X][X] institution [X][X] the [X] ||| [X][X] Institution , die [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0149254
+[X][X] institution [X] ||| [X][X] Institution [X] ||| 0.0263262 1 ||| ||| 0.738333
+using [X][X] institution [X] ||| [X][X] Institution [X] ||| 0.00150794 1 ||| ||| 0.738333
+[X][X] institution [X][X] , [X] ||| [X][X] Institution [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0707187
+[X][X] institution [X][X] , to [X] ||| [X][X] Institution [X][X] , bei [X] ||| 0.0278341 1 ||| ||| 0.0358171
+[X][X] institution [X][X] [X] ||| [X][X] Institution [X][X] [X] ||| 0.0278341 1 ||| ||| 0.22898
+[X][X] institution [X][X] to [X] ||| [X][X] Institution [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0358171
+[X][X] institution [X][X] to the [X] ||| [X][X] Institution [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0149254
+[X][X] institution [X][X] the [X] ||| [X][X] Institution [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0149254
+[X][X] Members [X] ||| [X][X] Kolleginnen und Kollegen - [X] ||| 0.00904608 1 ||| ||| 0.43956
+[X][X] Members have [X] ||| [X][X] Kolleginnen und Kollegen - [X] ||| 0.00487097 1 ||| ||| 0.43956
+[X][X] of Members [X] ||| [X][X] Kolleginnen und Kollegen - [X] ||| 0.00904608 1 ||| ||| 0.43956
+[X][X] of Members have [X] ||| [X][X] Kolleginnen und Kollegen - [X] ||| 0.00487097 1 ||| ||| 0.43956
+[X][X] Members [X] ||| [X][X] Kolleginnen und Kollegen [X] ||| 0.00856434 1 ||| ||| 0.65
+[X][X] Members have [X] ||| [X][X] Kolleginnen und Kollegen [X] ||| 0.00535271 1 ||| ||| 0.65
+[X][X] of Members [X] ||| [X][X] Kolleginnen und Kollegen [X] ||| 0.00856434 1 ||| ||| 0.65
+[X][X] of Members have [X] ||| [X][X] Kolleginnen und Kollegen [X] ||| 0.00535271 1 ||| ||| 0.65
+[X][X] accused of criminal activity [X] ||| [X][X] Kriminalität [X] ||| 0.00927803 1 ||| ||| 1.14976
+[X][X] criminal activity [X] ||| [X][X] Kriminalität [X] ||| 0.00927803 1 ||| ||| 1.14976
+[X][X] of criminal activity [X] ||| [X][X] Kriminalität [X] ||| 0.00927803 1 ||| ||| 1.14976
+[X][X] Kumar Ponnambalam , who [X] ||| [X][X] Kumar Ponnambalam , der [X] ||| 0.0278341 1 ||| ||| 0.130252
+[X][X] Kumar Ponnambalam [X] ||| [X][X] Kumar Ponnambalam [X] ||| 0.0278341 1 ||| ||| 0.426587
+[X][X] Kumar Ponnambalam [X][X] [X] ||| [X][X] Kumar Ponnambalam [X][X] [X] ||| 0.0278341 1 ||| ||| 0.130252
+[X][X] Lanka [X] ||| [X][X] Lanka [X] ||| 0.0278341 1 ||| ||| 0.924242
+[X][X] killings [X][X] Lanka [X] ||| [X][X] Lanka [X][X] Toten [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] Lanka [X][X] [X] ||| [X][X] Lanka [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] Lanka [X] ||| [X][X] Lanka zu [X] ||| 0.0278341 1 ||| ||| 0.375
+[X][X] Lanka [X][X] [X] ||| [X][X] Lanka zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] Lanka [X] ||| [X][X] Lanka zu beklagen [X] ||| 0.0278341 1 ||| ||| 0.3
+[X][X] Lanka [X][X] [X] ||| [X][X] Lanka zu beklagen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] Lanka was [X] ||| [X][X] Lanka zu beklagen gab , [X] ||| 0.0278341 1 ||| ||| 0.130952
+[X][X] Lanka was [X] ||| [X][X] Lanka zu beklagen gab , zählt [X] ||| 0.0278341 1 ||| ||| 0.111429
+[X][X] Lanka was Mr [X] ||| [X][X] Lanka zu beklagen gab , zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] Lanka was [X] ||| [X][X] Lanka zu beklagen gab , zählt auch [X] ||| 0.0278341 1 ||| ||| 0.0625
+[X][X] Lanka was [X] ||| [X][X] Lanka zu beklagen gab [X] ||| 0.0278341 1 ||| ||| 0.158824
+[X][X] Lanka [X] ||| [X][X] Lanka übermitteln [X] ||| 0.0278341 1 ||| ||| 0.333333
+[X][X] Lanka [X][X] [X] ||| [X][X] Lanka übermitteln [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] Lanka [X][X] [X] ||| [X][X] Lanka übermitteln [X][X] [X] ||| 0.0278341 1 ||| ||| 0.210207
+[X][X] Lanka [X][X] [X] ||| [X][X] Lanka übermitteln [X][X] würden , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] Lanka [X][X] [X] ||| [X][X] Lanka übermitteln [X][X] würden [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] Lanka and [X] ||| [X][X] Lanka übermitteln und [X] ||| 0.0278341 1 ||| ||| 0.166667
+[X][X] Lanka and urging [X] ||| [X][X] Lanka übermitteln und sie auffordern [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] Lanka and urging [X] ||| [X][X] Lanka übermitteln und sie auffordern würden , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] Lanka and urging [X] ||| [X][X] Lanka übermitteln und sie auffordern würden [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] legislative proposal [X] ||| [X][X] Legislativvorschlag [X] ||| 0.0278341 1 ||| ||| 0.874415
+[X][X] countries [X] ||| [X][X] Ländern [X] ||| 0.0278341 1 ||| ||| 0.5
+[X][X] countries [X][X] European Union [X] ||| [X][X] Ländern [X][X] Europäischen Union [X] ||| 0.0278341 1 ||| ||| 0.0988235
+[X][X] countries [X][X] European [X] ||| [X][X] Ländern [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.135965
+[X][X] countries [X][X] Union [X] ||| [X][X] Ländern [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0988235
+[X][X] countries [X][X] [X] ||| [X][X] Ländern [X][X] [X] ||| 0.0278341 1 ||| ||| 0.431217
+[X][X] countries of the European [X] ||| [X][X] Ländern der Europäischen [X] ||| 0.0278341 1 ||| ||| 0.135965
+[X][X] countries of the [X] ||| [X][X] Ländern der [X] ||| 0.0278341 1 ||| ||| 0.196429
+[X][X] countries of the [X][X] [X] ||| [X][X] Ländern der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0988235
+[X][X] reconciliation to [X] ||| [X][X] Lösung [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] reconciliation to [X][X] situation [X] ||| [X][X] Lösung [X][X] Situation [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] reconciliation to [X][X] [X] ||| [X][X] Lösung [X][X] [X] ||| 0.0278341 1 ||| ||| 0.189733
+[X][X] reconciliation to [X][X] difficult [X] ||| [X][X] Lösung [X][X] schwierigen [X] ||| 0.0278341 1 ||| ||| 0.0588235
+[X][X] reconciliation to a [X] ||| [X][X] Lösung dieser [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] reconciliation to a [X][X] [X] ||| [X][X] Lösung dieser [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0988235
+[X][X] reconciliation to a very [X] ||| [X][X] Lösung dieser sehr [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] man who [X] ||| [X][X] Mannes [X] ||| 0.013917 1 ||| ||| 0.333334
+[X][X] year-old man who [X] ||| [X][X] Mannes [X] ||| 0.013917 1 ||| ||| 0.333334
+[X][X] Member , Mr Zimeray [X] ||| [X][X] Mitglieds , Herrn Zimeray [X] ||| 0.0278341 1 ||| ||| 0.137135
+[X][X] Member , Mr [X] ||| [X][X] Mitglieds , Herrn [X] ||| 0.0229948 1 ||| ||| 0.239652
+the [X][X] Member , Mr [X] ||| [X][X] Mitglieds , Herrn [X] ||| 0.00483934 1 ||| ||| 0.239652
+[X][X] Member , Mr [X][X] [X] ||| [X][X] Mitglieds , Herrn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0854686
+[X][X] Member , [X] ||| [X][X] Mitglieds , [X] ||| 0.0232174 1 ||| ||| 0.376812
+the [X][X] Member , [X] ||| [X][X] Mitglieds , [X] ||| 0.00461671 1 ||| ||| 0.376812
+[X][X] Member , [X][X] , [X] ||| [X][X] Mitglieds , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0854686
+[X][X] Member , [X][X] [X] ||| [X][X] Mitglieds , [X][X] [X] ||| 0.0225519 1 ||| ||| 0.274743
+the [X][X] Member , [X][X] [X] ||| [X][X] Mitglieds , [X][X] [X] ||| 0.00528218 1 ||| ||| 0.274743
+[X][X] Member [X] ||| [X][X] Mitglieds [X] ||| 0.023563 1 ||| ||| 0.651681
+the [X][X] Member [X] ||| [X][X] Mitglieds [X] ||| 0.00427112 1 ||| ||| 0.651681
+[X][X] Member [X][X] , [X] ||| [X][X] Mitglieds [X][X] , [X] ||| 0.0219874 1 ||| ||| 0.108196
+the [X][X] Member [X][X] , [X] ||| [X][X] Mitglieds [X][X] , [X] ||| 0.00584675 1 ||| ||| 0.108196
+[X][X] Member [X][X] Zimeray , [X] ||| [X][X] Mitglieds [X][X] Zimeray , [X] ||| 0.0278341 1 ||| ||| 0.0854686
+[X][X] Member [X][X] Zimeray [X] ||| [X][X] Mitglieds [X][X] Zimeray [X] ||| 0.0229187 1 ||| ||| 0.166547
+the [X][X] Member [X][X] Zimeray [X] ||| [X][X] Mitglieds [X][X] Zimeray [X] ||| 0.00491544 1 ||| ||| 0.166547
+[X][X] Member [X][X] [X] ||| [X][X] Mitglieds [X][X] [X] ||| 0.0227582 1 ||| ||| 0.514395
+the [X][X] Member [X][X] [X] ||| [X][X] Mitglieds [X][X] [X] ||| 0.00507586 1 ||| ||| 0.514395
+[X][X] months ago [X] ||| [X][X] Monaten [X] ||| 0.0278341 1 ||| ||| 0.905079
+visited [X][X] months ago [X] ||| [X][X] Monaten einen Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited [X][X] months ago [X] ||| [X][X] Monaten einen Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] months ago [X] ||| [X][X] Monaten einen [X] ||| 0.0278341 1 ||| ||| 0.663848
+[X][X] Nikitin . [X] ||| [X][X] Nikitin . [X] ||| 0.0278341 1 ||| ||| 0.370331
+[X][X] Nikitin [X] ||| [X][X] Nikitin [X] ||| 0.116569 1 ||| ||| 3.51153
+[X][X] Nikitin to [X] ||| [X][X] Nikitin [X] ||| 0.00560658 1 ||| ||| 3.51153
+[X][X] Nikitin to be [X] ||| [X][X] Nikitin [X] ||| 0.00447318 1 ||| ||| 3.51153
+[X][X] Nikitin to be accused [X] ||| [X][X] Nikitin [X] ||| 0.00431465 1 ||| ||| 3.51153
+[X][X] the victims [X] ||| [X][X] Opfern [X] ||| 0.00569825 1 ||| ||| 2.68713
+[X][X] victims [X] ||| [X][X] Opfern [X] ||| 0.00915101 1 ||| ||| 2.68713
+behalf [X][X] the victims [X] ||| [X][X] Opfern [X] ||| 0.00147975 1 ||| ||| 2.68713
+behalf [X][X] victims [X] ||| [X][X] Opfern [X] ||| 0.00147975 1 ||| ||| 2.68713
+behalf of [X][X] victims [X] ||| [X][X] Opfern [X] ||| 0.00147975 1 ||| ||| 2.68713
+of [X][X] victims [X] ||| [X][X] Opfern [X] ||| 0.00207166 1 ||| ||| 2.68713
+on [X][X] the victims [X] ||| [X][X] Opfern [X] ||| 0.00129479 1 ||| ||| 2.68713
+on [X][X] victims [X] ||| [X][X] Opfern [X] ||| 0.00129479 1 ||| ||| 2.68713
+on behalf [X][X] the victims [X] ||| [X][X] Opfern [X] ||| 0.00129479 1 ||| ||| 2.68713
+on behalf [X][X] victims [X] ||| [X][X] Opfern [X] ||| 0.00129479 1 ||| ||| 2.68713
+on behalf of [X][X] victims [X] ||| [X][X] Opfern [X] ||| 0.00129479 1 ||| ||| 2.68713
+[X][X] House [X] ||| [X][X] Parlament [X] ||| 0.00671068 1 ||| ||| 1.38258
+[X][X] Parliament [X] ||| [X][X] Parlament [X] ||| 0.183214 1 ||| ||| 1.38258
+[X][X] Parliament [X][X] . [X] ||| [X][X] Parlament [X][X] . [X] ||| 0.013917 1 ||| ||| 0.122711
+[X][X] Parliament [X][X] interest . [X] ||| [X][X] Parlament [X][X] . [X] ||| 0.013917 1 ||| ||| 0.122711
+visited [X][X] Parliament [X][X] [X] ||| [X][X] Parlament [X][X] Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited [X][X] Parliament [X][X] [X] ||| [X][X] Parlament [X][X] Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] Parliament [X][X] months ago [X] ||| [X][X] Parlament [X][X] Monaten [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] Parliament [X][X] months ago [X] ||| [X][X] Parlament [X][X] Monaten einen [X] ||| 0.0278341 1 ||| ||| 0.0238095
+[X][X] House [X][X] [X] ||| [X][X] Parlament [X][X] [X] ||| 0.00514781 1 ||| ||| 1.31312
+[X][X] Parliament [X][X] [X] ||| [X][X] Parlament [X][X] [X] ||| 0.0151872 1 ||| ||| 1.31312
+[X][X] Parliament [X][X] an [X] ||| [X][X] Parlament [X][X] [X] ||| 0.00212611 1 ||| ||| 1.31312
+[X][X] Parliament [X][X] an interest [X] ||| [X][X] Parlament [X][X] [X] ||| 0.00178598 1 ||| ||| 1.31312
+[X][X] Parliament [X][X] interest [X] ||| [X][X] Parlament [X][X] [X] ||| 0.00178598 1 ||| ||| 1.31312
+[X][X] Parliament [X][X] of [X] ||| [X][X] Parlament [X][X] [X] ||| 0.000623439 1 ||| ||| 1.31312
+[X][X] Parliament [X][X] of the [X] ||| [X][X] Parlament [X][X] [X] ||| 0.000588803 1 ||| ||| 1.31312
+[X][X] Parliament [X][X] the [X] ||| [X][X] Parlament [X][X] [X] ||| 0.000588803 1 ||| ||| 1.31312
+[X][X] Parliament [X][X] the [X] ||| [X][X] Parlament [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.047619
+[X][X] Parliament [X][X] the whole [X] ||| [X][X] Parlament [X][X] der gesamten [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited [X][X] Parliament [X][X] [X] ||| [X][X] Parlament [X][X] einen Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited [X][X] Parliament [X][X] [X] ||| [X][X] Parlament [X][X] einen Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] Parliament [X][X] [X] ||| [X][X] Parlament [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0238095
+[X][X] House [X][X] a [X] ||| [X][X] Parlament [X][X] einer [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] Parliament [X][X] whole [X] ||| [X][X] Parlament [X][X] gesamten [X] ||| 0.0152639 1 ||| ||| 0.0651261
+[X][X] Parliament [X][X] whole of [X] ||| [X][X] Parlament [X][X] gesamten [X] ||| 0.0125702 1 ||| ||| 0.0651261
+[X][X] Parliament has [X][X] . [X] ||| [X][X] Parlament [X][X] hat . [X] ||| 0.0278341 1 ||| ||| 0.0613553
+[X][X] Parliament has [X][X] [X] ||| [X][X] Parlament [X][X] hat [X] ||| 0.0178845 1 ||| ||| 0.516306
+[X][X] Parliament has [X][X] an [X] ||| [X][X] Parlament [X][X] hat [X] ||| 0.00540734 1 ||| ||| 0.516306
+[X][X] Parliament has [X][X] interest [X] ||| [X][X] Parlament [X][X] hat [X] ||| 0.0045423 1 ||| ||| 0.516306
+[X][X] House rose and observed [X] ||| [X][X] Parlament erhebt sich zu [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] Parliament just [X] ||| [X][X] Parlament erst [X] ||| 0.0278341 1 ||| ||| 0.166667
+visited [X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst [X][X] Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited [X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst [X][X] Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111429
+visited [X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst [X][X] einen Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited [X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst [X][X] einen Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0238095
+[X][X] Parliament just [X] ||| [X][X] Parlament erst vor [X] ||| 0.0278341 1 ||| ||| 0.125
+visited [X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst vor [X][X] Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited [X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst vor [X][X] Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst vor [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111429
+visited [X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst vor [X][X] einen Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited [X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst vor [X][X] einen Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst vor [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0238095
+[X][X] Parliament just a few [X] ||| [X][X] Parlament erst vor wenigen [X] ||| 0.0278341 1 ||| ||| 0.047619
+[X][X] Parliament has consistently shown [X] ||| [X][X] Parlament immer wieder befaßt hat [X] ||| 0.0278341 1 ||| ||| 0.147186
+[X][X] Parliament and [X] ||| [X][X] Parlament und [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] Parliament and [X][X] [X] ||| [X][X] Parlament und [X][X] [X] ||| 0.0197829 1 ||| ||| 0.197713
+[X][X] Parliament and [X][X] of [X] ||| [X][X] Parlament und [X][X] [X] ||| 0.00414061 1 ||| ||| 0.197713
+[X][X] Parliament and [X][X] the [X] ||| [X][X] Parlament und [X][X] [X] ||| 0.00391058 1 ||| ||| 0.197713
+[X][X] Parliament and [X][X] whole [X] ||| [X][X] Parlament und [X][X] gesamten [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] Parliament and by [X] ||| [X][X] Parlament und von [X] ||| 0.0278341 1 ||| ||| 0.0714286
+[X][X] Parliament and by [X][X] [X] ||| [X][X] Parlament und von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0929038
+[X][X] Parliament and by the [X] ||| [X][X] Parlament und von der [X] ||| 0.0278341 1 ||| ||| 0.047619
+[X][X] Parliament , [X] ||| [X][X] Parlaments [X] ||| 0.0057699 1 ||| ||| 1.12769
+[X][X] Parliament , a [X] ||| [X][X] Parlaments [X] ||| 0.00464113 1 ||| ||| 1.12769
+[X][X] Parliament , a date [X] ||| [X][X] Parlaments [X] ||| 0.00464113 1 ||| ||| 1.12769
+[X][X] Parliament [X] ||| [X][X] Parlaments [X] ||| 0.0127819 1 ||| ||| 1.12769
+, [X][X] positions [X] ||| [X][X] Position , [X] ||| 0.0129892 1 ||| ||| 0.133929
+indeed , [X][X] positions [X] ||| [X][X] Position , [X] ||| 0.0148449 1 ||| ||| 0.133929
+, [X][X] positions [X] ||| [X][X] Position , die [X] ||| 0.0154634 1 ||| ||| 0.1125
+indeed , [X][X] positions [X] ||| [X][X] Position , die [X] ||| 0.0123707 1 ||| ||| 0.1125
+[X][X] positions [X] ||| [X][X] Position [X] ||| 0.0278341 1 ||| ||| 0.58259
+[X][X] press [X] ||| [X][X] Presse [X] ||| 0.0278341 1 ||| ||| 0.333333
+[X][X] press [X][X] [X] ||| [X][X] Presse [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0909091
+aware [X][X] press [X][X] that [X] ||| [X][X] Presse [X][X] wissen , [X] ||| 0.0278341 1 ||| ||| 0.125
+aware [X][X] press [X][X] [X] ||| [X][X] Presse [X][X] wissen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] press and [X] ||| [X][X] Presse und [X] ||| 0.0278341 1 ||| ||| 0.166667
+[X][X] press and television [X] ||| [X][X] Presse und dem Fernsehen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+aware [X][X] press and television [X] ||| [X][X] Presse und dem Fernsehen wissen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] President , [X] ||| [X][X] Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.399912
+[X][X] President , [X] ||| [X][X] Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.273201
+[X][X] President [X] ||| [X][X] Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.729545
+[X][X] President [X] ||| [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.747765
+[X][X] President [X][X] Governor [X] ||| [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.25946
+[X][X] President [X][X] the Governor [X] ||| [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.25946
+[X][X] President [X][X] Governor of [X] ||| [X][X] Präsidentschaftskandidaten [X][X] Gouverneur von [X] ||| 0.0278341 1 ||| ||| 0.0689755
+[X][X] President [X][X] [X] ||| [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0210044 1 ||| ||| 0.903577
+[X][X] President [X][X] the [X] ||| [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.00682972 1 ||| ||| 0.903577
+[X][X] President [X][X] of [X] ||| [X][X] Präsidentschaftskandidaten [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0689755
+[X][X] President and [X] ||| [X][X] Präsidentschaftskandidaten und [X] ||| 0.012639 1 ||| ||| 0.885041
+[X][X] President and to [X] ||| [X][X] Präsidentschaftskandidaten und [X] ||| 0.00822231 1 ||| ||| 0.885041
+[X][X] President and to the [X] ||| [X][X] Präsidentschaftskandidaten und [X] ||| 0.00697276 1 ||| ||| 0.885041
+[X][X] President and [X][X] [X] ||| [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.013917 1 ||| ||| 0.39741
+[X][X] President and to [X][X] [X] ||| [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.013917 1 ||| ||| 0.39741
+[X][X] President and [X][X] of [X] ||| [X][X] Präsidentschaftskandidaten und [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0689755
+[X][X] of quota penalties [X] ||| [X][X] Quotenstrafe belegt [X] ||| 0.00742242 1 ||| ||| 0.535714
+[X][X] quota penalties [X] ||| [X][X] Quotenstrafe belegt [X] ||| 0.0204117 1 ||| ||| 0.535714
+[X][X] of quota penalties [X][X] [X] ||| [X][X] Quotenstrafe belegt [X][X] [X] ||| 0.00824714 1 ||| ||| 0.306818
+[X][X] quota penalties [X][X] [X] ||| [X][X] Quotenstrafe belegt [X][X] [X] ||| 0.019587 1 ||| ||| 0.306818
+[X][X] quota penalties should be [X] ||| [X][X] Quotenstrafe belegt werden sollen [X] ||| 0.0278341 1 ||| ||| 0.215909
+[X][X] right [X] ||| [X][X] Recht [X] ||| 0.0278341 1 ||| ||| 0.5
+is [X][X] right . [X] ||| [X][X] Recht ist . [X] ||| 0.0278341 1 ||| ||| 0.166667
+is [X][X] right [X] ||| [X][X] Recht ist [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] legal principle [X] ||| [X][X] Rechtsgrundsatz [X] ||| 0.0225181 1 ||| ||| 0.747982
+is [X][X] legal principle [X] ||| [X][X] Rechtsgrundsatz [X] ||| 0.00531603 1 ||| ||| 0.747982
+[X][X] legal principle [X][X] [X] ||| [X][X] Rechtsgrundsatz [X][X] [X] ||| 0.0217196 1 ||| ||| 0.991876
+is [X][X] legal principle [X][X] [X] ||| [X][X] Rechtsgrundsatz [X][X] [X] ||| 0.00611453 1 ||| ||| 0.991876
+[X][X] legal principle [X][X] common [X] ||| [X][X] Rechtsgrundsatz [X][X] gemeinsamen [X] ||| 0.0278341 1 ||| ||| 0.250216
+[X][X] legal principle [X][X] and [X] ||| [X][X] Rechtsgrundsatz [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] legal principle of the [X] ||| [X][X] Rechtsgrundsatz der [X] ||| 0.0278341 1 ||| ||| 0.351544
+[X][X] minute ' s silence [X] ||| [X][X] Schweigeminute . [X] ||| 0.0278341 1 ||| ||| 0.592857
+[X][X] minute ' s silence [X] ||| [X][X] Schweigeminute zu erheben [X] ||| 0.0278341 1 ||| ||| 0.833333
+[X][X] you , Madam President [X] ||| [X][X] Sie , Frau Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0719697
+[X][X] you , Madam [X] ||| [X][X] Sie , Frau [X] ||| 0.0278341 1 ||| ||| 0.111429
+[X][X] you , Madam [X][X] [X] ||| [X][X] Sie , Frau [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0708499
+[X][X] you , Madam [X][X] [X] ||| [X][X] Sie , Frau [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+[X][X] you , [X] ||| [X][X] Sie , [X] ||| 0.0278341 1 ||| ||| 0.1875
+[X][X] you , [X][X] , [X] ||| [X][X] Sie , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0526681
+[X][X] you , [X][X] , [X] ||| [X][X] Sie , [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+[X][X] you , [X][X] [X] ||| [X][X] Sie , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.14282
+[X][X] you , [X][X] [X] ||| [X][X] Sie , [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+[X][X] you [X] ||| [X][X] Sie [X] ||| 0.229521 1 ||| ||| 1.44939
+the [X][X] you [X] ||| [X][X] Sie [X] ||| 0.00137172 1 ||| ||| 1.44939
+[X][X] you [X][X] , [X] ||| [X][X] Sie [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0871509
+[X][X] you [X][X] , [X] ||| [X][X] Sie [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+[X][X] you [X][X] President , [X] ||| [X][X] Sie [X][X] Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.0526681
+[X][X] you [X][X] President , [X] ||| [X][X] Sie [X][X] Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+[X][X] you [X][X] President [X] ||| [X][X] Sie [X][X] Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0719697
+[X][X] you [X][X] President [X] ||| [X][X] Sie [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0163934
+[X][X] you [X][X] [X] ||| [X][X] Sie [X][X] [X] ||| 0.0267577 1 ||| ||| 0.861934
+the [X][X] you [X][X] [X] ||| [X][X] Sie [X][X] [X] ||| 0.00107642 1 ||| ||| 0.861934
+[X][X] draw your attention [X][X] [X] ||| [X][X] Sie [X][X] aufmerksam machen , [X] ||| 0.0278341 1 ||| ||| 0.253968
+[X][X] draw your attention [X][X] [X] ||| [X][X] Sie [X][X] aufmerksam machen [X] ||| 0.0278341 1 ||| ||| 0.366667
+[X][X] you [X][X] to [X] ||| [X][X] Sie [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0661201
+[X][X] you [X][X] to the [X] ||| [X][X] Sie [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0353335
+[X][X] you [X][X] the President [X] ||| [X][X] Sie [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0163934
+[X][X] you [X][X] the [X] ||| [X][X] Sie [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0353335
+[X][X] you [X][X] [X] ||| [X][X] Sie [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+[X][X] you represent , [X] ||| [X][X] Sie vertreten , [X] ||| 0.0278341 1 ||| ||| 0.12335
+[X][X] you represent , [X][X] [X] ||| [X][X] Sie vertreten , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.051727
+[X][X] you represent , to [X] ||| [X][X] Sie vertreten , bei [X] ||| 0.0278341 1 ||| ||| 0.0661201
+[X][X] you represent [X] ||| [X][X] Sie vertreten [X] ||| 0.0278341 1 ||| ||| 0.207519
+[X][X] you represent [X][X] President [X] ||| [X][X] Sie vertreten [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0163934
+[X][X] you represent [X][X] [X] ||| [X][X] Sie vertreten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.117847
+[X][X] you represent [X][X] the [X] ||| [X][X] Sie vertreten [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0353335
+[X][X] you wish , [X] ||| [X][X] Sie wollen , [X] ||| 0.0240757 1 ||| ||| 0.246861
+the [X][X] you wish , [X] ||| [X][X] Sie wollen , [X] ||| 0.0037584 1 ||| ||| 0.246861
+[X][X] you wish , [X][X] [X] ||| [X][X] Sie wollen , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.119628
+[X][X] you wish [X] ||| [X][X] Sie wollen [X] ||| 0.0244542 1 ||| ||| 0.392157
+the [X][X] you wish [X] ||| [X][X] Sie wollen [X] ||| 0.00337985 1 ||| ||| 0.392157
+[X][X] you wish [X][X] , [X] ||| [X][X] Sie wollen [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0344828
+[X][X] you wish [X][X] [X] ||| [X][X] Sie wollen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.119628
+[X][X] keeping with [X] ||| [X][X] Sinne [X] ||| 0.0278341 1 ||| ||| 0.446429
+, [X][X] keeping with [X][X] [X] ||| [X][X] Sinne [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0625
+, [X][X] keeping with [X][X] [X] ||| [X][X] Sinne [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.0625
+[X][X] keeping with [X][X] [X] ||| [X][X] Sinne [X][X] [X] ||| 0.0278341 1 ||| ||| 0.189733
+[X][X] keeping with the positions [X] ||| [X][X] Sinne der Position [X] ||| 0.0278341 1 ||| ||| 0.189733
+[X][X] keeping with the [X] ||| [X][X] Sinne der [X] ||| 0.0278341 1 ||| ||| 0.278822
+[X][X] situation [X] ||| [X][X] Situation [X] ||| 0.0278341 1 ||| ||| 0.66406
+[X][X] session [X] ||| [X][X] Sitzungsperiode [X] ||| 0.0278341 1 ||| ||| 0.75
+[X][X] Sri Lanka [X] ||| [X][X] Sri Lanka [X] ||| 0.0278341 1 ||| ||| 0.257576
+[X][X] Sri Lanka [X] ||| [X][X] Sri Lanka zu [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] Sri Lanka [X] ||| [X][X] Sri Lanka zu beklagen [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] Sri Lanka was [X] ||| [X][X] Sri Lanka zu beklagen gab , [X] ||| 0.0278341 1 ||| ||| 0.047619
+[X][X] Sri Lanka was [X] ||| [X][X] Sri Lanka zu beklagen gab , zählt [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] Sri Lanka was [X] ||| [X][X] Sri Lanka zu beklagen gab [X] ||| 0.0278341 1 ||| ||| 0.0588235
+[X][X] Sri [X] ||| [X][X] Sri [X] ||| 0.0255319 1 ||| ||| 0.930037
+of [X][X] Sri [X] ||| [X][X] Sri [X] ||| 0.00230215 1 ||| ||| 0.930037
+[X][X] Sri [X][X] [X] ||| [X][X] Sri [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.047619
+[X][X] Sri [X][X] [X] ||| [X][X] Sri [X][X] , zählt [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] Sri [X][X] [X] ||| [X][X] Sri [X][X] [X] ||| 0.0278341 1 ||| ||| 0.146443
+[X][X] Sri [X][X] [X] ||| [X][X] Sri [X][X] zählt [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] public prosecutor [X] ||| [X][X] Staatsanwalt [X] ||| 0.0278341 1 ||| ||| 0.45
+[X][X] public prosecutor [X][X] . [X] ||| [X][X] Staatsanwalt [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.112121
+[X][X] public prosecutor [X][X] [X] ||| [X][X] Staatsanwalt [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2446
+[X][X] public prosecutor is appealing [X] ||| [X][X] Staatsanwalt in Berufung geht [X] ||| 0.0278341 1 ||| ||| 0.132479
+[X][X] public prosecutor [X] ||| [X][X] Staatsanwalt in [X] ||| 0.0278341 1 ||| ||| 0.309524
+[X][X] public prosecutor [X][X] . [X] ||| [X][X] Staatsanwalt in [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.112121
+[X][X] public prosecutor [X][X] [X] ||| [X][X] Staatsanwalt in [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2446
+[X][X] stability [X] ||| [X][X] Stabilität [X] ||| 0.182144 1 ||| ||| 1.78562
+[X][X] stability is [X] ||| [X][X] Stabilität [X] ||| 0.00683402 1 ||| ||| 1.78562
+[X][X] stability [X][X] legal principle [X] ||| [X][X] Stabilität [X][X] Rechtsgrundsatz [X] ||| 0.0278341 1 ||| ||| 0.090839
+[X][X] stability [X][X] [X] ||| [X][X] Stabilität [X][X] [X] ||| 0.0181063 1 ||| ||| 0.800687
+[X][X] stability is [X][X] [X] ||| [X][X] Stabilität [X][X] [X] ||| 0.00972777 1 ||| ||| 0.800687
+[X][X] stability [X][X] of the [X] ||| [X][X] Stabilität [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0333333
+[X][X] stability [X][X] fundamental [X] ||| [X][X] Stabilität [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.15566
+[X][X] stability is a [X] ||| [X][X] Stabilität einen [X] ||| 0.0278341 1 ||| ||| 0.241022
+[X][X] stability is a [X][X] [X] ||| [X][X] Stabilität einen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.124172
+[X][X] stability is a fundamental [X] ||| [X][X] Stabilität einen elementaren [X] ||| 0.0278341 1 ||| ||| 0.15566
+done [X][X] stability [X] ||| [X][X] Stabilität verhängt [X] ||| 0.0278341 1 ||| ||| 0.0666667
+be done [X][X] stability . [X] ||| [X][X] Stabilität verhängt werden . [X] ||| 0.0278341 1 ||| ||| 0.125
+be done [X][X] stability [X] ||| [X][X] Stabilität verhängt werden [X] ||| 0.0278341 1 ||| ||| 0.0666667
+says [X][X] [X] ||| [X][X] Strafen [X] ||| 0.0278341 1 ||| ||| 0.75
+[X][X] few days , [X] ||| [X][X] Tagen [X] ||| 0.012301 1 ||| ||| 0.703968
+[X][X] few days [X] ||| [X][X] Tagen [X] ||| 0.0155331 1 ||| ||| 0.703968
+[X][X] part-session [X] ||| [X][X] Tagung [X] ||| 0.181064 1 ||| ||| 2
+with [X][X] part-session [X] ||| [X][X] Tagung [X] ||| 0.00695852 1 ||| ||| 2
+[X][X] part-session [X][X] European Parliament [X] ||| [X][X] Tagung [X][X] Europäischen Parlaments [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] part-session [X][X] European [X] ||| [X][X] Tagung [X][X] Europäischen [X] ||| 0.0205093 1 ||| ||| 0.422222
+with [X][X] part-session [X][X] European [X] ||| [X][X] Tagung [X][X] Europäischen [X] ||| 0.00732476 1 ||| ||| 0.422222
+[X][X] part-session [X][X] Parliament [X] ||| [X][X] Tagung [X][X] Parlaments [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] part-session [X][X] [X] ||| [X][X] Tagung [X][X] [X] ||| 0.0214647 1 ||| ||| 1.21389
+with [X][X] part-session [X][X] [X] ||| [X][X] Tagung [X][X] [X] ||| 0.00636936 1 ||| ||| 1.21389
+[X][X] part-session of the European [X] ||| [X][X] Tagung des Europäischen [X] ||| 0.0278341 1 ||| ||| 0.311111
+[X][X] part-session of the [X] ||| [X][X] Tagung des [X] ||| 0.0208756 1 ||| ||| 0.666667
+with [X][X] part-session of the [X] ||| [X][X] Tagung des [X] ||| 0.00695854 1 ||| ||| 0.666667
+[X][X] part-session of the [X][X] [X] ||| [X][X] Tagung des [X][X] [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] Texas , Mr Bush [X] ||| [X][X] Texas , George W. Bush [X] ||| 0.0278341 1 ||| ||| 0.446399
+[X][X] Texas , Mr [X] ||| [X][X] Texas , George W. [X] ||| 0.0194824 1 ||| ||| 1.03157
+the [X][X] Texas , Mr [X] ||| [X][X] Texas , George W. [X] ||| 0.00449705 1 ||| ||| 1.03157
+to [X][X] Texas , Mr [X] ||| [X][X] Texas , George W. [X] ||| 0.00385461 1 ||| ||| 1.03157
+[X][X] Texas , Mr [X][X] [X] ||| [X][X] Texas , George W. [X][X] [X] ||| 0.0278341 1 ||| ||| 0.467399
+[X][X] Texas [X] ||| [X][X] Texas [X] ||| 0.0278341 1 ||| ||| 0.333333
+[X][X] killings [X] ||| [X][X] Toten [X] ||| 0.0207491 1 ||| ||| 1.30952
+of [X][X] killings [X] ||| [X][X] Toten [X] ||| 0.00708504 1 ||| ||| 1.30952
+, [X][X] environmental information [X] ||| [X][X] Umweltinformationen [X] ||| 0.00627836 1 ||| ||| 0.633333
+[X][X] environmental information [X] ||| [X][X] Umweltinformationen [X] ||| 0.0215557 1 ||| ||| 0.633333
+[X][X] environmental information [X][X] . [X] ||| [X][X] Umweltinformationen [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.145833
+, [X][X] environmental information [X][X] [X] ||| [X][X] Umweltinformationen [X][X] [X] ||| 0.00858895 1 ||| ||| 0.41859
+[X][X] environmental information [X][X] [X] ||| [X][X] Umweltinformationen [X][X] [X] ||| 0.0192452 1 ||| ||| 0.41859
+[X][X] environmental information is [X][X] [X] ||| [X][X] Umweltinformationen [X][X] ist [X] ||| 0.0278341 1 ||| ||| 0.14359
+[X][X] Community [X] ||| [X][X] Union [X] ||| 0.132814 1 ||| ||| 2.03601
+[X][X] Union [X] ||| [X][X] Union [X] ||| 0.00796452 1 ||| ||| 2.03601
+of [X][X] Community [X] ||| [X][X] Union [X] ||| 0.00455696 1 ||| ||| 2.03601
+[X][X] inadmissibility . [X] ||| [X][X] Unzulässigkeit geben ? [X] ||| 0.0278341 1 ||| ||| 0.310207
+[X][X] inadmissibility [X] ||| [X][X] Unzulässigkeit geben [X] ||| 0.0278341 1 ||| ||| 0.643541
+[X][X] condemned person [X] ||| [X][X] Verurteilten [X] ||| 0.0278341 1 ||| ||| 0.513095
+[X][X] proposal to subvert it [X] ||| [X][X] Vorschlag , diesen zu unterlaufen , [X] ||| 0.0278341 1 ||| ||| 0.136364
+[X][X] proposal to subvert it [X] ||| [X][X] Vorschlag , diesen zu unterlaufen [X] ||| 0.0278341 1 ||| ||| 0.285014
+[X][X] proposal [X] ||| [X][X] Vorschlag [X] ||| 0.0278341 1 ||| ||| 0.65049
+[X][X] proposal [X][X] [X] ||| [X][X] Vorschlag [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.136364
+[X][X] proposal [X][X] [X] ||| [X][X] Vorschlag [X][X] [X] ||| 0.0278341 1 ||| ||| 0.421378
+[X][X] do [X][X] suggested . [X] ||| [X][X] Vorschlag [X][X] folgen . [X] ||| 0.0278341 1 ||| ||| 0.104278
+[X][X] do [X][X] has suggested [X] ||| [X][X] Vorschlag [X][X] folgen [X] ||| 0.013917 1 ||| ||| 0.18
+[X][X] do [X][X] suggested [X] ||| [X][X] Vorschlag [X][X] folgen [X] ||| 0.013917 1 ||| ||| 0.18
+[X][X] as Mr [X][X] suggested [X] ||| [X][X] Vorschlag von Herrn [X][X] folgen [X] ||| 0.0278341 1 ||| ||| 0.09
+[X][X] as [X][X] suggested . [X] ||| [X][X] Vorschlag von [X][X] folgen . [X] ||| 0.0278341 1 ||| ||| 0.104278
+[X][X] as [X][X] has suggested [X] ||| [X][X] Vorschlag von [X][X] folgen [X] ||| 0.00927803 1 ||| ||| 0.27
+[X][X] as [X][X] suggested [X] ||| [X][X] Vorschlag von [X][X] folgen [X] ||| 0.00927803 1 ||| ||| 0.27
+[X][X] do as [X][X] suggested [X] ||| [X][X] Vorschlag von [X][X] folgen [X] ||| 0.00927803 1 ||| ||| 0.27
+[X][X] request [X] ||| [X][X] Wunsch [X] ||| 0.0123707 1 ||| ||| 0.75
+[X][X] requested [X] ||| [X][X] Wunsch [X] ||| 0.0154634 1 ||| ||| 0.75
+[X][X] request [X][X] , Mr [X] ||| [X][X] Wunsch [X][X] , Herrn [X] ||| 0.0278341 1 ||| ||| 0.0322581
+[X][X] request [X][X] , [X] ||| [X][X] Wunsch [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0434783
+[X][X] request [X][X] Mr Zimeray [X] ||| [X][X] Wunsch [X][X] Herrn Zimeray [X] ||| 0.0278341 1 ||| ||| 0.0243902
+[X][X] request [X][X] Mr [X] ||| [X][X] Wunsch [X][X] Herrn [X] ||| 0.0278341 1 ||| ||| 0.0322581
+[X][X] request [X][X] Member , [X] ||| [X][X] Wunsch [X][X] Mitglieds , [X] ||| 0.0278341 1 ||| ||| 0.0434783
+[X][X] request [X][X] Member [X] ||| [X][X] Wunsch [X][X] Mitglieds [X] ||| 0.0278341 1 ||| ||| 0.0588235
+[X][X] request [X][X] Zimeray [X] ||| [X][X] Wunsch [X][X] Zimeray [X] ||| 0.0278341 1 ||| ||| 0.0243902
+[X][X] request [X][X] [X] ||| [X][X] Wunsch [X][X] [X] ||| 0.0205255 1 ||| ||| 0.498062
+[X][X] requested [X][X] [X] ||| [X][X] Wunsch [X][X] [X] ||| 0.00730856 1 ||| ||| 0.498062
+[X][X] request [X][X] French Member [X] ||| [X][X] Wunsch [X][X] französischen Mitglieds [X] ||| 0.0278341 1 ||| ||| 0.0588235
+[X][X] request [X][X] French [X] ||| [X][X] Wunsch [X][X] französischen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+[X][X] requested [X][X] on [X] ||| [X][X] Wunsch [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0462963
+[X][X] request of a [X] ||| [X][X] Wunsch eines [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] request of a [X][X] [X] ||| [X][X] Wunsch eines [X][X] [X] ||| 0.0278341 1 ||| ||| 0.15895
+[X][X] request of a French [X] ||| [X][X] Wunsch eines französischen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+[X][X] requested [X] ||| [X][X] Wunsch nach [X] ||| 0.0278341 1 ||| ||| 0.342857
+[X][X] requested [X][X] [X] ||| [X][X] Wunsch nach [X][X] [X] ||| 0.0278341 1 ||| ||| 0.130779
+[X][X] requested [X][X] on [X] ||| [X][X] Wunsch nach [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0462963
+[X][X] requested a debate [X] ||| [X][X] Wunsch nach einer Aussprache [X] ||| 0.0278341 1 ||| ||| 0.0844828
+[X][X] requested a debate on [X] ||| [X][X] Wunsch nach einer Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.0462963
+[X][X] requested a [X] ||| [X][X] Wunsch nach einer [X] ||| 0.0278341 1 ||| ||| 0.171429
+[X][X] requested a [X][X] [X] ||| [X][X] Wunsch nach einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0462963
+[X][X] Zimeray , [X] ||| [X][X] Zimeray , [X] ||| 0.0263222 1 ||| ||| 0.418403
+the [X][X] Zimeray , [X] ||| [X][X] Zimeray , [X] ||| 0.00151192 1 ||| ||| 0.418403
+[X][X] Zimeray , [X][X] [X] ||| [X][X] Zimeray , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.197712
+[X][X] Zimeray , [X][X] presented [X] ||| [X][X] Zimeray , [X][X] eingereicht [X] ||| 0.0278341 1 ||| ||| 0.0588235
+[X][X] Zimeray [X] ||| [X][X] Zimeray [X] ||| 0.0267533 1 ||| ||| 0.757456
+the [X][X] Zimeray [X] ||| [X][X] Zimeray [X] ||| 0.00108079 1 ||| ||| 0.757456
+[X][X] Zimeray [X][X] [X] ||| [X][X] Zimeray [X][X] [X] ||| 0.0278341 1 ||| ||| 0.197712
+[X][X] Zimeray [X][X] presented [X] ||| [X][X] Zimeray [X][X] eingereicht [X] ||| 0.0278341 1 ||| ||| 0.0588235
+[X][X] the [X][X] , [X] ||| [X][X] [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.146825
+[X][X] have [X][X] that [X] ||| [X][X] [X][X] , daß [X] ||| 0.0278341 1 ||| ||| 0.0434783
+[X][X] signed [X][X] [X] ||| [X][X] [X][X] , unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.087037
+[X][X] signed [X][X] [X] ||| [X][X] [X][X] , unterzeichnet worden ist [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] before [X][X] because [X] ||| [X][X] [X][X] , weil [X] ||| 0.00927803 1 ||| ||| 0.142857
+[X][X] before the [X][X] because [X] ||| [X][X] [X][X] , weil [X] ||| 0.00927803 1 ||| ||| 0.142857
+[X][X] the [X][X] because [X] ||| [X][X] [X][X] , weil [X] ||| 0.00927803 1 ||| ||| 0.142857
+[X][X] before [X][X] because the [X] ||| [X][X] [X][X] , weil der [X] ||| 0.013917 1 ||| ||| 0.105263
+[X][X] the [X][X] because the [X] ||| [X][X] [X][X] , weil der [X] ||| 0.013917 1 ||| ||| 0.105263
+[X][X] the [X][X] , if [X] ||| [X][X] [X][X] , wenn [X] ||| 0.0278341 1 ||| ||| 0.0833333
+[X][X] do [X][X] . [X] ||| [X][X] [X][X] . [X] ||| 0.0173035 1 ||| ||| 0.335479
+[X][X] has [X][X] . [X] ||| [X][X] [X][X] . [X] ||| 0.0105306 1 ||| ||| 0.335479
+[X][X] using [X][X] prestigious office [X] ||| [X][X] [X][X] Amtes [X] ||| 0.0278341 1 ||| ||| 0.0454545
+[X][X] the [X][X] Bush , [X] ||| [X][X] [X][X] Bush , [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] the [X][X] Bush [X] ||| [X][X] [X][X] Bush [X] ||| 0.0152083 1 ||| ||| 0.142229
+[X][X] to [X][X] Bush [X] ||| [X][X] [X][X] Bush [X] ||| 0.00631289 1 ||| ||| 0.142229
+[X][X] to the [X][X] Bush [X] ||| [X][X] [X][X] Bush [X] ||| 0.00631289 1 ||| ||| 0.142229
+[X][X] using [X][X] of your [X] ||| [X][X] [X][X] Ihres [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] initiative [X][X] [X] ||| [X][X] [X][X] Initiative [X] ||| 0.00771185 1 ||| ||| 3.0798
+[X][X] initiative [X][X] have [X] ||| [X][X] [X][X] Initiative [X] ||| 0.00131235 1 ||| ||| 3.0798
+[X][X] initiative [X][X] have just [X] ||| [X][X] [X][X] Initiative [X] ||| 0.000979073 1 ||| ||| 3.0798
+[X][X] initiative [X][X] just [X] ||| [X][X] [X][X] Initiative [X] ||| 0.000979073 1 ||| ||| 3.0798
+[X][X] initiative [X][X] just suggested [X] ||| [X][X] [X][X] Initiative [X] ||| 0.000602508 1 ||| ||| 3.0798
+[X][X] initiative [X][X] suggested [X] ||| [X][X] [X][X] Initiative [X] ||| 0.000602508 1 ||| ||| 3.0798
+[X][X] initiative [X][X] you [X] ||| [X][X] [X][X] Initiative [X] ||| 0.0018643 1 ||| ||| 3.0798
+[X][X] initiative [X][X] you have [X] ||| [X][X] [X][X] Initiative [X] ||| 0.00131235 1 ||| ||| 3.0798
+[X][X] initiative of [X][X] [X] ||| [X][X] [X][X] Initiative [X] ||| 0.00771185 1 ||| ||| 3.0798
+[X][X] initiative of [X][X] have [X] ||| [X][X] [X][X] Initiative [X] ||| 0.00131235 1 ||| ||| 3.0798
+[X][X] initiative of [X][X] just [X] ||| [X][X] [X][X] Initiative [X] ||| 0.000979073 1 ||| ||| 3.0798
+[X][X] initiative of [X][X] suggested [X] ||| [X][X] [X][X] Initiative [X] ||| 0.000602508 1 ||| ||| 3.0798
+[X][X] initiative of [X][X] you [X] ||| [X][X] [X][X] Initiative [X] ||| 0.0018643 1 ||| ||| 3.0798
+[X][X] Members [X][X] , [X] ||| [X][X] [X][X] Kolleginnen und Kollegen - , [X] ||| 0.0104882 1 ||| ||| 0.156108
+[X][X] Members [X][X] , on [X] ||| [X][X] [X][X] Kolleginnen und Kollegen - , [X] ||| 0.00685767 1 ||| ||| 0.156108
+[X][X] of Members [X][X] , [X] ||| [X][X] [X][X] Kolleginnen und Kollegen - , [X] ||| 0.0104882 1 ||| ||| 0.156108
+[X][X] Members [X][X] [X] ||| [X][X] [X][X] Kolleginnen und Kollegen - [X] ||| 0.013917 1 ||| ||| 0.095238
+[X][X] of Members [X][X] [X] ||| [X][X] [X][X] Kolleginnen und Kollegen - [X] ||| 0.013917 1 ||| ||| 0.095238
+[X][X] Members [X][X] [X] ||| [X][X] [X][X] Kolleginnen und Kollegen [X] ||| 0.013917 1 ||| ||| 0.153846
+[X][X] of Members [X][X] [X] ||| [X][X] [X][X] Kolleginnen und Kollegen [X] ||| 0.013917 1 ||| ||| 0.153846
+[X][X] behalf [X][X] the victims [X] ||| [X][X] [X][X] Opfern [X] ||| 0.00695852 1 ||| ||| 0.329032
+[X][X] behalf [X][X] victims [X] ||| [X][X] [X][X] Opfern [X] ||| 0.00695852 1 ||| ||| 0.329032
+[X][X] behalf of [X][X] victims [X] ||| [X][X] [X][X] Opfern [X] ||| 0.00695852 1 ||| ||| 0.329032
+[X][X] of [X][X] victims [X] ||| [X][X] [X][X] Opfern [X] ||| 0.00695852 1 ||| ||| 0.329032
+[X][X] is [X][X] right . [X] ||| [X][X] [X][X] Recht ist . [X] ||| 0.0278341 1 ||| ||| 0.399802
+, [X][X] is [X][X] right [X] ||| [X][X] [X][X] Recht ist [X] ||| 0.00440377 1 ||| ||| 0.421368
+[X][X] is [X][X] right [X] ||| [X][X] [X][X] Recht ist [X] ||| 0.0234303 1 ||| ||| 0.421368
+[X][X] is [X][X] legal principle [X] ||| [X][X] [X][X] Rechtsgrundsatz [X] ||| 0.0278341 1 ||| ||| 0.140839
+[X][X] Texas [X][X] , [X] ||| [X][X] [X][X] Texas , [X] ||| 0.0278341 1 ||| ||| 0.277778
+[X][X] Texas [X][X] , for [X] ||| [X][X] [X][X] Texas , für [X] ||| 0.0278341 1 ||| ||| 0.242857
+[X][X] Texas [X][X] [X] ||| [X][X] [X][X] Texas [X] ||| 0.0278341 1 ||| ||| 0.291667
+[X][X] killings [X][X] [X] ||| [X][X] [X][X] Toten [X] ||| 0.0129893 1 ||| ||| 0.267857
+[X][X] of [X][X] killings [X] ||| [X][X] [X][X] Toten [X] ||| 0.0148448 1 ||| ||| 0.267857
+[X][X] , [X][X] environmental information [X] ||| [X][X] [X][X] Umweltinformationen [X] ||| 0.0278341 1 ||| ||| 0.097619
+[X][X] of [X][X] Community [X] ||| [X][X] [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.175642
+[X][X] raise [X][X] , [X] ||| [X][X] [X][X] ansprechen , [X] ||| 0.0278341 1 ||| ||| 0.286406
+[X][X] raise [X][X] , i.e. [X] ||| [X][X] [X][X] ansprechen , d. h. [X] ||| 0.0278341 1 ||| ||| 0.210145
+[X][X] raise [X][X] [X] ||| [X][X] [X][X] ansprechen [X] ||| 0.0278341 1 ||| ||| 0.401544
+[X][X] draw your attention [X][X] [X] ||| [X][X] [X][X] aufmerksam machen , [X] ||| 0.0278341 1 ||| ||| 0.507937
+[X][X] draw your attention [X][X] [X] ||| [X][X] [X][X] aufmerksam machen [X] ||| 0.0278341 1 ||| ||| 0.733333
+[X][X] the [X][X] [X] ||| [X][X] [X][X] das [X] ||| 0.013917 1 ||| ||| 0.614664
+[X][X] to the [X][X] [X] ||| [X][X] [X][X] das [X] ||| 0.013917 1 ||| ||| 0.614664
+[X][X] aware [X][X] television that [X] ||| [X][X] [X][X] dem Fernsehen wissen , [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] aware [X][X] television [X] ||| [X][X] [X][X] dem Fernsehen wissen [X] ||| 0.0278341 1 ||| ||| 0.183333
+[X][X] , [X][X] access [X] ||| [X][X] [X][X] der Zugang [X] ||| 0.0278341 1 ||| ||| 0.0769231
+[X][X] , [X][X] access to [X] ||| [X][X] [X][X] der Zugang zu [X] ||| 0.0278341 1 ||| ||| 0.0588235
+[X][X] is [X][X] of the [X] ||| [X][X] [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0768116
+[X][X] a petition [X][X] [X] ||| [X][X] [X][X] eine Petition [X] ||| 0.0278341 1 ||| ||| 0.430556
+[X][X] a petition [X][X] presented [X] ||| [X][X] [X][X] eine Petition eingereicht [X] ||| 0.0278341 1 ||| ||| 0.32549
+[X][X] made [X][X] that [X] ||| [X][X] [X][X] gemacht hat , daß [X] ||| 0.022531 1 ||| ||| 0.308744
+have [X][X] made [X][X] that [X] ||| [X][X] [X][X] gemacht hat , daß [X] ||| 0.00530309 1 ||| ||| 0.308744
+[X][X] made [X][X] [X] ||| [X][X] [X][X] gemacht hat [X] ||| 0.0231172 1 ||| ||| 0.421499
+have [X][X] made [X][X] [X] ||| [X][X] [X][X] gemacht hat [X] ||| 0.00471686 1 ||| ||| 0.421499
+[X][X] is [X][X] common [X] ||| [X][X] [X][X] gemeinsamen [X] ||| 0.0278341 1 ||| ||| 0.0333333
+[X][X] have [X][X] . [X] ||| [X][X] [X][X] haben . [X] ||| 0.0278341 1 ||| ||| 0.251923
+[X][X] have [X][X] [X] ||| [X][X] [X][X] haben [X] ||| 0.0278341 1 ||| ||| 0.316399
+[X][X] has [X][X] . [X] ||| [X][X] [X][X] hat . [X] ||| 0.013917 1 ||| ||| 0.33862
+[X][X] has [X][X] interest . [X] ||| [X][X] [X][X] hat . [X] ||| 0.013917 1 ||| ||| 0.33862
+[X][X] has [X][X] [X] ||| [X][X] [X][X] hat [X] ||| 0.0154303 1 ||| ||| 1.76813
+[X][X] has [X][X] an [X] ||| [X][X] [X][X] hat [X] ||| 0.00463995 1 ||| ||| 1.76813
+[X][X] has [X][X] an interest [X] ||| [X][X] [X][X] hat [X] ||| 0.00388192 1 ||| ||| 1.76813
+[X][X] has [X][X] interest [X] ||| [X][X] [X][X] hat [X] ||| 0.00388192 1 ||| ||| 1.76813
+[X][X] here [X][X] [X] ||| [X][X] [X][X] hier [X] ||| 0.0278341 1 ||| ||| 0.291667
+all [X][X] here [X][X] that [X] ||| [X][X] [X][X] hier alle , daß [X] ||| 0.0278341 1 ||| ||| 0.22619
+all [X][X] here [X][X] [X] ||| [X][X] [X][X] hier alle [X] ||| 0.0278341 1 ||| ||| 0.166667
+[X][X] I [X][X] [X] ||| [X][X] [X][X] ich [X] ||| 0.0278341 1 ||| ||| 0.263636
+[X][X] I [X][X] [X] ||| [X][X] [X][X] ich dem [X] ||| 0.0278341 1 ||| ||| 0.169996
+[X][X] in Russia , [X][X] [X] ||| [X][X] [X][X] in Rußland [X] ||| 0.00688172 1 ||| ||| 0.58077
+[X][X] in Russia [X][X] , [X] ||| [X][X] [X][X] in Rußland [X] ||| 0.00688172 1 ||| ||| 0.58077
+[X][X] in Russia [X][X] [X] ||| [X][X] [X][X] in Rußland [X] ||| 0.0140707 1 ||| ||| 0.58077
+[X][X] in Russia [X][X] access [X] ||| [X][X] [X][X] in Rußland der Zugang [X] ||| 0.0278341 1 ||| ||| 0.0909091
+, [X][X] is [X][X] . [X] ||| [X][X] [X][X] ist . [X] ||| 0.00201789 1 ||| ||| 0.862104
+[X][X] is [X][X] . [X] ||| [X][X] [X][X] ist . [X] ||| 0.0129081 1 ||| ||| 0.862104
+[X][X] is a [X][X] . [X] ||| [X][X] [X][X] ist . [X] ||| 0.0129081 1 ||| ||| 0.862104
+, [X][X] is [X][X] [X] ||| [X][X] [X][X] ist [X] ||| 0.00220189 1 ||| ||| 0.842735
+, [X][X] is a [X][X] [X] ||| [X][X] [X][X] ist [X] ||| 0.00220189 1 ||| ||| 0.842735
+[X][X] is [X][X] [X] ||| [X][X] [X][X] ist [X] ||| 0.0117152 1 ||| ||| 0.842735
+[X][X] is a [X][X] [X] ||| [X][X] [X][X] ist [X] ||| 0.0117152 1 ||| ||| 0.842735
+[X][X] the [X][X] you may [X] ||| [X][X] [X][X] können Sie [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] signed [X][X] myself [X] ||| [X][X] [X][X] mir selbst , unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.087037
+[X][X] signed [X][X] myself [X] ||| [X][X] [X][X] mir selbst , unterzeichnet worden ist [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] fail to meet [X][X] [X] ||| [X][X] [X][X] nicht erfüllen , [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] have [X][X] and [X] ||| [X][X] [X][X] und [X] ||| 0.0222031 1 ||| ||| 0.170448
+[X][X] using [X][X] and [X] ||| [X][X] [X][X] und [X] ||| 0.00563104 1 ||| ||| 0.170448
+[X][X] aware [X][X] and television [X] ||| [X][X] [X][X] und dem Fernsehen wissen [X] ||| 0.0278341 1 ||| ||| 0.183333
+[X][X] signed [X][X] [X] ||| [X][X] [X][X] unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.087037
+[X][X] signed [X][X] [X] ||| [X][X] [X][X] unterzeichnet worden ist [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] to [X][X] of [X] ||| [X][X] [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.175642
+[X][X] signed [X][X] myself [X] ||| [X][X] [X][X] von mir selbst , unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.087037
+[X][X] signed [X][X] myself [X] ||| [X][X] [X][X] von mir selbst , unterzeichnet worden ist [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] before [X][X] because [X] ||| [X][X] [X][X] weil [X] ||| 0.00927803 1 ||| ||| 0.142857
+[X][X] before the [X][X] because [X] ||| [X][X] [X][X] weil [X] ||| 0.00927803 1 ||| ||| 0.142857
+[X][X] the [X][X] because [X] ||| [X][X] [X][X] weil [X] ||| 0.00927803 1 ||| ||| 0.142857
+[X][X] before [X][X] because the [X] ||| [X][X] [X][X] weil der [X] ||| 0.013917 1 ||| ||| 0.105263
+[X][X] the [X][X] because the [X] ||| [X][X] [X][X] weil der [X] ||| 0.013917 1 ||| ||| 0.105263
+[X][X] the [X][X] if [X] ||| [X][X] [X][X] wenn [X] ||| 0.0278341 1 ||| ||| 0.0833333
+[X][X] of [X][X] should be [X] ||| [X][X] [X][X] werden sollen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] aware [X][X] that [X] ||| [X][X] [X][X] wissen , [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] aware [X][X] [X] ||| [X][X] [X][X] wissen [X] ||| 0.0278341 1 ||| ||| 0.183333
+[X][X] would be [X][X] . [X] ||| [X][X] [X][X] wäre . [X] ||| 0.0278341 1 ||| ||| 0.5
+[X][X] would be [X][X] [X] ||| [X][X] [X][X] wäre [X] ||| 0.0278341 1 ||| ||| 0.634199
+all [X][X] that [X] ||| [X][X] alle , daß [X] ||| 0.013917 1 ||| ||| 0.45238
+all of [X][X] that [X] ||| [X][X] alle , daß [X] ||| 0.013917 1 ||| ||| 0.45238
+all [X][X] that [X][X] [X] ||| [X][X] alle , daß [X][X] [X] ||| 0.0115119 1 ||| ||| 0.608314
+all [X][X] that [X][X] have [X] ||| [X][X] alle , daß [X][X] [X] ||| 0.00481025 1 ||| ||| 0.608314
+all of [X][X] that [X][X] [X] ||| [X][X] alle , daß [X][X] [X] ||| 0.0115119 1 ||| ||| 0.608314
+all [X][X] that the courts [X] ||| [X][X] alle , daß das Gericht [X] ||| 0.0278341 1 ||| ||| 0.146465
+all [X][X] that the [X] ||| [X][X] alle , daß das [X] ||| 0.013917 1 ||| ||| 0.467532
+all of [X][X] that the [X] ||| [X][X] alle , daß das [X] ||| 0.013917 1 ||| ||| 0.467532
+all [X][X] that the [X][X] [X] ||| [X][X] alle , daß das [X][X] [X] ||| 0.0278341 1 ||| ||| 0.105128
+all [X][X] [X] ||| [X][X] alle [X] ||| 0.013917 1 ||| ||| 0.733334
+all of [X][X] [X] ||| [X][X] alle [X] ||| 0.013917 1 ||| ||| 0.733334
+[X][X] all the victims [X] ||| [X][X] allen Opfern [X] ||| 0.013917 1 ||| ||| 0.164516
+[X][X] of all the victims [X] ||| [X][X] allen Opfern [X] ||| 0.013917 1 ||| ||| 0.164516
+[X][X] all [X] ||| [X][X] allen [X] ||| 0.00536766 1 ||| ||| 1.25934
+[X][X] all the [X] ||| [X][X] allen [X] ||| 0.00391038 1 ||| ||| 1.25934
+[X][X] behalf of all [X] ||| [X][X] allen [X] ||| 0.00536766 1 ||| ||| 1.25934
+[X][X] behalf of all the [X] ||| [X][X] allen [X] ||| 0.00391038 1 ||| ||| 1.25934
+[X][X] of all [X] ||| [X][X] allen [X] ||| 0.00536766 1 ||| ||| 1.25934
+[X][X] of all the [X] ||| [X][X] allen [X] ||| 0.00391038 1 ||| ||| 1.25934
+[X][X] all [X][X] [X] ||| [X][X] allen [X][X] [X] ||| 0.00927803 1 ||| ||| 0.246774
+[X][X] behalf of all [X][X] [X] ||| [X][X] allen [X][X] [X] ||| 0.00927803 1 ||| ||| 0.246774
+[X][X] of all [X][X] [X] ||| [X][X] allen [X][X] [X] ||| 0.00927803 1 ||| ||| 0.246774
+[X][X] on Thursday prior [X] ||| [X][X] am Donnerstag [X] ||| 0.0278341 1 ||| ||| 0.288095
+[X][X] on Thursday prior [X][X] [X] ||| [X][X] am Donnerstag [X][X] [X] ||| 0.0278341 1 ||| ||| 0.108824
+[X][X] on Thursday prior to [X] ||| [X][X] am Donnerstag zu [X] ||| 0.0278341 1 ||| ||| 0.17037
+[X][X] on [X] ||| [X][X] am [X] ||| 0.0278341 1 ||| ||| 0.659414
+[X][X] on [X][X] the start [X] ||| [X][X] am [X][X] Beginn [X] ||| 0.0278341 1 ||| ||| 0.0588235
+[X][X] on [X][X] [X] ||| [X][X] am [X][X] [X] ||| 0.0278341 1 ||| ||| 0.567289
+[X][X] on [X][X] of the [X] ||| [X][X] am [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] on [X][X] to [X] ||| [X][X] am [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.17037
+[X][X] other [X] ||| [X][X] anderen [X] ||| 0.0218696 1 ||| ||| 0.583333
+[X][X] the other [X] ||| [X][X] anderen [X] ||| 0.00596445 1 ||| ||| 0.583333
+before the courts [X][X] [X] ||| [X][X] angeklagt [X] ||| 0.00521889 1 ||| ||| 1.33333
+courts [X][X] [X] ||| [X][X] angeklagt [X] ||| 0.0104378 1 ||| ||| 1.33333
+go before the courts [X][X] [X] ||| [X][X] angeklagt [X] ||| 0.00521889 1 ||| ||| 1.33333
+the courts [X][X] [X] ||| [X][X] angeklagt [X] ||| 0.00695852 1 ||| ||| 1.33333
+[X][X] before the courts [X][X] [X] ||| [X][X] angeklagt [X][X] , [X] ||| 0.00927803 1 ||| ||| 0.075
+[X][X] courts [X][X] [X] ||| [X][X] angeklagt [X][X] , [X] ||| 0.00927803 1 ||| ||| 0.075
+[X][X] the courts [X][X] [X] ||| [X][X] angeklagt [X][X] , [X] ||| 0.00927803 1 ||| ||| 0.075
+[X][X] courts [X][X] because [X] ||| [X][X] angeklagt [X][X] , weil [X] ||| 0.013917 1 ||| ||| 0.047619
+[X][X] the courts [X][X] because [X] ||| [X][X] angeklagt [X][X] , weil [X] ||| 0.013917 1 ||| ||| 0.047619
+[X][X] courts [X][X] because the [X] ||| [X][X] angeklagt [X][X] , weil der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+[X][X] before the courts [X][X] [X] ||| [X][X] angeklagt [X][X] [X] ||| 0.00927803 1 ||| ||| 0.190384
+[X][X] courts [X][X] [X] ||| [X][X] angeklagt [X][X] [X] ||| 0.00927803 1 ||| ||| 0.190384
+[X][X] the courts [X][X] [X] ||| [X][X] angeklagt [X][X] [X] ||| 0.00927803 1 ||| ||| 0.190384
+[X][X] courts [X][X] because [X] ||| [X][X] angeklagt [X][X] weil [X] ||| 0.013917 1 ||| ||| 0.047619
+[X][X] the courts [X][X] because [X] ||| [X][X] angeklagt [X][X] weil [X] ||| 0.013917 1 ||| ||| 0.047619
+[X][X] courts [X][X] because the [X] ||| [X][X] angeklagt [X][X] weil der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+before the courts [X][X] [X] ||| [X][X] angeklagt werden [X] ||| 0.00437841 1 ||| ||| 1.05952
+courts [X][X] [X] ||| [X][X] angeklagt werden [X] ||| 0.0131352 1 ||| ||| 1.05952
+go before the courts [X][X] [X] ||| [X][X] angeklagt werden [X] ||| 0.00375291 1 ||| ||| 1.05952
+the courts [X][X] [X] ||| [X][X] angeklagt werden [X] ||| 0.00656759 1 ||| ||| 1.05952
+[X][X] before the courts [X][X] [X] ||| [X][X] angeklagt werden [X][X] , [X] ||| 0.00927803 1 ||| ||| 0.075
+[X][X] courts [X][X] [X] ||| [X][X] angeklagt werden [X][X] , [X] ||| 0.00927803 1 ||| ||| 0.075
+[X][X] the courts [X][X] [X] ||| [X][X] angeklagt werden [X][X] , [X] ||| 0.00927803 1 ||| ||| 0.075
+[X][X] courts [X][X] because [X] ||| [X][X] angeklagt werden [X][X] , weil [X] ||| 0.013917 1 ||| ||| 0.047619
+[X][X] the courts [X][X] because [X] ||| [X][X] angeklagt werden [X][X] , weil [X] ||| 0.013917 1 ||| ||| 0.047619
+[X][X] courts [X][X] because the [X] ||| [X][X] angeklagt werden [X][X] , weil der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+[X][X] before the courts [X][X] [X] ||| [X][X] angeklagt werden [X][X] [X] ||| 0.00927803 1 ||| ||| 0.190384
+[X][X] courts [X][X] [X] ||| [X][X] angeklagt werden [X][X] [X] ||| 0.00927803 1 ||| ||| 0.190384
+[X][X] the courts [X][X] [X] ||| [X][X] angeklagt werden [X][X] [X] ||| 0.00927803 1 ||| ||| 0.190384
+[X][X] courts [X][X] because [X] ||| [X][X] angeklagt werden [X][X] weil [X] ||| 0.013917 1 ||| ||| 0.047619
+[X][X] the courts [X][X] because [X] ||| [X][X] angeklagt werden [X][X] weil [X] ||| 0.013917 1 ||| ||| 0.047619
+[X][X] courts [X][X] because the [X] ||| [X][X] angeklagt werden [X][X] weil der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+[X][X] appropriate [X] ||| [X][X] angemessen , [X] ||| 0.0278341 1 ||| ||| 0.5
+[X][X] appropriate [X][X] , Madam [X] ||| [X][X] angemessen , [X][X] , Frau [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] appropriate [X][X] , [X] ||| [X][X] angemessen , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.088141
+[X][X] appropriate [X][X] Madam President [X] ||| [X][X] angemessen , [X][X] Frau Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.030303
+[X][X] appropriate [X][X] Madam [X] ||| [X][X] angemessen , [X][X] Frau [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] appropriate [X][X] President , [X] ||| [X][X] angemessen , [X][X] Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.025641
+[X][X] appropriate [X][X] President [X] ||| [X][X] angemessen , [X][X] Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.030303
+[X][X] appropriate [X][X] [X] ||| [X][X] angemessen , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.258444
+[X][X] appropriate for you , [X] ||| [X][X] angemessen , wenn Sie , [X] ||| 0.0278341 1 ||| ||| 0.0625
+[X][X] appropriate for you [X] ||| [X][X] angemessen , wenn Sie [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] appropriate for you [X][X] [X] ||| [X][X] angemessen , wenn Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0959441
+[X][X] appropriate for [X] ||| [X][X] angemessen , wenn [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] appropriate for [X][X] , [X] ||| [X][X] angemessen , wenn [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.025641
+[X][X] appropriate for [X][X] Madam [X] ||| [X][X] angemessen , wenn [X][X] Frau [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] appropriate for [X][X] President [X] ||| [X][X] angemessen , wenn [X][X] Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.030303
+[X][X] appropriate for [X][X] [X] ||| [X][X] angemessen , wenn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.158444
+[X][X] appropriate [X] ||| [X][X] angemessen [X] ||| 0.0278341 1 ||| ||| 0.5
+[X][X] appropriate [X][X] , Madam [X] ||| [X][X] angemessen [X][X] , Frau [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] appropriate [X][X] , [X] ||| [X][X] angemessen [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.088141
+[X][X] appropriate [X][X] Madam President [X] ||| [X][X] angemessen [X][X] Frau Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.030303
+[X][X] appropriate [X][X] Madam [X] ||| [X][X] angemessen [X][X] Frau [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] appropriate [X][X] President , [X] ||| [X][X] angemessen [X][X] Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.025641
+[X][X] appropriate [X][X] President [X] ||| [X][X] angemessen [X][X] Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.030303
+[X][X] appropriate [X][X] [X] ||| [X][X] angemessen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.258444
+raise [X][X] , [X] ||| [X][X] ansprechen , [X] ||| 0.0278341 1 ||| ||| 0.333333
+raise [X][X] , [X][X] [X] ||| [X][X] ansprechen , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.23254
+raise [X][X] , [X][X] to [X] ||| [X][X] ansprechen , [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.05
+raise [X][X] , i.e. [X] ||| [X][X] ansprechen , d. h. [X] ||| 0.0278341 1 ||| ||| 0.2
+raise [X][X] , i.e. [X][X] [X] ||| [X][X] ansprechen , d. h. [X][X] [X] ||| 0.0278341 1 ||| ||| 0.121429
+raise [X][X] , i.e. on [X] ||| [X][X] ansprechen , d. h. am [X] ||| 0.0278341 1 ||| ||| 0.111111
+raise [X][X] [X] ||| [X][X] ansprechen [X] ||| 0.0278341 1 ||| ||| 0.5
+[X][X] Mr Kumar Ponnambalam [X] ||| [X][X] auch Herr Kumar Ponnambalam [X] ||| 0.0278341 1 ||| ||| 0.047619
+[X][X] Mr [X] ||| [X][X] auch Herr [X] ||| 0.0278341 1 ||| ||| 0.223214
+[X][X] Mr [X][X] [X] ||| [X][X] auch Herr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.047619
+[X][X] in Russia , too [X] ||| [X][X] auch in Rußland [X] ||| 0.0278341 1 ||| ||| 0.15
+[X][X] in [X][X] too , [X] ||| [X][X] auch in [X][X] [X] ||| 0.0136132 1 ||| ||| 0.29359
+[X][X] in [X][X] too [X] ||| [X][X] auch in [X][X] [X] ||| 0.0142209 1 ||| ||| 0.29359
+draw your attention [X][X] [X] ||| [X][X] aufmerksam machen , [X] ||| 0.0278341 1 ||| ||| 0.253968
+draw your attention [X][X] in [X] ||| [X][X] aufmerksam machen , mit [X] ||| 0.0278341 1 ||| ||| 0.242857
+draw your attention [X][X] [X] ||| [X][X] aufmerksam machen [X] ||| 0.0278341 1 ||| ||| 0.342857
+[X][X] aware from [X][X] television [X] ||| [X][X] aus [X][X] dem Fernsehen wissen [X] ||| 0.0278341 1 ||| ||| 0.183333
+[X][X] aware from [X][X] that [X] ||| [X][X] aus [X][X] wissen , [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] aware from [X][X] [X] ||| [X][X] aus [X][X] wissen [X] ||| 0.0278341 1 ||| ||| 0.183333
+[X][X] aware from the [X][X] [X] ||| [X][X] aus der [X][X] wissen [X] ||| 0.0278341 1 ||| ||| 0.183333
+[X][X] before [X] ||| [X][X] befassen , [X] ||| 0.013917 1 ||| ||| 0.82963
+[X][X] comes before [X] ||| [X][X] befassen , [X] ||| 0.013917 1 ||| ||| 0.82963
+[X][X] before [X] ||| [X][X] befassen , der [X] ||| 0.013917 1 ||| ||| 0.677558
+[X][X] comes before [X] ||| [X][X] befassen , der [X] ||| 0.013917 1 ||| ||| 0.677558
+[X][X] before [X] ||| [X][X] befassen [X] ||| 0.013917 1 ||| ||| 1.0728
+[X][X] comes before [X] ||| [X][X] befassen [X] ||| 0.013917 1 ||| ||| 1.0728
+[X][X] to [X] ||| [X][X] bei [X] ||| 0.241419 1 ||| ||| 1.79994
+[X][X] to [X][X] report [X] ||| [X][X] bei [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] to [X][X] Governor [X] ||| [X][X] bei [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.122317
+[X][X] to [X][X] the Governor [X] ||| [X][X] bei [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.122317
+[X][X] to [X][X] Governor of [X] ||| [X][X] bei [X][X] Gouverneur von [X] ||| 0.0278341 1 ||| ||| 0.0181818
+[X][X] to [X][X] [X] ||| [X][X] bei [X][X] [X] ||| 0.193911 1 ||| ||| 1.52568
+[X][X] to [X][X] the [X] ||| [X][X] bei [X][X] [X] ||| 0.00177276 1 ||| ||| 1.52568
+[X][X] to [X][X] to [X] ||| [X][X] bei [X][X] [X] ||| 0.00193182 1 ||| ||| 1.52568
+[X][X] to [X][X] to the [X] ||| [X][X] bei [X][X] [X] ||| 0.00177276 1 ||| ||| 1.52568
+[X][X] to [X][X] a report [X] ||| [X][X] bei [X][X] einen Bericht [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] to [X][X] a [X] ||| [X][X] bei [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+[X][X] to [X][X] merely [X] ||| [X][X] bei [X][X] lediglich um [X] ||| 0.0278341 1 ||| ||| 0.161097
+[X][X] to [X][X] merely a [X] ||| [X][X] bei [X][X] lediglich um einen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+[X][X] to [X][X] and [X] ||| [X][X] bei [X][X] und [X] ||| 0.016054 1 ||| ||| 0.250197
+[X][X] to [X][X] and to [X] ||| [X][X] bei [X][X] und [X] ||| 0.0117801 1 ||| ||| 0.250197
+[X][X] to [X][X] of [X] ||| [X][X] bei [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0181818
+[X][X] to the President [X] ||| [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.247765
+[X][X] to the President [X][X] [X] ||| [X][X] bei dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.282401
+[X][X] to the President and [X] ||| [X][X] bei dem Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.144307
+[X][X] to the [X] ||| [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.44669
+[X][X] to the [X][X] Governor [X] ||| [X][X] bei dem [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.0611584
+[X][X] to the [X][X] [X] ||| [X][X] bei dem [X][X] [X] ||| 0.0188594 1 ||| ||| 0.62977
+[X][X] to the [X][X] the [X] ||| [X][X] bei dem [X][X] [X] ||| 0.0042947 1 ||| ||| 0.62977
+[X][X] to the [X][X] to [X] ||| [X][X] bei dem [X][X] [X] ||| 0.00468004 1 ||| ||| 0.62977
+[X][X] to the [X][X] of [X] ||| [X][X] bei dem [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0181818
+[X][X] to what [X] ||| [X][X] bei dem es [X] ||| 0.0278341 1 ||| ||| 0.503968
+[X][X] to what [X][X] report [X] ||| [X][X] bei dem es [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] to what [X][X] [X] ||| [X][X] bei dem es [X][X] [X] ||| 0.0278341 1 ||| ||| 0.280145
+[X][X] to what [X][X] a [X] ||| [X][X] bei dem es [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+[X][X] to what is [X] ||| [X][X] bei dem es sich [X] ||| 0.0278341 1 ||| ||| 0.270833
+[X][X] to what is [X][X] [X] ||| [X][X] bei dem es sich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.119048
+[X][X] to what is merely [X] ||| [X][X] bei dem es sich lediglich um [X] ||| 0.0278341 1 ||| ||| 0.161097
+[X][X] was [X] ||| [X][X] beklagen gab , [X] ||| 0.0278341 1 ||| ||| 0.297619
+[X][X] was [X] ||| [X][X] beklagen gab , zählt [X] ||| 0.0278341 1 ||| ||| 0.254286
+[X][X] was Mr [X] ||| [X][X] beklagen gab , zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 0.0982143
+[X][X] was [X] ||| [X][X] beklagen gab , zählt auch [X] ||| 0.0278341 1 ||| ||| 0.1875
+[X][X] was [X] ||| [X][X] beklagen gab [X] ||| 0.0278341 1 ||| ||| 0.358824
+[X][X] relates [X] ||| [X][X] betrifft [X] ||| 0.0173963 1 ||| ||| 0.533333
+[X][X] relates to [X] ||| [X][X] betrifft [X] ||| 0.0104378 1 ||| ||| 0.533333
+[X][X] relates [X][X] that [X] ||| [X][X] betrifft [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.0555556
+[X][X] relates [X][X] [X] ||| [X][X] betrifft [X][X] [X] ||| 0.0201797 1 ||| ||| 0.202021
+[X][X] relates to [X][X] [X] ||| [X][X] betrifft [X][X] [X] ||| 0.00765437 1 ||| ||| 0.202021
+[X][X] relates to something that [X] ||| [X][X] betrifft eine Angelegenheit , die [X] ||| 0.0278341 1 ||| ||| 0.0555556
+[X][X] relates to something [X] ||| [X][X] betrifft eine Angelegenheit [X] ||| 0.0278341 1 ||| ||| 0.0909091
+, [X][X] [X] ||| [X][X] bitten - [X] ||| 0.0278341 1 ||| ||| 0.333333
+[X][X] i.e. [X] ||| [X][X] d. h. [X] ||| 0.0278341 1 ||| ||| 0.553002
+[X][X] i.e. [X][X] [X] ||| [X][X] d. h. [X][X] [X] ||| 0.0278341 1 ||| ||| 0.250132
+[X][X] i.e. [X][X] to [X] ||| [X][X] d. h. [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.087037
+[X][X] i.e. on Thursday prior [X] ||| [X][X] d. h. am Donnerstag [X] ||| 0.0278341 1 ||| ||| 0.163095
+[X][X] i.e. on [X] ||| [X][X] d. h. am [X] ||| 0.0278341 1 ||| ||| 0.32608
+[X][X] i.e. on [X][X] [X] ||| [X][X] d. h. am [X][X] [X] ||| 0.0278341 1 ||| ||| 0.250132
+[X][X] i.e. on [X][X] to [X] ||| [X][X] d. h. am [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.087037
+, [X][X] for [X] ||| [X][X] damit [X] ||| 0.000605089 1 ||| ||| 11.5
+, [X][X] for next [X] ||| [X][X] damit [X] ||| 0.000806785 1 ||| ||| 11.5
+, a [X][X] for [X] ||| [X][X] damit [X] ||| 0.000605089 1 ||| ||| 11.5
+, a [X][X] for next [X] ||| [X][X] damit [X] ||| 0.000806785 1 ||| ||| 11.5
+, a date [X][X] for [X] ||| [X][X] damit [X] ||| 0.000605089 1 ||| ||| 11.5
+[X][X] for [X] ||| [X][X] damit [X] ||| 0.104174 1 ||| ||| 11.5
+[X][X] for next [X] ||| [X][X] damit [X] ||| 0.108341 1 ||| ||| 11.5
+a [X][X] for [X] ||| [X][X] damit [X] ||| 0.000605089 1 ||| ||| 11.5
+a [X][X] for next [X] ||| [X][X] damit [X] ||| 0.000806785 1 ||| ||| 11.5
+a date [X][X] for [X] ||| [X][X] damit [X] ||| 0.000605089 1 ||| ||| 11.5
+a date [X][X] for next [X] ||| [X][X] damit [X] ||| 0.000806785 1 ||| ||| 11.5
+a date has [X][X] for [X] ||| [X][X] damit [X] ||| 0.000605089 1 ||| ||| 11.5
+been [X][X] for [X] ||| [X][X] damit [X] ||| 0.000605089 1 ||| ||| 11.5
+been [X][X] for next [X] ||| [X][X] damit [X] ||| 0.000605089 1 ||| ||| 11.5
+been set [X][X] for [X] ||| [X][X] damit [X] ||| 0.000605089 1 ||| ||| 11.5
+been set [X][X] for next [X] ||| [X][X] damit [X] ||| 0.000605089 1 ||| ||| 11.5
+date [X][X] for [X] ||| [X][X] damit [X] ||| 0.000605089 1 ||| ||| 11.5
+date [X][X] for next [X] ||| [X][X] damit [X] ||| 0.000806785 1 ||| ||| 11.5
+date has [X][X] for [X] ||| [X][X] damit [X] ||| 0.000605089 1 ||| ||| 11.5
+date has [X][X] for next [X] ||| [X][X] damit [X] ||| 0.000806785 1 ||| ||| 11.5
+date has been [X][X] for [X] ||| [X][X] damit [X] ||| 0.000605089 1 ||| ||| 11.5
+has [X][X] for [X] ||| [X][X] damit [X] ||| 0.000605089 1 ||| ||| 11.5
+has [X][X] for next [X] ||| [X][X] damit [X] ||| 0.000806785 1 ||| ||| 11.5
+has been [X][X] for [X] ||| [X][X] damit [X] ||| 0.000605089 1 ||| ||| 11.5
+has been [X][X] for next [X] ||| [X][X] damit [X] ||| 0.000806785 1 ||| ||| 11.5
+has been set [X][X] for [X] ||| [X][X] damit [X] ||| 0.000605089 1 ||| ||| 11.5
+set [X][X] for [X] ||| [X][X] damit [X] ||| 0.000806785 1 ||| ||| 11.5
+set [X][X] for next [X] ||| [X][X] damit [X] ||| 0.000605089 1 ||| ||| 11.5
+[X][X] agrees , [X] ||| [X][X] damit einverstanden ist , [X] ||| 0.0278341 1 ||| ||| 0.257576
+[X][X] agrees , [X][X] [X] ||| [X][X] damit einverstanden ist , [X][X] [X] ||| 0.0202636 1 ||| ||| 0.423383
+[X][X] agrees , [X][X] do [X] ||| [X][X] damit einverstanden ist , [X][X] [X] ||| 0.00757053 1 ||| ||| 0.423383
+[X][X] agrees , [X][X] [X] ||| [X][X] damit einverstanden ist , [X][X] dem [X] ||| 0.0203401 1 ||| ||| 0.160396
+[X][X] agrees , [X][X] do [X] ||| [X][X] damit einverstanden ist , [X][X] dem [X] ||| 0.00749404 1 ||| ||| 0.160396
+[X][X] agrees , I [X][X] [X] ||| [X][X] damit einverstanden ist , [X][X] ich [X] ||| 0.0278341 1 ||| ||| 0.0719697
+[X][X] agrees , I [X][X] [X] ||| [X][X] damit einverstanden ist , [X][X] ich dem [X] ||| 0.0278341 1 ||| ||| 0.0431849
+[X][X] agrees , I shall [X] ||| [X][X] damit einverstanden ist , werde ich [X] ||| 0.0278341 1 ||| ||| 0.119048
+[X][X] agrees , I shall [X] ||| [X][X] damit einverstanden ist , werde ich dem [X] ||| 0.0278341 1 ||| ||| 0.074026
+[X][X] agrees [X] ||| [X][X] damit einverstanden ist [X] ||| 0.0278341 1 ||| ||| 0.5
+[X][X] agrees [X][X] [X] ||| [X][X] damit einverstanden ist [X][X] [X] ||| 0.0202636 1 ||| ||| 0.423383
+[X][X] agrees [X][X] do [X] ||| [X][X] damit einverstanden ist [X][X] [X] ||| 0.00757053 1 ||| ||| 0.423383
+[X][X] agrees [X][X] [X] ||| [X][X] damit einverstanden ist [X][X] dem [X] ||| 0.0203401 1 ||| ||| 0.160396
+[X][X] agrees [X][X] do [X] ||| [X][X] damit einverstanden ist [X][X] dem [X] ||| 0.00749404 1 ||| ||| 0.160396
+, [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.000623152 1 ||| ||| 11.1667
+, [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.000830869 1 ||| ||| 11.1667
+, a [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.000623152 1 ||| ||| 11.1667
+, a [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.000830869 1 ||| ||| 11.1667
+, a date [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.000623152 1 ||| ||| 11.1667
+[X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.107283 1 ||| ||| 11.1667
+[X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.0428788 1 ||| ||| 11.1667
+a [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.000623152 1 ||| ||| 11.1667
+a [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.000830869 1 ||| ||| 11.1667
+a date [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.000623152 1 ||| ||| 11.1667
+a date [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.000830869 1 ||| ||| 11.1667
+a date has [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.000623152 1 ||| ||| 11.1667
+been [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.000623152 1 ||| ||| 11.1667
+been [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.000498522 1 ||| ||| 11.1667
+been set [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.000623152 1 ||| ||| 11.1667
+been set [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.000498522 1 ||| ||| 11.1667
+date [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.000623152 1 ||| ||| 11.1667
+date [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.000830869 1 ||| ||| 11.1667
+date has [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.000623152 1 ||| ||| 11.1667
+date has [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.000830869 1 ||| ||| 11.1667
+date has been [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.000623152 1 ||| ||| 11.1667
+has [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.000623152 1 ||| ||| 11.1667
+has [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.000830869 1 ||| ||| 11.1667
+has been [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.000623152 1 ||| ||| 11.1667
+has been [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.000830869 1 ||| ||| 11.1667
+has been set [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.000623152 1 ||| ||| 11.1667
+set [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.000830869 1 ||| ||| 11.1667
+set [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.000498522 1 ||| ||| 11.1667
+[X][X] the time when [X] ||| [X][X] dann [X] ||| 0.013917 1 ||| ||| 0.5
+[X][X] time when [X] ||| [X][X] dann [X] ||| 0.013917 1 ||| ||| 0.5
+[X][X] time when [X][X] , [X] ||| [X][X] dann [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.111111
+[X][X] the time when [X][X] [X] ||| [X][X] dann [X][X] [X] ||| 0.013917 1 ||| ||| 0.674604
+[X][X] time when [X][X] [X] ||| [X][X] dann [X][X] [X] ||| 0.013917 1 ||| ||| 0.674604
+[X][X] time when [X][X] if [X] ||| [X][X] dann [X][X] wenn [X] ||| 0.0278341 1 ||| ||| 0.0833333
+[X][X] time when you may [X] ||| [X][X] dann können Sie [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] the courts [X] ||| [X][X] das Gericht [X] ||| 0.0162036 1 ||| ||| 0.251593
+[X][X] the courts have [X] ||| [X][X] das Gericht [X] ||| 0.0116305 1 ||| ||| 0.251593
+[X][X] the [X] ||| [X][X] das [X] ||| 0.0169658 1 ||| ||| 1.0671
+[X][X] to the [X] ||| [X][X] das [X] ||| 0.0108683 1 ||| ||| 1.0671
+[X][X] the [X][X] [X] ||| [X][X] das [X][X] [X] ||| 0.0278341 1 ||| ||| 0.105128
+in the [X][X] [X] ||| [X][X] das ist auch der [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] he [X] ||| [X][X] daß er [X] ||| 0.0278341 1 ||| ||| 0.375
+[X][X] television [X] ||| [X][X] dem Fernsehen [X] ||| 0.0278341 1 ||| ||| 0.590909
+aware [X][X] television that [X] ||| [X][X] dem Fernsehen wissen , [X] ||| 0.0278341 1 ||| ||| 0.125
+aware [X][X] television that [X][X] [X] ||| [X][X] dem Fernsehen wissen , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111111
+aware [X][X] television [X] ||| [X][X] dem Fernsehen wissen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+aware [X][X] television [X][X] [X] ||| [X][X] dem Fernsehen wissen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111111
+[X][X] the President [X] ||| [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.414431
+[X][X] the President [X][X] Governor [X] ||| [X][X] dem Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.0897298
+[X][X] the President [X][X] [X] ||| [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0208995 1 ||| ||| 0.581159
+[X][X] the President [X][X] the [X] ||| [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.00693459 1 ||| ||| 0.581159
+[X][X] the President [X][X] of [X] ||| [X][X] dem Präsidentschaftskandidaten [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.040404
+[X][X] the President and [X] ||| [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0165054 1 ||| ||| 0.396662
+[X][X] the President and to [X] ||| [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0113287 1 ||| ||| 0.396662
+[X][X] the President and [X][X] [X] ||| [X][X] dem Präsidentschaftskandidaten und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.130134
+[X][X] do [X][X] suggested . [X] ||| [X][X] dem Vorschlag [X][X] folgen . [X] ||| 0.0278341 1 ||| ||| 0.104278
+[X][X] do [X][X] has suggested [X] ||| [X][X] dem Vorschlag [X][X] folgen [X] ||| 0.013917 1 ||| ||| 0.18
+[X][X] do [X][X] suggested [X] ||| [X][X] dem Vorschlag [X][X] folgen [X] ||| 0.013917 1 ||| ||| 0.18
+[X][X] as Mr [X][X] suggested [X] ||| [X][X] dem Vorschlag von Herrn [X][X] folgen [X] ||| 0.0278341 1 ||| ||| 0.09
+[X][X] as [X][X] suggested . [X] ||| [X][X] dem Vorschlag von [X][X] folgen . [X] ||| 0.0278341 1 ||| ||| 0.104278
+[X][X] as [X][X] has suggested [X] ||| [X][X] dem Vorschlag von [X][X] folgen [X] ||| 0.00927803 1 ||| ||| 0.27
+[X][X] as [X][X] suggested [X] ||| [X][X] dem Vorschlag von [X][X] folgen [X] ||| 0.00927803 1 ||| ||| 0.27
+[X][X] do as [X][X] suggested [X] ||| [X][X] dem Vorschlag von [X][X] folgen [X] ||| 0.00927803 1 ||| ||| 0.27
+[X][X] the [X] ||| [X][X] dem [X] ||| 0.0217999 1 ||| ||| 0.995933
+[X][X] which [X] ||| [X][X] dem [X] ||| 0.00603417 1 ||| ||| 0.995933
+[X][X] do [X][X] . [X] ||| [X][X] dem [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.104278
+[X][X] the [X][X] Governor [X] ||| [X][X] dem [X][X] Gouverneur [X] ||| 0.0139171 1 ||| ||| 0.17946
+[X][X] the [X][X] the Governor [X] ||| [X][X] dem [X][X] Gouverneur [X] ||| 0.0139171 1 ||| ||| 0.17946
+[X][X] the [X][X] Governor of [X] ||| [X][X] dem [X][X] Gouverneur von [X] ||| 0.0278341 1 ||| ||| 0.040404
+[X][X] the [X][X] [X] ||| [X][X] dem [X][X] [X] ||| 0.0166514 1 ||| ||| 1.12261
+[X][X] the [X][X] the [X] ||| [X][X] dem [X][X] [X] ||| 0.00358993 1 ||| ||| 1.12261
+[X][X] the [X][X] to [X] ||| [X][X] dem [X][X] [X] ||| 0.00400288 1 ||| ||| 1.12261
+[X][X] the [X][X] to the [X] ||| [X][X] dem [X][X] [X] ||| 0.00358993 1 ||| ||| 1.12261
+[X][X] the [X][X] of [X] ||| [X][X] dem [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.040404
+[X][X] what [X] ||| [X][X] dem es [X] ||| 0.0278341 1 ||| ||| 0.503968
+[X][X] what [X][X] report [X] ||| [X][X] dem es [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] what [X][X] [X] ||| [X][X] dem es [X][X] [X] ||| 0.0278341 1 ||| ||| 0.280145
+[X][X] what [X][X] a report [X] ||| [X][X] dem es [X][X] einen Bericht [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] what [X][X] a [X] ||| [X][X] dem es [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+[X][X] what is [X] ||| [X][X] dem es sich [X] ||| 0.0278341 1 ||| ||| 0.270833
+[X][X] what is [X][X] report [X] ||| [X][X] dem es sich [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] what is [X][X] [X] ||| [X][X] dem es sich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.119048
+[X][X] what is merely [X] ||| [X][X] dem es sich lediglich um [X] ||| 0.0278341 1 ||| ||| 0.161097
+[X][X] what is merely [X][X] [X] ||| [X][X] dem es sich lediglich um [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] what is merely a [X] ||| [X][X] dem es sich lediglich um einen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+[X][X] which [X] ||| [X][X] dem sich [X] ||| 0.0278341 1 ||| ||| 0.162338
+[X][X] which this [X] ||| [X][X] dem sich dieses [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] the people assassinated very [X] ||| [X][X] den Attentatsopfern , die es in [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] the report . [X] ||| [X][X] den Bericht . [X] ||| 0.0278341 1 ||| ||| 0.212453
+[X][X] the report [X] ||| [X][X] den Bericht [X] ||| 0.0278341 1 ||| ||| 0.342373
+[X][X] the principles that [X] ||| [X][X] den Grundsätzen , die [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] the principles that we [X] ||| [X][X] den Grundsätzen , die wir [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] the principles [X] ||| [X][X] den Grundsätzen [X] ||| 0.0278341 1 ||| ||| 0.5
+[X][X] the principles [X][X] [X] ||| [X][X] den Grundsätzen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] the [X] ||| [X][X] den [X] ||| 0.496472 1 ||| ||| 2.92763
+[X][X] using the [X] ||| [X][X] den [X] ||| 0.00190148 1 ||| ||| 2.92763
+representations [X][X] the [X] ||| [X][X] den [X] ||| 0.00190148 1 ||| ||| 2.92763
+[X][X] the [X][X] prestigious office [X] ||| [X][X] den [X][X] Amtes [X] ||| 0.0278341 1 ||| ||| 0.104278
+[X][X] the [X][X] [X] ||| [X][X] den [X][X] [X] ||| 0.199053 1 ||| ||| 1.51087
+[X][X] using the [X][X] [X] ||| [X][X] den [X][X] [X] ||| 0.00244227 1 ||| ||| 1.51087
+representations [X][X] the [X][X] [X] ||| [X][X] den [X][X] [X] ||| 0.00244227 1 ||| ||| 1.51087
+[X][X] the [X][X] the [X] ||| [X][X] den [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] the [X][X] in [X] ||| [X][X] den [X][X] in [X] ||| 0.0278341 1 ||| ||| 0.0714286
+[X][X] the [X][X] recently [X] ||| [X][X] den [X][X] jüngster Zeit [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] the [X][X] recently in [X] ||| [X][X] den [X][X] jüngster Zeit in [X] ||| 0.0278341 1 ||| ||| 0.0714286
+[X][X] the [X][X] and [X] ||| [X][X] den [X][X] und [X] ||| 0.0149425 1 ||| ||| 0.148903
+[X][X] using the [X][X] and [X] ||| [X][X] den [X][X] und [X] ||| 0.0064458 1 ||| ||| 0.148903
+representations [X][X] the [X][X] and [X] ||| [X][X] den [X][X] und [X] ||| 0.0064458 1 ||| ||| 0.148903
+[X][X] the [X][X] and the [X] ||| [X][X] den [X][X] und der [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] the [X][X] we [X] ||| [X][X] den [X][X] wir [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] the weight of your [X] ||| [X][X] den ganzen Einfluß Ihres [X] ||| 0.0278341 1 ||| ||| 0.12406
+[X][X] the weight [X] ||| [X][X] den ganzen Einfluß [X] ||| 0.0154634 1 ||| ||| 0.5
+[X][X] using the weight [X] ||| [X][X] den ganzen Einfluß [X] ||| 0.00618535 1 ||| ||| 0.5
+representations [X][X] the weight [X] ||| [X][X] den ganzen Einfluß [X] ||| 0.00618535 1 ||| ||| 0.5
+[X][X] the weight [X][X] [X] ||| [X][X] den ganzen Einfluß [X][X] [X] ||| 0.0157186 1 ||| ||| 0.609128
+[X][X] using the weight [X][X] [X] ||| [X][X] den ganzen Einfluß [X][X] [X] ||| 0.00605774 1 ||| ||| 0.609128
+representations [X][X] the weight [X][X] [X] ||| [X][X] den ganzen Einfluß [X][X] [X] ||| 0.00605774 1 ||| ||| 0.609128
+[X][X] the weight [X][X] the [X] ||| [X][X] den ganzen Einfluß [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] the weight [X][X] and [X] ||| [X][X] den ganzen Einfluß [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0799373
+[X][X] feel [X] ||| [X][X] denke , daß [X] ||| 0.0278341 1 ||| ||| 0.678023
+[X][X] feel [X][X] [X] ||| [X][X] denke , daß [X][X] [X] ||| 0.0177742 1 ||| ||| 0.341281
+[X][X] feel [X][X] have [X] ||| [X][X] denke , daß [X][X] [X] ||| 0.00247144 1 ||| ||| 0.341281
+[X][X] feel [X][X] you [X] ||| [X][X] denke , daß [X][X] [X] ||| 0.00511703 1 ||| ||| 0.341281
+[X][X] feel [X][X] you have [X] ||| [X][X] denke , daß [X][X] [X] ||| 0.00247144 1 ||| ||| 0.341281
+[X][X] feel an [X] ||| [X][X] denke , daß eine [X] ||| 0.0278341 1 ||| ||| 0.370331
+[X][X] feel an initiative [X][X] [X] ||| [X][X] denke , daß eine [X][X] Initiative [X] ||| 0.0278341 1 ||| ||| 0.217934
+[X][X] feel an [X][X] [X] ||| [X][X] denke , daß eine [X][X] [X] ||| 0.0195062 1 ||| ||| 0.310978
+[X][X] feel an [X][X] have [X] ||| [X][X] denke , daß eine [X][X] [X] ||| 0.00271227 1 ||| ||| 0.310978
+[X][X] feel an [X][X] you [X] ||| [X][X] denke , daß eine [X][X] [X] ||| 0.00561566 1 ||| ||| 0.310978
+[X][X] of the presentation [X] ||| [X][X] der Aussprache [X] ||| 0.0278341 1 ||| ||| 0.546266
+[X][X] of the presentation [X][X] [X] ||| [X][X] der Aussprache [X][X] [X] ||| 0.0278341 1 ||| ||| 0.380834
+[X][X] of the presentation of [X] ||| [X][X] der Aussprache über [X] ||| 0.0278341 1 ||| ||| 0.341667
+[X][X] of the European Union [X] ||| [X][X] der Europäischen Union [X] ||| 0.0278341 1 ||| ||| 0.189733
+[X][X] of the European [X] ||| [X][X] der Europäischen [X] ||| 0.0278341 1 ||| ||| 0.278822
+[X][X] the case [X] ||| [X][X] der Fall [X] ||| 0.0278341 1 ||| ||| 0.166667
+[X][X] the case [X][X] . [X] ||| [X][X] der Fall [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.025641
+[X][X] the case [X][X] Nikitin [X] ||| [X][X] der Fall [X][X] Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0344828
+[X][X] the case [X][X] [X] ||| [X][X] der Fall [X][X] [X] ||| 0.0278341 1 ||| ||| 0.112755
+[X][X] the case of Alexander [X] ||| [X][X] der Fall von Alexander [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] the case of [X] ||| [X][X] der Fall von [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] the case of [X][X] [X] ||| [X][X] der Fall von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0601238
+[X][X] the principle [X] ||| [X][X] der Grundsatz [X] ||| 0.0278341 1 ||| ||| 0.257576
+[X][X] the principle [X][X] stability [X] ||| [X][X] der Grundsatz [X][X] Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0601238
+[X][X] the principle [X][X] [X] ||| [X][X] der Grundsatz [X][X] [X] ||| 0.0234025 1 ||| ||| 0.296135
+[X][X] the principle [X][X] is [X] ||| [X][X] der Grundsatz [X][X] [X] ||| 0.0044316 1 ||| ||| 0.296135
+[X][X] the principle [X][X] a [X] ||| [X][X] der Grundsatz [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0373573
+[X][X] the principle [X][X] fundamental [X] ||| [X][X] der Grundsatz [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0172414
+[X][X] the principle of [X] ||| [X][X] der Grundsatz der [X] ||| 0.0278341 1 ||| ||| 0.143541
+[X][X] the principle of [X][X] [X] ||| [X][X] der Grundsatz der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.161872
+[X][X] the principle of relative [X] ||| [X][X] der Grundsatz der relativen [X] ||| 0.0278341 1 ||| ||| 0.0871143
+[X][X] the institution [X] ||| [X][X] der Institution , [X] ||| 0.0251407 1 ||| ||| 0.279307
+using [X][X] the institution [X] ||| [X][X] der Institution , [X] ||| 0.00269335 1 ||| ||| 0.279307
+[X][X] the institution [X][X] , [X] ||| [X][X] der Institution , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0421473
+[X][X] the institution [X][X] [X] ||| [X][X] der Institution , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.113984
+[X][X] the institution [X][X] to [X] ||| [X][X] der Institution , [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0169492
+[X][X] the institution you [X] ||| [X][X] der Institution , die Sie [X] ||| 0.0278341 1 ||| ||| 0.114866
+[X][X] the institution you [X][X] [X] ||| [X][X] der Institution , die Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0590964
+[X][X] the institution you represent [X] ||| [X][X] der Institution , die Sie vertreten [X] ||| 0.0278341 1 ||| ||| 0.0548872
+[X][X] the institution [X] ||| [X][X] der Institution , die [X] ||| 0.0251722 1 ||| ||| 0.213394
+using [X][X] the institution [X] ||| [X][X] der Institution , die [X] ||| 0.00266195 1 ||| ||| 0.213394
+[X][X] the institution [X][X] , [X] ||| [X][X] der Institution , die [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0421473
+[X][X] the institution [X][X] [X] ||| [X][X] der Institution , die [X][X] [X] ||| 0.0278341 1 ||| ||| 0.113984
+[X][X] the institution [X][X] to [X] ||| [X][X] der Institution , die [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0169492
+[X][X] the institution [X] ||| [X][X] der Institution [X] ||| 0.0250851 1 ||| ||| 0.405
+using [X][X] the institution [X] ||| [X][X] der Institution [X] ||| 0.00274905 1 ||| ||| 0.405
+[X][X] the institution [X][X] , [X] ||| [X][X] der Institution [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0421473
+[X][X] the institution [X][X] [X] ||| [X][X] der Institution [X][X] [X] ||| 0.0278341 1 ||| ||| 0.113984
+[X][X] the institution [X][X] to [X] ||| [X][X] der Institution [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0169492
+, [X][X] the positions [X] ||| [X][X] der Position , [X] ||| 0.0129892 1 ||| ||| 0.133929
+indeed , [X][X] the positions [X] ||| [X][X] der Position , [X] ||| 0.0148449 1 ||| ||| 0.133929
+, [X][X] the positions [X] ||| [X][X] der Position , die [X] ||| 0.0154634 1 ||| ||| 0.1125
+indeed , [X][X] the positions [X] ||| [X][X] der Position , die [X] ||| 0.0123707 1 ||| ||| 0.1125
+[X][X] the positions [X] ||| [X][X] der Position [X] ||| 0.0278341 1 ||| ||| 0.58259
+[X][X] requested [X] ||| [X][X] der Wunsch [X] ||| 0.0278341 1 ||| ||| 0.416667
+[X][X] requested [X][X] [X] ||| [X][X] der Wunsch [X][X] [X] ||| 0.0278341 1 ||| ||| 0.130779
+[X][X] requested [X][X] on [X] ||| [X][X] der Wunsch [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0462963
+[X][X] requested [X] ||| [X][X] der Wunsch nach [X] ||| 0.0278341 1 ||| ||| 0.342857
+[X][X] requested [X][X] [X] ||| [X][X] der Wunsch nach [X][X] [X] ||| 0.0278341 1 ||| ||| 0.130779
+[X][X] requested [X][X] on [X] ||| [X][X] der Wunsch nach [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0462963
+[X][X] requested a debate [X] ||| [X][X] der Wunsch nach einer Aussprache [X] ||| 0.0278341 1 ||| ||| 0.0844828
+[X][X] requested a debate on [X] ||| [X][X] der Wunsch nach einer Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.0462963
+[X][X] requested a [X] ||| [X][X] der Wunsch nach einer [X] ||| 0.0278341 1 ||| ||| 0.171429
+[X][X] requested a [X][X] [X] ||| [X][X] der Wunsch nach einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0462963
+[X][X] , access [X] ||| [X][X] der Zugang [X] ||| 0.013917 1 ||| ||| 0.517482
+[X][X] access [X] ||| [X][X] der Zugang [X] ||| 0.013917 1 ||| ||| 0.517482
+[X][X] , access [X][X] [X] ||| [X][X] der Zugang [X][X] [X] ||| 0.013917 1 ||| ||| 0.195238
+[X][X] access [X][X] [X] ||| [X][X] der Zugang [X][X] [X] ||| 0.013917 1 ||| ||| 0.195238
+[X][X] access to environmental information [X] ||| [X][X] der Zugang zu Umweltinformationen [X] ||| 0.0278341 1 ||| ||| 0.097619
+[X][X] , access to [X] ||| [X][X] der Zugang zu [X] ||| 0.013917 1 ||| ||| 0.271494
+[X][X] access to [X] ||| [X][X] der Zugang zu [X] ||| 0.013917 1 ||| ||| 0.271494
+[X][X] , access to [X][X] [X] ||| [X][X] der Zugang zu [X][X] [X] ||| 0.013917 1 ||| ||| 0.195238
+[X][X] access to [X][X] [X] ||| [X][X] der Zugang zu [X][X] [X] ||| 0.013917 1 ||| ||| 0.195238
+[X][X] of [X] ||| [X][X] der [X] ||| 0.0343837 1 ||| ||| 8.02917
+[X][X] of the [X] ||| [X][X] der [X] ||| 0.155526 1 ||| ||| 8.02917
+[X][X] the [X] ||| [X][X] der [X] ||| 0.456058 1 ||| ||| 8.02917
+[X][X] who [X] ||| [X][X] der [X] ||| 0.00261097 1 ||| ||| 8.02917
+is [X][X] of the [X] ||| [X][X] der [X] ||| 0.000315148 1 ||| ||| 8.02917
+the [X][X] who [X] ||| [X][X] der [X] ||| 0.00019259 1 ||| ||| 8.02917
+to [X][X] who [X] ||| [X][X] der [X] ||| 0.000173331 1 ||| ||| 8.02917
+to the [X][X] who [X] ||| [X][X] der [X] ||| 0.000173331 1 ||| ||| 8.02917
+using [X][X] the [X] ||| [X][X] der [X] ||| 0.000182454 1 ||| ||| 8.02917
+[X][X] the [X][X] , [X] ||| [X][X] der [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0421473
+[X][X] the [X][X] , to [X] ||| [X][X] der [X][X] , bei [X] ||| 0.0278341 1 ||| ||| 0.0169492
+[X][X] of the [X][X] . [X] ||| [X][X] der [X][X] . [X] ||| 0.020666 1 ||| ||| 0.0995657
+[X][X] the [X][X] . [X] ||| [X][X] der [X][X] . [X] ||| 0.00716807 1 ||| ||| 0.0995657
+[X][X] the [X][X] Alexander Nikitin [X] ||| [X][X] der [X][X] Alexander Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0344828
+[X][X] the [X][X] Alexander [X] ||| [X][X] der [X][X] Alexander [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] of the [X][X] report [X] ||| [X][X] der [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.104278
+[X][X] the [X][X] European Community [X] ||| [X][X] der [X][X] Europäischen Union [X] ||| 0.0278341 1 ||| ||| 0.0689755
+[X][X] the [X][X] European [X] ||| [X][X] der [X][X] Europäischen [X] ||| 0.013917 1 ||| ||| 0.181587
+[X][X] the [X][X] the European [X] ||| [X][X] der [X][X] Europäischen [X] ||| 0.013917 1 ||| ||| 0.181587
+[X][X] the [X][X] Nikitin . [X] ||| [X][X] der [X][X] Nikitin . [X] ||| 0.0278341 1 ||| ||| 0.025641
+[X][X] the [X][X] Nikitin [X] ||| [X][X] der [X][X] Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0344828
+[X][X] of [X][X] legal principle [X] ||| [X][X] der [X][X] Rechtsgrundsatz [X] ||| 0.0278341 1 ||| ||| 0.0243902
+[X][X] the [X][X] stability [X] ||| [X][X] der [X][X] Stabilität [X] ||| 0.0156003 1 ||| ||| 0.107273
+[X][X] the [X][X] stability is [X] ||| [X][X] der [X][X] Stabilität [X] ||| 0.0122338 1 ||| ||| 0.107273
+[X][X] the [X][X] Community [X] ||| [X][X] der [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0689755
+[X][X] of the [X][X] proposal [X] ||| [X][X] der [X][X] Vorschlag [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] of [X][X] [X] ||| [X][X] der [X][X] [X] ||| 0.00458089 1 ||| ||| 4.08247
+[X][X] of [X][X] is [X] ||| [X][X] der [X][X] [X] ||| 0.000943735 1 ||| ||| 4.08247
+[X][X] of the [X][X] [X] ||| [X][X] der [X][X] [X] ||| 0.0943099 1 ||| ||| 4.08247
+[X][X] the [X][X] [X] ||| [X][X] der [X][X] [X] ||| 0.0822025 1 ||| ||| 4.08247
+[X][X] the [X][X] is [X] ||| [X][X] der [X][X] [X] ||| 0.000321461 1 ||| ||| 4.08247
+[X][X] the [X][X] the [X] ||| [X][X] der [X][X] [X] ||| 0.00125845 1 ||| ||| 4.08247
+is [X][X] of the [X][X] [X] ||| [X][X] der [X][X] [X] ||| 0.000378776 1 ||| ||| 4.08247
+[X][X] the [X][X] to [X] ||| [X][X] der [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0169492
+[X][X] of the [X][X] the [X] ||| [X][X] der [X][X] den [X] ||| 0.0278341 1 ||| ||| 0.202632
+[X][X] of the [X][X] a [X] ||| [X][X] der [X][X] ein [X] ||| 0.0278341 1 ||| ||| 0.1125
+[X][X] of [X][X] a [X] ||| [X][X] der [X][X] einen [X] ||| 0.0100613 1 ||| ||| 0.269677
+[X][X] of [X][X] is a [X] ||| [X][X] der [X][X] einen [X] ||| 0.0100613 1 ||| ||| 0.269677
+[X][X] the [X][X] a [X] ||| [X][X] der [X][X] einen [X] ||| 0.00385575 1 ||| ||| 0.269677
+[X][X] the [X][X] is a [X] ||| [X][X] der [X][X] einen [X] ||| 0.00385575 1 ||| ||| 0.269677
+[X][X] of [X][X] a fundamental [X] ||| [X][X] der [X][X] einen elementaren [X] ||| 0.0219553 1 ||| ||| 0.0816319
+[X][X] the [X][X] a fundamental [X] ||| [X][X] der [X][X] einen elementaren [X] ||| 0.00587881 1 ||| ||| 0.0816319
+[X][X] of [X][X] fundamental [X] ||| [X][X] der [X][X] elementaren [X] ||| 0.0219553 1 ||| ||| 0.0816319
+[X][X] the [X][X] fundamental [X] ||| [X][X] der [X][X] elementaren [X] ||| 0.00587881 1 ||| ||| 0.0816319
+[X][X] the [X][X] relative stability [X] ||| [X][X] der [X][X] relativen Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0601238
+[X][X] the [X][X] relative [X] ||| [X][X] der [X][X] relativen [X] ||| 0.0278341 1 ||| ||| 0.0871143
+[X][X] of the [X][X] and [X] ||| [X][X] der [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.195833
+done [X][X] of [X][X] [X] ||| [X][X] der [X][X] verhängt [X] ||| 0.0278341 1 ||| ||| 0.0666667
+be done [X][X] of [X][X] [X] ||| [X][X] der [X][X] verhängt werden [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] the [X][X] represent , [X] ||| [X][X] der [X][X] vertreten , [X] ||| 0.0278341 1 ||| ||| 0.0421473
+[X][X] the [X][X] represent [X] ||| [X][X] der [X][X] vertreten [X] ||| 0.0278341 1 ||| ||| 0.0548872
+[X][X] of the common [X] ||| [X][X] der gemeinsamen [X] ||| 0.0248422 1 ||| ||| 0.664503
+is [X][X] of the common [X] ||| [X][X] der gemeinsamen [X] ||| 0.00299194 1 ||| ||| 0.664503
+[X][X] of the common [X][X] [X] ||| [X][X] der gemeinsamen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.682576
+[X][X] the whole [X] ||| [X][X] der gesamten [X] ||| 0.0128177 1 ||| ||| 0.751182
+[X][X] the whole of [X] ||| [X][X] der gesamten [X] ||| 0.00817709 1 ||| ||| 0.751182
+[X][X] the whole of the [X] ||| [X][X] der gesamten [X] ||| 0.0068393 1 ||| ||| 0.751182
+[X][X] the whole [X][X] Community [X] ||| [X][X] der gesamten [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0689755
+[X][X] the whole [X][X] [X] ||| [X][X] der gesamten [X][X] [X] ||| 0.013917 1 ||| ||| 0.319538
+[X][X] the whole of [X][X] [X] ||| [X][X] der gesamten [X][X] [X] ||| 0.013917 1 ||| ||| 0.319538
+[X][X] of relative stability [X] ||| [X][X] der relativen Stabilität [X] ||| 0.0199005 1 ||| ||| 0.485624
+[X][X] of relative stability is [X] ||| [X][X] der relativen Stabilität [X] ||| 0.00793364 1 ||| ||| 0.485624
+[X][X] of relative stability [X][X] [X] ||| [X][X] der relativen Stabilität [X][X] [X] ||| 0.0278341 1 ||| ||| 0.186262
+done [X][X] of relative stability [X] ||| [X][X] der relativen Stabilität verhängt [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] of relative [X] ||| [X][X] der relativen [X] ||| 0.0278341 1 ||| ||| 0.602266
+[X][X] of relative [X][X] [X] ||| [X][X] der relativen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.324681
+[X][X] of relative [X][X] a [X] ||| [X][X] der relativen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0974811
+[X][X] of relative [X][X] fundamental [X] ||| [X][X] der relativen [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0643905
+[X][X] initiative of the type [X] ||| [X][X] derartige Initiative [X] ||| 0.0278341 1 ||| ||| 0.326813
+[X][X] of the European Parliament [X] ||| [X][X] des Europäischen Parlaments [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] of the European [X] ||| [X][X] des Europäischen [X] ||| 0.0205093 1 ||| ||| 0.422222
+with [X][X] of the European [X] ||| [X][X] des Europäischen [X] ||| 0.00732476 1 ||| ||| 0.422222
+[X][X] the condemned person [X] ||| [X][X] des Verurteilten [X] ||| 0.0278341 1 ||| ||| 0.263095
+[X][X] of [X] ||| [X][X] des [X] ||| 0.104374 1 ||| ||| 2.38645
+[X][X] of the [X] ||| [X][X] des [X] ||| 0.00583169 1 ||| ||| 2.38645
+[X][X] the [X] ||| [X][X] des [X] ||| 0.00802481 1 ||| ||| 2.38645
+with [X][X] of the [X] ||| [X][X] des [X] ||| 0.0019439 1 ||| ||| 2.38645
+[X][X] of the [X][X] [X] ||| [X][X] des [X][X] [X] ||| 0.00896498 1 ||| ||| 0.388095
+[X][X] the [X][X] [X] ||| [X][X] des [X][X] [X] ||| 0.0188691 1 ||| ||| 0.388095
+[X][X] made it clear that [X] ||| [X][X] deutlich gemacht hat , daß [X] ||| 0.0278341 1 ||| ||| 0.249921
+[X][X] made it clear [X] ||| [X][X] deutlich gemacht hat [X] ||| 0.0231172 1 ||| ||| 0.421499
+have [X][X] made it clear [X] ||| [X][X] deutlich gemacht hat [X] ||| 0.00471686 1 ||| ||| 0.421499
+[X][X] you [X] ||| [X][X] die Sie [X] ||| 0.0278341 1 ||| ||| 0.414866
+[X][X] you [X][X] President [X] ||| [X][X] die Sie [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0163934
+[X][X] you [X][X] [X] ||| [X][X] die Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.241197
+[X][X] you [X][X] to [X] ||| [X][X] die Sie [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0661201
+[X][X] you [X][X] to the [X] ||| [X][X] die Sie [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0353335
+[X][X] you [X][X] the President [X] ||| [X][X] die Sie [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0163934
+[X][X] you [X][X] the [X] ||| [X][X] die Sie [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0353335
+[X][X] you represent , [X] ||| [X][X] die Sie vertreten , [X] ||| 0.0278341 1 ||| ||| 0.12335
+[X][X] you represent , [X][X] [X] ||| [X][X] die Sie vertreten , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.051727
+[X][X] you represent , to [X] ||| [X][X] die Sie vertreten , bei [X] ||| 0.0278341 1 ||| ||| 0.0661201
+[X][X] you represent [X] ||| [X][X] die Sie vertreten [X] ||| 0.0278341 1 ||| ||| 0.207519
+[X][X] you represent [X][X] President [X] ||| [X][X] die Sie vertreten [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0163934
+[X][X] you represent [X][X] [X] ||| [X][X] die Sie vertreten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.117847
+[X][X] you represent [X][X] the [X] ||| [X][X] die Sie vertreten [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0353335
+[X][X] which [X] ||| [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.938034
+[X][X] which [X][X] [X] ||| [X][X] die [X][X] [X] ||| 0.0278341 1 ||| ||| 0.121429
+[X][X] which [X] ||| [X][X] die von [X] ||| 0.0278341 1 ||| ||| 0.5
+[X][X] which [X][X] [X] ||| [X][X] die von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.121429
+[X][X] which many [X] ||| [X][X] die von vielen [X] ||| 0.0189341 1 ||| ||| 0.379762
+[X][X] which many people [X] ||| [X][X] die von vielen [X] ||| 0.00889996 1 ||| ||| 0.379762
+[X][X] raise this question , [X] ||| [X][X] diese Frage ansprechen , [X] ||| 0.0278341 1 ||| ||| 0.286406
+[X][X] raise this question [X] ||| [X][X] diese Frage ansprechen [X] ||| 0.0278341 1 ||| ||| 0.401544
+[X][X] raise this question [X][X] [X] ||| [X][X] diese Frage ansprechen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.375872
+[X][X] a [X] ||| [X][X] dieser [X] ||| 0.0278341 1 ||| ||| 0.892857
+[X][X] a [X][X] situation [X] ||| [X][X] dieser [X][X] Situation [X] ||| 0.0278341 1 ||| ||| 0.16406
+[X][X] a [X][X] [X] ||| [X][X] dieser [X][X] [X] ||| 0.0278341 1 ||| ||| 0.431217
+[X][X] a very [X] ||| [X][X] dieser sehr [X] ||| 0.0278341 1 ||| ||| 0.483766
+[X][X] a very [X][X] [X] ||| [X][X] dieser sehr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.16406
+[X][X] a very difficult situation [X] ||| [X][X] dieser sehr schwierigen Situation [X] ||| 0.0278341 1 ||| ||| 0.16406
+[X][X] a very difficult [X] ||| [X][X] dieser sehr schwierigen [X] ||| 0.0278341 1 ||| ||| 0.267157
+[X][X] this Parliament [X] ||| [X][X] dieses Parlament [X] ||| 0.0278341 1 ||| ||| 0.215909
+[X][X] this Parliament [X][X] . [X] ||| [X][X] dieses Parlament [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.025641
+[X][X] this Parliament [X][X] [X] ||| [X][X] dieses Parlament [X][X] [X] ||| 0.0188309 1 ||| ||| 0.287185
+[X][X] this Parliament [X][X] an [X] ||| [X][X] dieses Parlament [X][X] [X] ||| 0.00487539 1 ||| ||| 0.287185
+[X][X] this Parliament [X][X] interest [X] ||| [X][X] dieses Parlament [X][X] [X] ||| 0.00412786 1 ||| ||| 0.287185
+[X][X] this Parliament has [X][X] [X] ||| [X][X] dieses Parlament [X][X] hat [X] ||| 0.0278341 1 ||| ||| 0.168651
+[X][X] this [X] ||| [X][X] dieses [X] ||| 0.0278341 1 ||| ||| 0.516667
+[X][X] this [X][X] . [X] ||| [X][X] dieses [X][X] . [X] ||| 0.013917 1 ||| ||| 0.051282
+[X][X] this [X][X] interest . [X] ||| [X][X] dieses [X][X] . [X] ||| 0.013917 1 ||| ||| 0.051282
+[X][X] this [X][X] [X] ||| [X][X] dieses [X][X] [X] ||| 0.0163989 1 ||| ||| 0.329775
+[X][X] this [X][X] an [X] ||| [X][X] dieses [X][X] [X] ||| 0.00424573 1 ||| ||| 0.329775
+[X][X] this [X][X] an interest [X] ||| [X][X] dieses [X][X] [X] ||| 0.00359475 1 ||| ||| 0.329775
+[X][X] this [X][X] interest [X] ||| [X][X] dieses [X][X] [X] ||| 0.00359475 1 ||| ||| 0.329775
+[X][X] a proposal [X] ||| [X][X] ein Vorschlag [X] ||| 0.0278341 1 ||| ||| 0.317157
+[X][X] a proposal [X][X] [X] ||| [X][X] ein Vorschlag [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0454545
+[X][X] a proposal [X][X] [X] ||| [X][X] ein Vorschlag [X][X] [X] ||| 0.0278341 1 ||| ||| 0.187611
+[X][X] a [X] ||| [X][X] ein [X] ||| 0.0278341 1 ||| ||| 0.58228
+[X][X] a [X][X] [X] ||| [X][X] ein [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0454545
+[X][X] a [X][X] [X] ||| [X][X] ein [X][X] [X] ||| 0.0278341 1 ||| ||| 0.187611
+[X][X] something that [X] ||| [X][X] eine Angelegenheit , die [X] ||| 0.0187718 1 ||| ||| 0.477778
+[X][X] to something that [X] ||| [X][X] eine Angelegenheit , die [X] ||| 0.00906229 1 ||| ||| 0.477778
+[X][X] something [X] ||| [X][X] eine Angelegenheit [X] ||| 0.0193845 1 ||| ||| 0.848485
+[X][X] to something [X] ||| [X][X] eine Angelegenheit [X] ||| 0.00844964 1 ||| ||| 0.848485
+[X][X] advice [X] ||| [X][X] eine Auskunft [X] ||| 0.0278341 1 ||| ||| 0.333333
+[X][X] advice [X][X] 143 [X] ||| [X][X] eine Auskunft [X][X] 143 [X] ||| 0.0278341 1 ||| ||| 0.0714286
+[X][X] advice [X][X] [X] ||| [X][X] eine Auskunft [X][X] [X] ||| 0.0278341 1 ||| ||| 0.196429
+[X][X] advice about Rule 143 [X] ||| [X][X] eine Auskunft zu Artikel 143 [X] ||| 0.0278341 1 ||| ||| 0.0714286
+[X][X] advice about Rule [X] ||| [X][X] eine Auskunft zu Artikel [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] advice about [X] ||| [X][X] eine Auskunft zu [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] advice about [X][X] [X] ||| [X][X] eine Auskunft zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0714286
+a petition [X][X] [X] ||| [X][X] eine Petition [X] ||| 0.0278341 1 ||| ||| 0.2
+a petition [X][X] presented , [X] ||| [X][X] eine Petition eingereicht , [X] ||| 0.0278341 1 ||| ||| 0.2
+a petition [X][X] presented [X] ||| [X][X] eine Petition eingereicht [X] ||| 0.0278341 1 ||| ||| 0.2
+a petition [X][X] presented [X][X] [X] ||| [X][X] eine Petition eingereicht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.411111
+a petition [X][X] presented [X][X] [X] ||| [X][X] eine Petition eingereicht [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.111111
+[X][X] an [X] ||| [X][X] eine [X] ||| 0.0278341 1 ||| ||| 0.703664
+[X][X] an initiative [X][X] [X] ||| [X][X] eine [X][X] Initiative [X] ||| 0.0109863 1 ||| ||| 1.09609
+[X][X] an initiative [X][X] have [X] ||| [X][X] eine [X][X] Initiative [X] ||| 0.0018736 1 ||| ||| 1.09609
+[X][X] an initiative [X][X] just [X] ||| [X][X] eine [X][X] Initiative [X] ||| 0.00105808 1 ||| ||| 1.09609
+[X][X] an initiative [X][X] you [X] ||| [X][X] eine [X][X] Initiative [X] ||| 0.00292978 1 ||| ||| 1.09609
+[X][X] an initiative of [X][X] [X] ||| [X][X] eine [X][X] Initiative [X] ||| 0.0109863 1 ||| ||| 1.09609
+[X][X] an [X][X] [X] ||| [X][X] eine [X][X] [X] ||| 0.0154602 1 ||| ||| 0.778903
+[X][X] an [X][X] have [X] ||| [X][X] eine [X][X] [X] ||| 0.00263657 1 ||| ||| 0.778903
+[X][X] an [X][X] have just [X] ||| [X][X] eine [X][X] [X] ||| 0.00148896 1 ||| ||| 0.778903
+[X][X] an [X][X] just [X] ||| [X][X] eine [X][X] [X] ||| 0.00148896 1 ||| ||| 0.778903
+[X][X] an [X][X] you [X] ||| [X][X] eine [X][X] [X] ||| 0.00412285 1 ||| ||| 0.778903
+[X][X] an [X][X] you have [X] ||| [X][X] eine [X][X] [X] ||| 0.00263657 1 ||| ||| 0.778903
+[X][X] an [X][X] the type [X] ||| [X][X] eine derartige [X][X] [X] ||| 0.0278341 1 ||| ||| 0.201813
+[X][X] a report [X] ||| [X][X] einen Bericht [X] ||| 0.0278341 1 ||| ||| 0.345922
+[X][X] a report [X][X] [X] ||| [X][X] einen Bericht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.185829
+[X][X] a report , [X] ||| [X][X] einen Bericht und [X] ||| 0.0278341 1 ||| ||| 0.178023
+[X][X] a report , [X][X] [X] ||| [X][X] einen Bericht und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.185829
+visited [X][X] [X] ||| [X][X] einen Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited [X][X] [X] ||| [X][X] einen Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] an objection [X] ||| [X][X] einen Einwand gegen [X] ||| 0.0187244 1 ||| ||| 0.206782
+[X][X] raise an objection [X] ||| [X][X] einen Einwand gegen [X] ||| 0.00910971 1 ||| ||| 0.206782
+[X][X] a [X] ||| [X][X] einen [X] ||| 0.149959 1 ||| ||| 2.27843
+[X][X] an [X] ||| [X][X] einen [X] ||| 0.00365476 1 ||| ||| 2.27843
+[X][X] is a [X] ||| [X][X] einen [X] ||| 0.00498045 1 ||| ||| 2.27843
+[X][X] raise an [X] ||| [X][X] einen [X] ||| 0.00190957 1 ||| ||| 2.27843
+[X][X] a [X][X] legislative proposal [X] ||| [X][X] einen [X][X] Legislativvorschlag [X] ||| 0.0278341 1 ||| ||| 0.0739247
+[X][X] a [X][X] [X] ||| [X][X] einen [X][X] [X] ||| 0.0211267 1 ||| ||| 1.04153
+[X][X] is a [X][X] [X] ||| [X][X] einen [X][X] [X] ||| 0.00670737 1 ||| ||| 1.04153
+[X][X] a [X][X] of the [X] ||| [X][X] einen [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.135635
+[X][X] a [X][X] common [X] ||| [X][X] einen [X][X] gemeinsamen [X] ||| 0.0195591 1 ||| ||| 0.112121
+[X][X] is a [X][X] common [X] ||| [X][X] einen [X][X] gemeinsamen [X] ||| 0.00827499 1 ||| ||| 0.112121
+[X][X] a [X][X] not a [X] ||| [X][X] einen [X][X] keinen [X] ||| 0.0278341 1 ||| ||| 0.111905
+[X][X] a fundamental legal principle [X] ||| [X][X] einen elementaren Rechtsgrundsatz [X] ||| 0.0278341 1 ||| ||| 0.212268
+[X][X] a fundamental [X] ||| [X][X] einen elementaren [X] ||| 0.0173382 1 ||| ||| 0.677987
+[X][X] is a fundamental [X] ||| [X][X] einen elementaren [X] ||| 0.0104959 1 ||| ||| 0.677987
+[X][X] a fundamental [X][X] [X] ||| [X][X] einen elementaren [X][X] [X] ||| 0.0175254 1 ||| ||| 0.677675
+[X][X] is a fundamental [X][X] [X] ||| [X][X] einen elementaren [X][X] [X] ||| 0.0103086 1 ||| ||| 0.677675
+[X][X] a fundamental [X][X] common [X] ||| [X][X] einen elementaren [X][X] gemeinsamen [X] ||| 0.0278341 1 ||| ||| 0.0787879
+[X][X] a debate [X] ||| [X][X] einer Aussprache [X] ||| 0.0278341 1 ||| ||| 0.184483
+[X][X] a debate on [X] ||| [X][X] einer Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.101852
+[X][X] a [X] ||| [X][X] einer [X] ||| 0.241419 1 ||| ||| 1.3881
+[X][X] a [X][X] ) [X] ||| [X][X] einer [X][X] ) [X] ||| 0.0278341 1 ||| ||| 0.291667
+[X][X] a [X][X] [X] ||| [X][X] einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.986376
+[X][X] of a [X] ||| [X][X] eines [X] ||| 0.241419 1 ||| ||| 1.075
+[X][X] of a [X][X] , [X] ||| [X][X] eines [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.128706
+[X][X] of a [X][X] Mr [X] ||| [X][X] eines [X][X] Herrn [X] ||| 0.0278341 1 ||| ||| 0.0739247
+[X][X] of a [X][X] Zimeray [X] ||| [X][X] eines [X][X] Zimeray [X] ||| 0.0278341 1 ||| ||| 0.053802
+[X][X] of a [X][X] [X] ||| [X][X] eines [X][X] [X] ||| 0.0278341 1 ||| ||| 0.415256
+[X][X] of a French Member [X] ||| [X][X] eines französischen Mitglieds [X] ||| 0.0278341 1 ||| ||| 0.158824
+[X][X] of a French [X] ||| [X][X] eines französischen [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] of a French [X][X] [X] ||| [X][X] eines französischen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.256432
+[X][X] presented , [X] ||| [X][X] eingereicht , [X] ||| 0.0278341 1 ||| ||| 0.601923
+[X][X] presented , [X][X] [X] ||| [X][X] eingereicht , [X][X] [X] ||| 0.0218696 1 ||| ||| 0.233333
+[X][X] presented , [X][X] people [X] ||| [X][X] eingereicht , [X][X] [X] ||| 0.00596446 1 ||| ||| 0.233333
+[X][X] presented , which [X] ||| [X][X] eingereicht , die [X] ||| 0.0278341 1 ||| ||| 0.354701
+[X][X] presented , which [X][X] [X] ||| [X][X] eingereicht , die [X][X] [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] presented , which [X] ||| [X][X] eingereicht , die von [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] presented , which [X][X] [X] ||| [X][X] eingereicht , die von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] presented , which many [X] ||| [X][X] eingereicht , die von vielen [X] ||| 0.0278341 1 ||| ||| 0.133333
+[X][X] presented [X] ||| [X][X] eingereicht [X] ||| 0.0278341 1 ||| ||| 0.72549
+[X][X] presented [X][X] [X] ||| [X][X] eingereicht [X][X] [X] ||| 0.0261734 1 ||| ||| 0.838034
+[X][X] presented [X][X] people [X] ||| [X][X] eingereicht [X][X] [X] ||| 0.00166068 1 ||| ||| 0.838034
+[X][X] presented [X][X] many [X] ||| [X][X] eingereicht [X][X] vielen [X] ||| 0.020243 1 ||| ||| 0.183333
+[X][X] presented [X][X] many people [X] ||| [X][X] eingereicht [X][X] vielen [X] ||| 0.00759113 1 ||| ||| 0.183333
+[X][X] presented [X][X] [X] ||| [X][X] eingereicht [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] presented [X][X] many [X] ||| [X][X] eingereicht [X][X] von vielen [X] ||| 0.020243 1 ||| ||| 0.183333
+[X][X] presented [X][X] many people [X] ||| [X][X] eingereicht [X][X] von vielen [X] ||| 0.00759113 1 ||| ||| 0.183333
+a number of Members [X][X] [X] ||| [X][X] einiger Kolleginnen und Kollegen - [X] ||| 0.0278341 1 ||| ||| 0.047619
+a number of Members [X][X] [X] ||| [X][X] einiger Kolleginnen und Kollegen [X] ||| 0.0278341 1 ||| ||| 0.0769231
+[X][X] fundamental legal principle [X] ||| [X][X] elementaren Rechtsgrundsatz [X] ||| 0.0278341 1 ||| ||| 0.355125
+[X][X] fundamental legal principle [X][X] [X] ||| [X][X] elementaren Rechtsgrundsatz [X][X] [X] ||| 0.0278341 1 ||| ||| 0.432316
+[X][X] fundamental [X] ||| [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.922327
+[X][X] fundamental [X][X] fisheries policy [X] ||| [X][X] elementaren [X][X] Fischereipolitik darstellt [X] ||| 0.0278341 1 ||| ||| 0.0555556
+[X][X] fundamental [X][X] [X] ||| [X][X] elementaren [X][X] [X] ||| 0.0278341 1 ||| ||| 0.787441
+[X][X] fundamental [X][X] of the [X] ||| [X][X] elementaren [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.226544
+[X][X] fundamental [X][X] common [X] ||| [X][X] elementaren [X][X] gemeinsamen [X] ||| 0.0278341 1 ||| ||| 0.150216
+[X][X] he [X] ||| [X][X] er [X] ||| 0.0278341 1 ||| ||| 0.375
+[X][X] rose and observed [X] ||| [X][X] erhebt sich zu [X] ||| 0.0278341 1 ||| ||| 0.392857
+[X][X] rose and observed [X][X] [X] ||| [X][X] erhebt sich zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] rose and observed a [X] ||| [X][X] erhebt sich zu einer [X] ||| 0.0278341 1 ||| ||| 0.266667
+[X][X] just [X] ||| [X][X] erst [X] ||| 0.0278341 1 ||| ||| 0.5
+visited [X][X] just [X][X] [X] ||| [X][X] erst [X][X] Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited [X][X] just [X][X] [X] ||| [X][X] erst [X][X] Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] just [X][X] months ago [X] ||| [X][X] erst [X][X] Monaten [X] ||| 0.0278341 1 ||| ||| 0.0955556
+[X][X] just [X][X] months ago [X] ||| [X][X] erst [X][X] Monaten einen [X] ||| 0.0278341 1 ||| ||| 0.0582923
+[X][X] just [X][X] [X] ||| [X][X] erst [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2848
+visited [X][X] just [X][X] [X] ||| [X][X] erst [X][X] einen Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited [X][X] just [X][X] [X] ||| [X][X] erst [X][X] einen Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] just [X][X] [X] ||| [X][X] erst [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0582923
+[X][X] just [X] ||| [X][X] erst vor [X] ||| 0.0278341 1 ||| ||| 0.375
+visited [X][X] just [X][X] [X] ||| [X][X] erst vor [X][X] Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited [X][X] just [X][X] [X] ||| [X][X] erst vor [X][X] Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] just [X][X] months ago [X] ||| [X][X] erst vor [X][X] Monaten [X] ||| 0.0278341 1 ||| ||| 0.0955556
+[X][X] just [X][X] months ago [X] ||| [X][X] erst vor [X][X] Monaten einen [X] ||| 0.0278341 1 ||| ||| 0.0582923
+[X][X] just [X][X] [X] ||| [X][X] erst vor [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2848
+visited [X][X] just [X][X] [X] ||| [X][X] erst vor [X][X] einen Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited [X][X] just [X][X] [X] ||| [X][X] erst vor [X][X] einen Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] just [X][X] [X] ||| [X][X] erst vor [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0582923
+[X][X] just a few [X] ||| [X][X] erst vor wenigen [X] ||| 0.0278341 1 ||| ||| 0.130952
+[X][X] just a few [X][X] [X] ||| [X][X] erst vor wenigen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.153848
+[X][X] just a few [X][X] [X] ||| [X][X] erst vor wenigen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0582923
+[X][X] one [X] ||| [X][X] es [X] ||| 0.0278341 1 ||| ||| 0.416667
+[X][X] one [X][X] [X] ||| [X][X] es [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0679825
+[X][X] one [X][X] an [X] ||| [X][X] es [X][X] , einen [X] ||| 0.0278341 1 ||| ||| 0.0448842
+[X][X] one [X][X] [X] ||| [X][X] es [X][X] [X] ||| 0.0278341 1 ||| ||| 0.371227
+[X][X] one [X][X] an [X] ||| [X][X] es [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0448842
+[X][X] one [X][X] [X] ||| [X][X] es [X][X] ist , [X] ||| 0.0278341 1 ||| ||| 0.0679825
+[X][X] one [X][X] an [X] ||| [X][X] es [X][X] ist , einen [X] ||| 0.0278341 1 ||| ||| 0.0448842
+[X][X] one [X][X] [X] ||| [X][X] es [X][X] ist [X] ||| 0.0278341 1 ||| ||| 0.0958606
+[X][X] one can [X] ||| [X][X] es möglich [X] ||| 0.0166759 1 ||| ||| 0.405357
+[X][X] one can raise [X] ||| [X][X] es möglich [X] ||| 0.0111582 1 ||| ||| 0.405357
+[X][X] one can [X][X] [X] ||| [X][X] es möglich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0448842
+[X][X] one can [X] ||| [X][X] es möglich ist , [X] ||| 0.0183947 1 ||| ||| 0.200462
+[X][X] one can raise [X] ||| [X][X] es möglich ist , [X] ||| 0.00943938 1 ||| ||| 0.200462
+[X][X] one can [X][X] [X] ||| [X][X] es möglich ist , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0448842
+[X][X] one can raise an [X] ||| [X][X] es möglich ist , einen [X] ||| 0.0278341 1 ||| ||| 0.0448842
+[X][X] one can [X] ||| [X][X] es möglich ist [X] ||| 0.0178517 1 ||| ||| 0.26729
+[X][X] one can raise [X] ||| [X][X] es möglich ist [X] ||| 0.00998241 1 ||| ||| 0.26729
+[X][X] one can [X][X] [X] ||| [X][X] es möglich ist [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0448842
+[X][X] French Member , Mr [X] ||| [X][X] französischen Mitglieds , Herrn [X] ||| 0.0278341 1 ||| ||| 0.197985
+[X][X] French Member , [X] ||| [X][X] französischen Mitglieds , [X] ||| 0.0232174 1 ||| ||| 0.376812
+the [X][X] French Member , [X] ||| [X][X] französischen Mitglieds , [X] ||| 0.00461671 1 ||| ||| 0.376812
+[X][X] French Member , [X][X] [X] ||| [X][X] französischen Mitglieds , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.222604
+[X][X] French Member [X] ||| [X][X] französischen Mitglieds [X] ||| 0.023563 1 ||| ||| 0.651681
+the [X][X] French Member [X] ||| [X][X] französischen Mitglieds [X] ||| 0.00427112 1 ||| ||| 0.651681
+[X][X] French Member [X][X] , [X] ||| [X][X] französischen Mitglieds [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0854686
+[X][X] French Member [X][X] Zimeray [X] ||| [X][X] französischen Mitglieds [X][X] Zimeray [X] ||| 0.0278341 1 ||| ||| 0.137135
+[X][X] French Member [X][X] [X] ||| [X][X] französischen Mitglieds [X][X] [X] ||| 0.0227582 1 ||| ||| 0.514395
+the [X][X] French Member [X][X] [X] ||| [X][X] französischen Mitglieds [X][X] [X] ||| 0.00507586 1 ||| ||| 0.514395
+[X][X] French [X] ||| [X][X] französischen [X] ||| 0.0238578 1 ||| ||| 1.16667
+the [X][X] French [X] ||| [X][X] französischen [X] ||| 0.00397631 1 ||| ||| 1.16667
+[X][X] French [X][X] , [X] ||| [X][X] französischen [X][X] , [X] ||| 0.0219874 1 ||| ||| 0.108196
+the [X][X] French [X][X] , [X] ||| [X][X] französischen [X][X] , [X] ||| 0.00584675 1 ||| ||| 0.108196
+[X][X] French [X][X] Mr Zimeray [X] ||| [X][X] französischen [X][X] Herrn Zimeray [X] ||| 0.0278341 1 ||| ||| 0.137135
+[X][X] French [X][X] Mr [X] ||| [X][X] französischen [X][X] Herrn [X] ||| 0.0229948 1 ||| ||| 0.239652
+the [X][X] French [X][X] Mr [X] ||| [X][X] französischen [X][X] Herrn [X] ||| 0.00483934 1 ||| ||| 0.239652
+[X][X] French [X][X] Zimeray , [X] ||| [X][X] französischen [X][X] Zimeray , [X] ||| 0.0278341 1 ||| ||| 0.0854686
+[X][X] French [X][X] Zimeray [X] ||| [X][X] französischen [X][X] Zimeray [X] ||| 0.0229187 1 ||| ||| 0.166547
+the [X][X] French [X][X] Zimeray [X] ||| [X][X] französischen [X][X] Zimeray [X] ||| 0.00491544 1 ||| ||| 0.166547
+[X][X] French [X][X] [X] ||| [X][X] französischen [X][X] [X] ||| 0.0229524 1 ||| ||| 0.891206
+the [X][X] French [X][X] [X] ||| [X][X] französischen [X][X] [X] ||| 0.00488174 1 ||| ||| 0.891206
+Thursday [X][X] for [X] ||| [X][X] für Donnerstag [X] ||| 0.0119289 1 ||| ||| 0.583333
+next Thursday [X][X] for [X] ||| [X][X] für Donnerstag [X] ||| 0.0159052 1 ||| ||| 0.583333
+[X][X] for [X] ||| [X][X] für [X] ||| 0.0278341 1 ||| ||| 0.242857
+[X][X] was [X] ||| [X][X] gab , [X] ||| 0.0278341 1 ||| ||| 0.297619
+[X][X] was [X] ||| [X][X] gab , zählt [X] ||| 0.0278341 1 ||| ||| 0.254286
+[X][X] was Mr [X] ||| [X][X] gab , zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 0.0982143
+[X][X] was [X] ||| [X][X] gab , zählt auch [X] ||| 0.0278341 1 ||| ||| 0.1875
+[X][X] was [X] ||| [X][X] gab [X] ||| 0.0278341 1 ||| ||| 0.358824
+[X][X] there have been [X] ||| [X][X] gab es [X] ||| 0.0278341 1 ||| ||| 0.111111
+[X][X] quite [X] ||| [X][X] ganz [X] ||| 0.0278341 1 ||| ||| 0.333333
+, [X][X] quite [X][X] [X] ||| [X][X] ganz [X][X] , [X] ||| 0.0129892 1 ||| ||| 0.133929
+indeed , [X][X] quite [X][X] [X] ||| [X][X] ganz [X][X] , [X] ||| 0.0148449 1 ||| ||| 0.133929
+, [X][X] quite [X][X] [X] ||| [X][X] ganz [X][X] , die [X] ||| 0.0154634 1 ||| ||| 0.1125
+indeed , [X][X] quite [X][X] [X] ||| [X][X] ganz [X][X] , die [X] ||| 0.0123707 1 ||| ||| 0.1125
+, [X][X] quite [X][X] positions [X] ||| [X][X] ganz [X][X] Position , [X] ||| 0.0278341 1 ||| ||| 0.0625
+, [X][X] quite [X][X] positions [X] ||| [X][X] ganz [X][X] Position , die [X] ||| 0.0278341 1 ||| ||| 0.0625
+[X][X] quite [X][X] positions [X] ||| [X][X] ganz [X][X] Position [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] quite [X][X] [X] ||| [X][X] ganz [X][X] [X] ||| 0.0278341 1 ||| ||| 0.16406
+[X][X] quite [X][X] the positions [X] ||| [X][X] ganz [X][X] der Position [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] quite [X][X] the [X] ||| [X][X] ganz [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] quite in keeping with [X] ||| [X][X] ganz im Sinne [X] ||| 0.0278341 1 ||| ||| 0.0714286
+[X][X] quite in [X] ||| [X][X] ganz im [X] ||| 0.0278341 1 ||| ||| 0.166667
+, [X][X] quite in [X][X] [X] ||| [X][X] ganz im [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0625
+, [X][X] quite in [X][X] [X] ||| [X][X] ganz im [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.0625
+[X][X] quite in [X][X] positions [X] ||| [X][X] ganz im [X][X] Position [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] quite in [X][X] [X] ||| [X][X] ganz im [X][X] [X] ||| 0.0278341 1 ||| ||| 0.16406
+[X][X] quite in [X][X] the [X] ||| [X][X] ganz im [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] weight of your [X] ||| [X][X] ganzen Einfluß Ihres [X] ||| 0.0232497 1 ||| ||| 0.319549
+representations [X][X] weight of your [X] ||| [X][X] ganzen Einfluß Ihres [X] ||| 0.00458445 1 ||| ||| 0.319549
+[X][X] weight of your [X][X] [X] ||| [X][X] ganzen Einfluß Ihres [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.027027
+[X][X] weight of your [X][X] [X] ||| [X][X] ganzen Einfluß Ihres [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.0204082
+[X][X] weight of your [X][X] [X] ||| [X][X] ganzen Einfluß Ihres [X][X] [X] ||| 0.0278341 1 ||| ||| 0.522334
+[X][X] weight of your [X][X] [X] ||| [X][X] ganzen Einfluß Ihres [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.0204082
+[X][X] weight [X] ||| [X][X] ganzen Einfluß [X] ||| 0.0243548 1 ||| ||| 0.888889
+representations [X][X] weight [X] ||| [X][X] ganzen Einfluß [X] ||| 0.00347926 1 ||| ||| 0.888889
+[X][X] weight [X][X] [X] ||| [X][X] ganzen Einfluß [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.027027
+[X][X] weight [X][X] [X] ||| [X][X] ganzen Einfluß [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.0204082
+[X][X] weight [X][X] prestigious office [X] ||| [X][X] ganzen Einfluß [X][X] Amtes [X] ||| 0.0278341 1 ||| ||| 0.195187
+[X][X] weight [X][X] institution [X] ||| [X][X] ganzen Einfluß [X][X] Institution , [X] ||| 0.0278341 1 ||| ||| 0.027027
+[X][X] weight [X][X] institution [X] ||| [X][X] ganzen Einfluß [X][X] Institution , die [X] ||| 0.0278341 1 ||| ||| 0.0204082
+[X][X] weight [X][X] institution [X] ||| [X][X] ganzen Einfluß [X][X] Institution [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] weight [X][X] [X] ||| [X][X] ganzen Einfluß [X][X] [X] ||| 0.0238312 1 ||| ||| 0.92182
+representations [X][X] weight [X][X] [X] ||| [X][X] ganzen Einfluß [X][X] [X] ||| 0.00400288 1 ||| ||| 0.92182
+[X][X] weight [X][X] the institution [X] ||| [X][X] ganzen Einfluß [X][X] der Institution , [X] ||| 0.0278341 1 ||| ||| 0.027027
+[X][X] weight [X][X] the institution [X] ||| [X][X] ganzen Einfluß [X][X] der Institution , die [X] ||| 0.0278341 1 ||| ||| 0.0204082
+[X][X] weight [X][X] the institution [X] ||| [X][X] ganzen Einfluß [X][X] der Institution [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] weight [X][X] the [X] ||| [X][X] ganzen Einfluß [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0883459
+[X][X] weight [X][X] [X] ||| [X][X] ganzen Einfluß [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.0204082
+[X][X] weight [X][X] and [X] ||| [X][X] ganzen Einfluß [X][X] und [X] ||| 0.0226697 1 ||| ||| 0.185849
+representations [X][X] weight [X][X] and [X] ||| [X][X] ganzen Einfluß [X][X] und [X] ||| 0.0051644 1 ||| ||| 0.185849
+[X][X] weight [X][X] and the [X] ||| [X][X] ganzen Einfluß [X][X] und der [X] ||| 0.0278341 1 ||| ||| 0.0883459
+made [X][X] that [X] ||| [X][X] gemacht hat , daß [X] ||| 0.0278341 1 ||| ||| 0.333333
+made [X][X] that [X][X] , [X] ||| [X][X] gemacht hat , daß [X][X] [X] ||| 0.00652593 1 ||| ||| 0.328089
+made [X][X] that [X][X] [X] ||| [X][X] gemacht hat , daß [X][X] [X] ||| 0.0213082 1 ||| ||| 0.328089
+made [X][X] that [X][X] access [X] ||| [X][X] gemacht hat , daß [X][X] der Zugang [X] ||| 0.0278341 1 ||| ||| 0.0909091
+made [X][X] that [X][X] too [X] ||| [X][X] gemacht hat , daß auch [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0833333
+made [X][X] [X] ||| [X][X] gemacht hat [X] ||| 0.0278341 1 ||| ||| 0.5
+[X][X] common fisheries policy [X] ||| [X][X] gemeinsamen Fischereipolitik darstellt [X] ||| 0.0250044 1 ||| ||| 0.546465
+is [X][X] common fisheries policy [X] ||| [X][X] gemeinsamen Fischereipolitik darstellt [X] ||| 0.00282972 1 ||| ||| 0.546465
+[X][X] common fisheries policy [X][X] [X] ||| [X][X] gemeinsamen Fischereipolitik darstellt [X][X] [X] ||| 0.0278341 1 ||| ||| 0.298247
+[X][X] common fisheries policy and [X] ||| [X][X] gemeinsamen Fischereipolitik darstellt und [X] ||| 0.0278341 1 ||| ||| 0.306944
+[X][X] common [X] ||| [X][X] gemeinsamen [X] ||| 0.226611 1 ||| ||| 1.1645
+is [X][X] common [X] ||| [X][X] gemeinsamen [X] ||| 0.0017073 1 ||| ||| 1.1645
+[X][X] common [X][X] proposal [X] ||| [X][X] gemeinsamen [X][X] Vorschlag [X] ||| 0.0278341 1 ||| ||| 0.108824
+[X][X] common [X][X] [X] ||| [X][X] gemeinsamen [X][X] [X] ||| 0.229773 1 ||| ||| 1.15166
+is [X][X] common [X][X] [X] ||| [X][X] gemeinsamen [X][X] [X] ||| 0.00134271 1 ||| ||| 1.15166
+[X][X] common [X][X] a proposal [X] ||| [X][X] gemeinsamen [X][X] ein Vorschlag [X] ||| 0.0278341 1 ||| ||| 0.108824
+[X][X] common [X][X] a [X] ||| [X][X] gemeinsamen [X][X] ein [X] ||| 0.0278341 1 ||| ||| 0.189423
+[X][X] common [X][X] and [X] ||| [X][X] gemeinsamen [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.306944
+[X][X] common [X][X] and a [X] ||| [X][X] gemeinsamen [X][X] und ein [X] ||| 0.0278341 1 ||| ||| 0.189423
+indeed [X][X] specifically [X] ||| [X][X] gerade [X] ||| 0.0278341 1 ||| ||| 0.5
+[X][X] whole of the European [X] ||| [X][X] gesamten Europäischen [X] ||| 0.0278341 1 ||| ||| 0.153294
+[X][X] whole [X] ||| [X][X] gesamten [X] ||| 0.0132456 1 ||| ||| 1.42737
+[X][X] whole of [X] ||| [X][X] gesamten [X] ||| 0.0082034 1 ||| ||| 1.42737
+[X][X] whole of the [X] ||| [X][X] gesamten [X] ||| 0.00638506 1 ||| ||| 1.42737
+[X][X] whole [X][X] Community [X] ||| [X][X] gesamten [X][X] Union [X] ||| 0.013917 1 ||| ||| 0.21795
+[X][X] whole of [X][X] Community [X] ||| [X][X] gesamten [X][X] Union [X] ||| 0.013917 1 ||| ||| 0.21795
+[X][X] whole [X][X] [X] ||| [X][X] gesamten [X][X] [X] ||| 0.0115231 1 ||| ||| 0.633513
+[X][X] whole of [X][X] [X] ||| [X][X] gesamten [X][X] [X] ||| 0.0115231 1 ||| ||| 0.633513
+[X][X] whole of the [X][X] [X] ||| [X][X] gesamten [X][X] [X] ||| 0.00478794 1 ||| ||| 0.633513
+have [X][X] . [X] ||| [X][X] haben . [X] ||| 0.0278341 1 ||| ||| 0.333333
+have [X][X] [X] ||| [X][X] haben [X] ||| 0.0278341 1 ||| ||| 0.5
+has [X][X] . [X] ||| [X][X] hat . [X] ||| 0.00927803 1 ||| ||| 0.333333
+has [X][X] an interest . [X] ||| [X][X] hat . [X] ||| 0.00927803 1 ||| ||| 0.333333
+has [X][X] interest . [X] ||| [X][X] hat . [X] ||| 0.00927803 1 ||| ||| 0.333333
+has [X][X] [X] ||| [X][X] hat [X] ||| 0.136454 1 ||| ||| 1.91666
+has [X][X] an [X] ||| [X][X] hat [X] ||| 0.00484072 1 ||| ||| 1.91666
+has [X][X] an interest [X] ||| [X][X] hat [X] ||| 0.00363054 1 ||| ||| 1.91666
+has [X][X] interest [X] ||| [X][X] hat [X] ||| 0.00363054 1 ||| ||| 1.91666
+has [X][X] an [X][X] [X] ||| [X][X] hat [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111111
+[X][X] here [X] ||| [X][X] hier [X] ||| 0.0278341 1 ||| ||| 0.5
+all [X][X] here [X] ||| [X][X] hier alle [X] ||| 0.0278341 1 ||| ||| 0.2
+I [X][X] [X] ||| [X][X] ich [X] ||| 0.00649255 1 ||| ||| 2.14354
+[X][X] I [X] ||| [X][X] ich [X] ||| 0.185106 1 ||| ||| 2.14354
+[X][X] I [X][X] [X] ||| [X][X] ich [X][X] Sie [X] ||| 0.0278341 1 ||| ||| 0.201923
+[X][X] I [X][X] [X] ||| [X][X] ich [X][X] [X] ||| 0.0269562 1 ||| ||| 0.8569
+[X][X] I [X][X] you [X] ||| [X][X] ich [X][X] [X] ||| 0.0008779 1 ||| ||| 0.8569
+I [X][X] as [X][X] suggested [X] ||| [X][X] ich dem Vorschlag von [X][X] folgen [X] ||| 0.0278341 1 ||| ||| 0.05
+I [X][X] [X] ||| [X][X] ich dem [X] ||| 0.0278341 1 ||| ||| 0.5
+[X][X] I feel [X] ||| [X][X] ich denke , daß [X] ||| 0.0278341 1 ||| ||| 0.34469
+[X][X] I feel [X][X] [X] ||| [X][X] ich denke , daß [X][X] [X] ||| 0.0218784 1 ||| ||| 0.126312
+[X][X] I feel [X][X] you [X] ||| [X][X] ich denke , daß [X][X] [X] ||| 0.00595566 1 ||| ||| 0.126312
+[X][X] I feel an [X] ||| [X][X] ich denke , daß eine [X] ||| 0.0278341 1 ||| ||| 0.203664
+[X][X] I feel an [X][X] [X] ||| [X][X] ich denke , daß eine [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0992851
+[X][X] I should like to [X] ||| [X][X] ich möchte Sie [X] ||| 0.0278341 1 ||| ||| 0.201923
+[X][X] I should like to [X] ||| [X][X] ich möchte [X] ||| 0.0278341 1 ||| ||| 0.325
+[X][X] acquitted him [X] ||| [X][X] ihn freigesprochen [X] ||| 0.0186886 1 ||| ||| 0.583334
+[X][X] have acquitted him [X] ||| [X][X] ihn freigesprochen [X] ||| 0.00914549 1 ||| ||| 0.583334
+[X][X] acquitted him [X][X] that [X] ||| [X][X] ihn freigesprochen [X][X] , daß [X] ||| 0.0278341 1 ||| ||| 0.0910973
+[X][X] acquitted him [X][X] [X] ||| [X][X] ihn freigesprochen [X][X] [X] ||| 0.0176341 1 ||| ||| 0.386303
+[X][X] have acquitted him [X][X] [X] ||| [X][X] ihn freigesprochen [X][X] [X] ||| 0.0102 1 ||| ||| 0.386303
+[X][X] acquitted him and [X] ||| [X][X] ihn freigesprochen und [X] ||| 0.0182998 1 ||| ||| 0.39693
+[X][X] have acquitted him and [X] ||| [X][X] ihn freigesprochen und [X] ||| 0.00953433 1 ||| ||| 0.39693
+[X][X] acquitted him and [X][X] [X] ||| [X][X] ihn freigesprochen und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.244739
+[X][X] in keeping with [X] ||| [X][X] im Sinne [X] ||| 0.0278341 1 ||| ||| 0.196429
+[X][X] in keeping with [X][X] [X] ||| [X][X] im Sinne [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0988235
+[X][X] in keeping with the [X] ||| [X][X] im Sinne der [X] ||| 0.0278341 1 ||| ||| 0.135965
+[X][X] concerning inadmissibility . [X] ||| [X][X] im Zusammenhang mit der Unzulässigkeit geben ? [X] ||| 0.0278341 1 ||| ||| 0.143541
+[X][X] concerning inadmissibility [X] ||| [X][X] im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0278341 1 ||| ||| 0.310207
+[X][X] concerning [X] ||| [X][X] im Zusammenhang mit der [X] ||| 0.0278341 1 ||| ||| 0.657576
+[X][X] concerning [X][X] [X] ||| [X][X] im Zusammenhang mit der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.143541
+[X][X] in [X] ||| [X][X] im [X] ||| 0.00986895 1 ||| ||| 1.41018
+[X][X] on [X] ||| [X][X] im [X] ||| 0.0179651 1 ||| ||| 1.41018
+, [X][X] in [X][X] [X] ||| [X][X] im [X][X] , [X] ||| 0.0129892 1 ||| ||| 0.133929
+indeed , [X][X] in [X][X] [X] ||| [X][X] im [X][X] , [X] ||| 0.0148449 1 ||| ||| 0.133929
+, [X][X] in [X][X] [X] ||| [X][X] im [X][X] , die [X] ||| 0.0154634 1 ||| ||| 0.1125
+indeed , [X][X] in [X][X] [X] ||| [X][X] im [X][X] , die [X] ||| 0.0123707 1 ||| ||| 0.1125
+, [X][X] in [X][X] positions [X] ||| [X][X] im [X][X] Position , [X] ||| 0.0278341 1 ||| ||| 0.0625
+, [X][X] in [X][X] positions [X] ||| [X][X] im [X][X] Position , die [X] ||| 0.0278341 1 ||| ||| 0.0625
+[X][X] in [X][X] positions [X] ||| [X][X] im [X][X] Position [X] ||| 0.0278341 1 ||| ||| 0.0988235
+[X][X] in [X][X] [X] ||| [X][X] im [X][X] [X] ||| 0.0278341 1 ||| ||| 0.431217
+[X][X] in [X][X] the positions [X] ||| [X][X] im [X][X] der Position [X] ||| 0.0278341 1 ||| ||| 0.0988235
+[X][X] in [X][X] the [X] ||| [X][X] im [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.135965
+[X][X] always [X] ||| [X][X] immer [X] ||| 0.013917 1 ||| ||| 0.833334
+[X][X] has always [X] ||| [X][X] immer [X] ||| 0.013917 1 ||| ||| 0.833334
+[X][X] always [X][X] [X] ||| [X][X] immer [X][X] [X] ||| 0.013917 1 ||| ||| 0.253846
+[X][X] has always [X][X] [X] ||| [X][X] immer [X][X] [X] ||| 0.013917 1 ||| ||| 0.253846
+[X][X] always adopted . [X] ||| [X][X] immer vertreten haben . [X] ||| 0.013917 1 ||| ||| 0.253846
+[X][X] has always adopted . [X] ||| [X][X] immer vertreten haben . [X] ||| 0.013917 1 ||| ||| 0.253846
+[X][X] always adopted [X] ||| [X][X] immer vertreten haben [X] ||| 0.013917 1 ||| ||| 0.485714
+[X][X] has always adopted [X] ||| [X][X] immer vertreten haben [X] ||| 0.013917 1 ||| ||| 0.485714
+[X][X] has consistently shown [X] ||| [X][X] immer wieder befaßt hat [X] ||| 0.0166508 1 ||| ||| 0.733601
+[X][X] has consistently shown an [X] ||| [X][X] immer wieder befaßt hat [X] ||| 0.0111833 1 ||| ||| 0.733601
+[X][X] has consistently shown [X][X] [X] ||| [X][X] immer wieder befaßt hat [X][X] [X] ||| 0.0278341 1 ||| ||| 0.16931
+[X][X] is appealing . [X] ||| [X][X] in Berufung geht . [X] ||| 0.0278341 1 ||| ||| 0.32803
+[X][X] is appealing [X] ||| [X][X] in Berufung geht [X] ||| 0.0278341 1 ||| ||| 0.457479
+in Russia , [X][X] [X] ||| [X][X] in Rußland [X] ||| 0.00632593 1 ||| ||| 0.628571
+in Russia [X][X] , [X] ||| [X][X] in Rußland [X] ||| 0.00632593 1 ||| ||| 0.628571
+in Russia [X][X] [X] ||| [X][X] in Rußland [X] ||| 0.0151822 1 ||| ||| 0.628571
+in Russia [X][X] , [X][X] [X] ||| [X][X] in Rußland [X][X] [X] ||| 0.0278341 1 ||| ||| 0.108824
+in Russia , [X][X] access [X] ||| [X][X] in Rußland der Zugang [X] ||| 0.00927803 1 ||| ||| 0.230769
+in Russia [X][X] , access [X] ||| [X][X] in Rußland der Zugang [X] ||| 0.00927803 1 ||| ||| 0.230769
+in Russia [X][X] access [X] ||| [X][X] in Rußland der Zugang [X] ||| 0.00927803 1 ||| ||| 0.230769
+in Russia [X][X] access [X][X] [X] ||| [X][X] in Rußland der Zugang [X][X] [X] ||| 0.0278341 1 ||| ||| 0.05
+in Russia [X][X] access to [X] ||| [X][X] in Rußland der Zugang zu [X] ||| 0.0278341 1 ||| ||| 0.0588235
+[X][X] in Sri Lanka [X] ||| [X][X] in Sri Lanka [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] in Sri [X] ||| [X][X] in Sri [X] ||| 0.0224369 1 ||| ||| 0.396703
+of [X][X] in Sri [X] ||| [X][X] in Sri [X] ||| 0.0053972 1 ||| ||| 0.396703
+[X][X] in [X] ||| [X][X] in [X] ||| 0.224056 1 ||| ||| 1.7381
+of [X][X] in [X] ||| [X][X] in [X] ||| 0.00200177 1 ||| ||| 1.7381
+[X][X] in [X][X] [X] ||| [X][X] in [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0909091
+to [X][X] the [X][X] [X] ||| [X][X] in [X][X] das [X] ||| 0.013917 1 ||| ||| 0.614664
+to [X][X] to the [X][X] [X] ||| [X][X] in [X][X] das [X] ||| 0.013917 1 ||| ||| 0.614664
+her to do [X][X] possibly [X] ||| [X][X] in ihrem Kräften stehende zu tun [X] ||| 0.0278341 1 ||| ||| 0.783333
+[X][X] an objection [X] ||| [X][X] ist , einen Einwand gegen [X] ||| 0.0187244 1 ||| ||| 0.206782
+[X][X] raise an objection [X] ||| [X][X] ist , einen Einwand gegen [X] ||| 0.00910971 1 ||| ||| 0.206782
+[X][X] an [X] ||| [X][X] ist , einen [X] ||| 0.018282 1 ||| ||| 0.455483
+[X][X] raise an [X] ||| [X][X] ist , einen [X] ||| 0.00955213 1 ||| ||| 0.455483
+[X][X] . [X] ||| [X][X] ist . [X] ||| 0.00823661 1 ||| ||| 0.544445
+is [X][X] . [X] ||| [X][X] ist . [X] ||| 0.00852065 1 ||| ||| 0.544445
+is a [X][X] . [X] ||| [X][X] ist . [X] ||| 0.00852065 1 ||| ||| 0.544445
+people [X][X] . [X] ||| [X][X] ist . [X] ||| 0.00255619 1 ||| ||| 0.544445
+is [X][X] [X] ||| [X][X] ist [X] ||| 0.0222162 1 ||| ||| 0.990909
+is a [X][X] [X] ||| [X][X] ist [X] ||| 0.00561789 1 ||| ||| 0.990909
+[X][X] annually [X] ||| [X][X] jährlich [X] ||| 0.0278341 1 ||| ||| 0.65
+[X][X] recently [X] ||| [X][X] jüngster Zeit [X] ||| 0.202792 1 ||| ||| 1.25
+of [X][X] recently [X] ||| [X][X] jüngster Zeit [X] ||| 0.00445346 1 ||| ||| 1.25
+[X][X] recently [X][X] Lanka [X] ||| [X][X] jüngster Zeit [X][X] Lanka [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] recently [X][X] [X] ||| [X][X] jüngster Zeit [X][X] [X] ||| 0.0234431 1 ||| ||| 0.487612
+of [X][X] recently [X][X] [X] ||| [X][X] jüngster Zeit [X][X] [X] ||| 0.00439096 1 ||| ||| 0.487612
+[X][X] recently in Sri Lanka [X] ||| [X][X] jüngster Zeit in Sri Lanka [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] recently in Sri [X] ||| [X][X] jüngster Zeit in Sri [X] ||| 0.0224369 1 ||| ||| 0.396703
+of [X][X] recently in Sri [X] ||| [X][X] jüngster Zeit in Sri [X] ||| 0.0053972 1 ||| ||| 0.396703
+[X][X] recently in [X] ||| [X][X] jüngster Zeit in [X] ||| 0.0231203 1 ||| ||| 0.738095
+of [X][X] recently in [X] ||| [X][X] jüngster Zeit in [X] ||| 0.00471384 1 ||| ||| 0.738095
+[X][X] recently in [X][X] [X] ||| [X][X] jüngster Zeit in [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] not a legislative proposal [X] ||| [X][X] keinen Legislativvorschlag [X] ||| 0.0278341 1 ||| ||| 0.341082
+[X][X] not a [X] ||| [X][X] keinen [X] ||| 0.0278341 1 ||| ||| 0.558333
+[X][X] not a [X][X] [X] ||| [X][X] keinen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.341082
+[X][X] is a constitutional right [X] ||| [X][X] konstitutionelles Recht ist [X] ||| 0.0278341 1 ||| ||| 0.354701
+[X][X] you may , [X] ||| [X][X] können Sie , [X] ||| 0.0206356 1 ||| ||| 0.644445
+the [X][X] you may , [X] ||| [X][X] können Sie , [X] ||| 0.00719848 1 ||| ||| 0.644445
+[X][X] you may , [X][X] [X] ||| [X][X] können Sie , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.336204
+[X][X] you may , if [X] ||| [X][X] können Sie , wenn [X] ||| 0.0278341 1 ||| ||| 0.319444
+[X][X] you may [X] ||| [X][X] können Sie [X] ||| 0.0207059 1 ||| ||| 0.976191
+the [X][X] you may [X] ||| [X][X] können Sie [X] ||| 0.00712824 1 ||| ||| 0.976191
+[X][X] you may [X][X] , [X] ||| [X][X] können Sie [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.075
+[X][X] you may [X][X] you [X] ||| [X][X] können Sie [X][X] Sie [X] ||| 0.0278341 1 ||| ||| 0.154762
+[X][X] you may [X][X] [X] ||| [X][X] können Sie [X][X] [X] ||| 0.0198548 1 ||| ||| 0.919141
+the [X][X] you may [X][X] [X] ||| [X][X] können Sie [X][X] [X] ||| 0.00797926 1 ||| ||| 0.919141
+[X][X] you may [X][X] wish [X] ||| [X][X] können Sie [X][X] wollen [X] ||| 0.0278341 1 ||| ||| 0.106443
+[X][X] merely [X] ||| [X][X] lediglich um [X] ||| 0.0278341 1 ||| ||| 0.661097
+[X][X] merely [X][X] legislative proposal [X] ||| [X][X] lediglich um [X][X] Legislativvorschlag [X] ||| 0.0278341 1 ||| ||| 0.0322581
+[X][X] merely [X][X] [X] ||| [X][X] lediglich um [X][X] [X] ||| 0.0278341 1 ||| ||| 0.362913
+[X][X] merely [X][X] not a [X] ||| [X][X] lediglich um [X][X] keinen [X] ||| 0.0278341 1 ||| ||| 0.0642857
+[X][X] merely [X][X] , [X] ||| [X][X] lediglich um [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0871143
+[X][X] merely a report [X] ||| [X][X] lediglich um einen Bericht [X] ||| 0.0278341 1 ||| ||| 0.179255
+[X][X] merely a report [X][X] [X] ||| [X][X] lediglich um einen Bericht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0965438
+[X][X] merely a report , [X] ||| [X][X] lediglich um einen Bericht und [X] ||| 0.0278341 1 ||| ||| 0.0871143
+[X][X] merely a [X] ||| [X][X] lediglich um einen [X] ||| 0.0278341 1 ||| ||| 0.340909
+[X][X] merely a [X][X] [X] ||| [X][X] lediglich um einen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.183658
+[X][X] make [X] ||| [X][X] machen [X] ||| 0.0177126 1 ||| ||| 0.392857
+[X][X] make representations [X] ||| [X][X] machen [X] ||| 0.0101215 1 ||| ||| 0.392857
+a number [X][X] killings [X][X] [X] ||| [X][X] mehrere [X][X] Toten [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] multiannual guidance programmes [X] ||| [X][X] mehrjährige Ausrichtungsprogramme [X] ||| 0.0157323 1 ||| ||| 0.176923
+[X][X] multiannual guidance programmes comes [X] ||| [X][X] mehrjährige Ausrichtungsprogramme [X] ||| 0.0121018 1 ||| ||| 0.176923
+[X][X] multiannual guidance programmes [X][X] [X] ||| [X][X] mehrjährige Ausrichtungsprogramme [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] multiannual guidance programmes [X][X] [X] ||| [X][X] mehrjährige Ausrichtungsprogramme [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0285714
+[X][X] multiannual guidance programmes [X][X] [X] ||| [X][X] mehrjährige Ausrichtungsprogramme [X][X] [X] ||| 0.0278341 1 ||| ||| 0.11824
+[X][X] multiannual guidance programmes [X][X] [X] ||| [X][X] mehrjährige Ausrichtungsprogramme [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0285714
+[X][X] multiannual [X] ||| [X][X] mehrjährige [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] multiannual [X][X] [X] ||| [X][X] mehrjährige [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] multiannual [X][X] [X] ||| [X][X] mehrjährige [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0285714
+[X][X] multiannual [X][X] [X] ||| [X][X] mehrjährige [X][X] [X] ||| 0.0220798 1 ||| ||| 0.372086
+[X][X] multiannual [X][X] comes [X] ||| [X][X] mehrjährige [X][X] [X] ||| 0.00575427 1 ||| ||| 0.372086
+[X][X] multiannual [X][X] before [X] ||| [X][X] mehrjährige [X][X] befassen , [X] ||| 0.013917 1 ||| ||| 0.074074
+[X][X] multiannual [X][X] comes before [X] ||| [X][X] mehrjährige [X][X] befassen , [X] ||| 0.013917 1 ||| ||| 0.074074
+[X][X] multiannual [X][X] before [X] ||| [X][X] mehrjährige [X][X] befassen , der [X] ||| 0.013917 1 ||| ||| 0.0571428
+[X][X] multiannual [X][X] comes before [X] ||| [X][X] mehrjährige [X][X] befassen , der [X] ||| 0.013917 1 ||| ||| 0.0571428
+[X][X] multiannual [X][X] before [X] ||| [X][X] mehrjährige [X][X] befassen [X] ||| 0.013917 1 ||| ||| 0.105263
+[X][X] multiannual [X][X] comes before [X] ||| [X][X] mehrjährige [X][X] befassen [X] ||| 0.013917 1 ||| ||| 0.105263
+[X][X] multiannual [X][X] [X] ||| [X][X] mehrjährige [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0285714
+[X][X] myself [X] ||| [X][X] mir selbst , [X] ||| 0.0278341 1 ||| ||| 0.2
+people signed [X][X] myself [X] ||| [X][X] mir selbst , unterzeichnet worden [X] ||| 0.0102547 1 ||| ||| 0.22619
+signed [X][X] myself [X] ||| [X][X] mir selbst , unterzeichnet worden [X] ||| 0.0175794 1 ||| ||| 0.22619
+people signed [X][X] myself . [X] ||| [X][X] mir selbst , unterzeichnet worden ist . [X] ||| 0.00863818 1 ||| ||| 0.161111
+signed [X][X] myself . [X] ||| [X][X] mir selbst , unterzeichnet worden ist . [X] ||| 0.0191959 1 ||| ||| 0.161111
+people signed [X][X] myself [X] ||| [X][X] mir selbst , unterzeichnet worden ist [X] ||| 0.00811828 1 ||| ||| 0.20168
+signed [X][X] myself [X] ||| [X][X] mir selbst , unterzeichnet worden ist [X] ||| 0.0197158 1 ||| ||| 0.20168
+[X][X] myself [X] ||| [X][X] mir selbst [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] and contains [X] ||| [X][X] mit [X] ||| 0.0197227 1 ||| ||| 1.2623
+[X][X] in [X] ||| [X][X] mit [X] ||| 0.00811135 1 ||| ||| 1.2623
+[X][X] in [X][X] [X] ||| [X][X] mit [X][X] [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] in which [X] ||| [X][X] mit dem [X] ||| 0.0278341 1 ||| ||| 0.215909
+[X][X] in which [X] ||| [X][X] mit dem sich [X] ||| 0.0278341 1 ||| ||| 0.162338
+[X][X] in which this [X] ||| [X][X] mit dem sich dieses [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] should like to [X] ||| [X][X] möchte Sie [X] ||| 0.0278341 1 ||| ||| 0.201923
+[X][X] should like to [X] ||| [X][X] möchte [X] ||| 0.0278341 1 ||| ||| 0.325
+[X][X] can [X] ||| [X][X] möglich [X] ||| 0.0170852 1 ||| ||| 0.938691
+[X][X] can raise [X] ||| [X][X] möglich [X] ||| 0.0107489 1 ||| ||| 0.938691
+[X][X] can [X][X] objection [X] ||| [X][X] möglich [X][X] Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0222222
+[X][X] can [X][X] [X] ||| [X][X] möglich [X][X] [X] ||| 0.0230514 1 ||| ||| 0.129328
+[X][X] can raise [X][X] [X] ||| [X][X] möglich [X][X] [X] ||| 0.00478268 1 ||| ||| 0.129328
+[X][X] can [X] ||| [X][X] möglich ist , [X] ||| 0.0188335 1 ||| ||| 0.491371
+[X][X] can raise [X] ||| [X][X] möglich ist , [X] ||| 0.00900056 1 ||| ||| 0.491371
+[X][X] can [X][X] objection [X] ||| [X][X] möglich ist , [X][X] Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0222222
+[X][X] can [X][X] [X] ||| [X][X] möglich ist , [X][X] [X] ||| 0.0230514 1 ||| ||| 0.129328
+[X][X] can raise [X][X] [X] ||| [X][X] möglich ist , [X][X] [X] ||| 0.00478268 1 ||| ||| 0.129328
+[X][X] can raise an objection [X] ||| [X][X] möglich ist , einen Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0222222
+[X][X] can raise an [X] ||| [X][X] möglich ist , einen [X] ||| 0.0278341 1 ||| ||| 0.0848842
+[X][X] can [X] ||| [X][X] möglich ist [X] ||| 0.0182629 1 ||| ||| 0.64229
+[X][X] can raise [X] ||| [X][X] möglich ist [X] ||| 0.00957117 1 ||| ||| 0.64229
+[X][X] can [X][X] objection [X] ||| [X][X] möglich ist [X][X] Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0222222
+[X][X] can [X][X] [X] ||| [X][X] möglich ist [X][X] [X] ||| 0.0230514 1 ||| ||| 0.129328
+[X][X] can raise [X][X] [X] ||| [X][X] möglich ist [X][X] [X] ||| 0.00478268 1 ||| ||| 0.129328
+[X][X] a debate [X] ||| [X][X] nach einer Aussprache [X] ||| 0.0278341 1 ||| ||| 0.184483
+[X][X] a debate on [X] ||| [X][X] nach einer Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.101852
+[X][X] a [X] ||| [X][X] nach einer [X] ||| 0.0278341 1 ||| ||| 0.371429
+[X][X] a [X][X] [X] ||| [X][X] nach einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.101852
+fail to meet [X][X] [X] ||| [X][X] nicht erfüllen , [X] ||| 0.0278341 1 ||| ||| 0.142857
+fail to meet [X][X] annually [X] ||| [X][X] nicht erfüllen , jährlich [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] next few days , [X] ||| [X][X] nächsten Tagen [X] ||| 0.012301 1 ||| ||| 0.703968
+[X][X] next few days [X] ||| [X][X] nächsten Tagen [X] ||| 0.0155331 1 ||| ||| 0.703968
+[X][X] next [X] ||| [X][X] nächsten [X] ||| 0.0278341 1 ||| ||| 0.833333
+[X][X] next [X][X] , [X] ||| [X][X] nächsten [X][X] [X] ||| 0.00853086 1 ||| ||| 1.01508
+[X][X] next [X][X] [X] ||| [X][X] nächsten [X][X] [X] ||| 0.0193032 1 ||| ||| 1.01508
+[X][X] whether [X] ||| [X][X] ob [X] ||| 0.241419 1 ||| ||| 1.08333
+[X][X] whether [X][X] [X] ||| [X][X] ob [X][X] , [X] ||| 0.0207852 1 ||| ||| 0.268443
+[X][X] whether [X][X] raise [X] ||| [X][X] ob [X][X] , [X] ||| 0.0070489 1 ||| ||| 0.268443
+[X][X] whether [X][X] an [X] ||| [X][X] ob [X][X] , einen [X] ||| 0.013917 1 ||| ||| 0.0897684
+[X][X] whether [X][X] raise an [X] ||| [X][X] ob [X][X] , einen [X] ||| 0.013917 1 ||| ||| 0.0897684
+[X][X] whether [X][X] [X] ||| [X][X] ob [X][X] [X] ||| 0.0205342 1 ||| ||| 1.24433
+[X][X] whether [X][X] raise [X] ||| [X][X] ob [X][X] [X] ||| 0.00729985 1 ||| ||| 1.24433
+[X][X] whether [X][X] an [X] ||| [X][X] ob [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.0897684
+[X][X] whether [X][X] raise an [X] ||| [X][X] ob [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.0897684
+[X][X] whether [X][X] [X] ||| [X][X] ob [X][X] ist , [X] ||| 0.0207852 1 ||| ||| 0.268443
+[X][X] whether [X][X] raise [X] ||| [X][X] ob [X][X] ist , [X] ||| 0.0070489 1 ||| ||| 0.268443
+[X][X] whether [X][X] an [X] ||| [X][X] ob [X][X] ist , einen [X] ||| 0.013917 1 ||| ||| 0.0897684
+[X][X] whether [X][X] raise an [X] ||| [X][X] ob [X][X] ist , einen [X] ||| 0.013917 1 ||| ||| 0.0897684
+[X][X] whether [X][X] [X] ||| [X][X] ob [X][X] ist [X] ||| 0.0204867 1 ||| ||| 0.36315
+[X][X] whether [X][X] raise [X] ||| [X][X] ob [X][X] ist [X] ||| 0.00734737 1 ||| ||| 0.36315
+[X][X] whether one [X] ||| [X][X] ob es [X] ||| 0.0278341 1 ||| ||| 0.416667
+[X][X] whether one [X][X] [X] ||| [X][X] ob es [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0679825
+[X][X] whether one [X][X] an [X] ||| [X][X] ob es [X][X] , einen [X] ||| 0.0278341 1 ||| ||| 0.0448842
+[X][X] whether one [X][X] [X] ||| [X][X] ob es [X][X] [X] ||| 0.0278341 1 ||| ||| 0.371227
+[X][X] whether one [X][X] an [X] ||| [X][X] ob es [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0448842
+[X][X] whether one [X][X] [X] ||| [X][X] ob es [X][X] ist , [X] ||| 0.0278341 1 ||| ||| 0.0679825
+[X][X] whether one [X][X] an [X] ||| [X][X] ob es [X][X] ist , einen [X] ||| 0.0278341 1 ||| ||| 0.0448842
+[X][X] whether one [X][X] [X] ||| [X][X] ob es [X][X] ist [X] ||| 0.0278341 1 ||| ||| 0.0958606
+[X][X] whether one can [X] ||| [X][X] ob es möglich [X] ||| 0.0166759 1 ||| ||| 0.405357
+[X][X] whether one can raise [X] ||| [X][X] ob es möglich [X] ||| 0.0111582 1 ||| ||| 0.405357
+[X][X] whether one can [X][X] [X] ||| [X][X] ob es möglich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0448842
+[X][X] whether one can [X] ||| [X][X] ob es möglich ist , [X] ||| 0.0183947 1 ||| ||| 0.200462
+[X][X] whether one can raise [X] ||| [X][X] ob es möglich ist , [X] ||| 0.00943938 1 ||| ||| 0.200462
+[X][X] whether one can [X][X] [X] ||| [X][X] ob es möglich ist , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0448842
+[X][X] whether one can [X] ||| [X][X] ob es möglich ist [X] ||| 0.0178517 1 ||| ||| 0.26729
+[X][X] whether one can raise [X] ||| [X][X] ob es möglich ist [X] ||| 0.00998241 1 ||| ||| 0.26729
+[X][X] whether one can [X][X] [X] ||| [X][X] ob es möglich ist [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0448842
+[X][X] would be legally inadmissible [X] ||| [X][X] rechtlich unzulässig wäre [X] ||| 0.0278341 1 ||| ||| 0.3171
+[X][X] relative stability [X] ||| [X][X] relativen Stabilität [X] ||| 0.0206127 1 ||| ||| 0.918957
+[X][X] relative stability is [X] ||| [X][X] relativen Stabilität [X] ||| 0.00722142 1 ||| ||| 0.918957
+[X][X] relative stability [X][X] [X] ||| [X][X] relativen Stabilität [X][X] [X] ||| 0.0184792 1 ||| ||| 0.457926
+[X][X] relative stability is [X][X] [X] ||| [X][X] relativen Stabilität [X][X] [X] ||| 0.00935492 1 ||| ||| 0.457926
+[X][X] relative stability [X][X] fundamental [X] ||| [X][X] relativen Stabilität [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.100105
+[X][X] relative stability is a [X] ||| [X][X] relativen Stabilität einen [X] ||| 0.0278341 1 ||| ||| 0.150113
+done [X][X] relative stability [X] ||| [X][X] relativen Stabilität verhängt [X] ||| 0.0278341 1 ||| ||| 0.0666667
+be done [X][X] relative stability [X] ||| [X][X] relativen Stabilität verhängt werden [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] relative [X] ||| [X][X] relativen [X] ||| 0.241419 1 ||| ||| 1.26893
+[X][X] relative [X][X] legal principle [X] ||| [X][X] relativen [X][X] Rechtsgrundsatz [X] ||| 0.0278341 1 ||| ||| 0.053802
+[X][X] relative [X][X] [X] ||| [X][X] relativen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.542438
+[X][X] relative [X][X] a [X] ||| [X][X] relativen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.150113
+[X][X] relative [X][X] a fundamental [X] ||| [X][X] relativen [X][X] einen elementaren [X] ||| 0.0278341 1 ||| ||| 0.100105
+[X][X] relative [X][X] fundamental [X] ||| [X][X] relativen [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.100105
+[X][X] difficult situation [X] ||| [X][X] schwierigen Situation [X] ||| 0.0278341 1 ||| ||| 0.330727
+[X][X] difficult [X] ||| [X][X] schwierigen [X] ||| 0.0278341 1 ||| ||| 0.60049
+[X][X] very [X] ||| [X][X] sehr [X] ||| 0.0278341 1 ||| ||| 0.483766
+[X][X] very [X][X] [X] ||| [X][X] sehr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.16406
+[X][X] very difficult situation [X] ||| [X][X] sehr schwierigen Situation [X] ||| 0.0278341 1 ||| ||| 0.16406
+[X][X] very difficult [X] ||| [X][X] sehr schwierigen [X] ||| 0.0278341 1 ||| ||| 0.267157
+[X][X] is [X] ||| [X][X] sich [X] ||| 0.0278341 1 ||| ||| 0.604167
+[X][X] is [X][X] report [X] ||| [X][X] sich [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.0883459
+[X][X] is [X][X] report , [X] ||| [X][X] sich [X][X] Bericht und [X] ||| 0.0278341 1 ||| ||| 0.0344828
+[X][X] is [X][X] [X] ||| [X][X] sich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.325642
+[X][X] is [X][X] not a [X] ||| [X][X] sich [X][X] keinen [X] ||| 0.0278341 1 ||| ||| 0.0285714
+[X][X] is [X][X] , [X] ||| [X][X] sich [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0344828
+[X][X] this Parliament [X] ||| [X][X] sich dieses Parlament [X] ||| 0.0278341 1 ||| ||| 0.215909
+[X][X] this Parliament [X][X] . [X] ||| [X][X] sich dieses Parlament [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.025641
+[X][X] this Parliament [X][X] [X] ||| [X][X] sich dieses Parlament [X][X] [X] ||| 0.0188309 1 ||| ||| 0.287185
+[X][X] this Parliament [X][X] an [X] ||| [X][X] sich dieses Parlament [X][X] [X] ||| 0.00487539 1 ||| ||| 0.287185
+[X][X] this Parliament [X][X] interest [X] ||| [X][X] sich dieses Parlament [X][X] [X] ||| 0.00412786 1 ||| ||| 0.287185
+[X][X] this Parliament has [X][X] [X] ||| [X][X] sich dieses Parlament [X][X] hat [X] ||| 0.0278341 1 ||| ||| 0.168651
+[X][X] this [X] ||| [X][X] sich dieses [X] ||| 0.0278341 1 ||| ||| 0.516667
+[X][X] this [X][X] . [X] ||| [X][X] sich dieses [X][X] . [X] ||| 0.013917 1 ||| ||| 0.051282
+[X][X] this [X][X] interest . [X] ||| [X][X] sich dieses [X][X] . [X] ||| 0.013917 1 ||| ||| 0.051282
+[X][X] this [X][X] [X] ||| [X][X] sich dieses [X][X] [X] ||| 0.0163989 1 ||| ||| 0.329775
+[X][X] this [X][X] an [X] ||| [X][X] sich dieses [X][X] [X] ||| 0.00424573 1 ||| ||| 0.329775
+[X][X] this [X][X] an interest [X] ||| [X][X] sich dieses [X][X] [X] ||| 0.00359475 1 ||| ||| 0.329775
+[X][X] this [X][X] interest [X] ||| [X][X] sich dieses [X][X] [X] ||| 0.00359475 1 ||| ||| 0.329775
+[X][X] is merely [X] ||| [X][X] sich lediglich um [X] ||| 0.0278341 1 ||| ||| 0.327764
+[X][X] is merely [X][X] [X] ||| [X][X] sich lediglich um [X][X] [X] ||| 0.0278341 1 ||| ||| 0.1514
+[X][X] is merely [X][X] , [X] ||| [X][X] sich lediglich um [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0344828
+[X][X] is merely a report [X] ||| [X][X] sich lediglich um einen Bericht [X] ||| 0.0278341 1 ||| ||| 0.0883459
+[X][X] is merely a [X] ||| [X][X] sich lediglich um einen [X] ||| 0.0278341 1 ||| ||| 0.174242
+[X][X] is merely a [X][X] [X] ||| [X][X] sich lediglich um einen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0630542
+[X][X] urging [X] ||| [X][X] sie auffordern [X] ||| 0.0278341 1 ||| ||| 0.590909
+[X][X] urging [X] ||| [X][X] sie auffordern würden , [X] ||| 0.0278341 1 ||| ||| 0.352632
+[X][X] urging [X] ||| [X][X] sie auffordern würden [X] ||| 0.0278341 1 ||| ||| 0.441667
+to [X][X] [X] ||| [X][X] soll , [X] ||| 0.00837863 1 ||| ||| 0.257895
+to go [X][X] [X] ||| [X][X] soll , [X] ||| 0.00837863 1 ||| ||| 0.257895
+to go before [X][X] [X] ||| [X][X] soll , [X] ||| 0.00837863 1 ||| ||| 0.257895
+to go before the [X][X] [X] ||| [X][X] soll , [X] ||| 0.0026982 1 ||| ||| 0.257895
+to [X][X] because [X] ||| [X][X] soll , weil [X] ||| 0.00927803 1 ||| ||| 0.0714285
+to go [X][X] because [X] ||| [X][X] soll , weil [X] ||| 0.00927803 1 ||| ||| 0.0714285
+to go before [X][X] because [X] ||| [X][X] soll , weil [X] ||| 0.00927803 1 ||| ||| 0.0714285
+to [X][X] because the [X] ||| [X][X] soll , weil der [X] ||| 0.013917 1 ||| ||| 0.0526316
+to go [X][X] because the [X] ||| [X][X] soll , weil der [X] ||| 0.013917 1 ||| ||| 0.0526316
+to [X][X] [X] ||| [X][X] soll [X] ||| 0.00835023 1 ||| ||| 0.384617
+to go [X][X] [X] ||| [X][X] soll [X] ||| 0.00835023 1 ||| ||| 0.384617
+to go before [X][X] [X] ||| [X][X] soll [X] ||| 0.00835023 1 ||| ||| 0.384617
+to go before the [X][X] [X] ||| [X][X] soll [X] ||| 0.0027834 1 ||| ||| 0.384617
+[X][X] have always upheld . [X] ||| [X][X] stets verteidigt haben . [X] ||| 0.0278341 1 ||| ||| 0.251923
+[X][X] have always upheld [X] ||| [X][X] stets verteidigt haben [X] ||| 0.0278341 1 ||| ||| 0.316399
+do [X][X] . [X] ||| [X][X] tun . [X] ||| 0.0278341 1 ||| ||| 0.25
+do [X][X] [X] ||| [X][X] tun [X] ||| 0.0278341 1 ||| ||| 0.333333
+[X][X] and to the Governor [X] ||| [X][X] und Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.19223
+[X][X] , [X] ||| [X][X] und [X] ||| 0.00124073 1 ||| ||| 15.2106
+[X][X] and [X] ||| [X][X] und [X] ||| 0 1 ||| ||| 15.2106
+[X][X] and the [X] ||| [X][X] und [X] ||| 0.000609973 1 ||| ||| 15.2106
+[X][X] and to [X] ||| [X][X] und [X] ||| 0.000844407 1 ||| ||| 15.2106
+[X][X] and to the [X] ||| [X][X] und [X] ||| 0.000667134 1 ||| ||| 15.2106
+accused [X][X] and [X] ||| [X][X] und [X] ||| 0.00045748 1 ||| ||| 15.2106
+accused of [X][X] and [X] ||| [X][X] und [X] ||| 0.00045748 1 ||| ||| 15.2106
+be [X][X] and [X] ||| [X][X] und [X] ||| 0.00045748 1 ||| ||| 15.2106
+be accused [X][X] and [X] ||| [X][X] und [X] ||| 0.00045748 1 ||| ||| 15.2106
+be accused of [X][X] and [X] ||| [X][X] und [X] ||| 0.00045748 1 ||| ||| 15.2106
+have [X][X] and [X] ||| [X][X] und [X] ||| 0.00045748 1 ||| ||| 15.2106
+of [X][X] and [X] ||| [X][X] und [X] ||| 0.000609973 1 ||| ||| 15.2106
+power [X][X] and [X] ||| [X][X] und [X] ||| 0.00045748 1 ||| ||| 15.2106
+representations [X][X] and [X] ||| [X][X] und [X] ||| 6.31008e-05 1 ||| ||| 15.2106
+the [X][X] and [X] ||| [X][X] und [X] ||| 0.00045748 1 ||| ||| 15.2106
+the power [X][X] and [X] ||| [X][X] und [X] ||| 0.00045748 1 ||| ||| 15.2106
+to [X][X] and [X] ||| [X][X] und [X] ||| 0.00045748 1 ||| ||| 15.2106
+to be [X][X] and [X] ||| [X][X] und [X] ||| 0.00045748 1 ||| ||| 15.2106
+to be accused [X][X] and [X] ||| [X][X] und [X] ||| 0.00045748 1 ||| ||| 15.2106
+using [X][X] and [X] ||| [X][X] und [X] ||| 0.000130709 1 ||| ||| 15.2106
+[X][X] and [X][X] , [X] ||| [X][X] und [X][X] , [X] ||| 0.00319734 1 ||| ||| 0.366909
+[X][X] and [X][X] [X] ||| [X][X] und [X][X] , [X] ||| 0.0225865 1 ||| ||| 0.366909
+using [X][X] and [X][X] [X] ||| [X][X] und [X][X] , [X] ||| 0.0020503 1 ||| ||| 0.366909
+[X][X] and [X][X] , to [X] ||| [X][X] und [X][X] , bei [X] ||| 0.0278341 1 ||| ||| 0.0169492
+[X][X] and [X][X] that [X] ||| [X][X] und [X][X] , daß [X] ||| 0.022531 1 ||| ||| 0.308744
+have [X][X] and [X][X] that [X] ||| [X][X] und [X][X] , daß [X] ||| 0.00530309 1 ||| ||| 0.308744
+[X][X] and [X][X] you [X] ||| [X][X] und [X][X] , die Sie [X] ||| 0.0278341 1 ||| ||| 0.114866
+[X][X] and [X][X] you represent [X] ||| [X][X] und [X][X] , die Sie vertreten [X] ||| 0.0278341 1 ||| ||| 0.0548872
+[X][X] and [X][X] [X] ||| [X][X] und [X][X] , die [X] ||| 0.0251722 1 ||| ||| 0.213394
+using [X][X] and [X][X] [X] ||| [X][X] und [X][X] , die [X] ||| 0.00266195 1 ||| ||| 0.213394
+[X][X] and [X][X] European Community [X] ||| [X][X] und [X][X] Europäischen Union [X] ||| 0.0278341 1 ||| ||| 0.0181818
+[X][X] and [X][X] European [X] ||| [X][X] und [X][X] Europäischen [X] ||| 0.013917 1 ||| ||| 0.0444444
+[X][X] and [X][X] the European [X] ||| [X][X] und [X][X] Europäischen [X] ||| 0.013917 1 ||| ||| 0.0444444
+[X][X] , [X][X] legislative proposal [X] ||| [X][X] und [X][X] Legislativvorschlag [X] ||| 0.0278341 1 ||| ||| 0.216082
+[X][X] and [X][X] you [X] ||| [X][X] und [X][X] Sie [X] ||| 0.0278341 1 ||| ||| 0.114866
+[X][X] and [X][X] you represent [X] ||| [X][X] und [X][X] Sie vertreten [X] ||| 0.0278341 1 ||| ||| 0.0548872
+[X][X] and [X][X] Community [X] ||| [X][X] und [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0181818
+[X][X] and [X][X] condemned person [X] ||| [X][X] und [X][X] Verurteilten [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] , [X][X] [X] ||| [X][X] und [X][X] [X] ||| 0.0028097 1 ||| ||| 5.19508
+[X][X] and [X][X] [X] ||| [X][X] und [X][X] [X] ||| 0.708493 1 ||| ||| 5.19508
+[X][X] and [X][X] of [X] ||| [X][X] und [X][X] [X] ||| 0.000348931 1 ||| ||| 5.19508
+[X][X] and [X][X] of the [X] ||| [X][X] und [X][X] [X] ||| 0.000321658 1 ||| ||| 5.19508
+[X][X] and [X][X] the [X] ||| [X][X] und [X][X] [X] ||| 0.000321658 1 ||| ||| 5.19508
+[X][X] and to [X][X] [X] ||| [X][X] und [X][X] [X] ||| 0.00181986 1 ||| ||| 5.19508
+[X][X] and to the [X][X] [X] ||| [X][X] und [X][X] [X] ||| 0.000789935 1 ||| ||| 5.19508
+have [X][X] and [X][X] [X] ||| [X][X] und [X][X] [X] ||| 0.000697861 1 ||| ||| 5.19508
+power [X][X] and [X][X] [X] ||| [X][X] und [X][X] [X] ||| 0.000535778 1 ||| ||| 5.19508
+using [X][X] and [X][X] [X] ||| [X][X] und [X][X] [X] ||| 0.000468458 1 ||| ||| 5.19508
+[X][X] and [X][X] to [X] ||| [X][X] und [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0169492
+[X][X] and [X][X] the [X] ||| [X][X] und [X][X] des [X] ||| 0.0278341 1 ||| ||| 0.188034
+[X][X] and [X][X] you [X] ||| [X][X] und [X][X] die Sie [X] ||| 0.0278341 1 ||| ||| 0.114866
+[X][X] and [X][X] you represent [X] ||| [X][X] und [X][X] die Sie vertreten [X] ||| 0.0278341 1 ||| ||| 0.0548872
+[X][X] and [X][X] [X] ||| [X][X] und [X][X] die [X] ||| 0.0251722 1 ||| ||| 0.213394
+using [X][X] and [X][X] [X] ||| [X][X] und [X][X] die [X] ||| 0.00266195 1 ||| ||| 0.213394
+[X][X] and made [X][X] that [X] ||| [X][X] und [X][X] gemacht hat , daß [X] ||| 0.0278341 1 ||| ||| 0.249921
+[X][X] and made [X][X] [X] ||| [X][X] und [X][X] gemacht hat [X] ||| 0.0231172 1 ||| ||| 0.421499
+have [X][X] and made [X][X] [X] ||| [X][X] und [X][X] gemacht hat [X] ||| 0.00471686 1 ||| ||| 0.421499
+[X][X] and [X][X] whole [X] ||| [X][X] und [X][X] gesamten [X] ||| 0.0160227 1 ||| ||| 0.153472
+[X][X] and [X][X] whole of [X] ||| [X][X] und [X][X] gesamten [X] ||| 0.0118114 1 ||| ||| 0.153472
+[X][X] and [X][X] represent , [X] ||| [X][X] und [X][X] vertreten , [X] ||| 0.0278341 1 ||| ||| 0.0421473
+[X][X] and [X][X] represent [X] ||| [X][X] und [X][X] vertreten [X] ||| 0.0278341 1 ||| ||| 0.0548872
+[X][X] and [X][X] of [X] ||| [X][X] und [X][X] von [X] ||| 0.013917 1 ||| ||| 0.21795
+[X][X] and to [X][X] of [X] ||| [X][X] und [X][X] von [X] ||| 0.013917 1 ||| ||| 0.21795
+[X][X] and the other [X] ||| [X][X] und anderen [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] and television [X] ||| [X][X] und dem Fernsehen [X] ||| 0.0278341 1 ||| ||| 0.257576
+aware [X][X] and television that [X] ||| [X][X] und dem Fernsehen wissen , [X] ||| 0.0278341 1 ||| ||| 0.125
+aware [X][X] and television [X] ||| [X][X] und dem Fernsehen wissen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+aware [X][X] and television [X][X] [X] ||| [X][X] und dem Fernsehen wissen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111111
+[X][X] and the institution [X] ||| [X][X] und der Institution , [X] ||| 0.0251407 1 ||| ||| 0.279307
+using [X][X] and the institution [X] ||| [X][X] und der Institution , [X] ||| 0.00269335 1 ||| ||| 0.279307
+[X][X] and the institution [X][X] [X] ||| [X][X] und der Institution , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.113984
+[X][X] and the institution you [X] ||| [X][X] und der Institution , die Sie [X] ||| 0.0278341 1 ||| ||| 0.114866
+[X][X] and the institution [X] ||| [X][X] und der Institution , die [X] ||| 0.0251722 1 ||| ||| 0.213394
+using [X][X] and the institution [X] ||| [X][X] und der Institution , die [X] ||| 0.00266195 1 ||| ||| 0.213394
+[X][X] and the institution [X][X] [X] ||| [X][X] und der Institution , die [X][X] [X] ||| 0.0278341 1 ||| ||| 0.113984
+[X][X] and the institution [X] ||| [X][X] und der Institution [X] ||| 0.0250851 1 ||| ||| 0.405
+using [X][X] and the institution [X] ||| [X][X] und der Institution [X] ||| 0.00274905 1 ||| ||| 0.405
+[X][X] and the institution [X][X] [X] ||| [X][X] und der Institution [X][X] [X] ||| 0.0278341 1 ||| ||| 0.113984
+[X][X] and the [X] ||| [X][X] und der [X] ||| 0.025703 1 ||| ||| 0.687406
+using [X][X] and the [X] ||| [X][X] und der [X] ||| 0.00213113 1 ||| ||| 0.687406
+[X][X] and the [X][X] , [X] ||| [X][X] und der [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0421473
+[X][X] and the [X][X] [X] ||| [X][X] und der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.22885
+[X][X] and the [X][X] to [X] ||| [X][X] und der [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0169492
+[X][X] and the [X][X] represent [X] ||| [X][X] und der [X][X] vertreten [X] ||| 0.0278341 1 ||| ||| 0.0548872
+[X][X] and made it clear [X] ||| [X][X] und deutlich gemacht hat [X] ||| 0.0278341 1 ||| ||| 0.35007
+[X][X] and a proposal [X] ||| [X][X] und ein Vorschlag [X] ||| 0.0278341 1 ||| ||| 0.317157
+[X][X] and a proposal [X][X] [X] ||| [X][X] und ein Vorschlag [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0454545
+[X][X] and a proposal [X][X] [X] ||| [X][X] und ein Vorschlag [X][X] [X] ||| 0.0278341 1 ||| ||| 0.187611
+[X][X] and a [X] ||| [X][X] und ein [X] ||| 0.0278341 1 ||| ||| 0.58228
+[X][X] and a [X][X] [X] ||| [X][X] und ein [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0454545
+[X][X] and a [X][X] [X] ||| [X][X] und ein [X][X] [X] ||| 0.0278341 1 ||| ||| 0.187611
+[X][X] , not a [X] ||| [X][X] und keinen [X] ||| 0.0278341 1 ||| ||| 0.308333
+[X][X] , not a [X][X] [X] ||| [X][X] und keinen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.216082
+[X][X] and urging [X] ||| [X][X] und sie auffordern [X] ||| 0.0278341 1 ||| ||| 0.257576
+[X][X] and urging [X] ||| [X][X] und sie auffordern würden , [X] ||| 0.0278341 1 ||| ||| 0.152632
+[X][X] and urging [X] ||| [X][X] und sie auffordern würden [X] ||| 0.0278341 1 ||| ||| 0.191667
+[X][X] and by [X] ||| [X][X] und von [X] ||| 0.0278341 1 ||| ||| 0.238095
+[X][X] and by [X][X] European [X] ||| [X][X] und von [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.0222222
+[X][X] and by [X][X] Community [X] ||| [X][X] und von [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0181818
+[X][X] and by [X][X] [X] ||| [X][X] und von [X][X] [X] ||| 0.0186439 1 ||| ||| 0.379074
+[X][X] and by [X][X] of [X] ||| [X][X] und von [X][X] [X] ||| 0.00478199 1 ||| ||| 0.379074
+[X][X] and by [X][X] the [X] ||| [X][X] und von [X][X] [X] ||| 0.00440822 1 ||| ||| 0.379074
+[X][X] and by the [X] ||| [X][X] und von der [X] ||| 0.0278341 1 ||| ||| 0.138528
+[X][X] and by the [X][X] [X] ||| [X][X] und von der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.165566
+[X][X] and by the whole [X] ||| [X][X] und von der gesamten [X] ||| 0.0278341 1 ||| ||| 0.0883459
+[X][X] and to reprieve [X] ||| [X][X] und zur Begnadigung [X] ||| 0.0225324 1 ||| ||| 0.525
+power [X][X] and to reprieve [X] ||| [X][X] und zur Begnadigung [X] ||| 0.00530173 1 ||| ||| 0.525
+[X][X] and to reprieve [X][X] [X] ||| [X][X] und zur Begnadigung [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] and to reprieve the [X] ||| [X][X] und zur Begnadigung des [X] ||| 0.0278341 1 ||| ||| 0.188034
+[X][X] and to [X] ||| [X][X] und zur [X] ||| 0.0181126 1 ||| ||| 1.29524
+power [X][X] and to [X] ||| [X][X] und zur [X] ||| 0.0035816 1 ||| ||| 1.29524
+the [X][X] and to [X] ||| [X][X] und zur [X] ||| 0.00306993 1 ||| ||| 1.29524
+the power [X][X] and to [X] ||| [X][X] und zur [X] ||| 0.00306993 1 ||| ||| 1.29524
+[X][X] and to [X][X] [X] ||| [X][X] und zur [X][X] [X] ||| 0.0278341 1 ||| ||| 0.254701
+of us here [X][X] [X] ||| [X][X] uns hier [X] ||| 0.00927804 1 ||| ||| 0.875
+us here [X][X] [X] ||| [X][X] uns hier [X] ||| 0.0185561 1 ||| ||| 0.875
+[X][X] us here [X][X] that [X] ||| [X][X] uns hier [X][X] , daß [X] ||| 0.0278341 1 ||| ||| 0.22619
+[X][X] us here [X][X] [X] ||| [X][X] uns hier [X][X] [X] ||| 0.0278341 1 ||| ||| 0.166667
+all of us here [X][X] [X] ||| [X][X] uns hier alle [X] ||| 0.0278341 1 ||| ||| 0.166667
+people signed [X][X] [X] ||| [X][X] unterzeichnet worden [X] ||| 0.0102547 1 ||| ||| 0.22619
+signed [X][X] [X] ||| [X][X] unterzeichnet worden [X] ||| 0.0175794 1 ||| ||| 0.22619
+people signed [X][X] . [X] ||| [X][X] unterzeichnet worden ist . [X] ||| 0.00863818 1 ||| ||| 0.161111
+signed [X][X] . [X] ||| [X][X] unterzeichnet worden ist . [X] ||| 0.0191959 1 ||| ||| 0.161111
+people signed [X][X] [X] ||| [X][X] unterzeichnet worden ist [X] ||| 0.00811828 1 ||| ||| 0.20168
+signed [X][X] [X] ||| [X][X] unterzeichnet worden ist [X] ||| 0.0197158 1 ||| ||| 0.20168
+done [X][X] [X] ||| [X][X] verhängt [X] ||| 0.0278341 1 ||| ||| 0.0666667
+be done [X][X] . [X] ||| [X][X] verhängt werden . [X] ||| 0.0278341 1 ||| ||| 0.125
+be done [X][X] [X] ||| [X][X] verhängt werden [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] various countries [X] ||| [X][X] verschiedenen Ländern [X] ||| 0.0278341 1 ||| ||| 0.166667
+[X][X] various countries [X][X] European [X] ||| [X][X] verschiedenen Ländern [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] various countries [X][X] Union [X] ||| [X][X] verschiedenen Ländern [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] various countries [X][X] [X] ||| [X][X] verschiedenen Ländern [X][X] [X] ||| 0.0278341 1 ||| ||| 0.16406
+[X][X] various countries of the [X] ||| [X][X] verschiedenen Ländern der [X] ||| 0.0278341 1 ||| ||| 0.0714286
+[X][X] various [X] ||| [X][X] verschiedenen [X] ||| 0.0278341 1 ||| ||| 0.333333
+[X][X] various [X][X] European Union [X] ||| [X][X] verschiedenen [X][X] Europäischen Union [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] various [X][X] European [X] ||| [X][X] verschiedenen [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] various [X][X] Union [X] ||| [X][X] verschiedenen [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] various [X][X] [X] ||| [X][X] verschiedenen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.16406
+[X][X] represent , [X] ||| [X][X] vertreten , [X] ||| 0.0278341 1 ||| ||| 0.22335
+[X][X] represent , [X][X] President [X] ||| [X][X] vertreten , [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0386157
+[X][X] represent , [X][X] [X] ||| [X][X] vertreten , [X][X] [X] ||| 0.0237969 1 ||| ||| 0.175833
+[X][X] represent , [X][X] the [X] ||| [X][X] vertreten , [X][X] [X] ||| 0.00195431 1 ||| ||| 0.175833
+[X][X] represent , [X][X] to [X] ||| [X][X] vertreten , [X][X] [X] ||| 0.00208288 1 ||| ||| 0.175833
+[X][X] represent , [X][X] and [X] ||| [X][X] vertreten , [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0163934
+[X][X] represent , to [X] ||| [X][X] vertreten , bei [X] ||| 0.0278341 1 ||| ||| 0.124944
+[X][X] represent , to [X][X] [X] ||| [X][X] vertreten , bei [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0805127
+[X][X] represent , to the [X] ||| [X][X] vertreten , bei dem [X] ||| 0.0278341 1 ||| ||| 0.0698163
+[X][X] represent [X] ||| [X][X] vertreten [X] ||| 0.0278341 1 ||| ||| 0.407519
+[X][X] represent [X][X] President [X] ||| [X][X] vertreten [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0386157
+[X][X] represent [X][X] President and [X] ||| [X][X] vertreten [X][X] Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.0163934
+[X][X] represent [X][X] [X] ||| [X][X] vertreten [X][X] [X] ||| 0.0244696 1 ||| ||| 0.313122
+[X][X] represent [X][X] the [X] ||| [X][X] vertreten [X][X] [X] ||| 0.00109744 1 ||| ||| 0.313122
+[X][X] represent [X][X] to [X] ||| [X][X] vertreten [X][X] [X] ||| 0.00116963 1 ||| ||| 0.313122
+[X][X] represent [X][X] to the [X] ||| [X][X] vertreten [X][X] [X] ||| 0.00109744 1 ||| ||| 0.313122
+[X][X] represent [X][X] the President [X] ||| [X][X] vertreten [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0386157
+[X][X] represent [X][X] the [X] ||| [X][X] vertreten [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0698163
+[X][X] represent [X][X] and [X] ||| [X][X] vertreten [X][X] und [X] ||| 0.0154408 1 ||| ||| 0.0295513
+[X][X] represent [X][X] and to [X] ||| [X][X] vertreten [X][X] und [X] ||| 0.0123933 1 ||| ||| 0.0295513
+[X][X] adopted . [X] ||| [X][X] vertreten haben . [X] ||| 0.0278341 1 ||| ||| 0.326923
+[X][X] adopted [X] ||| [X][X] vertreten haben [X] ||| 0.0278341 1 ||| ||| 0.742857
+[X][X] many [X] ||| [X][X] vielen [X] ||| 0.018313 1 ||| ||| 0.772619
+[X][X] many people [X] ||| [X][X] vielen [X] ||| 0.00952107 1 ||| ||| 0.772619
+[X][X] of Alexander Nikitin . [X] ||| [X][X] von Alexander Nikitin . [X] ||| 0.0278341 1 ||| ||| 0.112755
+[X][X] of Alexander Nikitin [X] ||| [X][X] von Alexander Nikitin [X] ||| 0.0278341 1 ||| ||| 0.178023
+[X][X] of Alexander [X] ||| [X][X] von Alexander [X] ||| 0.0278341 1 ||| ||| 0.310207
+[X][X] of Alexander [X][X] [X] ||| [X][X] von Alexander [X][X] [X] ||| 0.0278341 1 ||| ||| 0.112755
+[X][X] in Sri [X] ||| [X][X] von Sri [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] of Texas , Mr [X] ||| [X][X] von Texas , George W. [X] ||| 0.0278341 1 ||| ||| 0.472046
+[X][X] by [X] ||| [X][X] von [X] ||| 0.00539325 1 ||| ||| 2.94909
+[X][X] in [X] ||| [X][X] von [X] ||| 0.00314606 1 ||| ||| 2.94909
+[X][X] of [X] ||| [X][X] von [X] ||| 0.140066 1 ||| ||| 2.94909
+to [X][X] of [X] ||| [X][X] von [X] ||| 0.00314606 1 ||| ||| 2.94909
+[X][X] of [X][X] , [X] ||| [X][X] von [X][X] , [X] ||| 0.0202901 1 ||| ||| 0.245971
+to [X][X] of [X][X] , [X] ||| [X][X] von [X][X] , [X] ||| 0.00754402 1 ||| ||| 0.245971
+[X][X] of [X][X] , who [X] ||| [X][X] von [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.105556
+[X][X] of [X][X] . [X] ||| [X][X] von [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.112755
+[X][X] of [X][X] Bush , [X] ||| [X][X] von [X][X] Bush , [X] ||| 0.0278341 1 ||| ||| 0.179304
+[X][X] of [X][X] Bush [X] ||| [X][X] von [X][X] Bush [X] ||| 0.0210071 1 ||| ||| 0.370642
+to [X][X] of [X][X] Bush [X] ||| [X][X] von [X][X] Bush [X] ||| 0.006827 1 ||| ||| 0.370642
+[X][X] by [X][X] European Community [X] ||| [X][X] von [X][X] Europäischen Union [X] ||| 0.0278341 1 ||| ||| 0.040404
+[X][X] by [X][X] European [X] ||| [X][X] von [X][X] Europäischen [X] ||| 0.0139171 1 ||| ||| 0.101587
+[X][X] by [X][X] the European [X] ||| [X][X] von [X][X] Europäischen [X] ||| 0.0139171 1 ||| ||| 0.101587
+[X][X] by [X][X] Community [X] ||| [X][X] von [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.040404
+[X][X] by [X][X] [X] ||| [X][X] von [X][X] [X] ||| 0.00552542 1 ||| ||| 2.51263
+[X][X] by [X][X] of [X] ||| [X][X] von [X][X] [X] ||| 0.00133687 1 ||| ||| 2.51263
+[X][X] by [X][X] of the [X] ||| [X][X] von [X][X] [X] ||| 0.00119257 1 ||| ||| 2.51263
+[X][X] by [X][X] the [X] ||| [X][X] von [X][X] [X] ||| 0.00119257 1 ||| ||| 2.51263
+[X][X] of [X][X] [X] ||| [X][X] von [X][X] [X] ||| 0.127541 1 ||| ||| 2.51263
+to [X][X] of [X][X] [X] ||| [X][X] von [X][X] [X] ||| 0.00388198 1 ||| ||| 2.51263
+[X][X] of [X][X] who [X] ||| [X][X] von [X][X] der [X] ||| 0.0188875 1 ||| ||| 0.155556
+to [X][X] of [X][X] who [X] ||| [X][X] von [X][X] der [X] ||| 0.00894665 1 ||| ||| 0.155556
+[X][X] by the [X] ||| [X][X] von der [X] ||| 0.0278341 1 ||| ||| 0.305195
+[X][X] by the [X][X] European [X] ||| [X][X] von der [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.0507937
+[X][X] by the [X][X] Community [X] ||| [X][X] von der [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.040404
+[X][X] by the [X][X] [X] ||| [X][X] von der [X][X] [X] ||| 0.0208197 1 ||| ||| 0.427189
+[X][X] by the [X][X] the [X] ||| [X][X] von der [X][X] [X] ||| 0.00701441 1 ||| ||| 0.427189
+[X][X] by the whole [X] ||| [X][X] von der gesamten [X] ||| 0.0166348 1 ||| ||| 0.299937
+[X][X] by the whole of [X] ||| [X][X] von der gesamten [X] ||| 0.0111993 1 ||| ||| 0.299937
+[X][X] by the whole [X][X] [X] ||| [X][X] von der gesamten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0911977
+[X][X] myself [X] ||| [X][X] von mir selbst , [X] ||| 0.0278341 1 ||| ||| 0.2
+people signed [X][X] myself [X] ||| [X][X] von mir selbst , unterzeichnet worden [X] ||| 0.0102547 1 ||| ||| 0.22619
+signed [X][X] myself [X] ||| [X][X] von mir selbst , unterzeichnet worden [X] ||| 0.0175794 1 ||| ||| 0.22619
+people signed [X][X] myself . [X] ||| [X][X] von mir selbst , unterzeichnet worden ist . [X] ||| 0.00863818 1 ||| ||| 0.161111
+signed [X][X] myself . [X] ||| [X][X] von mir selbst , unterzeichnet worden ist . [X] ||| 0.0191959 1 ||| ||| 0.161111
+people signed [X][X] myself [X] ||| [X][X] von mir selbst , unterzeichnet worden ist [X] ||| 0.00811828 1 ||| ||| 0.20168
+signed [X][X] myself [X] ||| [X][X] von mir selbst , unterzeichnet worden ist [X] ||| 0.0197158 1 ||| ||| 0.20168
+[X][X] myself [X] ||| [X][X] von mir selbst [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] many [X] ||| [X][X] von vielen [X] ||| 0.018313 1 ||| ||| 0.772619
+[X][X] many people [X] ||| [X][X] von vielen [X] ||| 0.00952107 1 ||| ||| 0.772619
+[X][X] a few months ago [X] ||| [X][X] vor wenigen Monaten [X] ||| 0.0278341 1 ||| ||| 0.178889
+[X][X] a few months ago [X] ||| [X][X] vor wenigen Monaten einen [X] ||| 0.0278341 1 ||| ||| 0.113848
+[X][X] a few [X] ||| [X][X] vor wenigen [X] ||| 0.0278341 1 ||| ||| 0.297619
+visited [X][X] a few [X][X] [X] ||| [X][X] vor wenigen [X][X] Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited [X][X] a few [X][X] [X] ||| [X][X] vor wenigen [X][X] Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] a few [X][X] [X] ||| [X][X] vor wenigen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.292737
+visited [X][X] a few [X][X] [X] ||| [X][X] vor wenigen [X][X] einen Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited [X][X] a few [X][X] [X] ||| [X][X] vor wenigen [X][X] einen Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] a few [X][X] [X] ||| [X][X] vor wenigen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.113848
+proposal [X][X] that [X] ||| [X][X] vorschlägt , [X] ||| 0.0278341 1 ||| ||| 0.415909
+proposal [X][X] [X] ||| [X][X] vorschlägt [X] ||| 0.0278341 1 ||| ||| 0.541667
+[X][X] because [X] ||| [X][X] weil [X] ||| 0.0278341 1 ||| ||| 0.0238095
+[X][X] because the [X] ||| [X][X] weil der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+[X][X] a few months ago [X] ||| [X][X] wenigen Monaten [X] ||| 0.0278341 1 ||| ||| 0.178889
+[X][X] a few months ago [X] ||| [X][X] wenigen Monaten einen [X] ||| 0.0278341 1 ||| ||| 0.113848
+[X][X] a few [X] ||| [X][X] wenigen [X] ||| 0.0278341 1 ||| ||| 0.297619
+visited [X][X] a few [X][X] [X] ||| [X][X] wenigen [X][X] Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited [X][X] a few [X][X] [X] ||| [X][X] wenigen [X][X] Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] a few [X][X] [X] ||| [X][X] wenigen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.292737
+visited [X][X] a few [X][X] [X] ||| [X][X] wenigen [X][X] einen Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited [X][X] a few [X][X] [X] ||| [X][X] wenigen [X][X] einen Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+[X][X] a few [X][X] [X] ||| [X][X] wenigen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.113848
+[X][X] for you , Madam [X] ||| [X][X] wenn Sie , Frau [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] for you , [X] ||| [X][X] wenn Sie , [X] ||| 0.0278341 1 ||| ||| 0.0625
+[X][X] for you , [X][X] [X] ||| [X][X] wenn Sie , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0559441
+[X][X] for you [X] ||| [X][X] wenn Sie [X] ||| 0.00616903 1 ||| ||| 0.451191
+[X][X] if you [X] ||| [X][X] wenn Sie [X] ||| 0.0172586 1 ||| ||| 0.451191
+the [X][X] if you [X] ||| [X][X] wenn Sie [X] ||| 0.00440645 1 ||| ||| 0.451191
+[X][X] for you [X][X] , [X] ||| [X][X] wenn Sie [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.025641
+[X][X] for you [X][X] President [X] ||| [X][X] wenn Sie [X][X] Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.030303
+[X][X] for you [X][X] [X] ||| [X][X] wenn Sie [X][X] [X] ||| 0.0090969 1 ||| ||| 0.293563
+[X][X] if you [X][X] [X] ||| [X][X] wenn Sie [X][X] [X] ||| 0.0155767 1 ||| ||| 0.293563
+the [X][X] if you [X][X] [X] ||| [X][X] wenn Sie [X][X] [X] ||| 0.00316048 1 ||| ||| 0.293563
+[X][X] if you wish , [X] ||| [X][X] wenn Sie wollen , [X] ||| 0.0278341 1 ||| ||| 0.122619
+[X][X] if you wish [X] ||| [X][X] wenn Sie wollen [X] ||| 0.0219561 1 ||| ||| 0.22549
+the [X][X] if you wish [X] ||| [X][X] wenn Sie wollen [X] ||| 0.00587801 1 ||| ||| 0.22549
+[X][X] if you wish [X][X] [X] ||| [X][X] wenn Sie wollen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0416667
+[X][X] for [X] ||| [X][X] wenn [X] ||| 0.00632194 1 ||| ||| 0.880555
+[X][X] if [X] ||| [X][X] wenn [X] ||| 0.018 1 ||| ||| 0.880555
+the [X][X] if [X] ||| [X][X] wenn [X] ||| 0.00351219 1 ||| ||| 0.880555
+[X][X] for [X][X] , [X] ||| [X][X] wenn [X][X] , [X] ||| 0.00393018 1 ||| ||| 0.181593
+[X][X] if [X][X] , [X] ||| [X][X] wenn [X][X] , [X] ||| 0.0187947 1 ||| ||| 0.181593
+the [X][X] if [X][X] , [X] ||| [X][X] wenn [X][X] , [X] ||| 0.00510923 1 ||| ||| 0.181593
+[X][X] for [X][X] Madam President [X] ||| [X][X] wenn [X][X] Frau Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.030303
+[X][X] for [X][X] Madam [X] ||| [X][X] wenn [X][X] Frau [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] for [X][X] President , [X] ||| [X][X] wenn [X][X] Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.025641
+[X][X] for [X][X] President [X] ||| [X][X] wenn [X][X] Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.030303
+[X][X] for [X][X] [X] ||| [X][X] wenn [X][X] [X] ||| 0.00758339 1 ||| ||| 0.581553
+[X][X] if [X][X] [X] ||| [X][X] wenn [X][X] [X] ||| 0.0163762 1 ||| ||| 0.581553
+the [X][X] if [X][X] [X] ||| [X][X] wenn [X][X] [X] ||| 0.00387451 1 ||| ||| 0.581553
+[X][X] I shall [X] ||| [X][X] werde ich [X] ||| 0.0181492 1 ||| ||| 0.757684
+[X][X] I shall do [X] ||| [X][X] werde ich [X] ||| 0.00968487 1 ||| ||| 0.757684
+[X][X] I shall [X] ||| [X][X] werde ich dem [X] ||| 0.0182562 1 ||| ||| 0.494022
+[X][X] I shall do [X] ||| [X][X] werde ich dem [X] ||| 0.00957788 1 ||| ||| 0.494022
+be [X][X] . [X] ||| [X][X] werden . [X] ||| 0.0278341 1 ||| ||| 0.125
+be [X][X] [X] ||| [X][X] werden [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] before [X][X] because [X] ||| [X][X] werden [X][X] , weil [X] ||| 0.00927803 1 ||| ||| 0.0714285
+[X][X] before the [X][X] because [X] ||| [X][X] werden [X][X] , weil [X] ||| 0.00927803 1 ||| ||| 0.0714285
+[X][X] the [X][X] because [X] ||| [X][X] werden [X][X] , weil [X] ||| 0.00927803 1 ||| ||| 0.0714285
+[X][X] before [X][X] because the [X] ||| [X][X] werden [X][X] , weil der [X] ||| 0.013917 1 ||| ||| 0.0526316
+[X][X] the [X][X] because the [X] ||| [X][X] werden [X][X] , weil der [X] ||| 0.013917 1 ||| ||| 0.0526316
+[X][X] before [X][X] because [X] ||| [X][X] werden [X][X] weil [X] ||| 0.00927803 1 ||| ||| 0.0714285
+[X][X] before the [X][X] because [X] ||| [X][X] werden [X][X] weil [X] ||| 0.00927803 1 ||| ||| 0.0714285
+[X][X] the [X][X] because [X] ||| [X][X] werden [X][X] weil [X] ||| 0.00927803 1 ||| ||| 0.0714285
+[X][X] before [X][X] because the [X] ||| [X][X] werden [X][X] weil der [X] ||| 0.013917 1 ||| ||| 0.0526316
+[X][X] the [X][X] because the [X] ||| [X][X] werden [X][X] weil der [X] ||| 0.013917 1 ||| ||| 0.0526316
+to [X][X] [X] ||| [X][X] werden soll , [X] ||| 0.00837863 1 ||| ||| 0.257895
+to go [X][X] [X] ||| [X][X] werden soll , [X] ||| 0.00837863 1 ||| ||| 0.257895
+to go before [X][X] [X] ||| [X][X] werden soll , [X] ||| 0.00837863 1 ||| ||| 0.257895
+to go before the [X][X] [X] ||| [X][X] werden soll , [X] ||| 0.0026982 1 ||| ||| 0.257895
+to [X][X] because [X] ||| [X][X] werden soll , weil [X] ||| 0.00927803 1 ||| ||| 0.0714285
+to go [X][X] because [X] ||| [X][X] werden soll , weil [X] ||| 0.00927803 1 ||| ||| 0.0714285
+to go before [X][X] because [X] ||| [X][X] werden soll , weil [X] ||| 0.00927803 1 ||| ||| 0.0714285
+to [X][X] because the [X] ||| [X][X] werden soll , weil der [X] ||| 0.013917 1 ||| ||| 0.0526316
+to go [X][X] because the [X] ||| [X][X] werden soll , weil der [X] ||| 0.013917 1 ||| ||| 0.0526316
+to [X][X] [X] ||| [X][X] werden soll [X] ||| 0.00835023 1 ||| ||| 0.384617
+to go [X][X] [X] ||| [X][X] werden soll [X] ||| 0.00835023 1 ||| ||| 0.384617
+to go before [X][X] [X] ||| [X][X] werden soll [X] ||| 0.00835023 1 ||| ||| 0.384617
+to go before the [X][X] [X] ||| [X][X] werden soll [X] ||| 0.0027834 1 ||| ||| 0.384617
+[X][X] should be [X] ||| [X][X] werden sollen [X] ||| 0.0212021 1 ||| ||| 1.04924
+of [X][X] should be [X] ||| [X][X] werden sollen [X] ||| 0.00663195 1 ||| ||| 1.04924
+[X][X] we [X] ||| [X][X] wir [X] ||| 0.241419 1 ||| ||| 1.39167
+[X][X] we [X][X] . [X] ||| [X][X] wir [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.126923
+[X][X] we [X][X] [X] ||| [X][X] wir [X][X] [X] ||| 0.0278341 1 ||| ||| 0.276656
+[X][X] we have [X][X] . [X] ||| [X][X] wir [X][X] haben . [X] ||| 0.0278341 1 ||| ||| 0.126923
+[X][X] we have [X][X] [X] ||| [X][X] wir [X][X] haben [X] ||| 0.0278341 1 ||| ||| 0.149733
+[X][X] we have always upheld [X] ||| [X][X] wir stets verteidigt haben [X] ||| 0.0278341 1 ||| ||| 0.149733
+will [X][X] [X] ||| [X][X] wird [X] ||| 0.0278341 1 ||| ||| 0.5
+aware [X][X] that [X] ||| [X][X] wissen , [X] ||| 0.0278341 1 ||| ||| 0.125
+aware [X][X] that [X][X] [X] ||| [X][X] wissen , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111111
+aware [X][X] [X] ||| [X][X] wissen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] wish , [X] ||| [X][X] wollen , [X] ||| 0.0255905 1 ||| ||| 0.413528
+the [X][X] wish , [X] ||| [X][X] wollen , [X] ||| 0.00224363 1 ||| ||| 0.413528
+[X][X] wish , [X][X] , [X] ||| [X][X] wollen , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0844828
+[X][X] wish , [X][X] [X] ||| [X][X] wollen , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.271929
+[X][X] wish , raise [X][X] [X] ||| [X][X] wollen , [X][X] ansprechen [X] ||| 0.0278341 1 ||| ||| 0.143968
+[X][X] wish , [X][X] i.e. [X] ||| [X][X] wollen , [X][X] d. h. [X] ||| 0.0278341 1 ||| ||| 0.0434783
+[X][X] wish [X] ||| [X][X] wollen [X] ||| 0.0260072 1 ||| ||| 0.72549
+the [X][X] wish [X] ||| [X][X] wollen [X] ||| 0.00182695 1 ||| ||| 0.72549
+[X][X] wish [X][X] , [X] ||| [X][X] wollen [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0844828
+[X][X] wish [X][X] , i.e. [X] ||| [X][X] wollen [X][X] , d. h. [X] ||| 0.0278341 1 ||| ||| 0.0434783
+[X][X] wish [X][X] [X] ||| [X][X] wollen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.271929
+[X][X] wish [X][X] i.e. [X] ||| [X][X] wollen [X][X] d. h. [X] ||| 0.0278341 1 ||| ||| 0.0434783
+[X][X] a petition has [X][X] [X] ||| [X][X] wurde [X][X] eine Petition [X] ||| 0.0278341 1 ||| ||| 0.430556
+would be [X][X] . [X] ||| [X][X] wäre . [X] ||| 0.0278341 1 ||| ||| 0.416667
+would be [X][X] [X] ||| [X][X] wäre [X] ||| 0.0278341 1 ||| ||| 0.583333
+[X][X] about Rule 143 [X] ||| [X][X] zu Artikel 143 [X] ||| 0.0278341 1 ||| ||| 0.0714286
+[X][X] about Rule [X] ||| [X][X] zu Artikel [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] to the start [X] ||| [X][X] zu Beginn [X] ||| 0.0278341 1 ||| ||| 0.413524
+[X][X] to the start [X][X] [X] ||| [X][X] zu Beginn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.679652
+[X][X] to environmental information [X] ||| [X][X] zu Umweltinformationen [X] ||| 0.0278341 1 ||| ||| 0.240476
+[X][X] to environmental information [X][X] [X] ||| [X][X] zu Umweltinformationen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.129167
+[X][X] about [X] ||| [X][X] zu [X] ||| 0.00293148 1 ||| ||| 1.89898
+[X][X] to [X] ||| [X][X] zu [X] ||| 0.215993 1 ||| ||| 1.89898
+[X][X] to [X][X] . [X] ||| [X][X] zu [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0625
+[X][X] to [X][X] presentation [X] ||| [X][X] zu [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.203409
+[X][X] to [X][X] presentation of [X] ||| [X][X] zu [X][X] Aussprache über [X] ||| 0.0278341 1 ||| ||| 0.116667
+[X][X] about [X][X] [X] ||| [X][X] zu [X][X] [X] ||| 0.00129584 1 ||| ||| 1.53425
+[X][X] to [X][X] [X] ||| [X][X] zu [X][X] [X] ||| 0.230179 1 ||| ||| 1.53425
+[X][X] to [X][X] the [X] ||| [X][X] zu [X][X] den [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] to [X][X] of the [X] ||| [X][X] zu [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.306944
+[X][X] to [X][X] of [X] ||| [X][X] zu [X][X] über [X] ||| 0.0278341 1 ||| ||| 0.116667
+[X][X] to [X][X] of the [X] ||| [X][X] zu [X][X] über den [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] was [X] ||| [X][X] zu beklagen gab , [X] ||| 0.0278341 1 ||| ||| 0.297619
+[X][X] was [X] ||| [X][X] zu beklagen gab , zählt [X] ||| 0.0278341 1 ||| ||| 0.254286
+[X][X] was Mr [X] ||| [X][X] zu beklagen gab , zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 0.0982143
+[X][X] was [X] ||| [X][X] zu beklagen gab , zählt auch [X] ||| 0.0278341 1 ||| ||| 0.1875
+[X][X] was [X] ||| [X][X] zu beklagen gab [X] ||| 0.0278341 1 ||| ||| 0.358824
+[X][X] for this [X] ||| [X][X] zu einer [X] ||| 0.0278341 1 ||| ||| 0.833333
+[X][X] for this [X][X] [X] ||| [X][X] zu einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.333333
+expressing [X][X] [X] ||| [X][X] zum [X] ||| 0.0278341 1 ||| ||| 0.75
+[X][X] to reprieve [X] ||| [X][X] zur Begnadigung [X] ||| 0.0225324 1 ||| ||| 0.525
+power [X][X] to reprieve [X] ||| [X][X] zur Begnadigung [X] ||| 0.00530173 1 ||| ||| 0.525
+[X][X] to reprieve [X][X] [X] ||| [X][X] zur Begnadigung [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] to reprieve the [X] ||| [X][X] zur Begnadigung des [X] ||| 0.0278341 1 ||| ||| 0.188034
+[X][X] to reprieve the [X][X] [X] ||| [X][X] zur Begnadigung des [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] reduction targets [X] ||| [X][X] zur Flottenverkleinerung [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] on [X] ||| [X][X] zur [X] ||| 0.0121269 1 ||| ||| 2.29524
+[X][X] to [X] ||| [X][X] zur [X] ||| 0.0102212 1 ||| ||| 2.29524
+power [X][X] to [X] ||| [X][X] zur [X] ||| 0.00202115 1 ||| ||| 2.29524
+the [X][X] to [X] ||| [X][X] zur [X] ||| 0.00173241 1 ||| ||| 2.29524
+the power [X][X] to [X] ||| [X][X] zur [X] ||| 0.00173241 1 ||| ||| 2.29524
+[X][X] on [X][X] . [X] ||| [X][X] zur [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.347222
+[X][X] to [X][X] condemned person [X] ||| [X][X] zur [X][X] Verurteilten [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] on [X][X] [X] ||| [X][X] zur [X][X] [X] ||| 0.0220428 1 ||| ||| 1.22414
+[X][X] to [X][X] [X] ||| [X][X] zur [X][X] [X] ||| 0.00579129 1 ||| ||| 1.22414
+[X][X] Mr Kumar Ponnambalam [X] ||| [X][X] zählt auch Herr Kumar Ponnambalam [X] ||| 0.0278341 1 ||| ||| 0.047619
+[X][X] Mr [X] ||| [X][X] zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 0.223214
+[X][X] Mr [X][X] [X] ||| [X][X] zählt auch Herr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.047619
+[X][X] of [X] ||| [X][X] über [X] ||| 0.0150857 1 ||| ||| 1.09167
+[X][X] on [X] ||| [X][X] über [X] ||| 0.0127484 1 ||| ||| 1.09167
+[X][X] on [X][X] [X] ||| [X][X] über [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] on [X][X] [X] ||| [X][X] über [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0285714
+[X][X] of [X][X] . [X] ||| [X][X] über [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.121544
+[X][X] of [X][X] [X] ||| [X][X] über [X][X] [X] ||| 0.012361 1 ||| ||| 0.669336
+[X][X] on [X][X] [X] ||| [X][X] über [X][X] [X] ||| 0.0122742 1 ||| ||| 0.669336
+[X][X] on [X][X] comes [X] ||| [X][X] über [X][X] [X] ||| 0.00319882 1 ||| ||| 0.669336
+[X][X] on [X][X] before [X] ||| [X][X] über [X][X] befassen , [X] ||| 0.013917 1 ||| ||| 0.074074
+[X][X] on [X][X] comes before [X] ||| [X][X] über [X][X] befassen , [X] ||| 0.013917 1 ||| ||| 0.074074
+[X][X] on [X][X] before [X] ||| [X][X] über [X][X] befassen , der [X] ||| 0.013917 1 ||| ||| 0.0571428
+[X][X] on [X][X] comes before [X] ||| [X][X] über [X][X] befassen , der [X] ||| 0.013917 1 ||| ||| 0.0571428
+[X][X] on [X][X] before [X] ||| [X][X] über [X][X] befassen [X] ||| 0.013917 1 ||| ||| 0.105263
+[X][X] on [X][X] comes before [X] ||| [X][X] über [X][X] befassen [X] ||| 0.013917 1 ||| ||| 0.105263
+[X][X] on [X][X] [X] ||| [X][X] über [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0285714
+[X][X] of the report . [X] ||| [X][X] über den Bericht . [X] ||| 0.0278341 1 ||| ||| 0.121544
+[X][X] of the report [X] ||| [X][X] über den Bericht [X] ||| 0.0278341 1 ||| ||| 0.175707
+[X][X] of the [X] ||| [X][X] über den [X] ||| 0.0278341 1 ||| ||| 0.327632
+[X][X] of the [X][X] [X] ||| [X][X] über den [X][X] [X] ||| 0.0278341 1 ||| ||| 0.121544
+[X][X] on multiannual guidance programmes [X] ||| [X][X] über mehrjährige Ausrichtungsprogramme [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] on multiannual [X] ||| [X][X] über mehrjährige [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] on multiannual [X][X] [X] ||| [X][X] über mehrjährige [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] on multiannual [X][X] [X] ||| [X][X] über mehrjährige [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0285714
+[X][X] on multiannual [X][X] [X] ||| [X][X] über mehrjährige [X][X] [X] ||| 0.0220798 1 ||| ||| 0.372086
+[X][X] on multiannual [X][X] comes [X] ||| [X][X] über mehrjährige [X][X] [X] ||| 0.00575427 1 ||| ||| 0.372086
+[X][X] on multiannual [X][X] before [X] ||| [X][X] über mehrjährige [X][X] befassen , [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] on multiannual [X][X] before [X] ||| [X][X] über mehrjährige [X][X] befassen , der [X] ||| 0.0278341 1 ||| ||| 0.0285714
+[X][X] on multiannual [X][X] before [X] ||| [X][X] über mehrjährige [X][X] befassen [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] on multiannual [X][X] [X] ||| [X][X] über mehrjährige [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0285714
+however , [X] ||| aber so , [X] ||| 0.0278341 1 ||| ||| 1
+however , [X] ||| aber so , daß [X] ||| 0.0278341 1 ||| ||| 1
+however , he [X] ||| aber so , daß er [X] ||| 0.0278341 1 ||| ||| 0.25
+however [X] ||| aber so [X] ||| 0.0278341 1 ||| ||| 1
+however [X][X] [X] ||| aber so [X][X] [X] ||| 0.0278341 1 ||| ||| 0.25
+had [X] ||| abgestattet hatte [X] ||| 0.0278341 1 ||| ||| 1
+all [X] ||| all [X] ||| 0.0278341 1 ||| ||| 1
+all [X] ||| alle [X] ||| 0.013917 1 ||| ||| 2
+all of [X] ||| alle [X] ||| 0.013917 1 ||| ||| 2
+all the victims [X] ||| allen Opfern [X] ||| 0.013721 1 ||| ||| 0.67619
+behalf of all the victims [X] ||| allen Opfern [X] ||| 0.00588044 1 ||| ||| 0.67619
+of all the victims [X] ||| allen Opfern [X] ||| 0.00823263 1 ||| ||| 0.67619
+all [X] ||| allen [X] ||| 0.00347926 1 ||| ||| 8
+all the [X] ||| allen [X] ||| 0.00347926 1 ||| ||| 8
+behalf of all [X] ||| allen [X] ||| 0.00347926 1 ||| ||| 8
+behalf of all the [X] ||| allen [X] ||| 0.00347926 1 ||| ||| 8
+of all [X] ||| allen [X] ||| 0.00347926 1 ||| ||| 8
+of all the [X] ||| allen [X] ||| 0.00347926 1 ||| ||| 8
+on behalf of all [X] ||| allen [X] ||| 0.00347926 1 ||| ||| 8
+on behalf of all the [X] ||| allen [X] ||| 0.00347926 1 ||| ||| 8
+all [X][X] [X] ||| allen [X][X] [X] ||| 0.0115803 1 ||| ||| 0.80119
+behalf of all [X][X] [X] ||| allen [X][X] [X] ||| 0.00496299 1 ||| ||| 0.80119
+of all [X][X] [X] ||| allen [X][X] [X] ||| 0.00694819 1 ||| ||| 0.80119
+on behalf of all [X][X] [X] ||| allen [X][X] [X] ||| 0.00434262 1 ||| ||| 0.80119
+everything [X] ||| alles [X] ||| 0.013917 1 ||| ||| 2
+everything she [X] ||| alles [X] ||| 0.013917 1 ||| ||| 2
+her to do everything [X][X] [X] ||| alles in ihrem [X][X] stehende zu tun [X] ||| 0.0278341 1 ||| ||| 0.833333
+her to do everything [X][X] [X] ||| alles in ihrem [X][X] zu tun [X] ||| 0.0278341 1 ||| ||| 0.833333
+as the [X] ||| als [X] ||| 0.0278341 1 ||| ||| 1
+Thursday [X] ||| am Donnerstag [X] ||| 0.0079526 1 ||| ||| 3.5
+on Thursday [X] ||| am Donnerstag [X] ||| 0.137954 1 ||| ||| 3.5
+on Thursday prior [X] ||| am Donnerstag [X] ||| 0.0039763 1 ||| ||| 3.5
+[X][X] Thursday . [X] ||| am Donnerstag [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.25
+on Thursday prior [X][X] presentation [X] ||| am Donnerstag [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.0625
+[X][X] Thursday [X] ||| am Donnerstag [X][X] [X] ||| 0.00952951 1 ||| ||| 0.97361
+on Thursday [X][X] [X] ||| am Donnerstag [X][X] [X] ||| 0.00952951 1 ||| ||| 0.97361
+on Thursday prior [X][X] [X] ||| am Donnerstag [X][X] [X] ||| 0.00877508 1 ||| ||| 0.97361
+on Thursday prior [X][X] of [X] ||| am Donnerstag [X][X] über [X] ||| 0.0278341 1 ||| ||| 0.05
+on Thursday and contains [X] ||| am Donnerstag mit [X] ||| 0.0278341 1 ||| ||| 0.333333
+on Thursday [X] ||| am Donnerstag zu [X] ||| 0.0222673 1 ||| ||| 1.25
+on Thursday prior to [X] ||| am Donnerstag zu [X] ||| 0.00556682 1 ||| ||| 1.25
+on Thursday prior to [X][X] [X] ||| am Donnerstag zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.306944
+do on Thursday . [X] ||| am Donnerstag zu tun . [X] ||| 0.0278341 1 ||| ||| 0.25
+do on Thursday [X] ||| am Donnerstag zu tun [X] ||| 0.0278341 1 ||| ||| 0.333333
+on [X] ||| am [X] ||| 0.0278341 1 ||| ||| 1
+on [X][X] presentation [X] ||| am [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.0625
+on [X][X] presentation of [X] ||| am [X][X] Aussprache über [X] ||| 0.0278341 1 ||| ||| 0.05
+on [X][X] the start [X] ||| am [X][X] Beginn [X] ||| 0.0278341 1 ||| ||| 0.111111
+on [X][X] the start [X][X] [X] ||| am [X][X] Beginn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.195833
+on [X][X] [X] ||| am [X][X] [X] ||| 0.241419 1 ||| ||| 1.05694
+on [X][X] of the presentation [X] ||| am [X][X] der Aussprache [X] ||| 0.0278341 1 ||| ||| 0.0625
+on [X][X] of the [X] ||| am [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0833333
+on [X][X] of the [X][X] [X] ||| am [X][X] der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.05
+on [X][X] to the start [X] ||| am [X][X] zu Beginn [X] ||| 0.0278341 1 ||| ||| 0.111111
+on [X][X] to [X] ||| am [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.25
+on [X][X] to [X][X] presentation [X] ||| am [X][X] zu [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.0625
+on [X][X] to [X][X] [X] ||| am [X][X] zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.306944
+on [X][X] to [X][X] of [X] ||| am [X][X] zu [X][X] über [X] ||| 0.0278341 1 ||| ||| 0.05
+on [X][X] of [X] ||| am [X][X] über [X] ||| 0.0278341 1 ||| ||| 0.05
+other [X] ||| anderen [X] ||| 0.013917 1 ||| ||| 2
+the other [X] ||| anderen [X] ||| 0.013917 1 ||| ||| 2
+before the courts [X] ||| angeklagt [X] ||| 0.00695852 1 ||| ||| 4
+courts [X] ||| angeklagt [X] ||| 0.00695852 1 ||| ||| 4
+go before the courts [X] ||| angeklagt [X] ||| 0.00695852 1 ||| ||| 4
+the courts [X] ||| angeklagt [X] ||| 0.00695852 1 ||| ||| 4
+[X][X] before the courts [X] ||| angeklagt [X][X] , [X] ||| 0.00927803 1 ||| ||| 0.157895
+[X][X] courts [X] ||| angeklagt [X][X] , [X] ||| 0.00927803 1 ||| ||| 0.157895
+[X][X] the courts [X] ||| angeklagt [X][X] , [X] ||| 0.00927803 1 ||| ||| 0.157895
+[X][X] before the courts [X] ||| angeklagt [X][X] [X] ||| 0.00927803 1 ||| ||| 0.388665
+[X][X] courts [X] ||| angeklagt [X][X] [X] ||| 0.00927803 1 ||| ||| 0.388665
+[X][X] the courts [X] ||| angeklagt [X][X] [X] ||| 0.00927803 1 ||| ||| 0.388665
+before the courts [X] ||| angeklagt werden [X] ||| 0.00695852 1 ||| ||| 4
+courts [X] ||| angeklagt werden [X] ||| 0.00695852 1 ||| ||| 4
+go before the courts [X] ||| angeklagt werden [X] ||| 0.00695852 1 ||| ||| 4
+the courts [X] ||| angeklagt werden [X] ||| 0.00695852 1 ||| ||| 4
+[X][X] before the courts [X] ||| angeklagt werden [X][X] , [X] ||| 0.00927803 1 ||| ||| 0.157895
+[X][X] courts [X] ||| angeklagt werden [X][X] , [X] ||| 0.00927803 1 ||| ||| 0.157895
+[X][X] the courts [X] ||| angeklagt werden [X][X] , [X] ||| 0.00927803 1 ||| ||| 0.157895
+[X][X] before the courts [X] ||| angeklagt werden [X][X] [X] ||| 0.00927803 1 ||| ||| 0.388665
+[X][X] courts [X] ||| angeklagt werden [X][X] [X] ||| 0.00927803 1 ||| ||| 0.388665
+[X][X] the courts [X] ||| angeklagt werden [X][X] [X] ||| 0.00927803 1 ||| ||| 0.388665
+to go before the courts [X] ||| angeklagt werden soll , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+to go before the courts [X] ||| angeklagt werden soll [X] ||| 0.0278341 1 ||| ||| 0.0769231
+appropriate [X] ||| angemessen , [X] ||| 0.0278341 1 ||| ||| 1
+appropriate [X][X] , Madam President [X] ||| angemessen , [X][X] , Frau Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0416667
+appropriate [X][X] , Madam [X] ||| angemessen , [X][X] , Frau [X] ||| 0.0278341 1 ||| ||| 0.0714286
+appropriate [X][X] , Madam [X][X] [X] ||| angemessen , [X][X] , Frau [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0452088
+appropriate [X][X] , Madam [X][X] [X] ||| angemessen , [X][X] , Frau [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate [X][X] , [X] ||| angemessen , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.152027
+appropriate [X][X] , [X][X] , [X] ||| angemessen , [X][X] , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.027027
+appropriate [X][X] , [X][X] , [X] ||| angemessen , [X][X] , [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate [X][X] , [X][X] [X] ||| angemessen , [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0868755
+appropriate [X][X] , [X][X] [X] ||| angemessen , [X][X] , [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate [X][X] , [X] ||| angemessen , [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate [X][X] Madam President , [X] ||| angemessen , [X][X] Frau Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.027027
+appropriate [X][X] Madam President , [X] ||| angemessen , [X][X] Frau Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate [X][X] Madam President [X] ||| angemessen , [X][X] Frau Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0416667
+appropriate [X][X] Madam [X] ||| angemessen , [X][X] Frau [X] ||| 0.0278341 1 ||| ||| 0.0714286
+appropriate [X][X] Madam [X][X] [X] ||| angemessen , [X][X] Frau [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0452088
+appropriate [X][X] Madam [X][X] [X] ||| angemessen , [X][X] Frau [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate [X][X] President , [X] ||| angemessen , [X][X] Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.027027
+appropriate [X][X] President , [X] ||| angemessen , [X][X] Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate [X][X] President [X] ||| angemessen , [X][X] Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0416667
+appropriate [X][X] [X] ||| angemessen , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.533304
+appropriate [X][X] [X] ||| angemessen , [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate for you , Madam [X] ||| angemessen , wenn Sie , Frau [X] ||| 0.0278341 1 ||| ||| 0.0714286
+appropriate for you , [X] ||| angemessen , wenn Sie , [X] ||| 0.0278341 1 ||| ||| 0.125
+appropriate for you , [X][X] [X] ||| angemessen , wenn Sie , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0868755
+appropriate for you , [X][X] [X] ||| angemessen , wenn Sie , [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate for you [X] ||| angemessen , wenn Sie [X] ||| 0.0278341 1 ||| ||| 0.25
+appropriate for you [X][X] , [X] ||| angemessen , wenn Sie [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.027027
+appropriate for you [X][X] , [X] ||| angemessen , wenn Sie [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate for you [X][X] President [X] ||| angemessen , wenn Sie [X][X] Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0416667
+appropriate for you [X][X] [X] ||| angemessen , wenn Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.158304
+appropriate for you [X][X] [X] ||| angemessen , wenn Sie [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate for [X] ||| angemessen , wenn [X] ||| 0.0278341 1 ||| ||| 1
+appropriate for [X][X] , [X] ||| angemessen , wenn [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.027027
+appropriate for [X][X] , [X] ||| angemessen , wenn [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate for [X][X] Madam President [X] ||| angemessen , wenn [X][X] Frau Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0416667
+appropriate for [X][X] Madam [X] ||| angemessen , wenn [X][X] Frau [X] ||| 0.0278341 1 ||| ||| 0.0714286
+appropriate for [X][X] Madam [X][X] [X] ||| angemessen , wenn [X][X] Frau [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0452088
+appropriate for [X][X] Madam [X][X] [X] ||| angemessen , wenn [X][X] Frau [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate for [X][X] President , [X] ||| angemessen , wenn [X][X] Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.027027
+appropriate for [X][X] President , [X] ||| angemessen , wenn [X][X] Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate for [X][X] President [X] ||| angemessen , wenn [X][X] Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0416667
+appropriate for [X][X] [X] ||| angemessen , wenn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.283304
+appropriate for [X][X] [X] ||| angemessen , wenn [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate [X] ||| angemessen [X] ||| 0.0278341 1 ||| ||| 1
+appropriate [X][X] , Madam President [X] ||| angemessen [X][X] , Frau Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0416667
+appropriate [X][X] , Madam [X] ||| angemessen [X][X] , Frau [X] ||| 0.0278341 1 ||| ||| 0.0714286
+appropriate [X][X] , Madam [X][X] [X] ||| angemessen [X][X] , Frau [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0452088
+appropriate [X][X] , Madam [X][X] [X] ||| angemessen [X][X] , Frau [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate [X][X] , [X] ||| angemessen [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.152027
+appropriate [X][X] , [X][X] , [X] ||| angemessen [X][X] , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.027027
+appropriate [X][X] , [X][X] , [X] ||| angemessen [X][X] , [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate [X][X] , [X][X] [X] ||| angemessen [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0868755
+appropriate [X][X] , [X][X] [X] ||| angemessen [X][X] , [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate [X][X] , [X] ||| angemessen [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate [X][X] Madam President , [X] ||| angemessen [X][X] Frau Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.027027
+appropriate [X][X] Madam President , [X] ||| angemessen [X][X] Frau Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate [X][X] Madam President [X] ||| angemessen [X][X] Frau Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0416667
+appropriate [X][X] Madam [X] ||| angemessen [X][X] Frau [X] ||| 0.0278341 1 ||| ||| 0.0714286
+appropriate [X][X] Madam [X][X] [X] ||| angemessen [X][X] Frau [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0452088
+appropriate [X][X] Madam [X][X] [X] ||| angemessen [X][X] Frau [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate [X][X] President , [X] ||| angemessen [X][X] Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.027027
+appropriate [X][X] President , [X] ||| angemessen [X][X] Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+appropriate [X][X] President [X] ||| angemessen [X][X] Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0416667
+appropriate [X][X] [X] ||| angemessen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.533304
+appropriate [X][X] [X] ||| angemessen [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0181818
+raise [X] ||| ansprechen [X] ||| 0.0278341 1 ||| ||| 1
+Mr Kumar Ponnambalam , who [X] ||| auch Herr Kumar Ponnambalam , der [X] ||| 0.0278341 1 ||| ||| 0.166667
+Mr Kumar Ponnambalam [X] ||| auch Herr Kumar Ponnambalam [X] ||| 0.0278341 1 ||| ||| 0.5
+Mr Kumar Ponnambalam [X][X] [X] ||| auch Herr Kumar Ponnambalam [X][X] [X] ||| 0.0278341 1 ||| ||| 0.166667
+Mr [X] ||| auch Herr [X] ||| 0.0278341 1 ||| ||| 1
+Mr [X][X] , who [X] ||| auch Herr [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.166667
+Mr [X][X] [X] ||| auch Herr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.666667
+, too , [X] ||| auch [X] ||| 0.00556682 1 ||| ||| 5
+, too [X] ||| auch [X] ||| 0.00556682 1 ||| ||| 5
+including [X] ||| auch [X] ||| 0.00556682 1 ||| ||| 5
+too , [X] ||| auch [X] ||| 0.00556682 1 ||| ||| 5
+too [X] ||| auch [X] ||| 0.00556682 1 ||| ||| 5
+[X][X] , who [X] ||| auch [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.166667
+[X][X] , too , [X] ||| auch [X][X] [X] ||| 0.00579877 1 ||| ||| 0.685714
+[X][X] , too [X] ||| auch [X][X] [X] ||| 0.00811828 1 ||| ||| 0.685714
+[X][X] too , [X] ||| auch [X][X] [X] ||| 0.00579877 1 ||| ||| 0.685714
+[X][X] too [X] ||| auch [X][X] [X] ||| 0.00811828 1 ||| ||| 0.685714
+[X][X] too [X][X] environmental information [X] ||| auch [X][X] [X][X] Umweltinformationen [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] , too , [X][X] [X] ||| auch [X][X] [X][X] [X] ||| 0.00514141 1 ||| ||| 0.589142
+[X][X] , too [X][X] [X] ||| auch [X][X] [X][X] [X] ||| 0.00877564 1 ||| ||| 0.589142
+[X][X] too , [X][X] [X] ||| auch [X][X] [X][X] [X] ||| 0.00514141 1 ||| ||| 0.589142
+[X][X] too [X][X] [X] ||| auch [X][X] [X][X] [X] ||| 0.00877564 1 ||| ||| 0.589142
+[X][X] , too [X][X] to [X] ||| auch [X][X] [X][X] zu [X] ||| 0.013917 1 ||| ||| 0.117647
+[X][X] too [X][X] to [X] ||| auch [X][X] [X][X] zu [X] ||| 0.013917 1 ||| ||| 0.117647
+[X][X] , too , access [X] ||| auch [X][X] der Zugang [X] ||| 0.013917 1 ||| ||| 0.153846
+[X][X] too , access [X] ||| auch [X][X] der Zugang [X] ||| 0.013917 1 ||| ||| 0.153846
+[X][X] too , access [X][X] [X] ||| auch [X][X] der Zugang [X][X] [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] too , access to [X] ||| auch [X][X] der Zugang zu [X] ||| 0.0278341 1 ||| ||| 0.0588235
+the [X] ||| auch der [X] ||| 0.0278341 1 ||| ||| 1
+in Russia , too , [X] ||| auch in Rußland [X] ||| 0.0115975 1 ||| ||| 0.342857
+in Russia , too [X] ||| auch in Rußland [X] ||| 0.0162366 1 ||| ||| 0.342857
+in Russia , too [X][X] [X] ||| auch in Rußland [X][X] [X] ||| 0.0278341 1 ||| ||| 0.185747
+in [X][X] too , [X] ||| auch in [X][X] [X] ||| 0.0115975 1 ||| ||| 0.342857
+in [X][X] too [X] ||| auch in [X][X] [X] ||| 0.0162366 1 ||| ||| 0.342857
+in [X][X] too , [X][X] [X] ||| auch in [X][X] [X][X] [X] ||| 0.0102828 1 ||| ||| 0.294571
+in [X][X] too [X][X] [X] ||| auch in [X][X] [X][X] [X] ||| 0.0175513 1 ||| ||| 0.294571
+in [X][X] too [X][X] to [X] ||| auch in [X][X] [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.0588235
+in [X][X] too , access [X] ||| auch in [X][X] der Zugang [X] ||| 0.0278341 1 ||| ||| 0.0769231
+including [X] ||| auch von [X] ||| 0.0278341 1 ||| ||| 1
+including myself [X] ||| auch von mir selbst , [X] ||| 0.0278341 1 ||| ||| 1
+including myself [X] ||| auch von mir selbst [X] ||| 0.0278341 1 ||| ||| 1
+at the request [X] ||| auf Wunsch [X] ||| 0.0278341 1 ||| ||| 0.333333
+at the request [X][X] , [X] ||| auf Wunsch [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0434783
+at the request [X][X] Mr [X] ||| auf Wunsch [X][X] Herrn [X] ||| 0.0278341 1 ||| ||| 0.0322581
+at the request [X][X] Member [X] ||| auf Wunsch [X][X] Mitglieds [X] ||| 0.0278341 1 ||| ||| 0.0588235
+at the request [X][X] Zimeray [X] ||| auf Wunsch [X][X] Zimeray [X] ||| 0.0278341 1 ||| ||| 0.0243902
+at the request [X][X] [X] ||| auf Wunsch [X][X] [X] ||| 0.0278341 1 ||| ||| 0.367283
+at the request [X][X] French [X] ||| auf Wunsch [X][X] französischen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+at the request of a [X] ||| auf Wunsch eines [X] ||| 0.0278341 1 ||| ||| 0.125
+at [X] ||| auf [X] ||| 0.00927803 1 ||| ||| 3
+at the [X] ||| auf [X] ||| 0.00927803 1 ||| ||| 3
+to [X] ||| auf [X] ||| 0.00927803 1 ||| ||| 3
+at [X][X] , Mr Zimeray [X] ||| auf [X][X] , Herrn Zimeray [X] ||| 0.0278341 1 ||| ||| 0.0243902
+at [X][X] , Mr [X] ||| auf [X][X] , Herrn [X] ||| 0.013917 1 ||| ||| 0.0645162
+at the [X][X] , Mr [X] ||| auf [X][X] , Herrn [X] ||| 0.013917 1 ||| ||| 0.0645162
+at [X][X] , [X] ||| auf [X][X] , [X] ||| 0.013917 1 ||| ||| 0.0869566
+at the [X][X] , [X] ||| auf [X][X] , [X] ||| 0.013917 1 ||| ||| 0.0869566
+at [X][X] , [X][X] [X] ||| auf [X][X] , [X][X] [X] ||| 0.0139171 1 ||| ||| 0.0487804
+at the [X][X] , [X][X] [X] ||| auf [X][X] , [X][X] [X] ||| 0.0139171 1 ||| ||| 0.0487804
+at [X][X] Mr Zimeray [X] ||| auf [X][X] Herrn Zimeray [X] ||| 0.0139171 1 ||| ||| 0.0487804
+at the [X][X] Mr Zimeray [X] ||| auf [X][X] Herrn Zimeray [X] ||| 0.0139171 1 ||| ||| 0.0487804
+at [X][X] Mr [X] ||| auf [X][X] Herrn [X] ||| 0.013917 1 ||| ||| 0.0645162
+at the [X][X] Mr [X] ||| auf [X][X] Herrn [X] ||| 0.013917 1 ||| ||| 0.0645162
+at [X][X] Member , Mr [X] ||| auf [X][X] Mitglieds , Herrn [X] ||| 0.0278341 1 ||| ||| 0.0322581
+at [X][X] Member , [X] ||| auf [X][X] Mitglieds , [X] ||| 0.013917 1 ||| ||| 0.0869566
+at the [X][X] Member , [X] ||| auf [X][X] Mitglieds , [X] ||| 0.013917 1 ||| ||| 0.0869566
+at [X][X] Member , [X][X] [X] ||| auf [X][X] Mitglieds , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0243902
+at [X][X] Member [X] ||| auf [X][X] Mitglieds [X] ||| 0.013917 1 ||| ||| 0.117647
+at the [X][X] Member [X] ||| auf [X][X] Mitglieds [X] ||| 0.013917 1 ||| ||| 0.117647
+at [X][X] Member [X][X] Zimeray [X] ||| auf [X][X] Mitglieds [X][X] Zimeray [X] ||| 0.0278341 1 ||| ||| 0.0243902
+at [X][X] Member [X][X] [X] ||| auf [X][X] Mitglieds [X][X] [X] ||| 0.013917 1 ||| ||| 0.113297
+at the [X][X] Member [X][X] [X] ||| auf [X][X] Mitglieds [X][X] [X] ||| 0.013917 1 ||| ||| 0.113297
+at [X][X] Zimeray [X] ||| auf [X][X] Zimeray [X] ||| 0.0139171 1 ||| ||| 0.0487804
+at the [X][X] Zimeray [X] ||| auf [X][X] Zimeray [X] ||| 0.0139171 1 ||| ||| 0.0487804
+at [X][X] [X] ||| auf [X][X] [X] ||| 0.0139171 1 ||| ||| 1.40123
+at the [X][X] [X] ||| auf [X][X] [X] ||| 0.00729571 1 ||| ||| 1.40123
+to [X][X] [X] ||| auf [X][X] [X] ||| 0.00662133 1 ||| ||| 1.40123
+[X][X] to [X][X] [X] ||| auf [X][X] [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] to [X][X] in [X] ||| auf [X][X] [X][X] , mit [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] to [X][X] in which [X] ||| auf [X][X] [X][X] , mit dem [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] to [X][X] in which [X] ||| auf [X][X] [X][X] , mit dem sich [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] to [X][X] [X] ||| auf [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.342857
+[X][X] to [X][X] in [X] ||| auf [X][X] [X][X] mit [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] to [X][X] in which [X] ||| auf [X][X] [X][X] mit dem [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] to [X][X] in which [X] ||| auf [X][X] [X][X] mit dem sich [X] ||| 0.0278341 1 ||| ||| 0.0909091
+draw your attention to [X][X] [X] ||| auf [X][X] aufmerksam machen , [X] ||| 0.0278341 1 ||| ||| 0.142857
+draw your attention to [X][X] [X] ||| auf [X][X] aufmerksam machen [X] ||| 0.0278341 1 ||| ||| 0.2
+at [X][X] of a [X] ||| auf [X][X] eines [X] ||| 0.0278341 1 ||| ||| 0.125
+at [X][X] of a [X][X] [X] ||| auf [X][X] eines [X][X] [X] ||| 0.0278341 1 ||| ||| 0.15895
+at [X][X] of a French [X] ||| auf [X][X] eines französischen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+at [X][X] French Member , [X] ||| auf [X][X] französischen Mitglieds , [X] ||| 0.0278341 1 ||| ||| 0.0434783
+at [X][X] French Member [X] ||| auf [X][X] französischen Mitglieds [X] ||| 0.013917 1 ||| ||| 0.117647
+at the [X][X] French Member [X] ||| auf [X][X] französischen Mitglieds [X] ||| 0.013917 1 ||| ||| 0.117647
+at [X][X] French Member [X][X] [X] ||| auf [X][X] französischen Mitglieds [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0566483
+at [X][X] French [X] ||| auf [X][X] französischen [X] ||| 0.013917 1 ||| ||| 0.166667
+at the [X][X] French [X] ||| auf [X][X] französischen [X] ||| 0.013917 1 ||| ||| 0.166667
+at [X][X] French [X][X] Mr [X] ||| auf [X][X] französischen [X][X] Herrn [X] ||| 0.0278341 1 ||| ||| 0.0322581
+at [X][X] French [X][X] Zimeray [X] ||| auf [X][X] französischen [X][X] Zimeray [X] ||| 0.0278341 1 ||| ||| 0.0243902
+at [X][X] French [X][X] [X] ||| auf [X][X] französischen [X][X] [X] ||| 0.013917 1 ||| ||| 0.200254
+at the [X][X] French [X][X] [X] ||| auf [X][X] französischen [X][X] [X] ||| 0.013917 1 ||| ||| 0.200254
+which [X] ||| auf die [X] ||| 0.0278341 1 ||| ||| 1
+which I [X] ||| auf die ich [X] ||| 0.0278341 1 ||| ||| 1
+to a case [X] ||| auf einen Fall [X] ||| 0.0278341 1 ||| ||| 0.333333
+[X][X] to a case [X] ||| auf einen Fall [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] to a case [X][X] [X] ||| auf einen Fall [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.315909
+[X][X] to a case [X][X] [X] ||| auf einen Fall [X][X] , [X][X] sich [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] to a case in [X] ||| auf einen Fall [X][X] , mit [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] to a case [X] ||| auf einen Fall [X][X] [X] ||| 0.0278341 1 ||| ||| 0.342857
+[X][X] to a case [X][X] [X] ||| auf einen Fall [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.631818
+[X][X] to a case [X][X] [X] ||| auf einen Fall [X][X] [X][X] sich [X] ||| 0.0278341 1 ||| ||| 0.181818
+[X][X] to a case in [X] ||| auf einen Fall [X][X] mit [X] ||| 0.0278341 1 ||| ||| 0.142857
+to a [X] ||| auf einen [X] ||| 0.0278341 1 ||| ||| 1
+draw your attention [X] ||| aufmerksam machen , [X] ||| 0.0278341 1 ||| ||| 1
+draw your attention [X] ||| aufmerksam machen [X] ||| 0.0278341 1 ||| ||| 1
+from [X] ||| aus [X] ||| 0.0278341 1 ||| ||| 1
+from [X][X] [X] ||| aus [X][X] [X] ||| 0.0278341 1 ||| ||| 0.590909
+from [X][X] television [X] ||| aus [X][X] dem Fernsehen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+aware from [X][X] television that [X] ||| aus [X][X] dem Fernsehen wissen , [X] ||| 0.0278341 1 ||| ||| 0.125
+aware from [X][X] television [X] ||| aus [X][X] dem Fernsehen wissen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+aware from [X][X] television [X][X] [X] ||| aus [X][X] dem Fernsehen wissen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111111
+from [X][X] and [X] ||| aus [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.166667
+from [X][X] and television [X] ||| aus [X][X] und dem Fernsehen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+aware from [X][X] and television [X] ||| aus [X][X] und dem Fernsehen wissen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+aware from [X][X] that [X] ||| aus [X][X] wissen , [X] ||| 0.0278341 1 ||| ||| 0.125
+aware from [X][X] that [X][X] [X] ||| aus [X][X] wissen , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111111
+aware from [X][X] [X] ||| aus [X][X] wissen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+from the press [X] ||| aus der Presse [X] ||| 0.0278341 1 ||| ||| 0.333333
+from the press [X][X] [X] ||| aus der Presse [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0909091
+aware from the press [X][X] [X] ||| aus der Presse [X][X] wissen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+from the press and [X] ||| aus der Presse und [X] ||| 0.0278341 1 ||| ||| 0.166667
+from the press and television [X] ||| aus der Presse und dem Fernsehen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+from the [X] ||| aus der [X] ||| 0.0278341 1 ||| ||| 1
+from the [X][X] [X] ||| aus der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.257576
+from the [X][X] television [X] ||| aus der [X][X] dem Fernsehen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+aware from the [X][X] television [X] ||| aus der [X][X] dem Fernsehen wissen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+aware from the [X][X] that [X] ||| aus der [X][X] wissen , [X] ||| 0.0278341 1 ||| ||| 0.125
+aware from the [X][X] [X] ||| aus der [X][X] wissen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+before [X] ||| befassen , [X] ||| 0.013917 1 ||| ||| 2
+comes before [X] ||| befassen , [X] ||| 0.013917 1 ||| ||| 2
+before [X] ||| befassen , der [X] ||| 0.013917 1 ||| ||| 2
+comes before [X] ||| befassen , der [X] ||| 0.013917 1 ||| ||| 2
+before [X] ||| befassen [X] ||| 0.013917 1 ||| ||| 2
+comes before [X] ||| befassen [X] ||| 0.013917 1 ||| ||| 2
+has [X] ||| befugt [X] ||| 0.00927803 1 ||| ||| 3
+has the [X] ||| befugt [X] ||| 0.00927803 1 ||| ||| 3
+has the power [X] ||| befugt [X] ||| 0.00927803 1 ||| ||| 3
+can competently [X] ||| befugt bin [X] ||| 0.0278341 1 ||| ||| 1
+to [X] ||| bei [X] ||| 0.241419 1 ||| ||| 2
+to [X][X] report [X] ||| bei [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.0526316
+to [X][X] report [X][X] [X] ||| bei [X][X] Bericht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0285714
+to [X][X] report , [X] ||| bei [X][X] Bericht und [X] ||| 0.0278341 1 ||| ||| 0.0344828
+to [X][X] report , [X][X] [X] ||| bei [X][X] Bericht und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0285714
+to [X][X] Governor [X] ||| bei [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.12
+to [X][X] the Governor [X] ||| bei [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.12
+to [X][X] to the Governor [X] ||| bei [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.12
+to [X][X] Governor of [X] ||| bei [X][X] Gouverneur von [X] ||| 0.013917 1 ||| ||| 0.0571428
+to [X][X] the Governor of [X] ||| bei [X][X] Gouverneur von [X] ||| 0.013917 1 ||| ||| 0.0571428
+to [X][X] [X] ||| bei [X][X] [X] ||| 0.205495 1 ||| ||| 1.70594
+to [X][X] the [X] ||| bei [X][X] [X] ||| 0.00125508 1 ||| ||| 1.70594
+to [X][X] to [X] ||| bei [X][X] [X] ||| 0.0016316 1 ||| ||| 1.70594
+to [X][X] to the [X] ||| bei [X][X] [X] ||| 0.00125508 1 ||| ||| 1.70594
+to [X][X] the [X][X] [X] ||| bei [X][X] [X][X] [X] ||| 0.00632593 1 ||| ||| 0.125714
+to [X][X] to [X][X] [X] ||| bei [X][X] [X][X] [X] ||| 0.0151822 1 ||| ||| 0.125714
+to [X][X] to the [X][X] [X] ||| bei [X][X] [X][X] [X] ||| 0.00632593 1 ||| ||| 0.125714
+to [X][X] to [X][X] of [X] ||| bei [X][X] [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0285714
+to [X][X] a report [X] ||| bei [X][X] einen Bericht [X] ||| 0.0278341 1 ||| ||| 0.0526316
+to [X][X] a report [X][X] [X] ||| bei [X][X] einen Bericht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0285714
+to [X][X] a report , [X] ||| bei [X][X] einen Bericht und [X] ||| 0.0278341 1 ||| ||| 0.0344828
+to [X][X] a [X] ||| bei [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+to [X][X] a [X][X] [X] ||| bei [X][X] einen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0630542
+to [X][X] not a [X] ||| bei [X][X] keinen [X] ||| 0.0278341 1 ||| ||| 0.0285714
+to [X][X] merely [X] ||| bei [X][X] lediglich um [X] ||| 0.0278341 1 ||| ||| 0.166667
+to [X][X] merely [X][X] [X] ||| bei [X][X] lediglich um [X][X] [X] ||| 0.0278341 1 ||| ||| 0.115686
+to [X][X] merely [X][X] , [X] ||| bei [X][X] lediglich um [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0344828
+to [X][X] merely a report [X] ||| bei [X][X] lediglich um einen Bericht [X] ||| 0.0278341 1 ||| ||| 0.0526316
+to [X][X] merely a [X] ||| bei [X][X] lediglich um einen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+to [X][X] merely a [X][X] [X] ||| bei [X][X] lediglich um einen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0630542
+to [X][X] , [X] ||| bei [X][X] und [X] ||| 0.00253866 1 ||| ||| 0.378073
+to [X][X] and [X] ||| bei [X][X] und [X] ||| 0.0122702 1 ||| ||| 0.378073
+to [X][X] and to [X] ||| bei [X][X] und [X] ||| 0.0073621 1 ||| ||| 0.378073
+to [X][X] and to the [X] ||| bei [X][X] und [X] ||| 0.00566315 1 ||| ||| 0.378073
+to [X][X] , [X][X] [X] ||| bei [X][X] und [X][X] [X] ||| 0.00479898 1 ||| ||| 0.165714
+to [X][X] and [X][X] [X] ||| bei [X][X] und [X][X] [X] ||| 0.0115176 1 ||| ||| 0.165714
+to [X][X] and to [X][X] [X] ||| bei [X][X] und [X][X] [X] ||| 0.0115176 1 ||| ||| 0.165714
+to [X][X] and [X][X] of [X] ||| bei [X][X] und [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0285714
+to [X][X] , not a [X] ||| bei [X][X] und keinen [X] ||| 0.0278341 1 ||| ||| 0.0285714
+to [X][X] of [X] ||| bei [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0285714
+to the President [X] ||| bei dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.333333
+to the President [X][X] Governor [X] ||| bei dem Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.04
+to the President [X][X] [X] ||| bei dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0211934 1 ||| ||| 0.322418
+to the President [X][X] the [X] ||| bei dem Präsidentschaftskandidaten [X][X] [X] ||| 0.00664071 1 ||| ||| 0.322418
+to the President [X][X] of [X] ||| bei dem Präsidentschaftskandidaten [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0285714
+to the President and [X] ||| bei dem Präsidentschaftskandidaten und [X] ||| 0.0173963 1 ||| ||| 0.266667
+to the President and to [X] ||| bei dem Präsidentschaftskandidaten und [X] ||| 0.0104378 1 ||| ||| 0.266667
+to the President and [X][X] [X] ||| bei dem Präsidentschaftskandidaten und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0685714
+to the [X] ||| bei dem [X] ||| 0.0278341 1 ||| ||| 1
+to the [X][X] Governor [X] ||| bei dem [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.08
+to the [X][X] the Governor [X] ||| bei dem [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.08
+to the [X][X] Governor of [X] ||| bei dem [X][X] Gouverneur von [X] ||| 0.0278341 1 ||| ||| 0.0285714
+to the [X][X] [X] ||| bei dem [X][X] [X] ||| 0.0172252 1 ||| ||| 0.666007
+to the [X][X] the [X] ||| bei dem [X][X] [X] ||| 0.00321481 1 ||| ||| 0.666007
+to the [X][X] to [X] ||| bei dem [X][X] [X] ||| 0.00417925 1 ||| ||| 0.666007
+to the [X][X] to the [X] ||| bei dem [X][X] [X] ||| 0.00321481 1 ||| ||| 0.666007
+to the [X][X] the [X][X] [X] ||| bei dem [X][X] [X][X] [X] ||| 0.0081865 1 ||| ||| 0.0971428
+to the [X][X] to [X][X] [X] ||| bei dem [X][X] [X][X] [X] ||| 0.0196476 1 ||| ||| 0.0971428
+to the [X][X] of [X] ||| bei dem [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0285714
+to what [X] ||| bei dem es [X] ||| 0.0278341 1 ||| ||| 1
+to what [X][X] report [X] ||| bei dem es [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.0526316
+to what [X][X] report [X][X] [X] ||| bei dem es [X][X] Bericht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0285714
+to what [X][X] report , [X] ||| bei dem es [X][X] Bericht und [X] ||| 0.0278341 1 ||| ||| 0.0344828
+to what [X][X] [X] ||| bei dem es [X][X] [X] ||| 0.0278341 1 ||| ||| 0.373262
+to what [X][X] a report [X] ||| bei dem es [X][X] einen Bericht [X] ||| 0.0278341 1 ||| ||| 0.0526316
+to what [X][X] a [X] ||| bei dem es [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+to what [X][X] a [X][X] [X] ||| bei dem es [X][X] einen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0630542
+to what [X][X] not a [X] ||| bei dem es [X][X] keinen [X] ||| 0.0278341 1 ||| ||| 0.0285714
+to what [X][X] , [X] ||| bei dem es [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0344828
+to what [X][X] , [X][X] [X] ||| bei dem es [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0285714
+to what is [X] ||| bei dem es sich [X] ||| 0.0278341 1 ||| ||| 0.333333
+to what is [X][X] report [X] ||| bei dem es sich [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.0526316
+to what is [X][X] [X] ||| bei dem es sich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.206595
+to what is [X][X] , [X] ||| bei dem es sich [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0344828
+to what is merely [X] ||| bei dem es sich lediglich um [X] ||| 0.0278341 1 ||| ||| 0.166667
+to what is merely [X][X] [X] ||| bei dem es sich lediglich um [X][X] [X] ||| 0.0278341 1 ||| ||| 0.115686
+to what is merely a [X] ||| bei dem es sich lediglich um einen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] , who [X] ||| beklagen [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0588235
+[X][X] Kumar Ponnambalam , who [X] ||| beklagen [X][X] Kumar Ponnambalam , der [X] ||| 0.0278341 1 ||| ||| 0.0588235
+[X][X] Kumar Ponnambalam [X] ||| beklagen [X][X] Kumar Ponnambalam [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] Kumar Ponnambalam [X][X] [X] ||| beklagen [X][X] Kumar Ponnambalam [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0588235
+was [X] ||| beklagen gab , [X] ||| 0.0278341 1 ||| ||| 1
+was [X][X] , who [X] ||| beklagen gab , [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0588235
+was [X][X] [X] ||| beklagen gab , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.183824
+was [X] ||| beklagen gab , zählt [X] ||| 0.0278341 1 ||| ||| 1
+was [X][X] , who [X] ||| beklagen gab , zählt [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0588235
+was [X][X] [X] ||| beklagen gab , zählt [X][X] [X] ||| 0.0278341 1 ||| ||| 0.183824
+was Mr Kumar Ponnambalam [X] ||| beklagen gab , zählt auch Herr Kumar Ponnambalam [X] ||| 0.0278341 1 ||| ||| 0.125
+was Mr Kumar Ponnambalam [X][X] [X] ||| beklagen gab , zählt auch Herr Kumar Ponnambalam [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0588235
+was Mr [X] ||| beklagen gab , zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 1
+was Mr [X][X] , who [X] ||| beklagen gab , zählt auch Herr [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0588235
+was Mr [X][X] [X] ||| beklagen gab , zählt auch Herr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.183824
+was [X] ||| beklagen gab , zählt auch [X] ||| 0.0278341 1 ||| ||| 1
+was [X][X] , who [X] ||| beklagen gab , zählt auch [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0588235
+was [X][X] [X] ||| beklagen gab , zählt auch [X][X] [X] ||| 0.0278341 1 ||| ||| 0.183824
+was [X] ||| beklagen gab [X] ||| 0.0278341 1 ||| ||| 1
+was [X][X] , who [X] ||| beklagen gab [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0588235
+was [X][X] [X] ||| beklagen gab [X][X] [X] ||| 0.0278341 1 ||| ||| 0.183824
+already been [X] ||| bereits [X] ||| 0.0278341 1 ||| ||| 1
+have [X] ||| besteht [X] ||| 0.0278341 1 ||| ||| 1
+have [X][X] debate [X] ||| besteht [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.1
+have [X][X] debate on [X] ||| besteht [X][X] Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.0555556
+have [X][X] [X] ||| besteht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.355556
+have [X][X] on [X] ||| besteht [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0555556
+have requested [X] ||| besteht der Wunsch [X] ||| 0.0278341 1 ||| ||| 1
+have requested [X][X] [X] ||| besteht der Wunsch [X][X] [X] ||| 0.0278341 1 ||| ||| 0.155556
+have requested [X][X] on [X] ||| besteht der Wunsch [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0555556
+have requested [X] ||| besteht der Wunsch nach [X] ||| 0.0278341 1 ||| ||| 1
+have requested [X][X] [X] ||| besteht der Wunsch nach [X][X] [X] ||| 0.0278341 1 ||| ||| 0.155556
+have requested [X][X] on [X] ||| besteht der Wunsch nach [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0555556
+have requested a debate [X] ||| besteht der Wunsch nach einer Aussprache [X] ||| 0.0278341 1 ||| ||| 0.1
+have requested a debate on [X] ||| besteht der Wunsch nach einer Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.0555556
+have requested a [X] ||| besteht der Wunsch nach einer [X] ||| 0.0278341 1 ||| ||| 0.2
+have requested a [X][X] [X] ||| besteht der Wunsch nach einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0555556
+have [X] ||| besteht der [X] ||| 0.0278341 1 ||| ||| 1
+have [X][X] debate [X] ||| besteht der [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.1
+have [X][X] debate on [X] ||| besteht der [X][X] Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.0555556
+have [X][X] [X] ||| besteht der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.355556
+have [X][X] on [X] ||| besteht der [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0555556
+relates [X] ||| betrifft [X] ||| 0.013917 1 ||| ||| 2
+relates to [X] ||| betrifft [X] ||| 0.013917 1 ||| ||| 2
+relates [X][X] that [X] ||| betrifft [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.166667
+relates [X][X] [X] ||| betrifft [X][X] [X] ||| 0.0208756 1 ||| ||| 0.666667
+relates to [X][X] [X] ||| betrifft [X][X] [X] ||| 0.00695854 1 ||| ||| 0.666667
+relates to something that [X] ||| betrifft eine Angelegenheit , die [X] ||| 0.0278341 1 ||| ||| 0.166667
+relates to something [X] ||| betrifft eine Angelegenheit [X] ||| 0.0278341 1 ||| ||| 0.333333
+, [X] ||| bitten - [X] ||| 0.0278341 1 ||| ||| 1
+ask [X] ||| bitten [X] ||| 0.0278341 1 ||| ||| 1
+i.e. [X] ||| d. h. [X] ||| 0.0278341 1 ||| ||| 1
+i.e. [X][X] presentation [X] ||| d. h. [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.05
+i.e. [X][X] the start [X] ||| d. h. [X][X] Beginn [X] ||| 0.0278341 1 ||| ||| 0.0769231
+i.e. [X][X] the start [X][X] [X] ||| d. h. [X][X] Beginn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.1125
+i.e. [X][X] [X] ||| d. h. [X][X] [X] ||| 0.0278341 1 ||| ||| 0.58228
+i.e. [X][X] of the presentation [X] ||| d. h. [X][X] der Aussprache [X] ||| 0.0278341 1 ||| ||| 0.05
+i.e. [X][X] of the [X] ||| d. h. [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0625
+i.e. [X][X] to the start [X] ||| d. h. [X][X] zu Beginn [X] ||| 0.0278341 1 ||| ||| 0.0769231
+i.e. [X][X] to [X] ||| d. h. [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.142857
+i.e. [X][X] to [X][X] presentation [X] ||| d. h. [X][X] zu [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.05
+i.e. [X][X] to [X][X] [X] ||| d. h. [X][X] zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.189423
+i.e. on Thursday prior [X] ||| d. h. am Donnerstag [X] ||| 0.0278341 1 ||| ||| 0.25
+i.e. on Thursday prior [X][X] [X] ||| d. h. am Donnerstag [X][X] [X] ||| 0.0278341 1 ||| ||| 0.189423
+i.e. on Thursday prior to [X] ||| d. h. am Donnerstag zu [X] ||| 0.0278341 1 ||| ||| 0.142857
+i.e. on [X] ||| d. h. am [X] ||| 0.0278341 1 ||| ||| 1
+i.e. on [X][X] presentation [X] ||| d. h. am [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.05
+i.e. on [X][X] the start [X] ||| d. h. am [X][X] Beginn [X] ||| 0.0278341 1 ||| ||| 0.0769231
+i.e. on [X][X] [X] ||| d. h. am [X][X] [X] ||| 0.0278341 1 ||| ||| 0.58228
+i.e. on [X][X] of the [X] ||| d. h. am [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0625
+i.e. on [X][X] to [X] ||| d. h. am [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.142857
+i.e. on [X][X] to [X][X] [X] ||| d. h. am [X][X] zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.189423
+for [X] ||| damit [X] ||| 0.013917 1 ||| ||| 2
+for next [X] ||| damit [X] ||| 0.013917 1 ||| ||| 2
+agrees , [X] ||| damit einverstanden ist , [X] ||| 0.0278341 1 ||| ||| 1
+agrees , [X][X] [X] ||| damit einverstanden ist , [X][X] [X] ||| 0.0208756 1 ||| ||| 0.833333
+agrees , [X][X] do [X] ||| damit einverstanden ist , [X][X] [X] ||| 0.00695852 1 ||| ||| 0.833333
+agrees , [X][X] [X] ||| damit einverstanden ist , [X][X] dem [X] ||| 0.0208756 1 ||| ||| 0.333333
+agrees , [X][X] do [X] ||| damit einverstanden ist , [X][X] dem [X] ||| 0.00695852 1 ||| ||| 0.333333
+agrees , I [X][X] [X] ||| damit einverstanden ist , [X][X] ich [X] ||| 0.0278341 1 ||| ||| 0.125
+agrees , I [X][X] [X] ||| damit einverstanden ist , [X][X] ich dem [X] ||| 0.0278341 1 ||| ||| 0.0833333
+agrees , I shall [X] ||| damit einverstanden ist , werde ich [X] ||| 0.0185561 1 ||| ||| 0.375
+agrees , I shall do [X] ||| damit einverstanden ist , werde ich [X] ||| 0.00927803 1 ||| ||| 0.375
+agrees , I shall [X] ||| damit einverstanden ist , werde ich dem [X] ||| 0.0185561 1 ||| ||| 0.25
+agrees , I shall do [X] ||| damit einverstanden ist , werde ich dem [X] ||| 0.00927802 1 ||| ||| 0.25
+agrees [X] ||| damit einverstanden ist [X] ||| 0.0278341 1 ||| ||| 1
+agrees [X][X] [X] ||| damit einverstanden ist [X][X] [X] ||| 0.0208756 1 ||| ||| 0.833333
+agrees [X][X] do [X] ||| damit einverstanden ist [X][X] [X] ||| 0.00695852 1 ||| ||| 0.833333
+agrees [X][X] [X] ||| damit einverstanden ist [X][X] dem [X] ||| 0.0208756 1 ||| ||| 0.333333
+agrees [X][X] do [X] ||| damit einverstanden ist [X][X] dem [X] ||| 0.00695852 1 ||| ||| 0.333333
+for [X] ||| damit zusammen [X] ||| 0.013917 1 ||| ||| 2
+for next [X] ||| damit zusammen [X] ||| 0.013917 1 ||| ||| 2
+the time when [X] ||| dann [X] ||| 0.00927803 1 ||| ||| 3
+then [X] ||| dann [X] ||| 0.00927803 1 ||| ||| 3
+time when [X] ||| dann [X] ||| 0.00927803 1 ||| ||| 3
+the time when [X][X] , [X] ||| dann [X][X] , [X] ||| 0.0126041 1 ||| ||| 0.441667
+time when [X][X] , [X] ||| dann [X][X] , [X] ||| 0.01523 1 ||| ||| 0.441667
+time when [X][X] , [X][X] [X] ||| dann [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.183824
+time when [X][X] , if [X] ||| dann [X][X] , wenn [X] ||| 0.0278341 1 ||| ||| 0.125
+the time when [X][X] you [X] ||| dann [X][X] Sie [X] ||| 0.0128465 1 ||| ||| 0.154762
+time when [X][X] you [X] ||| dann [X][X] Sie [X] ||| 0.0149876 1 ||| ||| 0.154762
+time when [X][X] you [X][X] [X] ||| dann [X][X] Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0416667
+time when [X][X] you wish [X] ||| dann [X][X] Sie wollen [X] ||| 0.0278341 1 ||| ||| 0.0588235
+the time when [X][X] [X] ||| dann [X][X] [X] ||| 0.0124361 1 ||| ||| 1.52232
+time when [X][X] [X] ||| dann [X][X] [X] ||| 0.015398 1 ||| ||| 1.52232
+time when [X][X] if you [X] ||| dann [X][X] wenn Sie [X] ||| 0.0278341 1 ||| ||| 0.0833333
+the time when [X][X] if [X] ||| dann [X][X] wenn [X] ||| 0.0130984 1 ||| ||| 0.236111
+time when [X][X] if [X] ||| dann [X][X] wenn [X] ||| 0.0147357 1 ||| ||| 0.236111
+time when [X][X] if [X][X] [X] ||| dann [X][X] wenn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.10049
+time when [X][X] wish , [X] ||| dann [X][X] wollen , [X] ||| 0.0278341 1 ||| ||| 0.0416667
+the time when [X][X] wish [X] ||| dann [X][X] wollen [X] ||| 0.0124521 1 ||| ||| 0.106442
+time when [X][X] wish [X] ||| dann [X][X] wollen [X] ||| 0.015382 1 ||| ||| 0.106442
+time when you may , [X] ||| dann können Sie , [X] ||| 0.0278341 1 ||| ||| 0.2
+the time when you may [X] ||| dann können Sie [X] ||| 0.0119289 1 ||| ||| 0.583333
+time when you may [X] ||| dann können Sie [X] ||| 0.0159052 1 ||| ||| 0.583333
+time when you may [X][X] [X] ||| dann können Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.308824
+the courts [X] ||| das Gericht [X] ||| 0.0185561 1 ||| ||| 1.5
+the courts have [X] ||| das Gericht [X] ||| 0.00927803 1 ||| ||| 1.5
+the courts [X][X] that [X] ||| das Gericht [X][X] , daß [X] ||| 0.013917 1 ||| ||| 0.0869566
+the courts have [X][X] that [X] ||| das Gericht [X][X] , daß [X] ||| 0.013917 1 ||| ||| 0.0869566
+the courts [X][X] [X] ||| das Gericht [X][X] [X] ||| 0.013917 1 ||| ||| 0.608886
+the courts have [X][X] [X] ||| das Gericht [X][X] [X] ||| 0.013917 1 ||| ||| 0.608886
+the courts [X][X] made [X][X] [X] ||| das Gericht [X][X] [X][X] gemacht hat [X] ||| 0.0278341 1 ||| ||| 0.0526316
+the courts [X][X] and [X] ||| das Gericht [X][X] und [X] ||| 0.013917 1 ||| ||| 0.166667
+the courts have [X][X] and [X] ||| das Gericht [X][X] und [X] ||| 0.013917 1 ||| ||| 0.166667
+the courts [X][X] and [X][X] [X] ||| das Gericht [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0961098
+the courts [X][X] him [X] ||| das Gericht ihn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.125
+the courts [X][X] him [X][X] [X] ||| das Gericht ihn [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0961098
+the courts [X][X] him and [X] ||| das Gericht ihn [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0833333
+the courts have acquitted him [X] ||| das Gericht ihn freigesprochen [X] ||| 0.0278341 1 ||| ||| 0.125
+the House [X] ||| das Haus [X] ||| 0.0278341 1 ||| ||| 1
+the House [X][X] [X] ||| das Haus [X][X] [X] ||| 0.0233539 1 ||| ||| 0.418165
+the House [X][X] do [X] ||| das Haus [X][X] [X] ||| 0.00448017 1 ||| ||| 0.418165
+the House [X][X] I [X][X] [X] ||| das Haus [X][X] [X][X] ich [X] ||| 0.0278341 1 ||| ||| 0.0416667
+the House [X][X] I [X][X] [X] ||| das Haus [X][X] [X][X] ich dem [X] ||| 0.0278341 1 ||| ||| 0.025641
+the House [X][X] [X] ||| das Haus [X][X] dem [X] ||| 0.0204564 1 ||| ||| 0.0967366
+the House [X][X] do [X] ||| das Haus [X][X] dem [X] ||| 0.00737771 1 ||| ||| 0.0967366
+the House [X][X] I shall [X] ||| das Haus [X][X] werde ich [X] ||| 0.0278341 1 ||| ||| 0.0714286
+the House [X][X] I shall [X] ||| das Haus [X][X] werde ich dem [X] ||| 0.0278341 1 ||| ||| 0.0454545
+the House agrees , [X] ||| das Haus damit einverstanden ist , [X] ||| 0.0278341 1 ||| ||| 0.166667
+the House agrees , [X][X] [X] ||| das Haus damit einverstanden ist , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.184191
+the House agrees , [X][X] [X] ||| das Haus damit einverstanden ist , [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0710956
+the House agrees [X] ||| das Haus damit einverstanden ist [X] ||| 0.0278341 1 ||| ||| 0.333333
+the House agrees [X][X] [X] ||| das Haus damit einverstanden ist [X][X] [X] ||| 0.020385 1 ||| ||| 0.251499
+the House agrees [X][X] do [X] ||| das Haus damit einverstanden ist [X][X] [X] ||| 0.00744914 1 ||| ||| 0.251499
+the House agrees [X][X] [X] ||| das Haus damit einverstanden ist [X][X] dem [X] ||| 0.0204564 1 ||| ||| 0.0967366
+the House agrees [X][X] do [X] ||| das Haus damit einverstanden ist [X][X] dem [X] ||| 0.00737771 1 ||| ||| 0.0967366
+Parliament [X] ||| das Parlament [X] ||| 0.013917 1 ||| ||| 2
+the House [X] ||| das Parlament [X] ||| 0.013917 1 ||| ||| 2
+Parliament [X][X] [X] ||| das Parlament [X][X] [X] ||| 0.0109177 1 ||| ||| 0.920635
+the House [X][X] [X] ||| das Parlament [X][X] [X] ||| 0.0169164 1 ||| ||| 0.920635
+the House [X][X] a [X] ||| das Parlament [X][X] einer [X] ||| 0.0278341 1 ||| ||| 0.166667
+the House [X][X] a [X][X] [X] ||| das Parlament [X][X] einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142857
+Parliament [X][X] and contains [X] ||| das Parlament [X][X] mit [X] ||| 0.0278341 1 ||| ||| 0.111111
+the House rose and observed [X] ||| das Parlament erhebt sich zu [X] ||| 0.0278341 1 ||| ||| 0.25
+Parliament [X] ||| das Parlament wird [X] ||| 0.0278341 1 ||| ||| 1
+Parliament [X][X] [X] ||| das Parlament wird [X][X] [X] ||| 0.0278341 1 ||| ||| 0.361111
+Parliament [X][X] and contains [X] ||| das Parlament wird [X][X] mit [X] ||| 0.0278341 1 ||| ||| 0.111111
+Parliament [X] ||| das Parlament wird sich [X] ||| 0.0278341 1 ||| ||| 1
+Parliament [X][X] [X] ||| das Parlament wird sich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.361111
+Parliament [X][X] and contains [X] ||| das Parlament wird sich [X][X] mit [X] ||| 0.0278341 1 ||| ||| 0.111111
+Parliament on Thursday [X] ||| das Parlament wird sich am Donnerstag [X] ||| 0.0278341 1 ||| ||| 0.25
+Parliament on Thursday [X][X] [X] ||| das Parlament wird sich am Donnerstag [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111111
+Parliament on Thursday and contains [X] ||| das Parlament wird sich am Donnerstag mit [X] ||| 0.0278341 1 ||| ||| 0.111111
+in [X] ||| das [X] ||| 0.00347926 1 ||| ||| 8
+it [X] ||| das [X] ||| 0.0603547 1 ||| ||| 8
+the [X] ||| das [X] ||| 0.5 1 ||| ||| 8
+to the [X] ||| das [X] ||| 0.00347926 1 ||| ||| 8
+, it [X][X] [X] ||| das [X][X] , [X] ||| 0.00578728 1 ||| ||| 0.300596
+indeed , it [X][X] [X] ||| das [X][X] , [X] ||| 0.00661404 1 ||| ||| 0.300596
+the [X][X] , [X] ||| das [X][X] , [X] ||| 0.0154328 1 ||| ||| 0.300596
+the [X][X] , [X][X] [X] ||| das [X][X] , [X][X] [X] ||| 0.020385 1 ||| ||| 0.251499
+the [X][X] , [X][X] do [X] ||| das [X][X] , [X][X] [X] ||| 0.00744914 1 ||| ||| 0.251499
+the [X][X] , [X][X] [X] ||| das [X][X] , [X][X] dem [X] ||| 0.0204564 1 ||| ||| 0.0967366
+the [X][X] , [X][X] do [X] ||| das [X][X] , [X][X] dem [X] ||| 0.00737771 1 ||| ||| 0.0967366
+the [X][X] , I [X][X] [X] ||| das [X][X] , [X][X] ich [X] ||| 0.0278341 1 ||| ||| 0.0416667
+the [X][X] , I [X][X] [X] ||| das [X][X] , [X][X] ich dem [X] ||| 0.0278341 1 ||| ||| 0.025641
+the [X][X] that [X] ||| das [X][X] , daß [X] ||| 0.0278341 1 ||| ||| 0.0434783
+, it [X][X] [X] ||| das [X][X] , die [X] ||| 0.0154634 1 ||| ||| 0.1125
+indeed , it [X][X] [X] ||| das [X][X] , die [X] ||| 0.0123707 1 ||| ||| 0.1125
+the [X][X] , I shall [X] ||| das [X][X] , werde ich [X] ||| 0.0278341 1 ||| ||| 0.0714286
+the [X][X] , I shall [X] ||| das [X][X] , werde ich dem [X] ||| 0.0278341 1 ||| ||| 0.0454545
+it [X][X] . [X] ||| das [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.025641
+it [X][X] Alexander Nikitin . [X] ||| das [X][X] Alexander Nikitin . [X] ||| 0.0278341 1 ||| ||| 0.025641
+it [X][X] Alexander Nikitin [X] ||| das [X][X] Alexander Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0344828
+it [X][X] Alexander [X] ||| das [X][X] Alexander [X] ||| 0.0278341 1 ||| ||| 0.0526316
+it [X][X] Alexander [X][X] [X] ||| das [X][X] Alexander [X][X] [X] ||| 0.0278341 1 ||| ||| 0.025641
+it [X][X] case [X] ||| das [X][X] Fall [X] ||| 0.0278341 1 ||| ||| 0.166667
+it [X][X] case [X][X] . [X] ||| das [X][X] Fall [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.025641
+it [X][X] case [X][X] Nikitin [X] ||| das [X][X] Fall [X][X] Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0344828
+it [X][X] case [X][X] [X] ||| das [X][X] Fall [X][X] [X] ||| 0.0278341 1 ||| ||| 0.112755
+it [X][X] case of Alexander [X] ||| das [X][X] Fall von Alexander [X] ||| 0.0278341 1 ||| ||| 0.0526316
+it [X][X] case of [X] ||| das [X][X] Fall von [X] ||| 0.0278341 1 ||| ||| 0.0909091
+it [X][X] case of [X][X] [X] ||| das [X][X] Fall von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0601238
+it [X][X] Nikitin . [X] ||| das [X][X] Nikitin . [X] ||| 0.0278341 1 ||| ||| 0.025641
+it [X][X] Nikitin [X] ||| das [X][X] Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0344828
+, it [X][X] positions [X] ||| das [X][X] Position , [X] ||| 0.0129892 1 ||| ||| 0.133929
+indeed , it [X][X] positions [X] ||| das [X][X] Position , [X] ||| 0.0148449 1 ||| ||| 0.133929
+, it [X][X] positions [X] ||| das [X][X] Position , die [X] ||| 0.0154634 1 ||| ||| 0.1125
+indeed , it [X][X] positions [X] ||| das [X][X] Position , die [X] ||| 0.0123707 1 ||| ||| 0.1125
+it [X][X] positions [X] ||| das [X][X] Position [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] it [X][X] positions [X] ||| das [X][X] Position [X][X] [X] ||| 0.0278341 1 ||| ||| 0.121429
+[X][X] it [X][X] positions [X] ||| das [X][X] Position [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.05
+it [X][X] keeping with [X] ||| das [X][X] Sinne [X] ||| 0.0278341 1 ||| ||| 0.0714286
+it [X][X] keeping with [X][X] [X] ||| das [X][X] Sinne [X][X] [X] ||| 0.0278341 1 ||| ||| 0.04
+it [X][X] keeping with the [X] ||| das [X][X] Sinne der [X] ||| 0.0278341 1 ||| ||| 0.0526316
+it [X][X] [X] ||| das [X][X] [X] ||| 0.0947965 1 ||| ||| 3.48319
+the [X][X] [X] ||| das [X][X] [X] ||| 0.33813 1 ||| ||| 3.48319
+the [X][X] do [X] ||| das [X][X] [X] ||| 0.000537855 1 ||| ||| 3.48319
+[X][X] it [X][X] [X] ||| das [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.121429
+[X][X] it [X][X] [X] ||| das [X][X] [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.05
+the [X][X] made [X][X] that [X] ||| das [X][X] [X][X] gemacht hat , daß [X] ||| 0.0278341 1 ||| ||| 0.0434783
+the [X][X] made [X][X] [X] ||| das [X][X] [X][X] gemacht hat [X] ||| 0.0278341 1 ||| ||| 0.0526316
+the [X][X] I [X][X] [X] ||| das [X][X] [X][X] ich [X] ||| 0.0278341 1 ||| ||| 0.0416667
+the [X][X] I [X][X] [X] ||| das [X][X] [X][X] ich dem [X] ||| 0.0278341 1 ||| ||| 0.025641
+the [X][X] [X] ||| das [X][X] dem [X] ||| 0.0204564 1 ||| ||| 0.0967366
+the [X][X] do [X] ||| das [X][X] dem [X] ||| 0.00737771 1 ||| ||| 0.0967366
+, it [X][X] the positions [X] ||| das [X][X] der Position , [X] ||| 0.0278341 1 ||| ||| 0.0625
+, it [X][X] the positions [X] ||| das [X][X] der Position , die [X] ||| 0.0278341 1 ||| ||| 0.0625
+it [X][X] the positions [X] ||| das [X][X] der Position [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] it [X][X] the positions [X] ||| das [X][X] der Position [X][X] [X] ||| 0.0278341 1 ||| ||| 0.121429
+[X][X] it [X][X] the positions [X] ||| das [X][X] der Position [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.05
+it [X][X] the [X] ||| das [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0526316
+the [X][X] made it clear [X] ||| das [X][X] deutlich gemacht hat [X] ||| 0.0278341 1 ||| ||| 0.0526316
+the [X][X] a [X] ||| das [X][X] einer [X] ||| 0.0278341 1 ||| ||| 0.166667
+the [X][X] a [X][X] [X] ||| das [X][X] einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142857
+the [X][X] acquitted him [X] ||| das [X][X] ihn freigesprochen [X] ||| 0.0278341 1 ||| ||| 0.125
+the [X][X] acquitted him [X][X] [X] ||| das [X][X] ihn freigesprochen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0961098
+the [X][X] acquitted him and [X] ||| das [X][X] ihn freigesprochen und [X] ||| 0.0278341 1 ||| ||| 0.0833333
+it [X][X] in keeping with [X] ||| das [X][X] im Sinne [X] ||| 0.0278341 1 ||| ||| 0.0714286
+it [X][X] in [X] ||| das [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.166667
+, it [X][X] in [X][X] [X] ||| das [X][X] im [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0625
+, it [X][X] in [X][X] [X] ||| das [X][X] im [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.0625
+it [X][X] in [X][X] positions [X] ||| das [X][X] im [X][X] Position [X] ||| 0.0278341 1 ||| ||| 0.04
+it [X][X] in [X][X] [X] ||| das [X][X] im [X][X] [X] ||| 0.0278341 1 ||| ||| 0.16406
+it [X][X] in [X][X] the [X] ||| das [X][X] im [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0526316
+the [X][X] and [X] ||| das [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0833333
+the [X][X] and [X][X] that [X] ||| das [X][X] und [X][X] , daß [X] ||| 0.0278341 1 ||| ||| 0.0434783
+the [X][X] and [X][X] [X] ||| das [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0961098
+the [X][X] and made [X][X] [X] ||| das [X][X] und [X][X] gemacht hat [X] ||| 0.0278341 1 ||| ||| 0.0526316
+it [X][X] of Alexander Nikitin [X] ||| das [X][X] von Alexander Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0344828
+it [X][X] of Alexander [X] ||| das [X][X] von Alexander [X] ||| 0.0278341 1 ||| ||| 0.0526316
+it [X][X] of Alexander [X][X] [X] ||| das [X][X] von Alexander [X][X] [X] ||| 0.0278341 1 ||| ||| 0.025641
+it [X][X] of [X] ||| das [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0909091
+it [X][X] of [X][X] . [X] ||| das [X][X] von [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.025641
+it [X][X] of [X][X] [X] ||| das [X][X] von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0601238
+the [X][X] I shall [X] ||| das [X][X] werde ich [X] ||| 0.0175794 1 ||| ||| 0.113095
+the [X][X] I shall do [X] ||| das [X][X] werde ich [X] ||| 0.0102547 1 ||| ||| 0.113095
+the [X][X] I shall [X] ||| das [X][X] werde ich dem [X] ||| 0.0177956 1 ||| ||| 0.0710955
+the [X][X] I shall do [X] ||| das [X][X] werde ich dem [X] ||| 0.0100385 1 ||| ||| 0.0710955
+in [X] ||| das ist [X] ||| 0.00927803 1 ||| ||| 3
+it is [X] ||| das ist [X] ||| 0.160946 1 ||| ||| 3
+, it is [X][X] [X] ||| das ist [X][X] , [X] ||| 0.0129892 1 ||| ||| 0.133929
+indeed , it is [X][X] [X] ||| das ist [X][X] , [X] ||| 0.0148449 1 ||| ||| 0.133929
+, it is [X][X] [X] ||| das ist [X][X] , die [X] ||| 0.0154634 1 ||| ||| 0.1125
+indeed , it is [X][X] [X] ||| das ist [X][X] , die [X] ||| 0.0123707 1 ||| ||| 0.1125
+it is [X][X] . [X] ||| das ist [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.025641
+it is [X][X] Alexander Nikitin [X] ||| das ist [X][X] Alexander Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0344828
+it is [X][X] Alexander [X] ||| das ist [X][X] Alexander [X] ||| 0.0278341 1 ||| ||| 0.0526316
+it is [X][X] Alexander [X][X] [X] ||| das ist [X][X] Alexander [X][X] [X] ||| 0.0278341 1 ||| ||| 0.025641
+it is [X][X] Nikitin . [X] ||| das ist [X][X] Nikitin . [X] ||| 0.0278341 1 ||| ||| 0.025641
+it is [X][X] Nikitin [X] ||| das ist [X][X] Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0344828
+, it is [X][X] positions [X] ||| das ist [X][X] Position , [X] ||| 0.0278341 1 ||| ||| 0.0625
+, it is [X][X] positions [X] ||| das ist [X][X] Position , die [X] ||| 0.0278341 1 ||| ||| 0.0625
+it is [X][X] positions [X] ||| das ist [X][X] Position [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] it is [X][X] positions [X] ||| das ist [X][X] Position [X][X] [X] ||| 0.0278341 1 ||| ||| 0.121429
+[X][X] it is [X][X] positions [X] ||| das ist [X][X] Position [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.05
+it is [X][X] keeping with [X] ||| das ist [X][X] Sinne [X] ||| 0.0278341 1 ||| ||| 0.0714286
+it is [X][X] [X] ||| das ist [X][X] [X] ||| 0.0278341 1 ||| ||| 0.701058
+[X][X] it is [X][X] [X] ||| das ist [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.121429
+[X][X] it is [X][X] [X] ||| das ist [X][X] [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.05
+it is [X][X] the positions [X] ||| das ist [X][X] der Position [X] ||| 0.0278341 1 ||| ||| 0.04
+it is [X][X] the [X] ||| das ist [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0526316
+it is [X][X] of Alexander [X] ||| das ist [X][X] von Alexander [X] ||| 0.0278341 1 ||| ||| 0.0526316
+it is [X][X] of [X] ||| das ist [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0909091
+it is [X][X] of [X][X] [X] ||| das ist [X][X] von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0601238
+in [X] ||| das ist auch [X] ||| 0.0278341 1 ||| ||| 1
+in the [X] ||| das ist auch der [X] ||| 0.0278341 1 ||| ||| 1
+it is the case [X] ||| das ist der Fall [X] ||| 0.0278341 1 ||| ||| 0.166667
+it is the case [X][X] [X] ||| das ist der Fall [X][X] [X] ||| 0.0278341 1 ||| ||| 0.112755
+it is the case of [X] ||| das ist der Fall von [X] ||| 0.0278341 1 ||| ||| 0.0909091
+it is the [X] ||| das ist der [X] ||| 0.0278341 1 ||| ||| 0.333333
+it is the [X][X] . [X] ||| das ist der [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.025641
+it is the [X][X] Alexander [X] ||| das ist der [X][X] Alexander [X] ||| 0.0278341 1 ||| ||| 0.0526316
+it is the [X][X] Nikitin [X] ||| das ist der [X][X] Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0344828
+it is the [X][X] [X] ||| das ist der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.203664
+it is quite [X] ||| das ist ganz [X] ||| 0.0278341 1 ||| ||| 0.333333
+, it is quite [X][X] [X] ||| das ist ganz [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0625
+, it is quite [X][X] [X] ||| das ist ganz [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.0625
+it is quite [X][X] positions [X] ||| das ist ganz [X][X] Position [X] ||| 0.0278341 1 ||| ||| 0.04
+it is quite [X][X] [X] ||| das ist ganz [X][X] [X] ||| 0.0278341 1 ||| ||| 0.16406
+[X][X] it is quite [X][X] [X] ||| das ist ganz [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.121429
+[X][X] it is quite [X][X] [X] ||| das ist ganz [X][X] [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.05
+it is quite [X][X] the [X] ||| das ist ganz [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0526316
+it is quite in [X] ||| das ist ganz im [X] ||| 0.0278341 1 ||| ||| 0.166667
+it is quite in [X][X] [X] ||| das ist ganz im [X][X] [X] ||| 0.0278341 1 ||| ||| 0.16406
+for countries [X] ||| daß Länder , [X] ||| 0.0278341 1 ||| ||| 1
+for countries which [X] ||| daß Länder , die [X] ||| 0.0278341 1 ||| ||| 0.25
+for countries [X] ||| daß Länder [X] ||| 0.0278341 1 ||| ||| 1
+for [X] ||| daß [X] ||| 0.00927803 1 ||| ||| 3
+that [X] ||| daß [X] ||| 0.160946 1 ||| ||| 3
+[X][X] , [X] ||| daß [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.111111
+[X][X] , for [X] ||| daß [X][X] , für [X] ||| 0.0278341 1 ||| ||| 0.1
+, in Texas [X][X] , [X] ||| daß [X][X] , in Texas , [X] ||| 0.0278341 1 ||| ||| 0.111111
+, in Texas [X][X] [X] ||| daß [X][X] , in Texas [X] ||| 0.0278341 1 ||| ||| 0.125
+for [X][X] [X] ||| daß [X][X] [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] Texas [X][X] , [X] ||| daß [X][X] [X][X] Texas , [X] ||| 0.0278341 1 ||| ||| 0.111111
+[X][X] Texas [X][X] , for [X] ||| daß [X][X] [X][X] Texas , für [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] Texas [X][X] [X] ||| daß [X][X] [X][X] Texas [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] for [X] ||| daß [X][X] für [X] ||| 0.0278341 1 ||| ||| 0.1
+that this [X] ||| daß dies [X] ||| 0.0278341 1 ||| ||| 1
+he [X] ||| daß er [X] ||| 0.0278341 1 ||| ||| 1
+that it [X] ||| daß es [X] ||| 0.0278341 1 ||| ||| 1
+in [X] ||| daß in [X] ||| 0.0278341 1 ||| ||| 1
+, [X][X] in America , [X] ||| daß in den Vereinigten Staaten , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.111111
+, [X][X] in America [X] ||| daß in den Vereinigten Staaten , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.125
+, [X][X] in America [X][X] [X] ||| daß in den Vereinigten Staaten , [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.1
+, in Texas in America [X] ||| daß in den Vereinigten Staaten , in Texas [X] ||| 0.0278341 1 ||| ||| 0.125
+in America [X] ||| daß in den Vereinigten Staaten [X] ||| 0.0278341 1 ||| ||| 1
+[X][X] in America , [X] ||| daß in den Vereinigten Staaten [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.111111
+[X][X] in America , for [X] ||| daß in den Vereinigten Staaten [X][X] , für [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] Texas in America , [X] ||| daß in den Vereinigten Staaten [X][X] Texas , [X] ||| 0.0278341 1 ||| ||| 0.111111
+[X][X] Texas in America [X] ||| daß in den Vereinigten Staaten [X][X] Texas [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] Texas in America [X][X] [X] ||| daß in den Vereinigten Staaten [X][X] Texas [X][X] [X] ||| 0.0278341 1 ||| ||| 0.1
+[X][X] in America [X] ||| daß in den Vereinigten Staaten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] in America [X][X] [X] ||| daß in den Vereinigten Staaten [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.1
+in [X] ||| daß in den [X] ||| 0.0278341 1 ||| ||| 1
+the European Parliament [X] ||| dem Europäischen Parlament [X] ||| 0.0278341 1 ||| ||| 0.333333
+visited the European Parliament [X][X] [X] ||| dem Europäischen Parlament [X][X] Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited the European Parliament [X][X] [X] ||| dem Europäischen Parlament [X][X] Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+the European Parliament [X][X] [X] ||| dem Europäischen Parlament [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111429
+visited the European Parliament [X][X] [X] ||| dem Europäischen Parlament [X][X] einen Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited the European Parliament [X][X] [X] ||| dem Europäischen Parlament [X][X] einen Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+the European Parliament [X][X] [X] ||| dem Europäischen Parlament [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0238095
+the European Parliament just [X] ||| dem Europäischen Parlament erst [X] ||| 0.0278341 1 ||| ||| 0.166667
+the European Parliament just [X][X] [X] ||| dem Europäischen Parlament erst [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111429
+the European Parliament just [X][X] [X] ||| dem Europäischen Parlament erst [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0238095
+the European Parliament just [X] ||| dem Europäischen Parlament erst vor [X] ||| 0.0278341 1 ||| ||| 0.125
+the European Parliament just [X][X] [X] ||| dem Europäischen Parlament erst vor [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111429
+the European Parliament just [X][X] [X] ||| dem Europäischen Parlament erst vor [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0238095
+the European [X] ||| dem Europäischen [X] ||| 0.0278341 1 ||| ||| 1
+visited the European [X][X] [X] ||| dem Europäischen [X][X] Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited the European [X][X] [X] ||| dem Europäischen [X][X] Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+the European [X][X] months ago [X] ||| dem Europäischen [X][X] Monaten [X] ||| 0.0278341 1 ||| ||| 0.04
+the European [X][X] months ago [X] ||| dem Europäischen [X][X] Monaten einen [X] ||| 0.0278341 1 ||| ||| 0.0238095
+the European [X][X] [X] ||| dem Europäischen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.403095
+visited the European [X][X] [X] ||| dem Europäischen [X][X] einen Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited the European [X][X] [X] ||| dem Europäischen [X][X] einen Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+the European [X][X] [X] ||| dem Europäischen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0238095
+the European [X][X] [X] ||| dem Europäischen [X][X] vor [X] ||| 0.0278341 1 ||| ||| 0.125
+the European [X][X] a few [X] ||| dem Europäischen [X][X] vor wenigen [X] ||| 0.0278341 1 ||| ||| 0.047619
+the European [X][X] a few [X] ||| dem Europäischen [X][X] wenigen [X] ||| 0.0278341 1 ||| ||| 0.047619
+television [X] ||| dem Fernsehen [X] ||| 0.0278341 1 ||| ||| 1
+the President [X] ||| dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 1
+the President [X][X] Governor [X] ||| dem Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.125
+the President [X][X] the Governor [X] ||| dem Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.125
+the President [X][X] Governor [X][X] [X] ||| dem Präsidentschaftskandidaten [X][X] Gouverneur [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0384615
+the President [X][X] Governor of [X] ||| dem Präsidentschaftskandidaten [X][X] Gouverneur von [X] ||| 0.0278341 1 ||| ||| 0.04
+the President [X][X] [X] ||| dem Präsidentschaftskandidaten [X][X] [X] ||| 0.021489 1 ||| ||| 0.626676
+the President [X][X] the [X] ||| dem Präsidentschaftskandidaten [X][X] [X] ||| 0.00634506 1 ||| ||| 0.626676
+the President [X][X] the [X][X] [X] ||| dem Präsidentschaftskandidaten [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0784615
+the President [X][X] of [X] ||| dem Präsidentschaftskandidaten [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.04
+the President [X][X] of [X][X] [X] ||| dem Präsidentschaftskandidaten [X][X] von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0384615
+the President and [X] ||| dem Präsidentschaftskandidaten und [X] ||| 0.013721 1 ||| ||| 0.67619
+the President and to [X] ||| dem Präsidentschaftskandidaten und [X] ||| 0.00823263 1 ||| ||| 0.67619
+the President and to the [X] ||| dem Präsidentschaftskandidaten und [X] ||| 0.00588044 1 ||| ||| 0.67619
+the President and [X][X] [X] ||| dem Präsidentschaftskandidaten und [X][X] [X] ||| 0.013917 1 ||| ||| 0.281924
+the President and to [X][X] [X] ||| dem Präsidentschaftskandidaten und [X][X] [X] ||| 0.013917 1 ||| ||| 0.281924
+the President and [X][X] of [X] ||| dem Präsidentschaftskandidaten und [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.04
+[X][X] Evans has suggested . [X] ||| dem Vorschlag [X][X] Evans folgen . [X] ||| 0.0278341 1 ||| ||| 0.215909
+[X][X] Evans has suggested [X] ||| dem Vorschlag [X][X] Evans folgen [X] ||| 0.0200405 1 ||| ||| 0.324675
+do [X][X] Evans has suggested [X] ||| dem Vorschlag [X][X] Evans folgen [X] ||| 0.00779355 1 ||| ||| 0.324675
+[X][X] Mr Evans has suggested [X] ||| dem Vorschlag [X][X] Herrn Evans folgen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] Mr [X][X] suggested . [X] ||| dem Vorschlag [X][X] Herrn [X][X] folgen . [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] Mr [X][X] suggested [X] ||| dem Vorschlag [X][X] Herrn [X][X] folgen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] has suggested . [X] ||| dem Vorschlag [X][X] folgen . [X] ||| 0.00979348 1 ||| ||| 0.613636
+[X][X] suggested . [X] ||| dem Vorschlag [X][X] folgen . [X] ||| 0.00979348 1 ||| ||| 0.613636
+do [X][X] has suggested . [X] ||| dem Vorschlag [X][X] folgen . [X] ||| 0.00412357 1 ||| ||| 0.613636
+do [X][X] suggested . [X] ||| dem Vorschlag [X][X] folgen . [X] ||| 0.00412357 1 ||| ||| 0.613636
+[X][X] has suggested [X] ||| dem Vorschlag [X][X] folgen [X] ||| 0.0100203 1 ||| ||| 0.64935
+[X][X] suggested [X] ||| dem Vorschlag [X][X] folgen [X] ||| 0.0100203 1 ||| ||| 0.64935
+do [X][X] has suggested [X] ||| dem Vorschlag [X][X] folgen [X] ||| 0.00389678 1 ||| ||| 0.64935
+do [X][X] suggested [X] ||| dem Vorschlag [X][X] folgen [X] ||| 0.00389678 1 ||| ||| 0.64935
+as Mr Evans has suggested [X] ||| dem Vorschlag von Herrn Evans folgen [X] ||| 0.0278341 1 ||| ||| 0.142857
+as Mr [X][X] suggested . [X] ||| dem Vorschlag von Herrn [X][X] folgen . [X] ||| 0.0278341 1 ||| ||| 0.125
+as Mr [X][X] suggested [X] ||| dem Vorschlag von Herrn [X][X] folgen [X] ||| 0.0170097 1 ||| ||| 0.233766
+do as Mr [X][X] suggested [X] ||| dem Vorschlag von Herrn [X][X] folgen [X] ||| 0.0108244 1 ||| ||| 0.233766
+as [X][X] has suggested . [X] ||| dem Vorschlag von [X][X] folgen . [X] ||| 0.0102058 1 ||| ||| 0.340909
+as [X][X] suggested . [X] ||| dem Vorschlag von [X][X] folgen . [X] ||| 0.0102058 1 ||| ||| 0.340909
+do as [X][X] suggested . [X] ||| dem Vorschlag von [X][X] folgen . [X] ||| 0.00742243 1 ||| ||| 0.340909
+as [X][X] has suggested [X] ||| dem Vorschlag von [X][X] folgen [X] ||| 0.00850486 1 ||| ||| 0.467532
+as [X][X] suggested [X] ||| dem Vorschlag von [X][X] folgen [X] ||| 0.00850486 1 ||| ||| 0.467532
+do as [X][X] has suggested [X] ||| dem Vorschlag von [X][X] folgen [X] ||| 0.00541219 1 ||| ||| 0.467532
+do as [X][X] suggested [X] ||| dem Vorschlag von [X][X] folgen [X] ||| 0.00541219 1 ||| ||| 0.467532
+the [X] ||| dem [X] ||| 0.160946 1 ||| ||| 3
+which [X] ||| dem [X] ||| 0.00927803 1 ||| ||| 3
+[X][X] . [X] ||| dem [X][X] . [X] ||| 0.0145174 1 ||| ||| 0.413961
+do [X][X] . [X] ||| dem [X][X] . [X] ||| 0.00611259 1 ||| ||| 0.413961
+which [X][X] . [X] ||| dem [X][X] . [X] ||| 0.00240137 1 ||| ||| 0.413961
+which [X][X] an interest . [X] ||| dem [X][X] . [X] ||| 0.00240137 1 ||| ||| 0.413961
+which [X][X] interest . [X] ||| dem [X][X] . [X] ||| 0.00240137 1 ||| ||| 0.413961
+visited the [X][X] [X] ||| dem [X][X] Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited the [X][X] [X] ||| dem [X][X] Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+the [X][X] Governor [X] ||| dem [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.1875
+the [X][X] the Governor [X] ||| dem [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.1875
+the [X][X] to the Governor [X] ||| dem [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.1875
+the [X][X] Governor [X][X] [X] ||| dem [X][X] Gouverneur [X][X] [X] ||| 0.0139171 1 ||| ||| 0.076923
+the [X][X] the Governor [X][X] [X] ||| dem [X][X] Gouverneur [X][X] [X] ||| 0.0139171 1 ||| ||| 0.076923
+the [X][X] Governor of [X] ||| dem [X][X] Gouverneur von [X] ||| 0.013917 1 ||| ||| 0.08
+the [X][X] the Governor of [X] ||| dem [X][X] Gouverneur von [X] ||| 0.013917 1 ||| ||| 0.08
+the [X][X] Governor of [X][X] [X] ||| dem [X][X] Gouverneur von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0384615
+the [X][X] months ago [X] ||| dem [X][X] Monaten [X] ||| 0.0278341 1 ||| ||| 0.04
+visited the [X][X] months ago [X] ||| dem [X][X] Monaten einen Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited the [X][X] months ago [X] ||| dem [X][X] Monaten einen Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+the [X][X] months ago [X] ||| dem [X][X] Monaten einen [X] ||| 0.0278341 1 ||| ||| 0.0238095
+the [X][X] Texas , Mr [X] ||| dem [X][X] Texas , George W. [X] ||| 0.0278341 1 ||| ||| 0.0384615
+the [X][X] [X] ||| dem [X][X] [X] ||| 0.143075 1 ||| ||| 2.62144
+the [X][X] the [X] ||| dem [X][X] [X] ||| 0.00151684 1 ||| ||| 2.62144
+the [X][X] to [X] ||| dem [X][X] [X] ||| 0.00212357 1 ||| ||| 2.62144
+the [X][X] to the [X] ||| dem [X][X] [X] ||| 0.00151684 1 ||| ||| 2.62144
+which [X][X] [X] ||| dem [X][X] [X] ||| 0.00476541 1 ||| ||| 2.62144
+which [X][X] an [X] ||| dem [X][X] [X] ||| 0.000530894 1 ||| ||| 2.62144
+which [X][X] an interest [X] ||| dem [X][X] [X] ||| 0.000442412 1 ||| ||| 2.62144
+which [X][X] interest [X] ||| dem [X][X] [X] ||| 0.000442412 1 ||| ||| 2.62144
+the [X][X] the [X][X] [X] ||| dem [X][X] [X][X] [X] ||| 0.00654649 1 ||| ||| 0.333599
+the [X][X] to [X][X] [X] ||| dem [X][X] [X][X] [X] ||| 0.0117613 1 ||| ||| 0.333599
+the [X][X] to the [X][X] [X] ||| dem [X][X] [X][X] [X] ||| 0.00654649 1 ||| ||| 0.333599
+which [X][X] an [X][X] [X] ||| dem [X][X] [X][X] [X] ||| 0.00297985 1 ||| ||| 0.333599
+which [X][X] has [X][X] . [X] ||| dem [X][X] [X][X] hat . [X] ||| 0.0278341 1 ||| ||| 0.0357143
+which [X][X] has [X][X] [X] ||| dem [X][X] [X][X] hat [X] ||| 0.017819 1 ||| ||| 0.254762
+which [X][X] has [X][X] an [X] ||| dem [X][X] [X][X] hat [X] ||| 0.00546277 1 ||| ||| 0.254762
+which [X][X] has [X][X] interest [X] ||| dem [X][X] [X][X] hat [X] ||| 0.00455231 1 ||| ||| 0.254762
+the [X][X] to [X][X] of [X] ||| dem [X][X] [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.04
+visited the [X][X] [X] ||| dem [X][X] einen Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited the [X][X] [X] ||| dem [X][X] einen Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+the [X][X] [X] ||| dem [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0238095
+the [X][X] just [X] ||| dem [X][X] erst [X] ||| 0.0278341 1 ||| ||| 0.166667
+visited the [X][X] just [X][X] [X] ||| dem [X][X] erst [X][X] Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited the [X][X] just [X][X] [X] ||| dem [X][X] erst [X][X] Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+the [X][X] just [X][X] [X] ||| dem [X][X] erst [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111429
+visited the [X][X] just [X][X] [X] ||| dem [X][X] erst [X][X] einen Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited the [X][X] just [X][X] [X] ||| dem [X][X] erst [X][X] einen Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+the [X][X] just [X][X] [X] ||| dem [X][X] erst [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0238095
+the [X][X] just [X] ||| dem [X][X] erst vor [X] ||| 0.0278341 1 ||| ||| 0.125
+visited the [X][X] just [X][X] [X] ||| dem [X][X] erst vor [X][X] Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited the [X][X] just [X][X] [X] ||| dem [X][X] erst vor [X][X] Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+the [X][X] just [X][X] [X] ||| dem [X][X] erst vor [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111429
+visited the [X][X] just [X][X] [X] ||| dem [X][X] erst vor [X][X] einen Besuch [X] ||| 0.0278341 1 ||| ||| 0.0357143
+visited the [X][X] just [X][X] [X] ||| dem [X][X] erst vor [X][X] einen Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 0.0357143
+the [X][X] just [X][X] [X] ||| dem [X][X] erst vor [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0238095
+the [X][X] just a few [X] ||| dem [X][X] erst vor wenigen [X] ||| 0.0278341 1 ||| ||| 0.047619
+which [X][X] has consistently shown [X] ||| dem [X][X] immer wieder befaßt hat [X] ||| 0.0278341 1 ||| ||| 0.0714286
+the [X][X] of [X] ||| dem [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.04
+the [X][X] of [X][X] [X] ||| dem [X][X] von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0384615
+the [X][X] [X] ||| dem [X][X] vor [X] ||| 0.0278341 1 ||| ||| 0.125
+the [X][X] a few [X] ||| dem [X][X] vor wenigen [X] ||| 0.0278341 1 ||| ||| 0.047619
+the [X][X] a few [X][X] [X] ||| dem [X][X] vor wenigen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0638095
+the [X][X] a few [X][X] [X] ||| dem [X][X] vor wenigen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0238095
+the [X][X] a few [X] ||| dem [X][X] wenigen [X] ||| 0.0278341 1 ||| ||| 0.047619
+the [X][X] a few [X][X] [X] ||| dem [X][X] wenigen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0638095
+the [X][X] a few [X][X] [X] ||| dem [X][X] wenigen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0238095
+what [X] ||| dem es [X] ||| 0.0278341 1 ||| ||| 1
+what [X][X] report [X] ||| dem es [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.0909091
+what [X][X] report [X][X] [X] ||| dem es [X][X] Bericht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0679723
+what [X][X] report , [X] ||| dem es [X][X] Bericht und [X] ||| 0.0278341 1 ||| ||| 0.0526316
+what [X][X] report , [X][X] [X] ||| dem es [X][X] Bericht und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0679723
+what [X][X] legislative proposal [X] ||| dem es [X][X] Legislativvorschlag [X] ||| 0.0278341 1 ||| ||| 0.0322581
+what [X][X] [X] ||| dem es [X][X] [X] ||| 0.0278341 1 ||| ||| 0.711513
+what [X][X] a report [X] ||| dem es [X][X] einen Bericht [X] ||| 0.0278341 1 ||| ||| 0.0909091
+what [X][X] a report [X][X] [X] ||| dem es [X][X] einen Bericht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0679723
+what [X][X] a report , [X] ||| dem es [X][X] einen Bericht und [X] ||| 0.0278341 1 ||| ||| 0.0526316
+what [X][X] a [X] ||| dem es [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.166667
+what [X][X] a [X][X] [X] ||| dem es [X][X] einen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.120604
+what [X][X] not a [X] ||| dem es [X][X] keinen [X] ||| 0.0278341 1 ||| ||| 0.0357143
+what [X][X] not a [X][X] [X] ||| dem es [X][X] keinen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0322581
+what [X][X] , [X] ||| dem es [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0526316
+what [X][X] , [X][X] [X] ||| dem es [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0679723
+what [X][X] , not a [X] ||| dem es [X][X] und keinen [X] ||| 0.0278341 1 ||| ||| 0.0357143
+what is [X] ||| dem es sich [X] ||| 0.0278341 1 ||| ||| 1
+what is [X][X] report [X] ||| dem es sich [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.0909091
+what is [X][X] report [X][X] [X] ||| dem es sich [X][X] Bericht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0679723
+what is [X][X] report , [X] ||| dem es sich [X][X] Bericht und [X] ||| 0.0278341 1 ||| ||| 0.0526316
+what is [X][X] legislative proposal [X] ||| dem es sich [X][X] Legislativvorschlag [X] ||| 0.0278341 1 ||| ||| 0.0322581
+what is [X][X] [X] ||| dem es sich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.37818
+what is [X][X] not a [X] ||| dem es sich [X][X] keinen [X] ||| 0.0278341 1 ||| ||| 0.0357143
+what is [X][X] , [X] ||| dem es sich [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0526316
+what is [X][X] , [X][X] [X] ||| dem es sich [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0679723
+what is merely [X] ||| dem es sich lediglich um [X] ||| 0.0278341 1 ||| ||| 0.333333
+what is merely [X][X] [X] ||| dem es sich lediglich um [X][X] [X] ||| 0.0278341 1 ||| ||| 0.211513
+what is merely [X][X] , [X] ||| dem es sich lediglich um [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0526316
+what is merely a report [X] ||| dem es sich lediglich um einen Bericht [X] ||| 0.0278341 1 ||| ||| 0.0909091
+what is merely a [X] ||| dem es sich lediglich um einen [X] ||| 0.0278341 1 ||| ||| 0.166667
+what is merely a [X][X] [X] ||| dem es sich lediglich um einen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.120604
+which [X] ||| dem sich [X] ||| 0.0278341 1 ||| ||| 1
+which [X][X] . [X] ||| dem sich [X][X] . [X] ||| 0.00927803 1 ||| ||| 0.107143
+which [X][X] an interest . [X] ||| dem sich [X][X] . [X] ||| 0.00927803 1 ||| ||| 0.107143
+which [X][X] interest . [X] ||| dem sich [X][X] . [X] ||| 0.00927803 1 ||| ||| 0.107143
+which [X][X] [X] ||| dem sich [X][X] [X] ||| 0.021459 1 ||| ||| 0.582143
+which [X][X] an [X] ||| dem sich [X][X] [X] ||| 0.00239066 1 ||| ||| 0.582143
+which [X][X] an interest [X] ||| dem sich [X][X] [X] ||| 0.00199222 1 ||| ||| 0.582143
+which [X][X] interest [X] ||| dem sich [X][X] [X] ||| 0.00199222 1 ||| ||| 0.582143
+which [X][X] an [X][X] [X] ||| dem sich [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0357143
+which [X][X] has [X][X] . [X] ||| dem sich [X][X] [X][X] hat . [X] ||| 0.0278341 1 ||| ||| 0.0357143
+which [X][X] has [X][X] [X] ||| dem sich [X][X] [X][X] hat [X] ||| 0.017819 1 ||| ||| 0.254762
+which [X][X] has [X][X] an [X] ||| dem sich [X][X] [X][X] hat [X] ||| 0.00546277 1 ||| ||| 0.254762
+which [X][X] has [X][X] interest [X] ||| dem sich [X][X] [X][X] hat [X] ||| 0.00455231 1 ||| ||| 0.254762
+which [X][X] has consistently shown [X] ||| dem sich [X][X] immer wieder befaßt hat [X] ||| 0.0278341 1 ||| ||| 0.0714286
+which this Parliament [X] ||| dem sich dieses Parlament [X] ||| 0.0278341 1 ||| ||| 0.25
+which this Parliament [X][X] . [X] ||| dem sich dieses Parlament [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0357143
+which this Parliament [X][X] [X] ||| dem sich dieses Parlament [X][X] [X] ||| 0.0190504 1 ||| ||| 0.290477
+which this Parliament [X][X] an [X] ||| dem sich dieses Parlament [X][X] [X] ||| 0.00479111 1 ||| ||| 0.290477
+which this Parliament [X][X] interest [X] ||| dem sich dieses Parlament [X][X] [X] ||| 0.00399259 1 ||| ||| 0.290477
+which this Parliament has [X][X] [X] ||| dem sich dieses Parlament [X][X] hat [X] ||| 0.0278341 1 ||| ||| 0.163095
+which this [X] ||| dem sich dieses [X] ||| 0.0278341 1 ||| ||| 1
+which this [X][X] . [X] ||| dem sich dieses [X][X] . [X] ||| 0.013917 1 ||| ||| 0.0714286
+which this [X][X] interest . [X] ||| dem sich dieses [X][X] . [X] ||| 0.013917 1 ||| ||| 0.0714286
+which this [X][X] [X] ||| dem sich dieses [X][X] [X] ||| 0.0166606 1 ||| ||| 0.332143
+which this [X][X] an [X] ||| dem sich dieses [X][X] [X] ||| 0.00419007 1 ||| ||| 0.332143
+which this [X][X] an interest [X] ||| dem sich dieses [X][X] [X] ||| 0.00349173 1 ||| ||| 0.332143
+which this [X][X] interest [X] ||| dem sich dieses [X][X] [X] ||| 0.00349173 1 ||| ||| 0.332143
+which this [X][X] an [X][X] [X] ||| dem sich dieses [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0357143
+of the people assassinated very [X] ||| den Attentatsopfern , die es in [X] ||| 0.0111336 1 ||| ||| 0.833333
+the people assassinated very [X] ||| den Attentatsopfern , die es in [X] ||| 0.0167005 1 ||| ||| 0.833333
+the people assassinated very [X][X] [X] ||| den Attentatsopfern , die es in [X][X] [X] ||| 0.0278341 1 ||| ||| 0.266667
+the people assassinated very recently [X] ||| den Attentatsopfern , die es in jüngster Zeit [X] ||| 0.0278341 1 ||| ||| 0.25
+the report . [X] ||| den Bericht . [X] ||| 0.0278341 1 ||| ||| 0.333333
+the report [X] ||| den Bericht [X] ||| 0.0278341 1 ||| ||| 1
+the principles that [X] ||| den Grundsätzen , die [X] ||| 0.0278341 1 ||| ||| 0.333333
+the principles that [X][X] . [X] ||| den Grundsätzen , die [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.05
+the principles that [X][X] [X] ||| den Grundsätzen , die [X][X] [X] ||| 0.0278341 1 ||| ||| 0.108824
+the principles that we [X] ||| den Grundsätzen , die wir [X] ||| 0.0278341 1 ||| ||| 0.166667
+the principles that we [X][X] [X] ||| den Grundsätzen , die wir [X][X] [X] ||| 0.0278341 1 ||| ||| 0.108824
+the principles [X] ||| den Grundsätzen [X] ||| 0.0278341 1 ||| ||| 1
+the principles [X][X] . [X] ||| den Grundsätzen [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.05
+the principles [X][X] [X] ||| den Grundsätzen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.27549
+the principles [X][X] have [X][X] [X] ||| den Grundsätzen [X][X] [X][X] haben [X] ||| 0.0278341 1 ||| ||| 0.0588235
+America [X] ||| den Vereinigten Staaten [X] ||| 0.0278341 1 ||| ||| 1
+of the [X] ||| den [X] ||| 0.00347926 1 ||| ||| 8
+the [X] ||| den [X] ||| 0.625 1 ||| ||| 8
+the course of the [X] ||| den [X] ||| 0.00347926 1 ||| ||| 8
+using the [X] ||| den [X] ||| 0.00347926 1 ||| ||| 8
+the [X][X] [X] ||| den [X][X] , [X] ||| 0.0153711 1 ||| ||| 0.0603603
+using the [X][X] [X] ||| den [X][X] , [X] ||| 0.012463 1 ||| ||| 0.0603603
+the [X][X] [X] ||| den [X][X] , die [X] ||| 0.0153244 1 ||| ||| 0.0454082
+using the [X][X] [X] ||| den [X][X] , die [X] ||| 0.0125097 1 ||| ||| 0.0454082
+the [X][X] . [X] ||| den [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.05
+the [X][X] prestigious office [X] ||| den [X][X] Amtes [X] ||| 0.0161145 1 ||| ||| 0.215909
+using the [X][X] prestigious office [X] ||| den [X][X] Amtes [X] ||| 0.0117196 1 ||| ||| 0.215909
+the [X][X] prestigious office [X][X] [X] ||| den [X][X] Amtes [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0333333
+the [X][X] prestigious office [X][X] [X] ||| den [X][X] Amtes [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.025
+the [X][X] prestigious office [X][X] [X] ||| den [X][X] Amtes [X][X] [X] ||| 0.0278341 1 ||| ||| 0.179762
+the [X][X] prestigious office [X][X] [X] ||| den [X][X] Amtes [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.025
+the [X][X] prestigious office and [X] ||| den [X][X] Amtes und [X] ||| 0.0278341 1 ||| ||| 0.1
+the [X][X] European Union [X] ||| den [X][X] Europäischen Union [X] ||| 0.0278341 1 ||| ||| 0.0588235
+the [X][X] European [X] ||| den [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+the [X][X] institution [X] ||| den [X][X] Institution , [X] ||| 0.0153711 1 ||| ||| 0.0603603
+using the [X][X] institution [X] ||| den [X][X] Institution , [X] ||| 0.012463 1 ||| ||| 0.0603603
+the [X][X] institution [X] ||| den [X][X] Institution , die [X] ||| 0.0153244 1 ||| ||| 0.0454082
+using the [X][X] institution [X] ||| den [X][X] Institution , die [X] ||| 0.0125097 1 ||| ||| 0.0454082
+the [X][X] institution [X] ||| den [X][X] Institution [X] ||| 0.0154634 1 ||| ||| 0.09
+using the [X][X] institution [X] ||| den [X][X] Institution [X] ||| 0.0123707 1 ||| ||| 0.09
+of the [X][X] Sri [X] ||| den [X][X] Sri [X] ||| 0.0121018 1 ||| ||| 0.176923
+the [X][X] Sri [X] ||| den [X][X] Sri [X] ||| 0.0157323 1 ||| ||| 0.176923
+the [X][X] Union [X] ||| den [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0588235
+of the [X][X] [X] ||| den [X][X] [X] ||| 0.00422433 1 ||| ||| 4.8446
+the [X][X] [X] ||| den [X][X] [X] ||| 0.663436 1 ||| ||| 4.8446
+the course of the [X][X] [X] ||| den [X][X] [X] ||| 0.00258543 1 ||| ||| 4.8446
+using the [X][X] [X] ||| den [X][X] [X] ||| 0.0025582 1 ||| ||| 4.8446
+the [X][X] have [X][X] . [X] ||| den [X][X] [X][X] haben . [X] ||| 0.0278341 1 ||| ||| 0.05
+the [X][X] have [X][X] [X] ||| den [X][X] [X][X] haben [X] ||| 0.0278341 1 ||| ||| 0.0588235
+the [X][X] of the European [X] ||| den [X][X] der Europäischen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+the [X][X] the institution [X] ||| den [X][X] der Institution , [X] ||| 0.0153711 1 ||| ||| 0.0603603
+using the [X][X] the institution [X] ||| den [X][X] der Institution , [X] ||| 0.012463 1 ||| ||| 0.0603603
+the [X][X] the institution [X] ||| den [X][X] der Institution , die [X] ||| 0.0153244 1 ||| ||| 0.0454082
+using the [X][X] the institution [X] ||| den [X][X] der Institution , die [X] ||| 0.0125097 1 ||| ||| 0.0454082
+the [X][X] the institution [X] ||| den [X][X] der Institution [X] ||| 0.0154634 1 ||| ||| 0.09
+using the [X][X] the institution [X] ||| den [X][X] der Institution [X] ||| 0.0123707 1 ||| ||| 0.09
+the [X][X] of the [X] ||| den [X][X] der [X] ||| 0.0139696 1 ||| ||| 0.24906
+the [X][X] the [X] ||| den [X][X] der [X] ||| 0.00798261 1 ||| ||| 0.24906
+using the [X][X] the [X] ||| den [X][X] der [X] ||| 0.00588192 1 ||| ||| 0.24906
+the [X][X] of the [X][X] [X] ||| den [X][X] der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0588235
+the [X][X] [X] ||| den [X][X] die [X] ||| 0.0153244 1 ||| ||| 0.0454082
+using the [X][X] [X] ||| den [X][X] die [X] ||| 0.0125097 1 ||| ||| 0.0454082
+of the [X][X] in Sri [X] ||| den [X][X] in Sri [X] ||| 0.0121018 1 ||| ||| 0.176923
+the [X][X] in Sri [X] ||| den [X][X] in Sri [X] ||| 0.0157323 1 ||| ||| 0.176923
+of the [X][X] in [X] ||| den [X][X] in [X] ||| 0.0119289 1 ||| ||| 0.291667
+the [X][X] in [X] ||| den [X][X] in [X] ||| 0.0159052 1 ||| ||| 0.291667
+of the [X][X] recently [X] ||| den [X][X] jüngster Zeit [X] ||| 0.0123707 1 ||| ||| 0.45
+the [X][X] recently [X] ||| den [X][X] jüngster Zeit [X] ||| 0.0154634 1 ||| ||| 0.45
+of the [X][X] recently [X][X] [X] ||| den [X][X] jüngster Zeit [X][X] [X] ||| 0.0121018 1 ||| ||| 0.176923
+the [X][X] recently [X][X] [X] ||| den [X][X] jüngster Zeit [X][X] [X] ||| 0.0157323 1 ||| ||| 0.176923
+the [X][X] recently in Sri [X] ||| den [X][X] jüngster Zeit in Sri [X] ||| 0.0278341 1 ||| ||| 0.1
+of the [X][X] recently in [X] ||| den [X][X] jüngster Zeit in [X] ||| 0.0119289 1 ||| ||| 0.291667
+the [X][X] recently in [X] ||| den [X][X] jüngster Zeit in [X] ||| 0.0159052 1 ||| ||| 0.291667
+the [X][X] have always upheld [X] ||| den [X][X] stets verteidigt haben [X] ||| 0.0278341 1 ||| ||| 0.0588235
+the [X][X] and [X] ||| den [X][X] und [X] ||| 0.0162366 1 ||| ||| 0.171429
+using the [X][X] and [X] ||| den [X][X] und [X] ||| 0.0115975 1 ||| ||| 0.171429
+the [X][X] and [X][X] [X] ||| den [X][X] und [X][X] , [X] ||| 0.0153711 1 ||| ||| 0.0603603
+using the [X][X] and [X][X] [X] ||| den [X][X] und [X][X] , [X] ||| 0.012463 1 ||| ||| 0.0603603
+the [X][X] and [X][X] [X] ||| den [X][X] und [X][X] , die [X] ||| 0.0153244 1 ||| ||| 0.0454082
+using the [X][X] and [X][X] [X] ||| den [X][X] und [X][X] , die [X] ||| 0.0125097 1 ||| ||| 0.0454082
+the [X][X] and [X][X] [X] ||| den [X][X] und [X][X] [X] ||| 0.0154027 1 ||| ||| 0.195768
+using the [X][X] and [X][X] [X] ||| den [X][X] und [X][X] [X] ||| 0.0124314 1 ||| ||| 0.195768
+the [X][X] and [X][X] [X] ||| den [X][X] und [X][X] die [X] ||| 0.0153244 1 ||| ||| 0.0454082
+using the [X][X] and [X][X] [X] ||| den [X][X] und [X][X] die [X] ||| 0.0125097 1 ||| ||| 0.0454082
+the [X][X] and the institution [X] ||| den [X][X] und der Institution , [X] ||| 0.0278341 1 ||| ||| 0.0333333
+the [X][X] and the institution [X] ||| den [X][X] und der Institution , die [X] ||| 0.0278341 1 ||| ||| 0.025
+the [X][X] and the institution [X] ||| den [X][X] und der Institution [X] ||| 0.0278341 1 ||| ||| 0.05
+the [X][X] and the [X] ||| den [X][X] und der [X] ||| 0.0160257 1 ||| ||| 0.12406
+using the [X][X] and the [X] ||| den [X][X] und der [X] ||| 0.0118084 1 ||| ||| 0.12406
+the [X][X] we [X] ||| den [X][X] wir [X] ||| 0.0278341 1 ||| ||| 0.166667
+the [X][X] we [X][X] . [X] ||| den [X][X] wir [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.05
+the [X][X] we [X][X] [X] ||| den [X][X] wir [X][X] [X] ||| 0.0278341 1 ||| ||| 0.108824
+the [X][X] we have [X][X] [X] ||| den [X][X] wir [X][X] haben [X] ||| 0.0278341 1 ||| ||| 0.0588235
+the weight of your [X] ||| den ganzen Einfluß Ihres [X] ||| 0.0177126 1 ||| ||| 0.392857
+using the weight of your [X] ||| den ganzen Einfluß Ihres [X] ||| 0.0101215 1 ||| ||| 0.392857
+the weight of your [X][X] [X] ||| den ganzen Einfluß Ihres [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0333333
+the weight of your [X][X] [X] ||| den ganzen Einfluß Ihres [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.025
+the weight of your [X][X] [X] ||| den ganzen Einfluß Ihres [X][X] [X] ||| 0.0278341 1 ||| ||| 0.404762
+the weight of your [X][X] [X] ||| den ganzen Einfluß Ihres [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.025
+the weight [X] ||| den ganzen Einfluß [X] ||| 0.0185561 1 ||| ||| 1.5
+using the weight [X] ||| den ganzen Einfluß [X] ||| 0.00927803 1 ||| ||| 1.5
+the weight [X][X] [X] ||| den ganzen Einfluß [X][X] , [X] ||| 0.0153711 1 ||| ||| 0.0603603
+using the weight [X][X] [X] ||| den ganzen Einfluß [X][X] , [X] ||| 0.012463 1 ||| ||| 0.0603603
+the weight [X][X] [X] ||| den ganzen Einfluß [X][X] , die [X] ||| 0.0153244 1 ||| ||| 0.0454082
+using the weight [X][X] [X] ||| den ganzen Einfluß [X][X] , die [X] ||| 0.0125097 1 ||| ||| 0.0454082
+the weight [X][X] prestigious office [X] ||| den ganzen Einfluß [X][X] Amtes [X] ||| 0.0278341 1 ||| ||| 0.125
+the weight [X][X] institution [X] ||| den ganzen Einfluß [X][X] Institution , [X] ||| 0.0153711 1 ||| ||| 0.0603603
+using the weight [X][X] institution [X] ||| den ganzen Einfluß [X][X] Institution , [X] ||| 0.012463 1 ||| ||| 0.0603603
+the weight [X][X] institution [X] ||| den ganzen Einfluß [X][X] Institution , die [X] ||| 0.0153244 1 ||| ||| 0.0454082
+using the weight [X][X] institution [X] ||| den ganzen Einfluß [X][X] Institution , die [X] ||| 0.0125097 1 ||| ||| 0.0454082
+the weight [X][X] institution [X] ||| den ganzen Einfluß [X][X] Institution [X] ||| 0.0154634 1 ||| ||| 0.09
+using the weight [X][X] institution [X] ||| den ganzen Einfluß [X][X] Institution [X] ||| 0.0123707 1 ||| ||| 0.09
+the weight [X][X] [X] ||| den ganzen Einfluß [X][X] [X] ||| 0.0165676 1 ||| ||| 1.10002
+using the weight [X][X] [X] ||| den ganzen Einfluß [X][X] [X] ||| 0.0112665 1 ||| ||| 1.10002
+the weight [X][X] the institution [X] ||| den ganzen Einfluß [X][X] der Institution , [X] ||| 0.0278341 1 ||| ||| 0.0333333
+the weight [X][X] the institution [X] ||| den ganzen Einfluß [X][X] der Institution , die [X] ||| 0.0278341 1 ||| ||| 0.025
+the weight [X][X] the institution [X] ||| den ganzen Einfluß [X][X] der Institution [X] ||| 0.0278341 1 ||| ||| 0.05
+the weight [X][X] the [X] ||| den ganzen Einfluß [X][X] der [X] ||| 0.0160257 1 ||| ||| 0.12406
+using the weight [X][X] the [X] ||| den ganzen Einfluß [X][X] der [X] ||| 0.0118084 1 ||| ||| 0.12406
+the weight [X][X] [X] ||| den ganzen Einfluß [X][X] die [X] ||| 0.0153244 1 ||| ||| 0.0454082
+using the weight [X][X] [X] ||| den ganzen Einfluß [X][X] die [X] ||| 0.0125097 1 ||| ||| 0.0454082
+the weight [X][X] and [X] ||| den ganzen Einfluß [X][X] und [X] ||| 0.0162366 1 ||| ||| 0.171429
+using the weight [X][X] and [X] ||| den ganzen Einfluß [X][X] und [X] ||| 0.0115975 1 ||| ||| 0.171429
+the weight [X][X] and [X][X] [X] ||| den ganzen Einfluß [X][X] und [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0333333
+the weight [X][X] and [X][X] [X] ||| den ganzen Einfluß [X][X] und [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.025
+the weight [X][X] and [X][X] [X] ||| den ganzen Einfluß [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.108333
+the weight [X][X] and [X][X] [X] ||| den ganzen Einfluß [X][X] und [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.025
+the weight [X][X] and the [X] ||| den ganzen Einfluß [X][X] und der [X] ||| 0.0278341 1 ||| ||| 0.0714286
+the course of the next [X] ||| den nächsten [X] ||| 0.0278341 1 ||| ||| 0.5
+the various countries [X] ||| den verschiedenen Ländern [X] ||| 0.0278341 1 ||| ||| 0.333333
+the various countries [X][X] European [X] ||| den verschiedenen Ländern [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+the various countries [X][X] Union [X] ||| den verschiedenen Ländern [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0588235
+the various countries [X][X] [X] ||| den verschiedenen Ländern [X][X] [X] ||| 0.0278341 1 ||| ||| 0.267157
+the various countries of the [X] ||| den verschiedenen Ländern der [X] ||| 0.0278341 1 ||| ||| 0.125
+the various [X] ||| den verschiedenen [X] ||| 0.0278341 1 ||| ||| 1
+the various [X][X] European Union [X] ||| den verschiedenen [X][X] Europäischen Union [X] ||| 0.0278341 1 ||| ||| 0.0588235
+the various [X][X] European [X] ||| den verschiedenen [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+the various [X][X] Union [X] ||| den verschiedenen [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0588235
+the various [X][X] [X] ||| den verschiedenen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.267157
+feel [X] ||| denke , daß [X] ||| 0.0278341 1 ||| ||| 1
+feel [X][X] [X] ||| denke , daß [X][X] [X] ||| 0.0111045 1 ||| ||| 1.05444
+feel [X][X] have [X] ||| denke , daß [X][X] [X] ||| 0.00188551 1 ||| ||| 1.05444
+feel [X][X] have just [X] ||| denke , daß [X][X] [X] ||| 0.00175981 1 ||| ||| 1.05444
+feel [X][X] have just suggested [X] ||| denke , daß [X][X] [X] ||| 0.00175981 1 ||| ||| 1.05444
+feel [X][X] just [X] ||| denke , daß [X][X] [X] ||| 0.00175981 1 ||| ||| 1.05444
+feel [X][X] just suggested [X] ||| denke , daß [X][X] [X] ||| 0.00175981 1 ||| ||| 1.05444
+feel [X][X] suggested [X] ||| denke , daß [X][X] [X] ||| 0.00175981 1 ||| ||| 1.05444
+feel [X][X] you [X] ||| denke , daß [X][X] [X] ||| 0.00239974 1 ||| ||| 1.05444
+feel [X][X] you have [X] ||| denke , daß [X][X] [X] ||| 0.00188551 1 ||| ||| 1.05444
+feel [X][X] you have just [X] ||| denke , daß [X][X] [X] ||| 0.00175981 1 ||| ||| 1.05444
+feel an [X] ||| denke , daß eine [X] ||| 0.0278341 1 ||| ||| 1
+feel an initiative [X][X] [X] ||| denke , daß eine [X][X] Initiative [X] ||| 0.010298 1 ||| ||| 1.13701
+feel an initiative [X][X] have [X] ||| denke , daß eine [X][X] Initiative [X] ||| 0.00174857 1 ||| ||| 1.13701
+feel an initiative [X][X] just [X] ||| denke , daß eine [X][X] Initiative [X] ||| 0.001632 1 ||| ||| 1.13701
+feel an initiative [X][X] suggested [X] ||| denke , daß eine [X][X] Initiative [X] ||| 0.001632 1 ||| ||| 1.13701
+feel an initiative [X][X] you [X] ||| denke , daß eine [X][X] Initiative [X] ||| 0.00222546 1 ||| ||| 1.13701
+feel an initiative of [X][X] [X] ||| denke , daß eine [X][X] Initiative [X] ||| 0.010298 1 ||| ||| 1.13701
+feel an [X][X] [X] ||| denke , daß eine [X][X] [X] ||| 0.0127119 1 ||| ||| 0.921104
+feel an [X][X] have [X] ||| denke , daß eine [X][X] [X] ||| 0.00215844 1 ||| ||| 0.921104
+feel an [X][X] have just [X] ||| denke , daß eine [X][X] [X] ||| 0.00201455 1 ||| ||| 0.921104
+feel an [X][X] just [X] ||| denke , daß eine [X][X] [X] ||| 0.00201455 1 ||| ||| 0.921104
+feel an [X][X] just suggested [X] ||| denke , daß eine [X][X] [X] ||| 0.00201455 1 ||| ||| 0.921104
+feel an [X][X] suggested [X] ||| denke , daß eine [X][X] [X] ||| 0.00201455 1 ||| ||| 0.921104
+feel an [X][X] you [X] ||| denke , daß eine [X][X] [X] ||| 0.00274711 1 ||| ||| 0.921104
+feel an [X][X] you have [X] ||| denke , daß eine [X][X] [X] ||| 0.00215844 1 ||| ||| 0.921104
+feel an [X][X] the type [X] ||| denke , daß eine derartige [X][X] [X] ||| 0.0278341 1 ||| ||| 0.125
+of the presentation [X] ||| der Aussprache [X] ||| 0.0278341 1 ||| ||| 0.5
+of the presentation [X][X] . [X] ||| der Aussprache [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.047619
+of the presentation [X][X] report [X] ||| der Aussprache [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.0714286
+of the presentation [X][X] [X] ||| der Aussprache [X][X] [X] ||| 0.0278341 1 ||| ||| 0.244048
+of the presentation of [X] ||| der Aussprache über [X] ||| 0.0278341 1 ||| ||| 0.25
+of the presentation of [X][X] [X] ||| der Aussprache über [X][X] [X] ||| 0.0278341 1 ||| ||| 0.119048
+of the presentation of the [X] ||| der Aussprache über den [X] ||| 0.0278341 1 ||| ||| 0.125
+of the European Union [X] ||| der Europäischen Union [X] ||| 0.0278341 1 ||| ||| 0.25
+of the European [X] ||| der Europäischen [X] ||| 0.0278341 1 ||| ||| 0.5
+the case [X] ||| der Fall [X] ||| 0.0278341 1 ||| ||| 1
+the case [X][X] . [X] ||| der Fall [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0526316
+the case [X][X] Nikitin . [X] ||| der Fall [X][X] Nikitin . [X] ||| 0.0278341 1 ||| ||| 0.0526316
+the case [X][X] Nikitin [X] ||| der Fall [X][X] Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0909091
+the case [X][X] [X] ||| der Fall [X][X] [X] ||| 0.0278341 1 ||| ||| 0.310207
+the case of Alexander Nikitin [X] ||| der Fall von Alexander Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0909091
+the case of Alexander [X] ||| der Fall von Alexander [X] ||| 0.0278341 1 ||| ||| 0.166667
+the case of Alexander [X][X] [X] ||| der Fall von Alexander [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+the case of [X] ||| der Fall von [X] ||| 0.0278341 1 ||| ||| 0.333333
+the case of [X][X] . [X] ||| der Fall von [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0526316
+the case of [X][X] [X] ||| der Fall von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.143541
+the principle [X] ||| der Grundsatz [X] ||| 0.0278341 1 ||| ||| 1
+the principle [X][X] legal principle [X] ||| der Grundsatz [X][X] Rechtsgrundsatz [X] ||| 0.0278341 1 ||| ||| 0.0243902
+the principle [X][X] stability [X] ||| der Grundsatz [X][X] Stabilität [X] ||| 0.0172763 1 ||| ||| 0.146465
+the principle [X][X] stability is [X] ||| der Grundsatz [X][X] Stabilität [X] ||| 0.0105578 1 ||| ||| 0.146465
+the principle [X][X] stability [X][X] [X] ||| der Grundsatz [X][X] Stabilität [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0851888
+the principle [X][X] [X] ||| der Grundsatz [X][X] [X] ||| 0.0244271 1 ||| ||| 0.453876
+the principle [X][X] is [X] ||| der Grundsatz [X][X] [X] ||| 0.00340697 1 ||| ||| 0.453876
+the principle [X][X] is [X][X] [X] ||| der Grundsatz [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.050706
+the principle [X][X] a [X] ||| der Grundsatz [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.0689656
+the principle [X][X] is a [X] ||| der Grundsatz [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.0689656
+the principle [X][X] a [X][X] [X] ||| der Grundsatz [X][X] einen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0243902
+the principle [X][X] a fundamental [X] ||| der Grundsatz [X][X] einen elementaren [X] ||| 0.0278341 1 ||| ||| 0.0263158
+the principle [X][X] fundamental [X] ||| der Grundsatz [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0263158
+the principle [X][X] fundamental [X][X] [X] ||| der Grundsatz [X][X] elementaren [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0243902
+the principle of [X] ||| der Grundsatz der [X] ||| 0.0278341 1 ||| ||| 0.333333
+the principle of [X][X] [X] ||| der Grundsatz der [X][X] [X] ||| 0.0224501 1 ||| ||| 0.287209
+the principle of [X][X] is [X] ||| der Grundsatz der [X][X] [X] ||| 0.00538403 1 ||| ||| 0.287209
+the principle of [X][X] a [X] ||| der Grundsatz der [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0344828
+the principle of [X][X] fundamental [X] ||| der Grundsatz der [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0263158
+the principle of relative stability [X] ||| der Grundsatz der relativen Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0909091
+the principle of relative [X] ||| der Grundsatz der relativen [X] ||| 0.0278341 1 ||| ||| 0.166667
+the principle of relative [X][X] [X] ||| der Grundsatz der relativen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.140744
+the institution [X] ||| der Institution , [X] ||| 0.0278341 1 ||| ||| 1
+the institution [X][X] , [X] ||| der Institution , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+the institution [X][X] , [X][X] [X] ||| der Institution , [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0368016
+the institution [X][X] , to [X] ||| der Institution , [X][X] , bei [X] ||| 0.0278341 1 ||| ||| 0.030303
+the institution [X][X] President [X] ||| der Institution , [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0163934
+the institution [X][X] [X] ||| der Institution , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.219736
+the institution [X][X] to [X] ||| der Institution , [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.030303
+the institution [X][X] to [X][X] [X] ||| der Institution , [X][X] bei [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0163934
+the institution [X][X] to the [X] ||| der Institution , [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0204082
+the institution [X][X] the President [X] ||| der Institution , [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0163934
+the institution [X][X] the [X] ||| der Institution , [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0204082
+the institution you [X] ||| der Institution , die Sie [X] ||| 0.0278341 1 ||| ||| 0.2
+the institution you [X][X] President [X] ||| der Institution , die Sie [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0163934
+the institution you [X][X] [X] ||| der Institution , die Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.119736
+the institution you [X][X] to [X] ||| der Institution , die Sie [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.030303
+the institution you [X][X] the [X] ||| der Institution , die Sie [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0204082
+the institution you represent , [X] ||| der Institution , die Sie vertreten , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+the institution you represent [X] ||| der Institution , die Sie vertreten [X] ||| 0.0278341 1 ||| ||| 0.1
+the institution you represent [X][X] [X] ||| der Institution , die Sie vertreten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0671046
+the institution [X] ||| der Institution , die [X] ||| 0.0278341 1 ||| ||| 1
+the institution [X][X] , [X] ||| der Institution , die [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+the institution [X][X] , [X][X] [X] ||| der Institution , die [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0368016
+the institution [X][X] , to [X] ||| der Institution , die [X][X] , bei [X] ||| 0.0278341 1 ||| ||| 0.030303
+the institution [X][X] President [X] ||| der Institution , die [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0163934
+the institution [X][X] [X] ||| der Institution , die [X][X] [X] ||| 0.0278341 1 ||| ||| 0.219736
+the institution [X][X] to [X] ||| der Institution , die [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.030303
+the institution [X][X] to [X][X] [X] ||| der Institution , die [X][X] bei [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0163934
+the institution [X][X] to the [X] ||| der Institution , die [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0204082
+the institution [X][X] the President [X] ||| der Institution , die [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0163934
+the institution [X][X] the [X] ||| der Institution , die [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0204082
+the institution [X] ||| der Institution [X] ||| 0.0278341 1 ||| ||| 1
+the institution [X][X] , [X] ||| der Institution [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+the institution [X][X] , [X][X] [X] ||| der Institution [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0368016
+the institution [X][X] , to [X] ||| der Institution [X][X] , bei [X] ||| 0.0278341 1 ||| ||| 0.030303
+the institution [X][X] President [X] ||| der Institution [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0163934
+the institution [X][X] [X] ||| der Institution [X][X] [X] ||| 0.0278341 1 ||| ||| 0.219736
+the institution [X][X] to [X] ||| der Institution [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.030303
+the institution [X][X] to [X][X] [X] ||| der Institution [X][X] bei [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0163934
+the institution [X][X] to the [X] ||| der Institution [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0204082
+the institution [X][X] the President [X] ||| der Institution [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0163934
+the institution [X][X] the [X] ||| der Institution [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0204082
+the positions [X] ||| der Position [X] ||| 0.0278341 1 ||| ||| 1
+the press [X] ||| der Presse [X] ||| 0.0278341 1 ||| ||| 1
+the press [X][X] [X] ||| der Presse [X][X] [X] ||| 0.0278341 1 ||| ||| 0.166667
+the press and [X] ||| der Presse und [X] ||| 0.0278341 1 ||| ||| 0.333333
+the press and television [X] ||| der Presse und dem Fernsehen [X] ||| 0.0278341 1 ||| ||| 0.166667
+President [X] ||| der Präsidentin [X] ||| 0.0278341 1 ||| ||| 1
+[X][X] President [X] ||| der Präsidentin [X][X] [X] ||| 0.0278341 1 ||| ||| 0.385965
+[X][X] the [X][X] President [X] ||| der Präsidentin [X][X] [X][X] das [X] ||| 0.013917 1 ||| ||| 0.105263
+[X][X] to the [X][X] President [X] ||| der Präsidentin [X][X] [X][X] das [X] ||| 0.013917 1 ||| ||| 0.105263
+to [X][X] the [X][X] President [X] ||| der Präsidentin [X][X] in [X][X] das [X] ||| 0.0278341 1 ||| ||| 0.0526316
+Sri Lankan President [X] ||| der Präsidentin von Sri Lanka [X] ||| 0.0278341 1 ||| ||| 0.333333
+[X][X] Sri Lankan President [X] ||| der Präsidentin von Sri Lanka [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] the Sri Lankan President [X] ||| der Präsidentin von Sri Lanka [X][X] das [X] ||| 0.0278341 1 ||| ||| 0.0526316
+to [X][X] Sri Lankan President [X] ||| der Präsidentin von Sri Lanka in [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+President [X] ||| der Präsidentin von [X] ||| 0.0278341 1 ||| ||| 1
+[X][X] President [X] ||| der Präsidentin von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.385965
+[X][X] the [X][X] President [X] ||| der Präsidentin von [X][X] [X][X] das [X] ||| 0.013917 1 ||| ||| 0.105263
+[X][X] to the [X][X] President [X] ||| der Präsidentin von [X][X] [X][X] das [X] ||| 0.013917 1 ||| ||| 0.105263
+to [X][X] the [X][X] President [X] ||| der Präsidentin von [X][X] in [X][X] das [X] ||| 0.0278341 1 ||| ||| 0.0526316
+of the session [X] ||| der Sitzungsperiode [X] ||| 0.0278341 1 ||| ||| 0.5
+the public prosecutor [X] ||| der Staatsanwalt [X] ||| 0.0278341 1 ||| ||| 0.5
+the public prosecutor [X][X] . [X] ||| der Staatsanwalt [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0909091
+the public prosecutor [X][X] [X] ||| der Staatsanwalt [X][X] [X] ||| 0.0278341 1 ||| ||| 0.215909
+the public prosecutor is appealing [X] ||| der Staatsanwalt in Berufung geht [X] ||| 0.0278341 1 ||| ||| 0.125
+the public prosecutor [X] ||| der Staatsanwalt in [X] ||| 0.0278341 1 ||| ||| 0.333333
+the public prosecutor [X][X] . [X] ||| der Staatsanwalt in [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0909091
+the public prosecutor [X][X] [X] ||| der Staatsanwalt in [X][X] [X] ||| 0.0278341 1 ||| ||| 0.215909
+requested [X] ||| der Wunsch [X] ||| 0.0278341 1 ||| ||| 1
+requested [X][X] [X] ||| der Wunsch [X][X] [X] ||| 0.0278341 1 ||| ||| 0.3
+requested [X][X] on [X] ||| der Wunsch [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.1
+requested [X] ||| der Wunsch nach [X] ||| 0.0278341 1 ||| ||| 1
+requested [X][X] [X] ||| der Wunsch nach [X][X] [X] ||| 0.0278341 1 ||| ||| 0.3
+requested [X][X] on [X] ||| der Wunsch nach [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.1
+requested a debate [X] ||| der Wunsch nach einer Aussprache [X] ||| 0.0278341 1 ||| ||| 0.2
+requested a debate on [X] ||| der Wunsch nach einer Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.1
+requested a [X] ||| der Wunsch nach einer [X] ||| 0.0278341 1 ||| ||| 1
+requested a [X][X] [X] ||| der Wunsch nach einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.1
+, access [X] ||| der Zugang [X] ||| 0.013917 1 ||| ||| 2
+access [X] ||| der Zugang [X] ||| 0.013917 1 ||| ||| 2
+, access [X][X] . [X] ||| der Zugang [X][X] . [X] ||| 0.0119289 1 ||| ||| 0.145833
+access [X][X] . [X] ||| der Zugang [X][X] . [X] ||| 0.0159052 1 ||| ||| 0.145833
+, access [X][X] [X] ||| der Zugang [X][X] [X] ||| 0.0110974 1 ||| ||| 0.68228
+access [X][X] [X] ||| der Zugang [X][X] [X] ||| 0.0167367 1 ||| ||| 0.68228
+access [X][X] is [X][X] right [X] ||| der Zugang [X][X] [X][X] Recht ist [X] ||| 0.0278341 1 ||| ||| 0.0769231
+access [X][X] is [X][X] . [X] ||| der Zugang [X][X] [X][X] ist . [X] ||| 0.0278341 1 ||| ||| 0.0833333
+, access [X][X] is [X][X] [X] ||| der Zugang [X][X] [X][X] ist [X] ||| 0.00841496 1 ||| ||| 0.220513
+access [X][X] is [X][X] [X] ||| der Zugang [X][X] [X][X] ist [X] ||| 0.00970957 1 ||| ||| 0.220513
+access [X][X] is a [X][X] [X] ||| der Zugang [X][X] [X][X] ist [X] ||| 0.00970957 1 ||| ||| 0.220513
+, access to environmental information [X] ||| der Zugang zu Umweltinformationen [X] ||| 0.0101215 1 ||| ||| 0.392857
+access to environmental information [X] ||| der Zugang zu Umweltinformationen [X] ||| 0.0177126 1 ||| ||| 0.392857
+access to environmental information [X][X] [X] ||| der Zugang zu Umweltinformationen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.160256
+, access to [X] ||| der Zugang zu [X] ||| 0.00927803 1 ||| ||| 1.5
+access to [X] ||| der Zugang zu [X] ||| 0.0185561 1 ||| ||| 1.5
+, access to [X][X] . [X] ||| der Zugang zu [X][X] . [X] ||| 0.0119289 1 ||| ||| 0.145833
+access to [X][X] . [X] ||| der Zugang zu [X][X] . [X] ||| 0.0159052 1 ||| ||| 0.145833
+, access to [X][X] [X] ||| der Zugang zu [X][X] [X] ||| 0.0110974 1 ||| ||| 0.68228
+access to [X][X] [X] ||| der Zugang zu [X][X] [X] ||| 0.0167367 1 ||| ||| 0.68228
+access to [X][X] is [X][X] [X] ||| der Zugang zu [X][X] [X][X] ist [X] ||| 0.0278341 1 ||| ||| 0.0769231
+of [X] ||| der [X] ||| 0.0268243 1 ||| ||| 18
+of the [X] ||| der [X] ||| 0.277778 1 ||| ||| 18
+the [X] ||| der [X] ||| 0.555556 1 ||| ||| 18
+who [X] ||| der [X] ||| 0.00154634 1 ||| ||| 18
+[X][X] that [X] ||| der [X][X] , [X] ||| 0.019587 1 ||| ||| 0.177632
+the [X][X] , [X] ||| der [X][X] , [X] ||| 0.00824714 1 ||| ||| 0.177632
+the [X][X] , [X][X] President [X] ||| der [X][X] , [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0163934
+the [X][X] , [X][X] [X] ||| der [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0368016
+the [X][X] , to [X] ||| der [X][X] , bei [X] ||| 0.0278341 1 ||| ||| 0.030303
+the [X][X] , to [X][X] [X] ||| der [X][X] , bei [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0163934
+the [X][X] , to the [X] ||| der [X][X] , bei dem [X] ||| 0.0278341 1 ||| ||| 0.0204082
+of the [X][X] . [X] ||| der [X][X] . [X] ||| 0.00693364 1 ||| ||| 0.19116
+the [X][X] . [X] ||| der [X][X] . [X] ||| 0.0209005 1 ||| ||| 0.19116
+[X][X] 6 [X] ||| der [X][X] 6 [X] ||| 0.0278341 1 ||| ||| 0.25
+proposal [X][X] 6 that [X] ||| der [X][X] 6 vorschlägt , [X] ||| 0.0278341 1 ||| ||| 0.125
+proposal [X][X] 6 [X] ||| der [X][X] 6 vorschlägt [X] ||| 0.0278341 1 ||| ||| 0.166667
+the [X][X] Alexander Nikitin . [X] ||| der [X][X] Alexander Nikitin . [X] ||| 0.0278341 1 ||| ||| 0.0526316
+the [X][X] Alexander Nikitin [X] ||| der [X][X] Alexander Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0909091
+the [X][X] Alexander [X] ||| der [X][X] Alexander [X] ||| 0.0278341 1 ||| ||| 0.166667
+the [X][X] Alexander [X][X] [X] ||| der [X][X] Alexander [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] debate [X] ||| der [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] debate on [X] ||| der [X][X] Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.1
+of the [X][X] report . [X] ||| der [X][X] Bericht . [X] ||| 0.0278341 1 ||| ||| 0.047619
+of the [X][X] report [X] ||| der [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.0714286
+the [X][X] is appealing . [X] ||| der [X][X] Berufung geht . [X] ||| 0.0278341 1 ||| ||| 0.0909091
+the [X][X] is appealing [X] ||| der [X][X] Berufung geht [X] ||| 0.0278341 1 ||| ||| 0.125
+the [X][X] European Community [X] ||| der [X][X] Europäischen Union [X] ||| 0.013917 1 ||| ||| 0.133333
+the [X][X] the European Community [X] ||| der [X][X] Europäischen Union [X] ||| 0.013917 1 ||| ||| 0.133333
+the [X][X] European [X] ||| der [X][X] Europäischen [X] ||| 0.013917 1 ||| ||| 0.222222
+the [X][X] the European [X] ||| der [X][X] Europäischen [X] ||| 0.013917 1 ||| ||| 0.222222
+the [X][X] Nikitin . [X] ||| der [X][X] Nikitin . [X] ||| 0.0278341 1 ||| ||| 0.0526316
+the [X][X] Nikitin [X] ||| der [X][X] Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0909091
+the [X][X] President [X] ||| der [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0163934
+of [X][X] legal principle [X] ||| der [X][X] Rechtsgrundsatz [X] ||| 0.0167823 1 ||| ||| 0.0614272
+the [X][X] legal principle [X] ||| der [X][X] Rechtsgrundsatz [X] ||| 0.0110518 1 ||| ||| 0.0614272
+of [X][X] legal principle [X][X] [X] ||| der [X][X] Rechtsgrundsatz [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0333333
+the [X][X] stability [X] ||| der [X][X] Stabilität [X] ||| 0.0172763 1 ||| ||| 0.146465
+the [X][X] stability is [X] ||| der [X][X] Stabilität [X] ||| 0.0105578 1 ||| ||| 0.146465
+the [X][X] stability [X][X] [X] ||| der [X][X] Stabilität [X][X] [X] ||| 0.0174484 1 ||| ||| 0.135895
+the [X][X] stability is [X][X] [X] ||| der [X][X] Stabilität [X][X] [X] ||| 0.0103856 1 ||| ||| 0.135895
+the [X][X] stability [X][X] fundamental [X] ||| der [X][X] Stabilität [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0263158
+the [X][X] stability is a [X] ||| der [X][X] Stabilität einen [X] ||| 0.0278341 1 ||| ||| 0.0344828
+the [X][X] Community [X] ||| der [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0666667
+of the [X][X] proposal [X] ||| der [X][X] Vorschlag [X] ||| 0.0278341 1 ||| ||| 0.0588235
+of [X][X] [X] ||| der [X][X] [X] ||| 0.0364048 1 ||| ||| 7.18525
+of [X][X] is [X] ||| der [X][X] [X] ||| 0.000774757 1 ||| ||| 7.18525
+of the [X][X] [X] ||| der [X][X] [X] ||| 0.0388935 1 ||| ||| 7.18525
+the [X][X] [X] ||| der [X][X] [X] ||| 0.606143 1 ||| ||| 7.18525
+the [X][X] is [X] ||| der [X][X] [X] ||| 0.00021521 1 ||| ||| 7.18525
+the [X][X] the [X] ||| der [X][X] [X] ||| 0.00129126 1 ||| ||| 7.18525
+of [X][X] is [X][X] [X] ||| der [X][X] [X][X] [X] ||| 0.0144063 1 ||| ||| 0.243299
+the [X][X] is [X][X] [X] ||| der [X][X] [X][X] [X] ||| 0.00580092 1 ||| ||| 0.243299
+the [X][X] the [X][X] [X] ||| der [X][X] [X][X] [X] ||| 0.00762687 1 ||| ||| 0.243299
+[X][X] the [X][X] [X] ||| der [X][X] [X][X] das [X] ||| 0.013917 1 ||| ||| 0.105263
+[X][X] to the [X][X] [X] ||| der [X][X] [X][X] das [X] ||| 0.013917 1 ||| ||| 0.105263
+the [X][X] to [X] ||| der [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.030303
+the [X][X] to [X][X] [X] ||| der [X][X] bei [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0163934
+the [X][X] to the President [X] ||| der [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0163934
+the [X][X] to the [X] ||| der [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0204082
+the [X][X] television [X] ||| der [X][X] dem Fernsehen [X] ||| 0.0278341 1 ||| ||| 0.166667
+the [X][X] the President [X] ||| der [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0163934
+the [X][X] the [X] ||| der [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0204082
+of the [X][X] the report [X] ||| der [X][X] den Bericht [X] ||| 0.0278341 1 ||| ||| 0.0714286
+of the [X][X] the [X] ||| der [X][X] den [X] ||| 0.0278341 1 ||| ||| 0.125
+of the [X][X] the [X][X] [X] ||| der [X][X] den [X][X] [X] ||| 0.0278341 1 ||| ||| 0.047619
+of [X][X] of the [X] ||| der [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0333333
+of the [X][X] a proposal [X] ||| der [X][X] ein Vorschlag [X] ||| 0.0278341 1 ||| ||| 0.0588235
+of the [X][X] a [X] ||| der [X][X] ein [X] ||| 0.0278341 1 ||| ||| 0.0769231
+of [X][X] a [X] ||| der [X][X] einen [X] ||| 0.0100899 1 ||| ||| 0.250784
+of [X][X] is a [X] ||| der [X][X] einen [X] ||| 0.0100899 1 ||| ||| 0.250784
+the [X][X] a [X] ||| der [X][X] einen [X] ||| 0.00382719 1 ||| ||| 0.250784
+the [X][X] is a [X] ||| der [X][X] einen [X] ||| 0.00382719 1 ||| ||| 0.250784
+of [X][X] a [X][X] [X] ||| der [X][X] einen [X][X] [X] ||| 0.010335 1 ||| ||| 0.189521
+of [X][X] is a [X][X] [X] ||| der [X][X] einen [X][X] [X] ||| 0.010335 1 ||| ||| 0.189521
+the [X][X] a [X][X] [X] ||| der [X][X] einen [X][X] [X] ||| 0.00358208 1 ||| ||| 0.189521
+the [X][X] is a [X][X] [X] ||| der [X][X] einen [X][X] [X] ||| 0.00358208 1 ||| ||| 0.189521
+of [X][X] a fundamental [X] ||| der [X][X] einen elementaren [X] ||| 0.00944371 1 ||| ||| 0.163743
+of [X][X] is a fundamental [X] ||| der [X][X] einen elementaren [X] ||| 0.00944371 1 ||| ||| 0.163743
+the [X][X] a fundamental [X] ||| der [X][X] einen elementaren [X] ||| 0.00447334 1 ||| ||| 0.163743
+the [X][X] is a fundamental [X] ||| der [X][X] einen elementaren [X] ||| 0.00447334 1 ||| ||| 0.163743
+of [X][X] a fundamental [X][X] [X] ||| der [X][X] einen elementaren [X][X] [X] ||| 0.0206699 1 ||| ||| 0.0947606
+the [X][X] a fundamental [X][X] [X] ||| der [X][X] einen elementaren [X][X] [X] ||| 0.00716415 1 ||| ||| 0.0947606
+of [X][X] fundamental legal principle [X] ||| der [X][X] elementaren Rechtsgrundsatz [X] ||| 0.0167823 1 ||| ||| 0.0614272
+the [X][X] fundamental legal principle [X] ||| der [X][X] elementaren Rechtsgrundsatz [X] ||| 0.0110518 1 ||| ||| 0.0614272
+of [X][X] fundamental [X] ||| der [X][X] elementaren [X] ||| 0.0188874 1 ||| ||| 0.0818714
+the [X][X] fundamental [X] ||| der [X][X] elementaren [X] ||| 0.00894667 1 ||| ||| 0.0818714
+of [X][X] fundamental [X][X] [X] ||| der [X][X] elementaren [X][X] [X] ||| 0.0206699 1 ||| ||| 0.0947606
+the [X][X] fundamental [X][X] [X] ||| der [X][X] elementaren [X][X] [X] ||| 0.00716415 1 ||| ||| 0.0947606
+[X][X] on [X] ||| der [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.1
+the [X][X] is appealing . [X] ||| der [X][X] in Berufung geht . [X] ||| 0.0278341 1 ||| ||| 0.0909091
+the [X][X] is appealing [X] ||| der [X][X] in Berufung geht [X] ||| 0.0278341 1 ||| ||| 0.125
+the [X][X] [X] ||| der [X][X] in [X] ||| 0.0278341 1 ||| ||| 0.333333
+to [X][X] the [X][X] [X] ||| der [X][X] in [X][X] das [X] ||| 0.013917 1 ||| ||| 0.105263
+to [X][X] to the [X][X] [X] ||| der [X][X] in [X][X] das [X] ||| 0.013917 1 ||| ||| 0.105263
+the [X][X] relative stability [X] ||| der [X][X] relativen Stabilität [X] ||| 0.0172763 1 ||| ||| 0.146465
+the [X][X] relative stability is [X] ||| der [X][X] relativen Stabilität [X] ||| 0.0105578 1 ||| ||| 0.146465
+the [X][X] relative stability [X][X] [X] ||| der [X][X] relativen Stabilität [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0851888
+the [X][X] relative [X] ||| der [X][X] relativen [X] ||| 0.0278341 1 ||| ||| 0.166667
+the [X][X] relative [X][X] [X] ||| der [X][X] relativen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.140744
+the [X][X] relative [X][X] a [X] ||| der [X][X] relativen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0344828
+the [X][X] relative [X][X] fundamental [X] ||| der [X][X] relativen [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0263158
+of the [X][X] and [X] ||| der [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.111111
+of the [X][X] and [X][X] [X] ||| der [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0588235
+of the [X][X] and a [X] ||| der [X][X] und ein [X] ||| 0.0278341 1 ||| ||| 0.0769231
+the [X][X] represent , [X] ||| der [X][X] vertreten , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+the [X][X] represent , [X][X] [X] ||| der [X][X] vertreten , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0368016
+the [X][X] represent , to [X] ||| der [X][X] vertreten , bei [X] ||| 0.0278341 1 ||| ||| 0.030303
+the [X][X] represent [X] ||| der [X][X] vertreten [X] ||| 0.0278341 1 ||| ||| 0.1
+the [X][X] represent [X][X] President [X] ||| der [X][X] vertreten [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0163934
+the [X][X] represent [X][X] [X] ||| der [X][X] vertreten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0671046
+the [X][X] represent [X][X] the [X] ||| der [X][X] vertreten [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0204082
+proposal [X][X] that [X] ||| der [X][X] vorschlägt , [X] ||| 0.0278341 1 ||| ||| 0.125
+proposal [X][X] [X] ||| der [X][X] vorschlägt [X] ||| 0.0278341 1 ||| ||| 0.166667
+of the common fisheries policy [X] ||| der gemeinsamen Fischereipolitik darstellt [X] ||| 0.0278341 1 ||| ||| 0.166667
+of the common [X] ||| der gemeinsamen [X] ||| 0.0278341 1 ||| ||| 0.5
+of the common [X][X] proposal [X] ||| der gemeinsamen [X][X] Vorschlag [X] ||| 0.0278341 1 ||| ||| 0.0588235
+of the common [X][X] [X] ||| der gemeinsamen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.413524
+of the common [X][X] a [X] ||| der gemeinsamen [X][X] ein [X] ||| 0.0278341 1 ||| ||| 0.0769231
+of the common [X][X] and [X] ||| der gemeinsamen [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.111111
+the whole of the European [X] ||| der gesamten Europäischen [X] ||| 0.0278341 1 ||| ||| 0.111111
+the whole [X] ||| der gesamten [X] ||| 0.0151822 1 ||| ||| 1.83333
+the whole of [X] ||| der gesamten [X] ||| 0.00759112 1 ||| ||| 1.83333
+the whole of the [X] ||| der gesamten [X] ||| 0.00506074 1 ||| ||| 1.83333
+the whole [X][X] Community [X] ||| der gesamten [X][X] Union [X] ||| 0.013917 1 ||| ||| 0.133333
+the whole of [X][X] Community [X] ||| der gesamten [X][X] Union [X] ||| 0.013917 1 ||| ||| 0.133333
+the whole [X][X] [X] ||| der gesamten [X][X] [X] ||| 0.0117196 1 ||| ||| 0.422223
+the whole of [X][X] [X] ||| der gesamten [X][X] [X] ||| 0.0117196 1 ||| ||| 0.422223
+the whole of the [X][X] [X] ||| der gesamten [X][X] [X] ||| 0.00439485 1 ||| ||| 0.422223
+in paragraph 6 [X] ||| der in Absatz 6 [X] ||| 0.0278341 1 ||| ||| 0.25
+proposal in paragraph 6 that [X] ||| der in Absatz 6 vorschlägt , [X] ||| 0.0278341 1 ||| ||| 0.125
+proposal in paragraph 6 [X] ||| der in Absatz 6 vorschlägt [X] ||| 0.0278341 1 ||| ||| 0.166667
+in paragraph [X] ||| der in Absatz [X] ||| 0.0278341 1 ||| ||| 1
+in [X] ||| der in [X] ||| 0.0278341 1 ||| ||| 1
+in [X][X] [X] ||| der in [X][X] [X] ||| 0.0278341 1 ||| ||| 0.25
+proposal in [X][X] that [X] ||| der in [X][X] vorschlägt , [X] ||| 0.0278341 1 ||| ||| 0.125
+proposal in [X][X] [X] ||| der in [X][X] vorschlägt [X] ||| 0.0278341 1 ||| ||| 0.166667
+the last [X] ||| der letzten [X] ||| 0.0278341 1 ||| ||| 1
+of relative stability [X] ||| der relativen Stabilität [X] ||| 0.0214108 1 ||| ||| 0.866666
+of relative stability is [X] ||| der relativen Stabilität [X] ||| 0.00642326 1 ||| ||| 0.866666
+of relative stability [X][X] [X] ||| der relativen Stabilität [X][X] [X] ||| 0.0176082 1 ||| ||| 0.342761
+of relative stability is [X][X] [X] ||| der relativen Stabilität [X][X] [X] ||| 0.0102259 1 ||| ||| 0.342761
+of relative stability [X][X] fundamental [X] ||| der relativen Stabilität [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0555556
+of relative stability is a [X] ||| der relativen Stabilität einen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+of relative [X] ||| der relativen [X] ||| 0.241419 1 ||| ||| 2
+of relative [X][X] legal principle [X] ||| der relativen [X][X] Rechtsgrundsatz [X] ||| 0.0278341 1 ||| ||| 0.037037
+of relative [X][X] [X] ||| der relativen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.416835
+of relative [X][X] of the [X] ||| der relativen [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0333333
+of relative [X][X] a [X] ||| der relativen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+of relative [X][X] a [X][X] [X] ||| der relativen [X][X] einen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0703704
+of relative [X][X] a fundamental [X] ||| der relativen [X][X] einen elementaren [X] ||| 0.0278341 1 ||| ||| 0.0555556
+of relative [X][X] fundamental [X] ||| der relativen [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0555556
+of relative [X][X] fundamental [X][X] [X] ||| der relativen [X][X] elementaren [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0703704
+initiative of the type [X] ||| derartige Initiative [X] ||| 0.0167004 1 ||| ||| 0.416667
+initiative of the type you [X] ||| derartige Initiative [X] ||| 0.0111337 1 ||| ||| 0.416667
+says that this [X] ||| derartige Strafen [X] ||| 0.0278341 1 ||| ||| 0.5
+of the type [X] ||| derartige [X] ||| 0.00347926 1 ||| ||| 8
+of the type you [X] ||| derartige [X] ||| 0.00347926 1 ||| ||| 8
+of the type you have [X] ||| derartige [X] ||| 0.00347926 1 ||| ||| 8
+that this [X] ||| derartige [X] ||| 0.00347926 1 ||| ||| 8
+the type [X] ||| derartige [X] ||| 0.00347926 1 ||| ||| 8
+the type you [X] ||| derartige [X] ||| 0.00347926 1 ||| ||| 8
+the type you have [X] ||| derartige [X] ||| 0.00347926 1 ||| ||| 8
+the type you have just [X] ||| derartige [X] ||| 0.00347926 1 ||| ||| 8
+[X][X] the type [X] ||| derartige [X][X] [X] ||| 0.0124365 1 ||| ||| 0.559524
+[X][X] the type you [X] ||| derartige [X][X] [X] ||| 0.00829102 1 ||| ||| 0.559524
+[X][X] the type you have [X] ||| derartige [X][X] [X] ||| 0.00710657 1 ||| ||| 0.559524
+of the European Parliament , [X] ||| des Europäischen Parlaments [X] ||| 0.0101215 1 ||| ||| 0.392857
+of the European Parliament [X] ||| des Europäischen Parlaments [X] ||| 0.0177126 1 ||| ||| 0.392857
+of the European [X] ||| des Europäischen [X] ||| 0.0278341 1 ||| ||| 0.5
+of the European [X][X] [X] ||| des Europäischen [X][X] [X] ||| 0.0154037 1 ||| ||| 1.3373
+of the European [X][X] a [X] ||| des Europäischen [X][X] [X] ||| 0.00231262 1 ||| ||| 1.3373
+of the European [X][X] been [X] ||| des Europäischen [X][X] [X] ||| 0.0026017 1 ||| ||| 1.3373
+of the European [X][X] date [X] ||| des Europäischen [X][X] [X] ||| 0.00231262 1 ||| ||| 1.3373
+of the European [X][X] has [X] ||| des Europäischen [X][X] [X] ||| 0.0026017 1 ||| ||| 1.3373
+of the European [X][X] set [X] ||| des Europäischen [X][X] [X] ||| 0.0026017 1 ||| ||| 1.3373
+the principle [X] ||| des Grundsatzes [X] ||| 0.0278341 1 ||| ||| 1
+the principle [X][X] stability [X] ||| des Grundsatzes [X][X] Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0909091
+the principle [X][X] [X] ||| des Grundsatzes [X][X] [X] ||| 0.0278341 1 ||| ||| 0.257576
+the principle of [X] ||| des Grundsatzes der [X] ||| 0.0278341 1 ||| ||| 0.333333
+the principle of [X][X] [X] ||| des Grundsatzes der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0909091
+the principle of relative stability [X] ||| des Grundsatzes der relativen Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0909091
+the principle of relative [X] ||| des Grundsatzes der relativen [X] ||| 0.0278341 1 ||| ||| 0.166667
+Parliament 's [X] ||| des Parlaments [X] ||| 0.0278341 1 ||| ||| 1
+expressing Parliament 's [X] ||| des Parlaments zum [X] ||| 0.0278341 1 ||| ||| 0.5
+the condemned person [X] ||| des Verurteilten [X] ||| 0.0278341 1 ||| ||| 0.5
+of [X] ||| des [X] ||| 0.00695852 1 ||| ||| 4
+of the [X] ||| des [X] ||| 0.00695852 1 ||| ||| 4
+the [X] ||| des [X] ||| 0.120709 1 ||| ||| 4
+the [X][X] stability [X] ||| des [X][X] Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0909091
+of the [X][X] , [X] ||| des [X][X] [X] ||| 0.00116324 1 ||| ||| 3.41829
+of the [X][X] , a [X] ||| des [X][X] [X] ||| 0.000904743 1 ||| ||| 3.41829
+of the [X][X] [X] ||| des [X][X] [X] ||| 0.00806191 1 ||| ||| 3.41829
+of the [X][X] a [X] ||| des [X][X] [X] ||| 0.000904743 1 ||| ||| 3.41829
+of the [X][X] a date [X] ||| des [X][X] [X] ||| 0.000904743 1 ||| ||| 3.41829
+of the [X][X] been [X] ||| des [X][X] [X] ||| 0.00101784 1 ||| ||| 3.41829
+of the [X][X] been set [X] ||| des [X][X] [X] ||| 0.00101784 1 ||| ||| 3.41829
+of the [X][X] date [X] ||| des [X][X] [X] ||| 0.000904743 1 ||| ||| 3.41829
+of the [X][X] date has [X] ||| des [X][X] [X] ||| 0.00101784 1 ||| ||| 3.41829
+of the [X][X] has [X] ||| des [X][X] [X] ||| 0.00101784 1 ||| ||| 3.41829
+of the [X][X] has been [X] ||| des [X][X] [X] ||| 0.00101784 1 ||| ||| 3.41829
+of the [X][X] set [X] ||| des [X][X] [X] ||| 0.00101784 1 ||| ||| 3.41829
+the [X][X] [X] ||| des [X][X] [X] ||| 0.0770461 1 ||| ||| 3.41829
+the [X][X] relative stability [X] ||| des [X][X] relativen Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0909091
+the [X][X] relative [X] ||| des [X][X] relativen [X] ||| 0.0278341 1 ||| ||| 0.166667
+of last [X] ||| des vergangenen [X] ||| 0.0278341 1 ||| ||| 1
+it clear [X] ||| deutlich [X] ||| 0.0278341 1 ||| ||| 1
+made it clear that [X] ||| deutlich gemacht hat , daß [X] ||| 0.0278341 1 ||| ||| 0.333333
+made it clear that [X][X] [X] ||| deutlich gemacht hat , daß [X][X] [X] ||| 0.0278341 1 ||| ||| 0.251166
+made it clear [X] ||| deutlich gemacht hat [X] ||| 0.0278341 1 ||| ||| 0.5
+made it clear [X][X] , [X] ||| deutlich gemacht hat [X][X] [X] ||| 0.00652593 1 ||| ||| 0.328089
+made it clear [X][X] [X] ||| deutlich gemacht hat [X][X] [X] ||| 0.0213082 1 ||| ||| 0.328089
+made it clear [X][X] access [X] ||| deutlich gemacht hat [X][X] der Zugang [X] ||| 0.0278341 1 ||| ||| 0.0909091
+the execution [X] ||| die Hinrichtung [X] ||| 0.0278341 1 ||| ||| 1
+the execution [X][X] [X] ||| die Hinrichtung [X][X] [X] ||| 0.0278341 1 ||| ||| 0.25
+the execution of a [X] ||| die Hinrichtung eines [X] ||| 0.0278341 1 ||| ||| 0.25
+you [X] ||| die Sie [X] ||| 0.0278341 1 ||| ||| 1
+you [X][X] Governor [X] ||| die Sie [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.0357144
+you [X][X] the Governor [X] ||| die Sie [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.0357144
+you [X][X] to the Governor [X] ||| die Sie [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.0357144
+you [X][X] President [X] ||| die Sie [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.037037
+you [X][X] President [X][X] Governor [X] ||| die Sie [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.0119048
+you [X][X] President [X][X] [X] ||| die Sie [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0205588 1 ||| ||| 0.0617067
+you [X][X] President [X][X] the [X] ||| die Sie [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.00727532 1 ||| ||| 0.0617067
+you [X][X] President and [X] ||| die Sie [X][X] Präsidentschaftskandidaten und [X] ||| 0.0158654 1 ||| ||| 0.0407997
+you [X][X] President and to [X] ||| die Sie [X][X] Präsidentschaftskandidaten und [X] ||| 0.0119687 1 ||| ||| 0.0407997
+you [X][X] President and [X][X] [X] ||| die Sie [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0119048
+you [X][X] [X] ||| die Sie [X][X] [X] ||| 0.0255135 1 ||| ||| 0.597339
+you [X][X] the [X] ||| die Sie [X][X] [X] ||| 0.00075156 1 ||| ||| 0.597339
+you [X][X] to [X] ||| die Sie [X][X] [X] ||| 0.00081749 1 ||| ||| 0.597339
+you [X][X] to the [X] ||| die Sie [X][X] [X] ||| 0.00075156 1 ||| ||| 0.597339
+you [X][X] to [X][X] [X] ||| die Sie [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0119048
+you [X][X] to [X] ||| die Sie [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.125
+you [X][X] to [X][X] Governor [X] ||| die Sie [X][X] bei [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.0119048
+you [X][X] to [X][X] [X] ||| die Sie [X][X] bei [X][X] [X] ||| 0.0211175 1 ||| ||| 0.139544
+you [X][X] to [X][X] the [X] ||| die Sie [X][X] bei [X][X] [X] ||| 0.00321717 1 ||| ||| 0.139544
+you [X][X] to [X][X] to [X] ||| die Sie [X][X] bei [X][X] [X] ||| 0.00349939 1 ||| ||| 0.139544
+you [X][X] to [X][X] and [X] ||| die Sie [X][X] bei [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0232558
+you [X][X] to the President [X] ||| die Sie [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.037037
+you [X][X] to the [X] ||| die Sie [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0666667
+you [X][X] to the [X][X] [X] ||| die Sie [X][X] bei dem [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0688335
+you [X][X] the President [X] ||| die Sie [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.037037
+you [X][X] the President [X][X] [X] ||| die Sie [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0455777
+you [X][X] the President and [X] ||| die Sie [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.0232558
+you [X][X] the [X] ||| die Sie [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0666667
+you [X][X] the [X][X] Governor [X] ||| die Sie [X][X] dem [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.0119048
+you [X][X] the [X][X] [X] ||| die Sie [X][X] dem [X][X] [X] ||| 0.0186907 1 ||| ||| 0.102506
+you [X][X] the [X][X] the [X] ||| die Sie [X][X] dem [X][X] [X] ||| 0.00437959 1 ||| ||| 0.102506
+you [X][X] the [X][X] to [X] ||| die Sie [X][X] dem [X][X] [X] ||| 0.00476379 1 ||| ||| 0.102506
+you [X][X] and [X] ||| die Sie [X][X] und [X] ||| 0.0113704 1 ||| ||| 0.0569287
+you [X][X] and to [X] ||| die Sie [X][X] und [X] ||| 0.00857772 1 ||| ||| 0.0569287
+you [X][X] and to the [X] ||| die Sie [X][X] und [X] ||| 0.00788594 1 ||| ||| 0.0569287
+you [X][X] and [X][X] [X] ||| die Sie [X][X] und [X][X] [X] ||| 0.013917 1 ||| ||| 0.0238096
+you [X][X] and to [X][X] [X] ||| die Sie [X][X] und [X][X] [X] ||| 0.013917 1 ||| ||| 0.0238096
+you represent , [X] ||| die Sie vertreten , [X] ||| 0.0278341 1 ||| ||| 0.25
+you represent , [X][X] Governor [X] ||| die Sie vertreten , [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.0119048
+you represent , [X][X] President [X] ||| die Sie vertreten , [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.037037
+you represent , [X][X] [X] ||| die Sie vertreten , [X][X] [X] ||| 0.023289 1 ||| ||| 0.20621
+you represent , [X][X] the [X] ||| die Sie vertreten , [X][X] [X] ||| 0.00217708 1 ||| ||| 0.20621
+you represent , [X][X] to [X] ||| die Sie vertreten , [X][X] [X] ||| 0.00236807 1 ||| ||| 0.20621
+you represent , [X][X] and [X] ||| die Sie vertreten , [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0232558
+you represent , to [X] ||| die Sie vertreten , bei [X] ||| 0.0278341 1 ||| ||| 0.125
+you represent , to [X][X] [X] ||| die Sie vertreten , bei [X][X] [X] ||| 0.0278341 1 ||| ||| 0.105871
+you represent , to the [X] ||| die Sie vertreten , bei dem [X] ||| 0.0278341 1 ||| ||| 0.0666667
+you represent [X] ||| die Sie vertreten [X] ||| 0.0278341 1 ||| ||| 1
+you represent [X][X] Governor [X] ||| die Sie vertreten [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0238096
+you represent [X][X] the Governor [X] ||| die Sie vertreten [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0238096
+you represent [X][X] President [X] ||| die Sie vertreten [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.037037
+you represent [X][X] President [X][X] [X] ||| die Sie vertreten [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0455777
+you represent [X][X] President and [X] ||| die Sie vertreten [X][X] Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.0232558
+you represent [X][X] [X] ||| die Sie vertreten [X][X] [X] ||| 0.0238432 1 ||| ||| 0.347339
+you represent [X][X] the [X] ||| die Sie vertreten [X][X] [X] ||| 0.0012925 1 ||| ||| 0.347339
+you represent [X][X] to [X] ||| die Sie vertreten [X][X] [X] ||| 0.00140589 1 ||| ||| 0.347339
+you represent [X][X] to the [X] ||| die Sie vertreten [X][X] [X] ||| 0.0012925 1 ||| ||| 0.347339
+you represent [X][X] to [X][X] [X] ||| die Sie vertreten [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0119048
+you represent [X][X] the President [X] ||| die Sie vertreten [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.037037
+you represent [X][X] the [X] ||| die Sie vertreten [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0666667
+you represent [X][X] the [X][X] [X] ||| die Sie vertreten [X][X] dem [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0688335
+you represent [X][X] and [X] ||| die Sie vertreten [X][X] und [X] ||| 0.0158654 1 ||| ||| 0.0407997
+you represent [X][X] and to [X] ||| die Sie vertreten [X][X] und [X] ||| 0.0119687 1 ||| ||| 0.0407997
+you represent [X][X] and [X][X] [X] ||| die Sie vertreten [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0119048
+the [X] ||| die [X] ||| 0.00695852 1 ||| ||| 4
+which [X] ||| die [X] ||| 0.43128 1 ||| ||| 4
+[X][X] , [X] ||| die [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] , [X][X] Governor [X] ||| die [X][X] , [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0238096
+[X][X] , [X][X] the Governor [X] ||| die [X][X] , [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0238096
+[X][X] , [X][X] President [X] ||| die [X][X] , [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] , [X][X] President and [X] ||| die [X][X] , [X][X] Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.0232558
+[X][X] , [X][X] [X] ||| die [X][X] , [X][X] [X] ||| 0.0215995 1 ||| ||| 0.222339
+[X][X] , [X][X] the [X] ||| die [X][X] , [X][X] [X] ||| 0.00201915 1 ||| ||| 0.222339
+[X][X] , [X][X] to [X] ||| die [X][X] , [X][X] [X] ||| 0.00219628 1 ||| ||| 0.222339
+[X][X] , [X][X] to the [X] ||| die [X][X] , [X][X] [X] ||| 0.00201915 1 ||| ||| 0.222339
+[X][X] , [X][X] and [X] ||| die [X][X] , [X][X] und [X] ||| 0.0158654 1 ||| ||| 0.0407997
+[X][X] , [X][X] and to [X] ||| die [X][X] , [X][X] und [X] ||| 0.0119687 1 ||| ||| 0.0407997
+[X][X] , to [X] ||| die [X][X] , bei [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] , to [X][X] Governor [X] ||| die [X][X] , bei [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.0119048
+[X][X] , to [X][X] [X] ||| die [X][X] , bei [X][X] [X] ||| 0.0211175 1 ||| ||| 0.139544
+[X][X] , to [X][X] the [X] ||| die [X][X] , bei [X][X] [X] ||| 0.00321717 1 ||| ||| 0.139544
+[X][X] , to [X][X] to [X] ||| die [X][X] , bei [X][X] [X] ||| 0.00349939 1 ||| ||| 0.139544
+[X][X] , to [X][X] and [X] ||| die [X][X] , bei [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0232558
+[X][X] , to the President [X] ||| die [X][X] , bei dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] , to the [X] ||| die [X][X] , bei dem [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] , to the [X][X] [X] ||| die [X][X] , bei dem [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0688335
+[X][X] . [X] ||| die [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] Governor [X] ||| die [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.0357144
+[X][X] the Governor [X] ||| die [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.0357144
+[X][X] to the Governor [X] ||| die [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.0357144
+[X][X] President [X] ||| die [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] President [X][X] Governor [X] ||| die [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0238096
+[X][X] President [X][X] the Governor [X] ||| die [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0238096
+[X][X] President [X][X] [X] ||| die [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0205588 1 ||| ||| 0.0617067
+[X][X] President [X][X] the [X] ||| die [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.00727532 1 ||| ||| 0.0617067
+[X][X] President and [X] ||| die [X][X] Präsidentschaftskandidaten und [X] ||| 0.0113704 1 ||| ||| 0.0569287
+[X][X] President and to [X] ||| die [X][X] Präsidentschaftskandidaten und [X] ||| 0.00857772 1 ||| ||| 0.0569287
+[X][X] President and to the [X] ||| die [X][X] Präsidentschaftskandidaten und [X] ||| 0.00788594 1 ||| ||| 0.0569287
+[X][X] President and [X][X] [X] ||| die [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.013917 1 ||| ||| 0.0238096
+[X][X] President and to [X][X] [X] ||| die [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.013917 1 ||| ||| 0.0238096
+the [X][X] [X] ||| die [X][X] [X] ||| 0.00673406 1 ||| ||| 1.03333
+which [X][X] [X] ||| die [X][X] [X] ||| 0.0211 1 ||| ||| 1.03333
+[X][X] has [X][X] . [X] ||| die [X][X] [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] to [X] ||| die [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] to [X][X] Governor [X] ||| die [X][X] bei [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0238096
+[X][X] to [X][X] the Governor [X] ||| die [X][X] bei [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0238096
+[X][X] to [X][X] [X] ||| die [X][X] bei [X][X] [X] ||| 0.0189296 1 ||| ||| 0.155673
+[X][X] to [X][X] the [X] ||| die [X][X] bei [X][X] [X] ||| 0.00288384 1 ||| ||| 0.155673
+[X][X] to [X][X] to [X] ||| die [X][X] bei [X][X] [X] ||| 0.00313683 1 ||| ||| 0.155673
+[X][X] to [X][X] to the [X] ||| die [X][X] bei [X][X] [X] ||| 0.00288384 1 ||| ||| 0.155673
+[X][X] to [X][X] and [X] ||| die [X][X] bei [X][X] und [X] ||| 0.0158654 1 ||| ||| 0.0407997
+[X][X] to [X][X] and to [X] ||| die [X][X] bei [X][X] und [X] ||| 0.0119687 1 ||| ||| 0.0407997
+[X][X] to the President [X] ||| die [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] to the President [X][X] [X] ||| die [X][X] bei dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0455777
+[X][X] to the President and [X] ||| die [X][X] bei dem Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.0232558
+[X][X] to the [X] ||| die [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] to the [X][X] Governor [X] ||| die [X][X] bei dem [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.0119048
+[X][X] to the [X][X] [X] ||| die [X][X] bei dem [X][X] [X] ||| 0.0186907 1 ||| ||| 0.102506
+[X][X] to the [X][X] the [X] ||| die [X][X] bei dem [X][X] [X] ||| 0.00437959 1 ||| ||| 0.102506
+[X][X] to the [X][X] to [X] ||| die [X][X] bei dem [X][X] [X] ||| 0.00476379 1 ||| ||| 0.102506
+[X][X] the President [X] ||| die [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] the President [X][X] Governor [X] ||| die [X][X] dem Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.0119048
+[X][X] the President [X][X] [X] ||| die [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0205588 1 ||| ||| 0.0617067
+[X][X] the President [X][X] the [X] ||| die [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.00727532 1 ||| ||| 0.0617067
+[X][X] the President and [X] ||| die [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0158654 1 ||| ||| 0.0407997
+[X][X] the President and to [X] ||| die [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0119687 1 ||| ||| 0.0407997
+[X][X] the President and [X][X] [X] ||| die [X][X] dem Präsidentschaftskandidaten und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0119048
+[X][X] the [X] ||| die [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] the [X][X] Governor [X] ||| die [X][X] dem [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0238096
+[X][X] the [X][X] the Governor [X] ||| die [X][X] dem [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0238096
+[X][X] the [X][X] [X] ||| die [X][X] dem [X][X] [X] ||| 0.0161496 1 ||| ||| 0.118635
+[X][X] the [X][X] the [X] ||| die [X][X] dem [X][X] [X] ||| 0.00378417 1 ||| ||| 0.118635
+[X][X] the [X][X] to [X] ||| die [X][X] dem [X][X] [X] ||| 0.00411613 1 ||| ||| 0.118635
+[X][X] the [X][X] to the [X] ||| die [X][X] dem [X][X] [X] ||| 0.00378417 1 ||| ||| 0.118635
+[X][X] always [X] ||| die [X][X] immer [X] ||| 0.013917 1 ||| ||| 0.333334
+[X][X] has always [X] ||| die [X][X] immer [X] ||| 0.013917 1 ||| ||| 0.333334
+[X][X] always [X][X] [X] ||| die [X][X] immer [X][X] [X] ||| 0.0139171 1 ||| ||| 0.1
+[X][X] has always [X][X] [X] ||| die [X][X] immer [X][X] [X] ||| 0.0139171 1 ||| ||| 0.1
+[X][X] always adopted . [X] ||| die [X][X] immer vertreten haben . [X] ||| 0.0139171 1 ||| ||| 0.1
+[X][X] has always adopted . [X] ||| die [X][X] immer vertreten haben . [X] ||| 0.0139171 1 ||| ||| 0.1
+[X][X] always adopted [X] ||| die [X][X] immer vertreten haben [X] ||| 0.0139171 1 ||| ||| 0.2
+[X][X] has always adopted [X] ||| die [X][X] immer vertreten haben [X] ||| 0.0139171 1 ||| ||| 0.2
+which [X][X] annually [X] ||| die [X][X] jährlich [X] ||| 0.0278341 1 ||| ||| 0.25
+which fail to meet [X][X] [X] ||| die [X][X] nicht erfüllen , [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] and to the Governor [X] ||| die [X][X] und Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.0119048
+[X][X] and [X] ||| die [X][X] und [X] ||| 0.0113704 1 ||| ||| 0.0569287
+[X][X] and to [X] ||| die [X][X] und [X] ||| 0.00857772 1 ||| ||| 0.0569287
+[X][X] and to the [X] ||| die [X][X] und [X] ||| 0.00788594 1 ||| ||| 0.0569287
+[X][X] and [X][X] [X] ||| die [X][X] und [X][X] [X] ||| 0.013917 1 ||| ||| 0.0238096
+[X][X] and to [X][X] [X] ||| die [X][X] und [X][X] [X] ||| 0.013917 1 ||| ||| 0.0238096
+[X][X] adopted . [X] ||| die [X][X] vertreten haben . [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] adopted [X] ||| die [X][X] vertreten haben [X] ||| 0.0278341 1 ||| ||| 0.1
+this year ' s first [X] ||| die erste diesjährige [X] ||| 0.0278341 1 ||| ||| 1
+which I [X] ||| die ich [X] ||| 0.0278341 1 ||| ||| 1
+which [X][X] their fleet [X][X] [X] ||| die ihr Soll [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+which [X][X] their [X][X] [X] ||| die ihr [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+which [X][X] their [X][X] annually [X] ||| die ihr [X][X] [X][X] jährlich [X] ||| 0.0278341 1 ||| ||| 0.25
+which fail [X][X] their [X][X] [X] ||| die ihr [X][X] nicht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+which [X] ||| die von [X] ||| 0.0278341 1 ||| ||| 1
+which [X][X] [X] ||| die von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.333333
+which many [X] ||| die von vielen [X] ||| 0.0208756 1 ||| ||| 1.33333
+which many people [X] ||| die von vielen [X] ||| 0.00695852 1 ||| ||| 1.33333
+this House [X] ||| die wir als Parlament [X] ||| 0.013917 1 ||| ||| 2
+this House has [X] ||| die wir als Parlament [X] ||| 0.013917 1 ||| ||| 2
+this House [X][X] . [X] ||| die wir als Parlament [X][X] . [X] ||| 0.0139171 1 ||| ||| 0.1
+this House has [X][X] . [X] ||| die wir als Parlament [X][X] . [X] ||| 0.0139171 1 ||| ||| 0.1
+this House [X][X] [X] ||| die wir als Parlament [X][X] [X] ||| 0.0188874 1 ||| ||| 0.466667
+this House has [X][X] [X] ||| die wir als Parlament [X][X] [X] ||| 0.00894667 1 ||| ||| 0.466667
+this House [X][X] adopted . [X] ||| die wir als Parlament [X][X] vertreten haben . [X] ||| 0.0278341 1 ||| ||| 0.05
+this House [X][X] adopted [X] ||| die wir als Parlament [X][X] vertreten haben [X] ||| 0.0278341 1 ||| ||| 0.1
+this House has always [X] ||| die wir als Parlament immer [X] ||| 0.0278341 1 ||| ||| 0.166667
+this House has always [X][X] [X] ||| die wir als Parlament immer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.05
+this House has always adopted [X] ||| die wir als Parlament immer vertreten haben [X] ||| 0.0278341 1 ||| ||| 0.1
+this [X] ||| dies [X] ||| 0.241419 1 ||| ||| 2
+this question [X] ||| diese Frage [X] ||| 0.0278341 1 ||| ||| 1
+raise this question , [X] ||| diese Frage ansprechen , [X] ||| 0.0278341 1 ||| ||| 0.333333
+raise this question , [X][X] [X] ||| diese Frage ansprechen , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.23254
+raise this question , i.e. [X] ||| diese Frage ansprechen , d. h. [X] ||| 0.0278341 1 ||| ||| 0.2
+raise this question [X] ||| diese Frage ansprechen [X] ||| 0.0278341 1 ||| ||| 0.5
+raise this question [X][X] [X] ||| diese Frage ansprechen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.43254
+raise this question [X][X] on [X] ||| diese Frage ansprechen [X][X] am [X] ||| 0.0278341 1 ||| ||| 0.111111
+raise this question [X][X] to [X] ||| diese Frage ansprechen [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.05
+this [X] ||| diese [X] ||| 0.0278341 1 ||| ||| 1
+[X][X] of a [X] ||| dieser Woche [X][X] eines [X] ||| 0.0278341 1 ||| ||| 0.166667
+the execution [X] ||| dieser Woche die Hinrichtung [X] ||| 0.0278341 1 ||| ||| 1
+the execution [X][X] [X] ||| dieser Woche die Hinrichtung [X][X] [X] ||| 0.0278341 1 ||| ||| 0.166667
+the execution of a [X] ||| dieser Woche die Hinrichtung eines [X] ||| 0.0278341 1 ||| ||| 0.166667
+the [X] ||| dieser Woche die [X] ||| 0.0278341 1 ||| ||| 1
+the [X][X] [X] ||| dieser Woche die [X][X] [X] ||| 0.0278341 1 ||| ||| 0.166667
+a [X] ||| dieser [X] ||| 0.0278341 1 ||| ||| 1
+a [X][X] situation [X] ||| dieser [X][X] Situation [X] ||| 0.0278341 1 ||| ||| 0.166667
+a [X][X] [X] ||| dieser [X][X] [X] ||| 0.0278341 1 ||| ||| 0.5
+[X][X] of a [X] ||| dieser [X][X] eines [X] ||| 0.0278341 1 ||| ||| 0.166667
+a very [X] ||| dieser sehr [X] ||| 0.0278341 1 ||| ||| 1
+a very [X][X] [X] ||| dieser sehr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.166667
+a very difficult situation [X] ||| dieser sehr schwierigen Situation [X] ||| 0.0278341 1 ||| ||| 0.166667
+a very difficult [X] ||| dieser sehr schwierigen [X] ||| 0.0278341 1 ||| ||| 0.333333
+this Parliament [X] ||| dieses Parlament [X] ||| 0.0278341 1 ||| ||| 1
+this Parliament [X][X] . [X] ||| dieses Parlament [X][X] . [X] ||| 0.013917 1 ||| ||| 0.125
+this Parliament [X][X] interest . [X] ||| dieses Parlament [X][X] . [X] ||| 0.013917 1 ||| ||| 0.125
+this Parliament [X][X] [X] ||| dieses Parlament [X][X] [X] ||| 0.0165743 1 ||| ||| 0.724116
+this Parliament [X][X] an [X] ||| dieses Parlament [X][X] [X] ||| 0.00427096 1 ||| ||| 0.724116
+this Parliament [X][X] an interest [X] ||| dieses Parlament [X][X] [X] ||| 0.00349443 1 ||| ||| 0.724116
+this Parliament [X][X] interest [X] ||| dieses Parlament [X][X] [X] ||| 0.00349443 1 ||| ||| 0.724116
+this Parliament [X][X] an [X][X] [X] ||| dieses Parlament [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0625
+this Parliament has [X][X] . [X] ||| dieses Parlament [X][X] hat . [X] ||| 0.0278341 1 ||| ||| 0.0625
+this Parliament has [X][X] [X] ||| dieses Parlament [X][X] hat [X] ||| 0.0179813 1 ||| ||| 0.570707
+this Parliament has [X][X] an [X] ||| dieses Parlament [X][X] hat [X] ||| 0.00541902 1 ||| ||| 0.570707
+this Parliament has [X][X] interest [X] ||| dieses Parlament [X][X] hat [X] ||| 0.00443375 1 ||| ||| 0.570707
+this Parliament has consistently shown [X] ||| dieses Parlament immer wieder befaßt hat [X] ||| 0.0278341 1 ||| ||| 0.166667
+this [X] ||| dieses [X] ||| 0.0278341 1 ||| ||| 1
+this [X][X] . [X] ||| dieses [X][X] . [X] ||| 0.00927803 1 ||| ||| 0.1875
+this [X][X] an interest . [X] ||| dieses [X][X] . [X] ||| 0.00927803 1 ||| ||| 0.1875
+this [X][X] interest . [X] ||| dieses [X][X] . [X] ||| 0.00927803 1 ||| ||| 0.1875
+this [X][X] [X] ||| dieses [X][X] [X] ||| 0.0165743 1 ||| ||| 0.724116
+this [X][X] an [X] ||| dieses [X][X] [X] ||| 0.00427096 1 ||| ||| 0.724116
+this [X][X] an interest [X] ||| dieses [X][X] [X] ||| 0.00349443 1 ||| ||| 0.724116
+this [X][X] interest [X] ||| dieses [X][X] [X] ||| 0.00349443 1 ||| ||| 0.724116
+this [X][X] an [X][X] [X] ||| dieses [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0625
+entirely [X] ||| durchaus [X] ||| 0.0278341 1 ||| ||| 1
+would be entirely appropriate . [X] ||| durchaus angebracht ist . [X] ||| 0.0278341 1 ||| ||| 0.5
+suggested would be entirely appropriate [X] ||| durchaus angebracht ist [X] ||| 0.013917 1 ||| ||| 2
+would be entirely appropriate [X] ||| durchaus angebracht ist [X] ||| 0.013917 1 ||| ||| 2
+something [X] ||| ein Dokument [X] ||| 0.0278341 1 ||| ||| 1
+a proposal to subvert it [X] ||| ein Vorschlag , diesen zu unterlaufen , [X] ||| 0.0278341 1 ||| ||| 0.166667
+a proposal to subvert it [X] ||| ein Vorschlag , diesen zu unterlaufen [X] ||| 0.0278341 1 ||| ||| 0.25
+a proposal [X] ||| ein Vorschlag [X] ||| 0.0278341 1 ||| ||| 1
+a proposal [X][X] [X] ||| ein Vorschlag [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.166667
+a proposal [X][X] [X] ||| ein Vorschlag [X][X] [X] ||| 0.0278341 1 ||| ||| 0.5
+a [X] ||| ein [X] ||| 0.160946 1 ||| ||| 3
+something [X] ||| ein [X] ||| 0.00927803 1 ||| ||| 3
+a [X][X] [X] ||| ein [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.166667
+a [X][X] would be [X][X] [X] ||| ein [X][X] , [X][X] wäre [X] ||| 0.0278341 1 ||| ||| 0.0833333
+a [X][X] [X] ||| ein [X][X] [X] ||| 0.0278341 1 ||| ||| 0.5
+a [X][X] would be [X][X] [X] ||| ein [X][X] [X][X] wäre [X] ||| 0.0278341 1 ||| ||| 0.166667
+a legal [X] ||| ein juristischer [X] ||| 0.0278341 1 ||| ||| 1
+something that [X] ||| eine Angelegenheit , die [X] ||| 0.0185561 1 ||| ||| 1.5
+to something that [X] ||| eine Angelegenheit , die [X] ||| 0.00927803 1 ||| ||| 1.5
+something [X] ||| eine Angelegenheit [X] ||| 0.013917 1 ||| ||| 2
+to something [X] ||| eine Angelegenheit [X] ||| 0.013917 1 ||| ||| 2
+advice [X] ||| eine Auskunft [X] ||| 0.0278341 1 ||| ||| 1
+advice [X][X] 143 [X] ||| eine Auskunft [X][X] 143 [X] ||| 0.0278341 1 ||| ||| 0.125
+advice [X][X] 143 concerning [X] ||| eine Auskunft [X][X] 143 im Zusammenhang mit der [X] ||| 0.0278341 1 ||| ||| 0.0666667
+advice [X][X] [X] ||| eine Auskunft [X][X] [X] ||| 0.0278341 1 ||| ||| 0.441667
+advice [X][X] concerning [X] ||| eine Auskunft [X][X] im Zusammenhang mit der [X] ||| 0.0278341 1 ||| ||| 0.0666667
+advice about Rule 143 [X] ||| eine Auskunft zu Artikel 143 [X] ||| 0.0278341 1 ||| ||| 0.125
+advice about Rule 143 concerning [X] ||| eine Auskunft zu Artikel 143 im Zusammenhang mit der [X] ||| 0.0278341 1 ||| ||| 0.0666667
+advice about Rule [X] ||| eine Auskunft zu Artikel [X] ||| 0.0278341 1 ||| ||| 0.25
+advice about Rule [X][X] [X] ||| eine Auskunft zu Artikel [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0666667
+advice about [X] ||| eine Auskunft zu [X] ||| 0.0278341 1 ||| ||| 1
+advice about [X][X] [X] ||| eine Auskunft zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.191667
+advice about [X][X] concerning [X] ||| eine Auskunft zu [X][X] im Zusammenhang mit der [X] ||| 0.0278341 1 ||| ||| 0.0666667
+a petition [X] ||| eine Petition [X] ||| 0.0278341 1 ||| ||| 1
+a [X] ||| eine [X] ||| 0.013917 1 ||| ||| 2
+an [X] ||| eine [X] ||| 0.013917 1 ||| ||| 2
+[X][X] 143 [X] ||| eine [X][X] 143 [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] 143 concerning [X] ||| eine [X][X] 143 im Zusammenhang mit der [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] Rule 143 [X] ||| eine [X][X] Artikel 143 [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] Rule 143 concerning [X] ||| eine [X][X] Artikel 143 im Zusammenhang mit der [X] ||| 0.0278341 1 ||| ||| 0.0666667
+[X][X] Rule [X] ||| eine [X][X] Artikel [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] Rule [X][X] [X] ||| eine [X][X] Artikel [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0666667
+an initiative [X][X] [X] ||| eine [X][X] Initiative [X] ||| 0.00709417 1 ||| ||| 2.70754
+an initiative [X][X] have [X] ||| eine [X][X] Initiative [X] ||| 0.00128503 1 ||| ||| 2.70754
+an initiative [X][X] have just [X] ||| eine [X][X] Initiative [X] ||| 0.00114225 1 ||| ||| 2.70754
+an initiative [X][X] just [X] ||| eine [X][X] Initiative [X] ||| 0.00114225 1 ||| ||| 2.70754
+an initiative [X][X] just suggested [X] ||| eine [X][X] Initiative [X] ||| 0.00114225 1 ||| ||| 2.70754
+an initiative [X][X] suggested [X] ||| eine [X][X] Initiative [X] ||| 0.00114225 1 ||| ||| 2.70754
+an initiative [X][X] you [X] ||| eine [X][X] Initiative [X] ||| 0.0014686 1 ||| ||| 2.70754
+an initiative [X][X] you have [X] ||| eine [X][X] Initiative [X] ||| 0.00128503 1 ||| ||| 2.70754
+an initiative of [X][X] [X] ||| eine [X][X] Initiative [X] ||| 0.00709417 1 ||| ||| 2.70754
+an initiative of [X][X] have [X] ||| eine [X][X] Initiative [X] ||| 0.00128503 1 ||| ||| 2.70754
+an initiative of [X][X] just [X] ||| eine [X][X] Initiative [X] ||| 0.00114225 1 ||| ||| 2.70754
+an initiative of [X][X] suggested [X] ||| eine [X][X] Initiative [X] ||| 0.00114225 1 ||| ||| 2.70754
+an initiative of [X][X] you [X] ||| eine [X][X] Initiative [X] ||| 0.0014686 1 ||| ||| 2.70754
+an [X][X] [X] ||| eine [X][X] [X] ||| 0.0109783 1 ||| ||| 1.7496
+an [X][X] have [X] ||| eine [X][X] [X] ||| 0.0019886 1 ||| ||| 1.7496
+an [X][X] have just [X] ||| eine [X][X] [X] ||| 0.00176764 1 ||| ||| 1.7496
+an [X][X] have just suggested [X] ||| eine [X][X] [X] ||| 0.00176764 1 ||| ||| 1.7496
+an [X][X] just [X] ||| eine [X][X] [X] ||| 0.00176764 1 ||| ||| 1.7496
+an [X][X] just suggested [X] ||| eine [X][X] [X] ||| 0.00176764 1 ||| ||| 1.7496
+an [X][X] suggested [X] ||| eine [X][X] [X] ||| 0.00176764 1 ||| ||| 1.7496
+an [X][X] you [X] ||| eine [X][X] [X] ||| 0.00227269 1 ||| ||| 1.7496
+an [X][X] you have [X] ||| eine [X][X] [X] ||| 0.0019886 1 ||| ||| 1.7496
+an [X][X] you have just [X] ||| eine [X][X] [X] ||| 0.00176764 1 ||| ||| 1.7496
+[X][X] concerning [X] ||| eine [X][X] im Zusammenhang mit der [X] ||| 0.0278341 1 ||| ||| 0.0666667
+an initiative of the type [X] ||| eine derartige Initiative [X] ||| 0.0278341 1 ||| ||| 0.2
+an [X][X] the type [X] ||| eine derartige [X][X] [X] ||| 0.0162366 1 ||| ||| 0.342857
+an [X][X] the type you [X] ||| eine derartige [X][X] [X] ||| 0.0115975 1 ||| ||| 0.342857
+write a letter [X] ||| einem Schreiben [X] ||| 0.013917 1 ||| ||| 2
+write a letter to [X] ||| einem Schreiben [X] ||| 0.013917 1 ||| ||| 2
+write a letter [X][X] [X] ||| einem Schreiben [X][X] [X] ||| 0.0278341 1 ||| ||| 0.25
+write a letter to the [X] ||| einem Schreiben das [X] ||| 0.0278341 1 ||| ||| 0.25
+a [X] ||| einem [X] ||| 0.0278341 1 ||| ||| 1
+a report [X] ||| einen Bericht [X] ||| 0.0278341 1 ||| ||| 1
+a report [X][X] legislative proposal [X] ||| einen Bericht [X][X] Legislativvorschlag [X] ||| 0.0278341 1 ||| ||| 0.0833333
+a report [X][X] [X] ||| einen Bericht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.208333
+a report , [X] ||| einen Bericht und [X] ||| 0.0278341 1 ||| ||| 0.333333
+a report , [X][X] [X] ||| einen Bericht und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.208333
+a report , not a [X] ||| einen Bericht und keinen [X] ||| 0.0278341 1 ||| ||| 0.125
+visited [X] ||| einen Besuch [X] ||| 0.0278341 1 ||| ||| 1
+visited [X] ||| einen Besuch abgestattet [X] ||| 0.0278341 1 ||| ||| 1
+had visited [X] ||| einen Besuch abgestattet hatte [X] ||| 0.0278341 1 ||| ||| 1
+an objection [X] ||| einen Einwand gegen [X] ||| 0.0185561 1 ||| ||| 1.5
+raise an objection [X] ||| einen Einwand gegen [X] ||| 0.00927803 1 ||| ||| 1.5
+a case [X] ||| einen Fall [X] ||| 0.0278341 1 ||| ||| 1
+a [X] ||| einen [X] ||| 0.28752 1 ||| ||| 6
+an [X] ||| einen [X] ||| 0.00463902 1 ||| ||| 6
+is a [X] ||| einen [X] ||| 0.00463902 1 ||| ||| 6
+raise an [X] ||| einen [X] ||| 0.00463902 1 ||| ||| 6
+a [X][X] fisheries policy [X] ||| einen [X][X] Fischereipolitik darstellt [X] ||| 0.0151822 1 ||| ||| 0.122222
+is a [X][X] fisheries policy [X] ||| einen [X][X] Fischereipolitik darstellt [X] ||| 0.0126519 1 ||| ||| 0.122222
+a [X][X] fisheries policy and [X] ||| einen [X][X] Fischereipolitik darstellt und [X] ||| 0.0278341 1 ||| ||| 0.05
+a [X][X] legislative proposal [X] ||| einen [X][X] Legislativvorschlag [X] ||| 0.0278341 1 ||| ||| 0.0833333
+a [X][X] [X] ||| einen [X][X] [X] ||| 0.183128 1 ||| ||| 1.49408
+is a [X][X] [X] ||| einen [X][X] [X] ||| 0.00672061 1 ||| ||| 1.49408
+a [X][X] of the [X] ||| einen [X][X] der [X] ||| 0.0161145 1 ||| ||| 0.215909
+is a [X][X] of the [X] ||| einen [X][X] der [X] ||| 0.0117196 1 ||| ||| 0.215909
+a [X][X] of the [X][X] [X] ||| einen [X][X] der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.116667
+a [X][X] of the common [X] ||| einen [X][X] der gemeinsamen [X] ||| 0.0278341 1 ||| ||| 0.1
+a [X][X] common fisheries policy [X] ||| einen [X][X] gemeinsamen Fischereipolitik darstellt [X] ||| 0.0278341 1 ||| ||| 0.0666667
+a [X][X] common [X] ||| einen [X][X] gemeinsamen [X] ||| 0.0162366 1 ||| ||| 0.171429
+is a [X][X] common [X] ||| einen [X][X] gemeinsamen [X] ||| 0.0115975 1 ||| ||| 0.171429
+a [X][X] common [X][X] [X] ||| einen [X][X] gemeinsamen [X][X] [X] ||| 0.0188554 1 ||| ||| 0.172223
+is a [X][X] common [X][X] [X] ||| einen [X][X] gemeinsamen [X][X] [X] ||| 0.00897873 1 ||| ||| 0.172223
+a [X][X] common [X][X] and [X] ||| einen [X][X] gemeinsamen [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.05
+a [X][X] not a [X] ||| einen [X][X] keinen [X] ||| 0.0278341 1 ||| ||| 0.125
+a [X][X] not a [X][X] [X] ||| einen [X][X] keinen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0833333
+a [X][X] and [X] ||| einen [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.05
+a fundamental legal principle [X] ||| einen elementaren Rechtsgrundsatz [X] ||| 0.0177126 1 ||| ||| 0.392857
+is a fundamental legal principle [X] ||| einen elementaren Rechtsgrundsatz [X] ||| 0.0101215 1 ||| ||| 0.392857
+a fundamental legal principle [X][X] [X] ||| einen elementaren Rechtsgrundsatz [X][X] [X] ||| 0.0278341 1 ||| ||| 0.341667
+a fundamental [X] ||| einen elementaren [X] ||| 0.0185561 1 ||| ||| 1.5
+is a fundamental [X] ||| einen elementaren [X] ||| 0.00927803 1 ||| ||| 1.5
+a fundamental [X][X] fisheries policy [X] ||| einen elementaren [X][X] Fischereipolitik darstellt [X] ||| 0.0278341 1 ||| ||| 0.0666667
+a fundamental [X][X] [X] ||| einen elementaren [X][X] [X] ||| 0.0172913 1 ||| ||| 0.952417
+is a fundamental [X][X] [X] ||| einen elementaren [X][X] [X] ||| 0.0105428 1 ||| ||| 0.952417
+a fundamental [X][X] of the [X] ||| einen elementaren [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.125
+a fundamental [X][X] common [X] ||| einen elementaren [X][X] gemeinsamen [X] ||| 0.0162366 1 ||| ||| 0.171429
+is a fundamental [X][X] common [X] ||| einen elementaren [X][X] gemeinsamen [X] ||| 0.0115975 1 ||| ||| 0.171429
+a fundamental [X][X] common [X][X] [X] ||| einen elementaren [X][X] gemeinsamen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.116667
+a fundamental [X][X] and [X] ||| einen elementaren [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.05
+a form of quota penalties [X] ||| einer Art Quotenstrafe belegt [X] ||| 0.0278341 1 ||| ||| 0.142857
+a form [X] ||| einer Art [X] ||| 0.0185561 1 ||| ||| 1.5
+a form of [X] ||| einer Art [X] ||| 0.00927803 1 ||| ||| 1.5
+a form [X][X] [X] ||| einer Art [X][X] [X] ||| 0.013917 1 ||| ||| 0.467532
+a form of [X][X] [X] ||| einer Art [X][X] [X] ||| 0.013917 1 ||| ||| 0.467532
+a form [X][X] should be [X] ||| einer Art [X][X] werden sollen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+a debate [X] ||| einer Aussprache [X] ||| 0.0278341 1 ||| ||| 1
+a debate on [X] ||| einer Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.333333
+a minute ' s silence [X] ||| einer Schweigeminute . [X] ||| 0.0278341 1 ||| ||| 0.5
+a [X] ||| einer [X] ||| 1 1 ||| ||| 5
+a [X][X] ) [X] ||| einer [X][X] ) [X] ||| 0.0278341 1 ||| ||| 0.333333
+a [X][X] quota penalties [X] ||| einer [X][X] Quotenstrafe belegt [X] ||| 0.0278341 1 ||| ||| 0.142857
+a [X][X] quota penalties [X][X] [X] ||| einer [X][X] Quotenstrafe belegt [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0909091
+a [X][X] situation [X] ||| einer [X][X] Situation [X] ||| 0.0278341 1 ||| ||| 0.04
+a [X][X] [X] ||| einer [X][X] [X] ||| 0.57504 1 ||| ||| 2.48302
+a [X][X] a [X] ||| einer [X][X] dieser [X] ||| 0.0278341 1 ||| ||| 0.142857
+a [X][X] a [X][X] situation [X] ||| einer [X][X] dieser [X][X] Situation [X] ||| 0.0278341 1 ||| ||| 0.04
+a [X][X] a [X][X] [X] ||| einer [X][X] dieser [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0988235
+a [X][X] a very [X] ||| einer [X][X] dieser sehr [X] ||| 0.0278341 1 ||| ||| 0.0909091
+a [X][X] a very [X][X] [X] ||| einer [X][X] dieser sehr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.04
+a [X][X] a very difficult [X] ||| einer [X][X] dieser sehr schwierigen [X] ||| 0.0278341 1 ||| ||| 0.0588235
+a [X][X] difficult situation [X] ||| einer [X][X] schwierigen Situation [X] ||| 0.0278341 1 ||| ||| 0.04
+a [X][X] difficult [X] ||| einer [X][X] schwierigen [X] ||| 0.0278341 1 ||| ||| 0.0588235
+a [X][X] very [X] ||| einer [X][X] sehr [X] ||| 0.0278341 1 ||| ||| 0.0909091
+a [X][X] very [X][X] [X] ||| einer [X][X] sehr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.04
+a [X][X] very difficult situation [X] ||| einer [X][X] sehr schwierigen Situation [X] ||| 0.0278341 1 ||| ||| 0.04
+a [X][X] very difficult [X] ||| einer [X][X] sehr schwierigen [X] ||| 0.0278341 1 ||| ||| 0.0588235
+a [X][X] should be [X] ||| einer [X][X] werden sollen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+a peaceful reconciliation to [X] ||| einer friedlichen Lösung [X] ||| 0.0278341 1 ||| ||| 0.25
+a peaceful reconciliation to [X][X] [X] ||| einer friedlichen Lösung [X][X] [X] ||| 0.0278341 1 ||| ||| 0.189733
+a peaceful reconciliation to a [X] ||| einer friedlichen Lösung dieser [X] ||| 0.0278341 1 ||| ||| 0.142857
+a peaceful [X] ||| einer friedlichen [X] ||| 0.0278341 1 ||| ||| 1
+a peaceful [X][X] situation [X] ||| einer friedlichen [X][X] Situation [X] ||| 0.0278341 1 ||| ||| 0.04
+a peaceful [X][X] [X] ||| einer friedlichen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.58259
+a peaceful [X][X] a [X] ||| einer friedlichen [X][X] dieser [X] ||| 0.0278341 1 ||| ||| 0.142857
+a peaceful [X][X] a [X][X] [X] ||| einer friedlichen [X][X] dieser [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0988235
+a peaceful [X][X] a very [X] ||| einer friedlichen [X][X] dieser sehr [X] ||| 0.0278341 1 ||| ||| 0.0909091
+a peaceful [X][X] difficult situation [X] ||| einer friedlichen [X][X] schwierigen Situation [X] ||| 0.0278341 1 ||| ||| 0.04
+a peaceful [X][X] difficult [X] ||| einer friedlichen [X][X] schwierigen [X] ||| 0.0278341 1 ||| ||| 0.0588235
+a peaceful [X][X] very [X] ||| einer friedlichen [X][X] sehr [X] ||| 0.0278341 1 ||| ||| 0.0909091
+a peaceful [X][X] very [X][X] [X] ||| einer friedlichen [X][X] sehr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.04
+a peaceful [X][X] very difficult [X] ||| einer friedlichen [X][X] sehr schwierigen [X] ||| 0.0278341 1 ||| ||| 0.0588235
+of a [X] ||| eines [X] ||| 0.241419 1 ||| ||| 2
+of a [X][X] , Mr [X] ||| eines [X][X] , Herrn [X] ||| 0.0278341 1 ||| ||| 0.0714286
+of a [X][X] , [X] ||| eines [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.160714
+of a [X][X] , [X][X] [X] ||| eines [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0833333
+of a [X][X] Mr Zimeray [X] ||| eines [X][X] Herrn Zimeray [X] ||| 0.0278341 1 ||| ||| 0.047619
+of a [X][X] Mr [X] ||| eines [X][X] Herrn [X] ||| 0.0278341 1 ||| ||| 0.0714286
+of a [X][X] Mr [X][X] [X] ||| eines [X][X] Herrn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0357143
+of a [X][X] Zimeray , [X] ||| eines [X][X] Zimeray , [X] ||| 0.0278341 1 ||| ||| 0.0357143
+of a [X][X] Zimeray [X] ||| eines [X][X] Zimeray [X] ||| 0.0278341 1 ||| ||| 0.047619
+of a [X][X] [X] ||| eines [X][X] [X] ||| 0.0278341 1 ||| ||| 0.529762
+of a French Member , [X] ||| eines französischen Mitglieds , [X] ||| 0.0278341 1 ||| ||| 0.125
+of a French Member [X] ||| eines französischen Mitglieds [X] ||| 0.0278341 1 ||| ||| 0.25
+of a French Member [X][X] [X] ||| eines französischen Mitglieds [X][X] [X] ||| 0.0278341 1 ||| ||| 0.154762
+of a French [X] ||| eines französischen [X] ||| 0.0278341 1 ||| ||| 0.5
+of a French [X][X] , [X] ||| eines französischen [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0357143
+of a French [X][X] Mr [X] ||| eines französischen [X][X] Herrn [X] ||| 0.0278341 1 ||| ||| 0.0714286
+of a French [X][X] Zimeray [X] ||| eines französischen [X][X] Zimeray [X] ||| 0.0278341 1 ||| ||| 0.047619
+of a French [X][X] [X] ||| eines französischen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.279762
+presented , [X] ||| eingereicht , [X] ||| 0.0278341 1 ||| ||| 1
+presented , [X][X] [X] ||| eingereicht , [X][X] [X] ||| 0.0204117 1 ||| ||| 0.267858
+presented , [X][X] people [X] ||| eingereicht , [X][X] [X] ||| 0.00742242 1 ||| ||| 0.267858
+presented , which [X] ||| eingereicht , die [X] ||| 0.0278341 1 ||| ||| 0.333333
+presented , which [X][X] [X] ||| eingereicht , die [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0714286
+presented , which [X] ||| eingereicht , die von [X] ||| 0.0278341 1 ||| ||| 0.25
+presented , which [X][X] [X] ||| eingereicht , die von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0714286
+presented , which many [X] ||| eingereicht , die von vielen [X] ||| 0.0177126 1 ||| ||| 0.196429
+presented , which many people [X] ||| eingereicht , die von vielen [X] ||| 0.0101215 1 ||| ||| 0.196429
+presented [X] ||| eingereicht [X] ||| 0.0278341 1 ||| ||| 1
+presented [X][X] [X] ||| eingereicht [X][X] [X] ||| 0.0254984 1 ||| ||| 0.851191
+presented [X][X] people [X] ||| eingereicht [X][X] [X] ||| 0.00233573 1 ||| ||| 0.851191
+presented [X][X] many [X] ||| eingereicht [X][X] vielen [X] ||| 0.0177126 1 ||| ||| 0.196429
+presented [X][X] many people [X] ||| eingereicht [X][X] vielen [X] ||| 0.0101215 1 ||| ||| 0.196429
+presented [X][X] [X] ||| eingereicht [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.25
+presented [X][X] many [X] ||| eingereicht [X][X] von vielen [X] ||| 0.0177126 1 ||| ||| 0.196429
+presented [X][X] many people [X] ||| eingereicht [X][X] von vielen [X] ||| 0.0101215 1 ||| ||| 0.196429
+a number of Members [X] ||| einiger Kolleginnen und Kollegen - [X] ||| 0.0180922 1 ||| ||| 0.21978
+a number of Members have [X] ||| einiger Kolleginnen und Kollegen - [X] ||| 0.00974194 1 ||| ||| 0.21978
+a number of Members [X] ||| einiger Kolleginnen und Kollegen [X] ||| 0.0171287 1 ||| ||| 0.325
+a number of Members have [X] ||| einiger Kolleginnen und Kollegen [X] ||| 0.0107054 1 ||| ||| 0.325
+a [X] ||| einiger [X] ||| 0.00927803 1 ||| ||| 3
+a number [X] ||| einiger [X] ||| 0.00927803 1 ||| ||| 3
+a number of [X] ||| einiger [X] ||| 0.00927803 1 ||| ||| 3
+a [X][X] [X] ||| einiger [X][X] - [X] ||| 0.00912593 1 ||| ||| 0.670329
+a [X][X] have [X] ||| einiger [X][X] - [X] ||| 0.00319408 1 ||| ||| 0.670329
+a number [X][X] [X] ||| einiger [X][X] - [X] ||| 0.00912593 1 ||| ||| 0.670329
+a number [X][X] have [X] ||| einiger [X][X] - [X] ||| 0.00319408 1 ||| ||| 0.670329
+a number of [X][X] [X] ||| einiger [X][X] - [X] ||| 0.00319408 1 ||| ||| 0.670329
+a [X][X] [X] ||| einiger [X][X] [X] ||| 0.00894426 1 ||| ||| 1.69533
+a [X][X] have [X] ||| einiger [X][X] [X] ||| 0.00331519 1 ||| ||| 1.69533
+a number [X][X] [X] ||| einiger [X][X] [X] ||| 0.00894426 1 ||| ||| 1.69533
+a number [X][X] have [X] ||| einiger [X][X] [X] ||| 0.00331519 1 ||| ||| 1.69533
+a number of [X][X] [X] ||| einiger [X][X] [X] ||| 0.00331519 1 ||| ||| 1.69533
+fundamental legal principle [X] ||| elementaren Rechtsgrundsatz [X] ||| 0.0278341 1 ||| ||| 0.5
+fundamental legal principle [X][X] [X] ||| elementaren Rechtsgrundsatz [X][X] [X] ||| 0.0278341 1 ||| ||| 0.546266
+fundamental legal principle [X][X] a [X] ||| elementaren Rechtsgrundsatz [X][X] ein [X] ||| 0.0278341 1 ||| ||| 0.05
+fundamental legal principle [X][X] common [X] ||| elementaren Rechtsgrundsatz [X][X] gemeinsamen [X] ||| 0.0278341 1 ||| ||| 0.142857
+fundamental legal principle [X][X] and [X] ||| elementaren Rechtsgrundsatz [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0625
+fundamental legal principle of the [X] ||| elementaren Rechtsgrundsatz der [X] ||| 0.0278341 1 ||| ||| 0.2
+fundamental [X] ||| elementaren [X] ||| 0.0278341 1 ||| ||| 1
+fundamental [X][X] fisheries policy [X] ||| elementaren [X][X] Fischereipolitik darstellt [X] ||| 0.0278341 1 ||| ||| 0.0909091
+fundamental [X][X] fisheries policy [X][X] [X] ||| elementaren [X][X] Fischereipolitik darstellt [X][X] [X] ||| 0.0278341 1 ||| ||| 0.05
+fundamental [X][X] fisheries policy and [X] ||| elementaren [X][X] Fischereipolitik darstellt und [X] ||| 0.0278341 1 ||| ||| 0.0625
+fundamental [X][X] [X] ||| elementaren [X][X] [X] ||| 0.241419 1 ||| ||| 1.04627
+fundamental [X][X] of the [X] ||| elementaren [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.2
+fundamental [X][X] of the [X][X] [X] ||| elementaren [X][X] der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.203409
+fundamental [X][X] of the common [X] ||| elementaren [X][X] der gemeinsamen [X] ||| 0.0278341 1 ||| ||| 0.142857
+fundamental [X][X] a [X] ||| elementaren [X][X] ein [X] ||| 0.0278341 1 ||| ||| 0.05
+fundamental [X][X] common fisheries policy [X] ||| elementaren [X][X] gemeinsamen Fischereipolitik darstellt [X] ||| 0.0278341 1 ||| ||| 0.0909091
+fundamental [X][X] common [X] ||| elementaren [X][X] gemeinsamen [X] ||| 0.0278341 1 ||| ||| 0.142857
+fundamental [X][X] common [X][X] [X] ||| elementaren [X][X] gemeinsamen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.203409
+fundamental [X][X] common [X][X] a [X] ||| elementaren [X][X] gemeinsamen [X][X] ein [X] ||| 0.0278341 1 ||| ||| 0.05
+fundamental [X][X] common [X][X] and [X] ||| elementaren [X][X] gemeinsamen [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0625
+fundamental [X][X] and [X] ||| elementaren [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0625
+fundamental [X][X] and a [X] ||| elementaren [X][X] und ein [X] ||| 0.0278341 1 ||| ||| 0.05
+he [X] ||| er [X] ||| 0.0278341 1 ||| ||| 1
+to meet [X] ||| erfüllen , [X] ||| 0.0278341 1 ||| ||| 1
+meet [X] ||| erfüllen [X] ||| 0.0278341 1 ||| ||| 1
+that kind [X] ||| erheben , [X] ||| 0.0278341 1 ||| ||| 1
+that kind [X][X] report [X] ||| erheben , [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.0357143
+that kind [X][X] [X] ||| erheben , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.529762
+that kind [X][X] a report [X] ||| erheben , [X][X] einen Bericht [X] ||| 0.0278341 1 ||| ||| 0.0357143
+that kind [X][X] a [X] ||| erheben , [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.047619
+that kind [X][X] merely [X] ||| erheben , [X][X] lediglich um [X] ||| 0.0278341 1 ||| ||| 0.0714286
+that kind [X][X] merely [X][X] [X] ||| erheben , [X][X] lediglich um [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0357143
+that kind [X][X] merely a [X] ||| erheben , [X][X] lediglich um einen [X] ||| 0.0278341 1 ||| ||| 0.047619
+that kind [X][X] is [X] ||| erheben , [X][X] sich [X] ||| 0.0278341 1 ||| ||| 0.125
+that kind [X][X] is [X][X] [X] ||| erheben , [X][X] sich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0833333
+that kind [X][X] is merely [X] ||| erheben , [X][X] sich lediglich um [X] ||| 0.0278341 1 ||| ||| 0.0714286
+that kind to [X] ||| erheben , bei [X] ||| 0.0278341 1 ||| ||| 0.5
+that kind to [X][X] report [X] ||| erheben , bei [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.0357143
+that kind to [X][X] [X] ||| erheben , bei [X][X] [X] ||| 0.0278341 1 ||| ||| 0.279762
+that kind to [X][X] a [X] ||| erheben , bei [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.047619
+that kind to [X][X] merely [X] ||| erheben , bei [X][X] lediglich um [X] ||| 0.0278341 1 ||| ||| 0.0714286
+that kind to what [X] ||| erheben , bei dem es [X] ||| 0.0278341 1 ||| ||| 0.25
+that kind to what [X][X] [X] ||| erheben , bei dem es [X][X] [X] ||| 0.0278341 1 ||| ||| 0.154762
+that kind to what is [X] ||| erheben , bei dem es sich [X] ||| 0.0278341 1 ||| ||| 0.125
+kind [X] ||| erheben [X] ||| 0.0278341 1 ||| ||| 1
+rose and observed [X] ||| erhebt sich zu [X] ||| 0.0278341 1 ||| ||| 1
+rose and observed [X][X] ) [X] ||| erhebt sich zu [X][X] ) [X] ||| 0.0278341 1 ||| ||| 0.166667
+rose and observed [X][X] [X] ||| erhebt sich zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.416667
+rose and observed a [X] ||| erhebt sich zu einer [X] ||| 0.0278341 1 ||| ||| 0.5
+rose and observed a [X][X] [X] ||| erhebt sich zu einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.416667
+again [X] ||| erneut [X] ||| 0.0278341 1 ||| ||| 1
+just [X] ||| erst [X] ||| 0.0278341 1 ||| ||| 1
+just [X][X] months ago [X] ||| erst [X][X] Monaten [X] ||| 0.0278341 1 ||| ||| 0.142857
+just [X][X] months ago [X] ||| erst [X][X] Monaten einen [X] ||| 0.0278341 1 ||| ||| 0.1
+just [X][X] [X] ||| erst [X][X] [X] ||| 0.0278341 1 ||| ||| 0.576191
+just [X][X] [X] ||| erst [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.1
+just [X] ||| erst vor [X] ||| 0.0278341 1 ||| ||| 1
+just [X][X] months ago [X] ||| erst vor [X][X] Monaten [X] ||| 0.0278341 1 ||| ||| 0.142857
+just [X][X] months ago [X] ||| erst vor [X][X] Monaten einen [X] ||| 0.0278341 1 ||| ||| 0.1
+just [X][X] [X] ||| erst vor [X][X] [X] ||| 0.0278341 1 ||| ||| 0.576191
+just [X][X] [X] ||| erst vor [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.1
+just a few months ago [X] ||| erst vor wenigen Monaten [X] ||| 0.0278341 1 ||| ||| 0.142857
+just a few months ago [X] ||| erst vor wenigen Monaten einen [X] ||| 0.0278341 1 ||| ||| 0.1
+just a few [X] ||| erst vor wenigen [X] ||| 0.0278341 1 ||| ||| 0.333333
+just a few [X][X] [X] ||| erst vor wenigen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.242857
+just a few [X][X] [X] ||| erst vor wenigen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.1
+first [X] ||| erste [X] ||| 0.0278341 1 ||| ||| 1
+, [X] ||| es [X] ||| 0.00695852 1 ||| ||| 4
+it [X] ||| es [X] ||| 0.120709 1 ||| ||| 4
+one [X] ||| es [X] ||| 0.00695852 1 ||| ||| 4
+one [X][X] [X] ||| es [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.25
+one [X][X] an objection [X] ||| es [X][X] , einen Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0454545
+one [X][X] an [X] ||| es [X][X] , einen [X] ||| 0.0278341 1 ||| ||| 0.0714286
+one [X][X] objection [X] ||| es [X][X] Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0454545
+, [X][X] [X] ||| es [X][X] [X] ||| 0.0103302 1 ||| ||| 1.90855
+one [X][X] [X] ||| es [X][X] [X] ||| 0.15182 1 ||| ||| 1.90855
+, [X][X] [X] ||| es [X][X] daß [X] ||| 0.0278341 1 ||| ||| 0.25
+, [X][X] he [X] ||| es [X][X] daß er [X] ||| 0.0278341 1 ||| ||| 0.125
+one [X][X] an objection [X] ||| es [X][X] einen Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0454545
+one [X][X] an [X] ||| es [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0714286
+, [X][X] he [X] ||| es [X][X] er [X] ||| 0.0278341 1 ||| ||| 0.125
+one [X][X] [X] ||| es [X][X] ist , [X] ||| 0.0278341 1 ||| ||| 0.25
+one [X][X] an objection [X] ||| es [X][X] ist , einen Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0454545
+one [X][X] an [X] ||| es [X][X] ist , einen [X] ||| 0.0278341 1 ||| ||| 0.0714286
+one [X][X] [X] ||| es [X][X] ist [X] ||| 0.0278341 1 ||| ||| 0.333333
+, however , [X] ||| es aber so , [X] ||| 0.0278341 1 ||| ||| 0.333333
+, however , [X] ||| es aber so , daß [X] ||| 0.0278341 1 ||| ||| 0.25
+, however , he [X] ||| es aber so , daß er [X] ||| 0.0278341 1 ||| ||| 0.125
+, however [X] ||| es aber so [X] ||| 0.0278341 1 ||| ||| 1
+, however [X][X] [X] ||| es aber so [X][X] [X] ||| 0.0278341 1 ||| ||| 0.125
+one can [X] ||| es möglich [X] ||| 0.0185561 1 ||| ||| 1.5
+one can raise [X] ||| es möglich [X] ||| 0.00927803 1 ||| ||| 1.5
+one can [X][X] objection [X] ||| es möglich [X][X] Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0454545
+one can [X][X] [X] ||| es möglich [X][X] [X] ||| 0.0200406 1 ||| ||| 0.162337
+one can raise [X][X] [X] ||| es möglich [X][X] [X] ||| 0.00779355 1 ||| ||| 0.162337
+one can [X] ||| es möglich ist , [X] ||| 0.0222673 1 ||| ||| 1.25
+one can raise [X] ||| es möglich ist , [X] ||| 0.00556682 1 ||| ||| 1.25
+one can [X][X] objection [X] ||| es möglich ist , [X][X] Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0454545
+one can [X][X] [X] ||| es möglich ist , [X][X] [X] ||| 0.0200406 1 ||| ||| 0.162337
+one can raise [X][X] [X] ||| es möglich ist , [X][X] [X] ||| 0.00779355 1 ||| ||| 0.162337
+one can raise an objection [X] ||| es möglich ist , einen Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0454545
+one can raise an [X] ||| es möglich ist , einen [X] ||| 0.0278341 1 ||| ||| 0.0714286
+one can [X] ||| es möglich ist [X] ||| 0.0208756 1 ||| ||| 1.33333
+one can raise [X] ||| es möglich ist [X] ||| 0.00695852 1 ||| ||| 1.33333
+one can [X][X] objection [X] ||| es möglich ist [X][X] Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0454545
+one can [X][X] [X] ||| es möglich ist [X][X] [X] ||| 0.0200406 1 ||| ||| 0.162337
+one can raise [X][X] [X] ||| es möglich ist [X][X] [X] ||| 0.00779355 1 ||| ||| 0.162337
+wrong [X] ||| falsch [X] ||| 0.013917 1 ||| ||| 2
+wrong for [X] ||| falsch [X] ||| 0.013917 1 ||| ||| 2
+is wrong [X] ||| falsch ist [X] ||| 0.0185561 1 ||| ||| 1.5
+is wrong for [X] ||| falsch ist [X] ||| 0.00927803 1 ||| ||| 1.5
+stated [X] ||| festgestellt [X] ||| 0.0278341 1 ||| ||| 1
+French Member , Mr Zimeray [X] ||| französischen Mitglieds , Herrn Zimeray [X] ||| 0.0278341 1 ||| ||| 0.0909091
+French Member , Mr [X] ||| französischen Mitglieds , Herrn [X] ||| 0.0278341 1 ||| ||| 0.166667
+French Member , Mr [X][X] [X] ||| französischen Mitglieds , Herrn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+French Member , [X] ||| französischen Mitglieds , [X] ||| 0.0278341 1 ||| ||| 0.333333
+French Member , [X][X] , [X] ||| französischen Mitglieds , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+French Member , [X][X] [X] ||| französischen Mitglieds , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.143541
+French Member [X] ||| französischen Mitglieds [X] ||| 0.0278341 1 ||| ||| 1
+French Member [X][X] , [X] ||| französischen Mitglieds [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+French Member [X][X] Zimeray , [X] ||| französischen Mitglieds [X][X] Zimeray , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+French Member [X][X] Zimeray [X] ||| französischen Mitglieds [X][X] Zimeray [X] ||| 0.0278341 1 ||| ||| 0.0909091
+French Member [X][X] [X] ||| französischen Mitglieds [X][X] [X] ||| 0.0278341 1 ||| ||| 0.310207
+French [X] ||| französischen [X] ||| 0.0278341 1 ||| ||| 1
+French [X][X] , [X] ||| französischen [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+French [X][X] Mr Zimeray , [X] ||| französischen [X][X] Herrn Zimeray , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+French [X][X] Mr Zimeray [X] ||| französischen [X][X] Herrn Zimeray [X] ||| 0.0278341 1 ||| ||| 0.0909091
+French [X][X] Mr [X] ||| französischen [X][X] Herrn [X] ||| 0.0278341 1 ||| ||| 0.166667
+French [X][X] Mr [X][X] [X] ||| französischen [X][X] Herrn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+French [X][X] Zimeray , [X] ||| französischen [X][X] Zimeray , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+French [X][X] Zimeray [X] ||| französischen [X][X] Zimeray [X] ||| 0.0278341 1 ||| ||| 0.0909091
+French [X][X] [X] ||| französischen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.643541
+acquitted [X] ||| freigesprochen [X] ||| 0.013917 1 ||| ||| 2
+have acquitted [X] ||| freigesprochen [X] ||| 0.013917 1 ||| ||| 2
+are pleased [X] ||| freuen [X] ||| 0.0278341 1 ||| ||| 1
+[X][X] are pleased that [X] ||| freuen [X][X] , daß [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] are pleased that [X][X] [X] ||| freuen [X][X] , daß [X][X] [X] ||| 0.0278341 1 ||| ||| 0.157576
+[X][X] are pleased that the [X] ||| freuen [X][X] , daß das [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] are pleased [X] ||| freuen [X][X] [X] ||| 0.0217832 1 ||| ||| 0.766667
+of [X][X] are pleased [X] ||| freuen [X][X] [X] ||| 0.0060509 1 ||| ||| 0.766667
+[X][X] are pleased [X][X] courts [X] ||| freuen [X][X] [X][X] Gericht [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] are pleased [X][X] [X] ||| freuen [X][X] [X][X] [X] ||| 0.0227793 1 ||| ||| 0.3671
+[X][X] are pleased [X][X] have [X] ||| freuen [X][X] [X][X] [X] ||| 0.00505478 1 ||| ||| 0.3671
+all [X][X] are pleased that [X] ||| freuen [X][X] alle , daß [X] ||| 0.0278341 1 ||| ||| 0.142857
+all [X][X] are pleased [X] ||| freuen [X][X] alle [X] ||| 0.0139171 1 ||| ||| 0.2
+all of [X][X] are pleased [X] ||| freuen [X][X] alle [X] ||| 0.0139171 1 ||| ||| 0.2
+all [X][X] are pleased [X][X] [X] ||| freuen [X][X] alle [X][X] [X] ||| 0.0278341 1 ||| ||| 0.300433
+[X][X] here are pleased [X] ||| freuen [X][X] hier [X] ||| 0.0278341 1 ||| ||| 0.166667
+all [X][X] here are pleased [X] ||| freuen [X][X] hier alle [X] ||| 0.0278341 1 ||| ||| 0.1
+of us here are pleased [X] ||| freuen uns hier [X] ||| 0.00927805 1 ||| ||| 0.5
+us here are pleased [X] ||| freuen uns hier [X] ||| 0.018556 1 ||| ||| 0.5
+[X][X] us here are pleased [X] ||| freuen uns hier [X][X] [X] ||| 0.0278341 1 ||| ||| 0.1
+peaceful reconciliation to [X] ||| friedlichen Lösung [X] ||| 0.0278341 1 ||| ||| 0.5
+peaceful reconciliation to [X][X] situation [X] ||| friedlichen Lösung [X][X] Situation [X] ||| 0.0278341 1 ||| ||| 0.0526316
+peaceful reconciliation to [X][X] [X] ||| friedlichen Lösung [X][X] [X] ||| 0.0278341 1 ||| ||| 0.278822
+peaceful reconciliation to [X][X] difficult [X] ||| friedlichen Lösung [X][X] schwierigen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+peaceful reconciliation to a [X] ||| friedlichen Lösung dieser [X] ||| 0.0278341 1 ||| ||| 0.25
+peaceful reconciliation to a [X][X] [X] ||| friedlichen Lösung dieser [X][X] [X] ||| 0.0278341 1 ||| ||| 0.135965
+peaceful reconciliation to a very [X] ||| friedlichen Lösung dieser sehr [X] ||| 0.0278341 1 ||| ||| 0.142857
+peaceful [X] ||| friedlichen [X] ||| 0.0278341 1 ||| ||| 1
+peaceful [X][X] situation [X] ||| friedlichen [X][X] Situation [X] ||| 0.0278341 1 ||| ||| 0.0526316
+peaceful [X][X] [X] ||| friedlichen [X][X] [X] ||| 0.241419 1 ||| ||| 1.02882
+peaceful [X][X] a [X] ||| friedlichen [X][X] dieser [X] ||| 0.0278341 1 ||| ||| 0.25
+peaceful [X][X] a [X][X] situation [X] ||| friedlichen [X][X] dieser [X][X] Situation [X] ||| 0.0278341 1 ||| ||| 0.0526316
+peaceful [X][X] a [X][X] [X] ||| friedlichen [X][X] dieser [X][X] [X] ||| 0.0278341 1 ||| ||| 0.135965
+peaceful [X][X] a very [X] ||| friedlichen [X][X] dieser sehr [X] ||| 0.0278341 1 ||| ||| 0.142857
+peaceful [X][X] a very [X][X] [X] ||| friedlichen [X][X] dieser sehr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+peaceful [X][X] a very difficult [X] ||| friedlichen [X][X] dieser sehr schwierigen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+peaceful [X][X] difficult situation [X] ||| friedlichen [X][X] schwierigen Situation [X] ||| 0.0278341 1 ||| ||| 0.0526316
+peaceful [X][X] difficult [X] ||| friedlichen [X][X] schwierigen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+peaceful [X][X] very [X] ||| friedlichen [X][X] sehr [X] ||| 0.0278341 1 ||| ||| 0.142857
+peaceful [X][X] very [X][X] [X] ||| friedlichen [X][X] sehr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+peaceful [X][X] very difficult situation [X] ||| friedlichen [X][X] sehr schwierigen Situation [X] ||| 0.0278341 1 ||| ||| 0.0526316
+peaceful [X][X] very difficult [X] ||| friedlichen [X][X] sehr schwierigen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+coinciding [X] ||| fällt [X] ||| 0.013917 1 ||| ||| 2
+coinciding with [X] ||| fällt [X] ||| 0.013917 1 ||| ||| 2
+for [X] ||| für [X] ||| 0.0278341 1 ||| ||| 1
+was [X] ||| gab , [X] ||| 0.0278341 1 ||| ||| 1
+was [X][X] , who [X] ||| gab , [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0714286
+was [X][X] [X] ||| gab , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.214286
+was [X] ||| gab , zählt [X] ||| 0.0278341 1 ||| ||| 1
+was [X][X] , who [X] ||| gab , zählt [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0714286
+was [X][X] [X] ||| gab , zählt [X][X] [X] ||| 0.0278341 1 ||| ||| 0.214286
+was Mr Kumar Ponnambalam [X] ||| gab , zählt auch Herr Kumar Ponnambalam [X] ||| 0.0278341 1 ||| ||| 0.142857
+was Mr Kumar Ponnambalam [X][X] [X] ||| gab , zählt auch Herr Kumar Ponnambalam [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0714286
+was Mr [X] ||| gab , zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 1
+was Mr [X][X] , who [X] ||| gab , zählt auch Herr [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0714286
+was Mr [X][X] [X] ||| gab , zählt auch Herr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.214286
+was [X] ||| gab , zählt auch [X] ||| 0.0278341 1 ||| ||| 1
+was [X][X] , who [X] ||| gab , zählt auch [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0714286
+was [X][X] [X] ||| gab , zählt auch [X][X] [X] ||| 0.0278341 1 ||| ||| 0.214286
+was [X] ||| gab [X] ||| 0.0278341 1 ||| ||| 1
+was [X][X] , who [X] ||| gab [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0714286
+was [X][X] [X] ||| gab [X][X] [X] ||| 0.0278341 1 ||| ||| 0.214286
+there have been [X] ||| gab es [X] ||| 0.0278341 1 ||| ||| 1
+quite [X] ||| ganz [X] ||| 0.0278341 1 ||| ||| 1
+quite [X][X] positions [X] ||| ganz [X][X] Position [X] ||| 0.0278341 1 ||| ||| 0.0909091
+quite [X][X] [X] ||| ganz [X][X] [X] ||| 0.0278341 1 ||| ||| 0.483766
+quite [X][X] the positions [X] ||| ganz [X][X] der Position [X] ||| 0.0278341 1 ||| ||| 0.0909091
+quite [X][X] the [X] ||| ganz [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.142857
+quite in keeping with [X] ||| ganz im Sinne [X] ||| 0.0278341 1 ||| ||| 0.25
+quite in keeping with [X][X] [X] ||| ganz im Sinne [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0909091
+quite in keeping with the [X] ||| ganz im Sinne der [X] ||| 0.0278341 1 ||| ||| 0.142857
+quite in [X] ||| ganz im [X] ||| 0.0278341 1 ||| ||| 1
+quite in [X][X] positions [X] ||| ganz im [X][X] Position [X] ||| 0.0278341 1 ||| ||| 0.0909091
+quite in [X][X] [X] ||| ganz im [X][X] [X] ||| 0.0278341 1 ||| ||| 0.483766
+quite in [X][X] the positions [X] ||| ganz im [X][X] der Position [X] ||| 0.0278341 1 ||| ||| 0.0909091
+quite in [X][X] the [X] ||| ganz im [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.142857
+weight of your prestigious office [X] ||| ganzen Einfluß Ihres Amtes [X] ||| 0.0278341 1 ||| ||| 0.2
+weight of your [X] ||| ganzen Einfluß Ihres [X] ||| 0.0278341 1 ||| ||| 0.5
+weight of your [X][X] [X] ||| ganzen Einfluß Ihres [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0454545
+weight of your [X][X] you [X] ||| ganzen Einfluß Ihres [X][X] , die Sie [X] ||| 0.0278341 1 ||| ||| 0.0294118
+weight of your [X][X] [X] ||| ganzen Einfluß Ihres [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.0344828
+weight of your [X][X] institution [X] ||| ganzen Einfluß Ihres [X][X] Institution , [X] ||| 0.0278341 1 ||| ||| 0.0454545
+weight of your [X][X] institution [X] ||| ganzen Einfluß Ihres [X][X] Institution , die [X] ||| 0.0278341 1 ||| ||| 0.0344828
+weight of your [X][X] institution [X] ||| ganzen Einfluß Ihres [X][X] Institution [X] ||| 0.0278341 1 ||| ||| 0.0666667
+weight of your [X][X] you [X] ||| ganzen Einfluß Ihres [X][X] Sie [X] ||| 0.0278341 1 ||| ||| 0.0294118
+weight of your [X][X] [X] ||| ganzen Einfluß Ihres [X][X] [X] ||| 0.0278341 1 ||| ||| 0.618873
+weight of your [X][X] the [X] ||| ganzen Einfluß Ihres [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.1
+weight of your [X][X] you [X] ||| ganzen Einfluß Ihres [X][X] die Sie [X] ||| 0.0278341 1 ||| ||| 0.0294118
+weight of your [X][X] [X] ||| ganzen Einfluß Ihres [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.0344828
+weight of your [X][X] and [X] ||| ganzen Einfluß Ihres [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.142857
+weight [X] ||| ganzen Einfluß [X] ||| 0.0278341 1 ||| ||| 1
+weight [X][X] [X] ||| ganzen Einfluß [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0454545
+weight [X][X] you [X] ||| ganzen Einfluß [X][X] , die Sie [X] ||| 0.0278341 1 ||| ||| 0.0294118
+weight [X][X] [X] ||| ganzen Einfluß [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.0344828
+weight [X][X] prestigious office [X] ||| ganzen Einfluß [X][X] Amtes [X] ||| 0.0278341 1 ||| ||| 0.2
+weight [X][X] prestigious office [X][X] [X] ||| ganzen Einfluß [X][X] Amtes [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0454545
+weight [X][X] prestigious office [X][X] [X] ||| ganzen Einfluß [X][X] Amtes [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.0344828
+weight [X][X] prestigious office [X][X] [X] ||| ganzen Einfluß [X][X] Amtes [X][X] [X] ||| 0.0278341 1 ||| ||| 0.276016
+weight [X][X] prestigious office [X][X] [X] ||| ganzen Einfluß [X][X] Amtes [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.0344828
+weight [X][X] prestigious office and [X] ||| ganzen Einfluß [X][X] Amtes und [X] ||| 0.0278341 1 ||| ||| 0.142857
+weight [X][X] institution [X] ||| ganzen Einfluß [X][X] Institution , [X] ||| 0.0278341 1 ||| ||| 0.0454545
+weight [X][X] institution you [X] ||| ganzen Einfluß [X][X] Institution , die Sie [X] ||| 0.0278341 1 ||| ||| 0.0294118
+weight [X][X] institution [X] ||| ganzen Einfluß [X][X] Institution , die [X] ||| 0.0278341 1 ||| ||| 0.0344828
+weight [X][X] institution [X] ||| ganzen Einfluß [X][X] Institution [X] ||| 0.0278341 1 ||| ||| 0.0666667
+weight [X][X] you [X] ||| ganzen Einfluß [X][X] Sie [X] ||| 0.0278341 1 ||| ||| 0.0294118
+weight [X][X] [X] ||| ganzen Einfluß [X][X] [X] ||| 0.241419 1 ||| ||| 1.11887
+weight [X][X] the institution [X] ||| ganzen Einfluß [X][X] der Institution , [X] ||| 0.0278341 1 ||| ||| 0.0454545
+weight [X][X] the institution you [X] ||| ganzen Einfluß [X][X] der Institution , die Sie [X] ||| 0.0278341 1 ||| ||| 0.0294118
+weight [X][X] the institution [X] ||| ganzen Einfluß [X][X] der Institution , die [X] ||| 0.0278341 1 ||| ||| 0.0344828
+weight [X][X] the institution [X] ||| ganzen Einfluß [X][X] der Institution [X] ||| 0.0278341 1 ||| ||| 0.0666667
+weight [X][X] the [X] ||| ganzen Einfluß [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.1
+weight [X][X] the [X][X] [X] ||| ganzen Einfluß [X][X] der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0294118
+weight [X][X] you [X] ||| ganzen Einfluß [X][X] die Sie [X] ||| 0.0278341 1 ||| ||| 0.0294118
+weight [X][X] [X] ||| ganzen Einfluß [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.0344828
+weight [X][X] and [X] ||| ganzen Einfluß [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.142857
+weight [X][X] and [X][X] [X] ||| ganzen Einfluß [X][X] und [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0454545
+weight [X][X] and [X][X] you [X] ||| ganzen Einfluß [X][X] und [X][X] , die Sie [X] ||| 0.0278341 1 ||| ||| 0.0294118
+weight [X][X] and [X][X] [X] ||| ganzen Einfluß [X][X] und [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.0344828
+weight [X][X] and [X][X] you [X] ||| ganzen Einfluß [X][X] und [X][X] Sie [X] ||| 0.0278341 1 ||| ||| 0.0294118
+weight [X][X] and [X][X] [X] ||| ganzen Einfluß [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.176016
+weight [X][X] and [X][X] you [X] ||| ganzen Einfluß [X][X] und [X][X] die Sie [X] ||| 0.0278341 1 ||| ||| 0.0294118
+weight [X][X] and [X][X] [X] ||| ganzen Einfluß [X][X] und [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.0344828
+weight [X][X] and the institution [X] ||| ganzen Einfluß [X][X] und der Institution , [X] ||| 0.0278341 1 ||| ||| 0.0454545
+weight [X][X] and the institution [X] ||| ganzen Einfluß [X][X] und der Institution , die [X] ||| 0.0278341 1 ||| ||| 0.0344828
+weight [X][X] and the institution [X] ||| ganzen Einfluß [X][X] und der Institution [X] ||| 0.0278341 1 ||| ||| 0.0666667
+weight [X][X] and the [X] ||| ganzen Einfluß [X][X] und der [X] ||| 0.0278341 1 ||| ||| 0.1
+weight [X][X] and the [X][X] [X] ||| ganzen Einfluß [X][X] und der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0294118
+is [X] ||| geht [X] ||| 0.0278341 1 ||| ||| 1
+to [X] ||| geltend zu [X] ||| 0.0278341 1 ||| ||| 1
+to [X][X] [X] ||| geltend zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.5
+to make [X] ||| geltend zu machen [X] ||| 0.0185561 1 ||| ||| 1.5
+to make representations [X] ||| geltend zu machen [X] ||| 0.00927803 1 ||| ||| 1.5
+made [X] ||| gemacht hat [X] ||| 0.0278341 1 ||| ||| 1
+common fisheries policy [X] ||| gemeinsamen Fischereipolitik darstellt [X] ||| 0.0278341 1 ||| ||| 0.5
+common fisheries policy [X][X] proposal [X] ||| gemeinsamen Fischereipolitik darstellt [X][X] Vorschlag [X] ||| 0.0278341 1 ||| ||| 0.0833333
+common fisheries policy [X][X] [X] ||| gemeinsamen Fischereipolitik darstellt [X][X] [X] ||| 0.0278341 1 ||| ||| 0.285014
+common fisheries policy and [X] ||| gemeinsamen Fischereipolitik darstellt und [X] ||| 0.0278341 1 ||| ||| 0.25
+common fisheries policy and [X][X] [X] ||| gemeinsamen Fischereipolitik darstellt und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142157
+common fisheries policy and a [X] ||| gemeinsamen Fischereipolitik darstellt und ein [X] ||| 0.0278341 1 ||| ||| 0.142857
+common [X] ||| gemeinsamen [X] ||| 0.0278341 1 ||| ||| 1
+common [X][X] to subvert it [X] ||| gemeinsamen [X][X] , diesen zu unterlaufen [X] ||| 0.0278341 1 ||| ||| 0.0588235
+common [X][X] proposal [X] ||| gemeinsamen [X][X] Vorschlag [X] ||| 0.0278341 1 ||| ||| 0.0833333
+common [X][X] proposal [X][X] [X] ||| gemeinsamen [X][X] Vorschlag [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0588235
+common [X][X] [X] ||| gemeinsamen [X][X] [X] ||| 0.241419 1 ||| ||| 1.03501
+common [X][X] a proposal [X] ||| gemeinsamen [X][X] ein Vorschlag [X] ||| 0.0278341 1 ||| ||| 0.0833333
+common [X][X] a proposal [X][X] [X] ||| gemeinsamen [X][X] ein Vorschlag [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0588235
+common [X][X] a [X] ||| gemeinsamen [X][X] ein [X] ||| 0.0278341 1 ||| ||| 0.142857
+common [X][X] a [X][X] [X] ||| gemeinsamen [X][X] ein [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0588235
+common [X][X] and [X] ||| gemeinsamen [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.25
+common [X][X] and [X][X] [X] ||| gemeinsamen [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142157
+common [X][X] and a proposal [X] ||| gemeinsamen [X][X] und ein Vorschlag [X] ||| 0.0278341 1 ||| ||| 0.0833333
+common [X][X] and a [X] ||| gemeinsamen [X][X] und ein [X] ||| 0.0278341 1 ||| ||| 0.142857
+common [X][X] and a [X][X] [X] ||| gemeinsamen [X][X] und ein [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0588235
+in accordance with [X] ||| gemäß [X] ||| 0.0278341 1 ||| ||| 1
+in accordance with the [X] ||| gemäß der [X] ||| 0.0278341 1 ||| ||| 0.5
+that is precisely [X] ||| genau [X] ||| 0.013917 1 ||| ||| 2
+that is precisely the [X] ||| genau [X] ||| 0.013917 1 ||| ||| 2
+that is precisely [X][X] , [X] ||| genau [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.111111
+that is precisely [X][X] [X] ||| genau [X][X] [X] ||| 0.013917 1 ||| ||| 1.1746
+that is precisely the [X][X] [X] ||| genau [X][X] [X] ||| 0.013917 1 ||| ||| 1.1746
+that is precisely [X][X] if [X] ||| genau [X][X] wenn [X] ||| 0.0278341 1 ||| ||| 0.0833333
+whole of the European Community [X] ||| gesamten Europäischen Union [X] ||| 0.0278341 1 ||| ||| 0.111111
+whole of the European [X] ||| gesamten Europäischen [X] ||| 0.0278341 1 ||| ||| 0.2
+whole [X] ||| gesamten [X] ||| 0.00927803 1 ||| ||| 3
+whole of [X] ||| gesamten [X] ||| 0.00927803 1 ||| ||| 3
+whole of the [X] ||| gesamten [X] ||| 0.00927803 1 ||| ||| 3
+whole [X][X] Community [X] ||| gesamten [X][X] Union [X] ||| 0.013917 1 ||| ||| 0.222222
+whole of [X][X] Community [X] ||| gesamten [X][X] Union [X] ||| 0.013917 1 ||| ||| 0.222222
+whole [X][X] [X] ||| gesamten [X][X] [X] ||| 0.0118084 1 ||| ||| 0.733333
+whole of [X][X] [X] ||| gesamten [X][X] [X] ||| 0.0118084 1 ||| ||| 0.733333
+whole of the [X][X] [X] ||| gesamten [X][X] [X] ||| 0.00421729 1 ||| ||| 0.733333
+[X][X] violent deaths [X] ||| gewaltsamen Tod [X][X] Bürgern [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] violent deaths [X][X] [X] ||| gewaltsamen Tod [X][X] Bürgern [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] violent deaths in Sri [X] ||| gewaltsamen Tod [X][X] Bürgern von Sri [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] violent deaths in [X] ||| gewaltsamen Tod [X][X] Bürgern von [X] ||| 0.0278341 1 ||| ||| 0.333333
+[X][X] other violent deaths [X] ||| gewaltsamen Tod [X][X] anderen Bürgern [X] ||| 0.0139171 1 ||| ||| 0.4
+[X][X] the other violent deaths [X] ||| gewaltsamen Tod [X][X] anderen Bürgern [X] ||| 0.0139171 1 ||| ||| 0.4
+[X][X] other violent deaths [X][X] [X] ||| gewaltsamen Tod [X][X] anderen Bürgern [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] other violent deaths in [X] ||| gewaltsamen Tod [X][X] anderen Bürgern von [X] ||| 0.0278341 1 ||| ||| 0.333333
+[X][X] and [X][X] violent deaths [X] ||| gewaltsamen Tod [X][X] und [X][X] Bürgern [X] ||| 0.0278341 1 ||| ||| 0.2
+at his [X][X] violent deaths [X] ||| gewaltsamen Tod von Herrn Ponnambalam [X][X] Bürgern [X] ||| 0.0278341 1 ||| ||| 0.2
+violent [X] ||| gewaltsamen [X] ||| 0.0278341 1 ||| ||| 1
+have [X] ||| haben [X] ||| 0.241419 1 ||| ||| 2
+is [X] ||| handelt [X] ||| 0.0278341 1 ||| ||| 1
+has [X] ||| hat [X] ||| 0.0278341 1 ||| ||| 1
+had [X] ||| hatte [X] ||| 0.0278341 1 ||| ||| 1
+meantime [X] ||| heute [X] ||| 0.0278341 1 ||| ||| 1
+meantime , [X][X] [X] ||| heute [X][X] - [X] ||| 0.0278341 1 ||| ||| 0.333333
+[X][X] meantime , [X][X] [X] ||| heute [X][X] - [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142857
+in the meantime , [X][X] [X] ||| heute [X][X] - das ist auch der [X] ||| 0.0278341 1 ||| ||| 0.142857
+meantime [X][X] [X] ||| heute [X][X] [X] ||| 0.0278341 1 ||| ||| 0.333333
+[X][X] meantime [X][X] [X] ||| heute [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142857
+meantime , [X][X] [X] ||| heute [X][X] bitten - [X] ||| 0.0278341 1 ||| ||| 0.333333
+[X][X] meantime , [X][X] [X] ||| heute [X][X] bitten - [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142857
+in the meantime , [X][X] [X] ||| heute [X][X] bitten - das ist auch der [X] ||| 0.0278341 1 ||| ||| 0.142857
+in the meantime [X][X] [X] ||| heute [X][X] das ist auch der [X] ||| 0.0278341 1 ||| ||| 0.142857
+here [X] ||| hier [X] ||| 0.0278341 1 ||| ||| 1
+I [X] ||| ich [X] ||| 1 1 ||| ||| 9
+I [X][X] [X] ||| ich [X][X] , [X] ||| 0.024494 1 ||| ||| 0.219298
+I [X][X] raise [X] ||| ich [X][X] , [X] ||| 0.0033401 1 ||| ||| 0.219298
+I [X][X] an [X] ||| ich [X][X] , einen [X] ||| 0.013917 1 ||| ||| 0.0357142
+I [X][X] raise an [X] ||| ich [X][X] , einen [X] ||| 0.013917 1 ||| ||| 0.0357142
+I [X][X] principle [X] ||| ich [X][X] Grundsatz [X] ||| 0.0278341 1 ||| ||| 0.0909091
+I [X][X] principle [X][X] stability [X] ||| ich [X][X] Grundsatz [X][X] Stabilität [X] ||| 0.0278341 1 ||| ||| 0.025641
+I [X][X] principle [X][X] [X] ||| ich [X][X] Grundsatz [X][X] [X] ||| 0.0229505 1 ||| ||| 0.11874
+I [X][X] principle [X][X] is [X] ||| ich [X][X] Grundsatz [X][X] [X] ||| 0.0048836 1 ||| ||| 0.11874
+I [X][X] principle [X][X] a [X] ||| ich [X][X] Grundsatz [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0169492
+I [X][X] principle of [X] ||| ich [X][X] Grundsatz der [X] ||| 0.0278341 1 ||| ||| 0.0526316
+I [X][X] principle of [X][X] [X] ||| ich [X][X] Grundsatz der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0634235
+I [X][X] principle of relative [X] ||| ich [X][X] Grundsatz der relativen [X] ||| 0.0278341 1 ||| ||| 0.0344828
+I [X][X] [X] ||| ich [X][X] Sie [X] ||| 0.0278341 1 ||| ||| 0.333333
+I [X][X] stability [X] ||| ich [X][X] Stabilität [X] ||| 0.0153567 1 ||| ||| 0.0464743
+I [X][X] stability is [X] ||| ich [X][X] Stabilität [X] ||| 0.0124774 1 ||| ||| 0.0464743
+I [X][X] stability [X][X] [X] ||| ich [X][X] Stabilität [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0169492
+I [X][X] stability is a [X] ||| ich [X][X] Stabilität einen [X] ||| 0.0278341 1 ||| ||| 0.0169492
+I [X][X] [X] ||| ich [X][X] [X] ||| 0.910577 1 ||| ||| 4.59922
+I [X][X] have [X] ||| ich [X][X] [X] ||| 0.000263127 1 ||| ||| 4.59922
+I [X][X] have just [X] ||| ich [X][X] [X] ||| 0.000252163 1 ||| ||| 4.59922
+I [X][X] is [X] ||| ich [X][X] [X] ||| 0.000126081 1 ||| ||| 4.59922
+I [X][X] just [X] ||| ich [X][X] [X] ||| 0.000252163 1 ||| ||| 4.59922
+I [X][X] raise [X] ||| ich [X][X] [X] ||| 0.000761651 1 ||| ||| 4.59922
+I [X][X] you [X] ||| ich [X][X] [X] ||| 0.000318522 1 ||| ||| 4.59922
+I [X][X] you have [X] ||| ich [X][X] [X] ||| 0.000263127 1 ||| ||| 4.59922
+I [X][X] you have just [X] ||| ich [X][X] [X] ||| 0.000252163 1 ||| ||| 4.59922
+I [X][X] initiative [X][X] [X] ||| ich [X][X] [X][X] Initiative [X] ||| 0.0105364 1 ||| ||| 0.567177
+I [X][X] initiative [X][X] have [X] ||| ich [X][X] [X][X] Initiative [X] ||| 0.00213369 1 ||| ||| 0.567177
+I [X][X] initiative [X][X] just [X] ||| ich [X][X] [X][X] Initiative [X] ||| 0.00204479 1 ||| ||| 0.567177
+I [X][X] initiative [X][X] you [X] ||| ich [X][X] [X][X] Initiative [X] ||| 0.00258289 1 ||| ||| 0.567177
+I [X][X] initiative of [X][X] [X] ||| ich [X][X] [X][X] Initiative [X] ||| 0.0105364 1 ||| ||| 0.567177
+I [X][X] the principle [X] ||| ich [X][X] der Grundsatz [X] ||| 0.0278341 1 ||| ||| 0.0909091
+I [X][X] the principle [X][X] [X] ||| ich [X][X] der Grundsatz [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0979063
+I [X][X] the principle of [X] ||| ich [X][X] der Grundsatz der [X] ||| 0.0278341 1 ||| ||| 0.0526316
+I [X][X] of [X] ||| ich [X][X] der [X] ||| 0.00668018 1 ||| ||| 0.219299
+I [X][X] the [X] ||| ich [X][X] der [X] ||| 0.0211539 1 ||| ||| 0.219299
+I [X][X] the [X][X] stability [X] ||| ich [X][X] der [X][X] Stabilität [X] ||| 0.0278341 1 ||| ||| 0.025641
+I [X][X] of [X][X] [X] ||| ich [X][X] der [X][X] [X] ||| 0.00690588 1 ||| ||| 0.255628
+I [X][X] of [X][X] is [X] ||| ich [X][X] der [X][X] [X] ||| 0.00226844 1 ||| ||| 0.255628
+I [X][X] the [X][X] [X] ||| ich [X][X] der [X][X] [X] ||| 0.0163913 1 ||| ||| 0.255628
+I [X][X] the [X][X] is [X] ||| ich [X][X] der [X][X] [X] ||| 0.00226844 1 ||| ||| 0.255628
+I [X][X] of [X][X] a [X] ||| ich [X][X] der [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.0338984
+I [X][X] the [X][X] a [X] ||| ich [X][X] der [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.0338984
+I [X][X] the [X][X] relative [X] ||| ich [X][X] der [X][X] relativen [X] ||| 0.0278341 1 ||| ||| 0.0344828
+I [X][X] of relative stability [X] ||| ich [X][X] der relativen Stabilität [X] ||| 0.0278341 1 ||| ||| 0.025641
+I [X][X] of relative [X] ||| ich [X][X] der relativen [X] ||| 0.0278341 1 ||| ||| 0.0344828
+I [X][X] of relative [X][X] [X] ||| ich [X][X] der relativen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0377825
+I [X][X] a [X] ||| ich [X][X] einen [X] ||| 0.00677702 1 ||| ||| 0.0696126
+I [X][X] an [X] ||| ich [X][X] einen [X] ||| 0.00714003 1 ||| ||| 0.0696126
+I [X][X] is a [X] ||| ich [X][X] einen [X] ||| 0.00677702 1 ||| ||| 0.0696126
+I [X][X] raise an [X] ||| ich [X][X] einen [X] ||| 0.00714003 1 ||| ||| 0.0696126
+I [X][X] one [X] ||| ich [X][X] es [X] ||| 0.0278341 1 ||| ||| 0.166667
+I [X][X] one [X][X] [X] ||| ich [X][X] es [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0263158
+I [X][X] one [X][X] an [X] ||| ich [X][X] es [X][X] , einen [X] ||| 0.0278341 1 ||| ||| 0.0178571
+I [X][X] one [X][X] [X] ||| ich [X][X] es [X][X] [X] ||| 0.0278341 1 ||| ||| 0.14371
+I [X][X] one [X][X] an [X] ||| ich [X][X] es [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0178571
+I [X][X] one [X][X] [X] ||| ich [X][X] es [X][X] ist , [X] ||| 0.0278341 1 ||| ||| 0.0263158
+I [X][X] one [X][X] an [X] ||| ich [X][X] es [X][X] ist , einen [X] ||| 0.0278341 1 ||| ||| 0.0178571
+I [X][X] one [X][X] [X] ||| ich [X][X] es [X][X] ist [X] ||| 0.0278341 1 ||| ||| 0.037037
+I [X][X] one can [X] ||| ich [X][X] es möglich [X] ||| 0.0171287 1 ||| ||| 0.1625
+I [X][X] one can raise [X] ||| ich [X][X] es möglich [X] ||| 0.0107054 1 ||| ||| 0.1625
+I [X][X] one can [X][X] [X] ||| ich [X][X] es möglich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0178571
+I [X][X] one can [X] ||| ich [X][X] es möglich ist , [X] ||| 0.0188874 1 ||| ||| 0.0818714
+I [X][X] one can raise [X] ||| ich [X][X] es möglich ist , [X] ||| 0.00894667 1 ||| ||| 0.0818714
+I [X][X] one can [X][X] [X] ||| ich [X][X] es möglich ist , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0178571
+I [X][X] one can [X] ||| ich [X][X] es möglich ist [X] ||| 0.0183298 1 ||| ||| 0.108466
+I [X][X] one can raise [X] ||| ich [X][X] es möglich ist [X] ||| 0.00950432 1 ||| ||| 0.108466
+I [X][X] one can [X][X] [X] ||| ich [X][X] es möglich ist [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0178571
+I [X][X] [X] ||| ich [X][X] ist , [X] ||| 0.0210636 1 ||| ||| 0.108187
+I [X][X] raise [X] ||| ich [X][X] ist , [X] ||| 0.00677046 1 ||| ||| 0.108187
+I [X][X] an [X] ||| ich [X][X] ist , einen [X] ||| 0.013917 1 ||| ||| 0.0357142
+I [X][X] raise an [X] ||| ich [X][X] ist , einen [X] ||| 0.013917 1 ||| ||| 0.0357142
+I [X][X] [X] ||| ich [X][X] ist [X] ||| 0.0207491 1 ||| ||| 0.145503
+I [X][X] raise [X] ||| ich [X][X] ist [X] ||| 0.00708502 1 ||| ||| 0.145503
+I [X][X] can [X] ||| ich [X][X] möglich [X] ||| 0.0171287 1 ||| ||| 0.1625
+I [X][X] can raise [X] ||| ich [X][X] möglich [X] ||| 0.0107054 1 ||| ||| 0.1625
+I [X][X] can [X][X] [X] ||| ich [X][X] möglich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0178571
+I [X][X] can [X] ||| ich [X][X] möglich ist , [X] ||| 0.0188874 1 ||| ||| 0.0818714
+I [X][X] can raise [X] ||| ich [X][X] möglich ist , [X] ||| 0.00894667 1 ||| ||| 0.0818714
+I [X][X] can [X][X] [X] ||| ich [X][X] möglich ist , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0178571
+I [X][X] can raise an [X] ||| ich [X][X] möglich ist , einen [X] ||| 0.0278341 1 ||| ||| 0.0178571
+I [X][X] can [X] ||| ich [X][X] möglich ist [X] ||| 0.0183298 1 ||| ||| 0.108466
+I [X][X] can raise [X] ||| ich [X][X] möglich ist [X] ||| 0.00950432 1 ||| ||| 0.108466
+I [X][X] can [X][X] [X] ||| ich [X][X] möglich ist [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0178571
+I [X][X] whether [X] ||| ich [X][X] ob [X] ||| 0.0278341 1 ||| ||| 0.25
+I [X][X] whether [X][X] [X] ||| ich [X][X] ob [X][X] , [X] ||| 0.0210636 1 ||| ||| 0.108187
+I [X][X] whether [X][X] raise [X] ||| ich [X][X] ob [X][X] , [X] ||| 0.00677046 1 ||| ||| 0.108187
+I [X][X] whether [X][X] an [X] ||| ich [X][X] ob [X][X] , einen [X] ||| 0.0278341 1 ||| ||| 0.0178571
+I [X][X] whether [X][X] [X] ||| ich [X][X] ob [X][X] [X] ||| 0.0207794 1 ||| ||| 0.496547
+I [X][X] whether [X][X] raise [X] ||| ich [X][X] ob [X][X] [X] ||| 0.00705473 1 ||| ||| 0.496547
+I [X][X] whether [X][X] an [X] ||| ich [X][X] ob [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0178571
+I [X][X] whether [X][X] [X] ||| ich [X][X] ob [X][X] ist , [X] ||| 0.0210636 1 ||| ||| 0.108187
+I [X][X] whether [X][X] raise [X] ||| ich [X][X] ob [X][X] ist , [X] ||| 0.00677046 1 ||| ||| 0.108187
+I [X][X] whether [X][X] an [X] ||| ich [X][X] ob [X][X] ist , einen [X] ||| 0.0278341 1 ||| ||| 0.0178571
+I [X][X] whether [X][X] [X] ||| ich [X][X] ob [X][X] ist [X] ||| 0.0207491 1 ||| ||| 0.145503
+I [X][X] whether [X][X] raise [X] ||| ich [X][X] ob [X][X] ist [X] ||| 0.00708502 1 ||| ||| 0.145503
+I [X][X] whether one [X] ||| ich [X][X] ob es [X] ||| 0.0278341 1 ||| ||| 0.166667
+I [X][X] whether one [X][X] [X] ||| ich [X][X] ob es [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0263158
+I [X][X] whether one [X][X] [X] ||| ich [X][X] ob es [X][X] [X] ||| 0.0278341 1 ||| ||| 0.14371
+I [X][X] whether one [X][X] [X] ||| ich [X][X] ob es [X][X] ist , [X] ||| 0.0278341 1 ||| ||| 0.0263158
+I [X][X] whether one [X][X] [X] ||| ich [X][X] ob es [X][X] ist [X] ||| 0.0278341 1 ||| ||| 0.037037
+I [X][X] whether one can [X] ||| ich [X][X] ob es möglich [X] ||| 0.0278341 1 ||| ||| 0.1
+I [X][X] whether one can [X] ||| ich [X][X] ob es möglich ist , [X] ||| 0.0278341 1 ||| ||| 0.0555556
+I [X][X] whether one can [X] ||| ich [X][X] ob es möglich ist [X] ||| 0.0278341 1 ||| ||| 0.0714286
+I [X][X] relative stability [X] ||| ich [X][X] relativen Stabilität [X] ||| 0.0153567 1 ||| ||| 0.0464743
+I [X][X] relative stability is [X] ||| ich [X][X] relativen Stabilität [X] ||| 0.0124774 1 ||| ||| 0.0464743
+I [X][X] relative stability [X][X] [X] ||| ich [X][X] relativen Stabilität [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0169492
+I [X][X] relative [X] ||| ich [X][X] relativen [X] ||| 0.0278341 1 ||| ||| 0.0344828
+I [X][X] relative [X][X] [X] ||| ich [X][X] relativen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0377825
+I [X][X] relative [X][X] a [X] ||| ich [X][X] relativen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0169492
+I can competently [X] ||| ich befugt bin [X] ||| 0.0278341 1 ||| ||| 0.5
+please rise , then , [X] ||| ich bitte Sie , sich [X] ||| 0.0278341 1 ||| ||| 0.5
+please [X] ||| ich bitte Sie [X] ||| 0.0278341 1 ||| ||| 1
+please [X][X] [X] ||| ich bitte Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.833333
+please [X][X] for this [X] ||| ich bitte Sie [X][X] zu einer [X] ||| 0.0278341 1 ||| ||| 0.333333
+I [X] ||| ich dem [X] ||| 0.0278341 1 ||| ||| 1
+I feel [X] ||| ich denke , daß [X] ||| 0.0278341 1 ||| ||| 1
+I feel [X][X] [X] ||| ich denke , daß [X][X] [X] ||| 0.0136556 1 ||| ||| 0.437622
+I feel [X][X] have [X] ||| ich denke , daß [X][X] [X] ||| 0.00276536 1 ||| ||| 0.437622
+I feel [X][X] have just [X] ||| ich denke , daß [X][X] [X] ||| 0.00265013 1 ||| ||| 0.437622
+I feel [X][X] just [X] ||| ich denke , daß [X][X] [X] ||| 0.00265013 1 ||| ||| 0.437622
+I feel [X][X] you [X] ||| ich denke , daß [X][X] [X] ||| 0.00334753 1 ||| ||| 0.437622
+I feel [X][X] you have [X] ||| ich denke , daß [X][X] [X] ||| 0.00276536 1 ||| ||| 0.437622
+I feel an [X] ||| ich denke , daß eine [X] ||| 0.0278341 1 ||| ||| 0.333333
+I feel an initiative [X][X] [X] ||| ich denke , daß eine [X][X] Initiative [X] ||| 0.0278341 1 ||| ||| 0.2147
+I feel an [X][X] [X] ||| ich denke , daß eine [X][X] [X] ||| 0.0169543 1 ||| ||| 0.352477
+I feel an [X][X] have [X] ||| ich denke , daß eine [X][X] [X] ||| 0.00343336 1 ||| ||| 0.352477
+I feel an [X][X] just [X] ||| ich denke , daß eine [X][X] [X] ||| 0.0032903 1 ||| ||| 0.352477
+I feel an [X][X] you [X] ||| ich denke , daß eine [X][X] [X] ||| 0.00415617 1 ||| ||| 0.352477
+I believe that [X] ||| ich meine , daß [X] ||| 0.0278341 1 ||| ||| 0.333333
+I believe that [X][X] stability [X] ||| ich meine , daß [X][X] Stabilität [X] ||| 0.0278341 1 ||| ||| 0.025641
+I believe that [X][X] [X] ||| ich meine , daß [X][X] [X] ||| 0.0256232 1 ||| ||| 0.26228
+I believe that [X][X] is [X] ||| ich meine , daß [X][X] [X] ||| 0.0022109 1 ||| ||| 0.26228
+I believe that [X][X] of [X] ||| ich meine , daß [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0526316
+I believe that [X][X] a [X] ||| ich meine , daß [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0169492
+I believe that [X][X] relative [X] ||| ich meine , daß [X][X] relativen [X] ||| 0.0278341 1 ||| ||| 0.0344828
+I believe that the principle [X] ||| ich meine , daß der Grundsatz [X] ||| 0.0278341 1 ||| ||| 0.0909091
+I believe that the [X] ||| ich meine , daß der [X] ||| 0.0278341 1 ||| ||| 0.166667
+I believe that the [X][X] [X] ||| ich meine , daß der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.150538
+I believe [X] ||| ich meine [X] ||| 0.0278341 1 ||| ||| 1
+I believe [X][X] principle [X] ||| ich meine [X][X] Grundsatz [X] ||| 0.0278341 1 ||| ||| 0.0909091
+I believe [X][X] principle [X][X] [X] ||| ich meine [X][X] Grundsatz [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0979063
+I believe [X][X] principle of [X] ||| ich meine [X][X] Grundsatz der [X] ||| 0.0278341 1 ||| ||| 0.0526316
+I believe [X][X] stability [X] ||| ich meine [X][X] Stabilität [X] ||| 0.0153567 1 ||| ||| 0.0464743
+I believe [X][X] stability is [X] ||| ich meine [X][X] Stabilität [X] ||| 0.0124774 1 ||| ||| 0.0464743
+I believe [X][X] stability [X][X] [X] ||| ich meine [X][X] Stabilität [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0169492
+I believe [X][X] [X] ||| ich meine [X][X] [X] ||| 0.0264822 1 ||| ||| 0.428947
+I believe [X][X] is [X] ||| ich meine [X][X] [X] ||| 0.00135186 1 ||| ||| 0.428947
+I believe [X][X] of [X] ||| ich meine [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0526316
+I believe [X][X] of [X][X] [X] ||| ich meine [X][X] der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0634235
+I believe [X][X] of relative [X] ||| ich meine [X][X] der relativen [X] ||| 0.0278341 1 ||| ||| 0.0344828
+I believe [X][X] a [X] ||| ich meine [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.0338984
+I believe [X][X] is a [X] ||| ich meine [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.0338984
+I believe [X][X] relative stability [X] ||| ich meine [X][X] relativen Stabilität [X] ||| 0.0278341 1 ||| ||| 0.025641
+I believe [X][X] relative [X] ||| ich meine [X][X] relativen [X] ||| 0.0278341 1 ||| ||| 0.0344828
+I believe [X][X] relative [X][X] [X] ||| ich meine [X][X] relativen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0377825
+I should like to [X] ||| ich möchte Sie [X] ||| 0.0278341 1 ||| ||| 0.333333
+I should like to [X][X] [X] ||| ich möchte Sie [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.111111
+I should like to [X][X] [X] ||| ich möchte Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.277778
+I should like to [X] ||| ich möchte [X] ||| 0.0278341 1 ||| ||| 0.5
+I should like to [X][X] [X] ||| ich möchte [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.111111
+I should like to [X][X] [X] ||| ich möchte [X][X] [X] ||| 0.0278341 1 ||| ||| 0.277778
+I want to know [X] ||| ich möchte wissen , [X] ||| 0.0278341 1 ||| ||| 0.5
+I want to know [X][X] [X] ||| ich möchte wissen , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0818713
+I want to know [X][X] [X] ||| ich möchte wissen , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.537361
+I want to know [X][X] [X] ||| ich möchte wissen , [X][X] ist , [X] ||| 0.0278341 1 ||| ||| 0.0818713
+I want to know [X][X] [X] ||| ich möchte wissen , [X][X] ist [X] ||| 0.0278341 1 ||| ||| 0.108466
+I want to know whether [X] ||| ich möchte wissen , ob [X] ||| 0.0278341 1 ||| ||| 0.25
+him [X] ||| ihn [X] ||| 0.0278341 1 ||| ||| 1
+[X][X] him [X] ||| ihn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.5
+[X][X] him [X][X] that [X] ||| ihn [X][X] [X][X] , daß [X] ||| 0.0278341 1 ||| ||| 0.0588235
+[X][X] him [X][X] [X] ||| ihn [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.130252
+[X][X] him and [X] ||| ihn [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] him and [X][X] that [X] ||| ihn [X][X] und [X][X] , daß [X] ||| 0.0278341 1 ||| ||| 0.0588235
+[X][X] him and [X][X] [X] ||| ihn [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.130252
+[X][X] him and made [X][X] [X] ||| ihn [X][X] und [X][X] gemacht hat [X] ||| 0.0278341 1 ||| ||| 0.0714286
+acquitted him [X] ||| ihn freigesprochen [X] ||| 0.0185561 1 ||| ||| 1.5
+have acquitted him [X] ||| ihn freigesprochen [X] ||| 0.00927803 1 ||| ||| 1.5
+acquitted him [X][X] that [X] ||| ihn freigesprochen [X][X] , daß [X] ||| 0.0175252 1 ||| ||| 0.158824
+have acquitted him [X][X] that [X] ||| ihn freigesprochen [X][X] , daß [X] ||| 0.0103089 1 ||| ||| 0.158824
+acquitted him [X][X] [X] ||| ihn freigesprochen [X][X] [X] ||| 0.0176288 1 ||| ||| 0.355252
+have acquitted him [X][X] [X] ||| ihn freigesprochen [X][X] [X] ||| 0.0102053 1 ||| ||| 0.355252
+acquitted him and [X] ||| ihn freigesprochen und [X] ||| 0.0185561 1 ||| ||| 0.75
+have acquitted him and [X] ||| ihn freigesprochen und [X] ||| 0.00927803 1 ||| ||| 0.75
+acquitted him and [X][X] that [X] ||| ihn freigesprochen und [X][X] , daß [X] ||| 0.0278341 1 ||| ||| 0.1
+acquitted him and [X][X] [X] ||| ihn freigesprochen und [X][X] [X] ||| 0.0176288 1 ||| ||| 0.355252
+have acquitted him and [X][X] [X] ||| ihn freigesprochen und [X][X] [X] ||| 0.0102053 1 ||| ||| 0.355252
+acquitted him and made [X][X] [X] ||| ihn freigesprochen und [X][X] gemacht hat [X] ||| 0.0278341 1 ||| ||| 0.125
+their fleet [X] ||| ihr Soll [X] ||| 0.0278341 1 ||| ||| 1
+their fleet [X][X] [X] ||| ihr Soll [X][X] [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] their fleet [X][X] [X] ||| ihr Soll [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] their fleet [X][X] annually [X] ||| ihr Soll [X][X] [X][X] jährlich [X] ||| 0.0278341 1 ||| ||| 0.2
+fail [X][X] their fleet [X][X] [X] ||| ihr Soll [X][X] nicht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142857
+their fleet reduction targets [X] ||| ihr Soll zur Flottenverkleinerung [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] their fleet reduction targets [X] ||| ihr Soll zur Flottenverkleinerung [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142857
+their [X] ||| ihr [X] ||| 0.0278341 1 ||| ||| 1
+their [X][X] [X] ||| ihr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] their [X][X] [X] ||| ihr [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] their [X][X] annually [X] ||| ihr [X][X] [X][X] jährlich [X] ||| 0.0278341 1 ||| ||| 0.2
+fail [X][X] their [X][X] [X] ||| ihr [X][X] nicht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142857
+fail [X][X] their [X][X] annually [X] ||| ihr [X][X] nicht [X][X] jährlich [X] ||| 0.0278341 1 ||| ||| 0.2
+fail to meet their [X][X] [X] ||| ihr [X][X] nicht erfüllen , [X] ||| 0.0278341 1 ||| ||| 0.142857
+her [X] ||| ihrem [X] ||| 0.0278341 1 ||| ||| 1
+you [X] ||| im Parlament [X] ||| 0.0278341 1 ||| ||| 1
+you [X][X] debate [X] ||| im Parlament [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.0344828
+you [X][X] debate on [X] ||| im Parlament [X][X] Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.0185185
+you [X][X] [X] ||| im Parlament [X][X] [X] ||| 0.0278341 1 ||| ||| 0.433954
+you [X][X] a debate [X] ||| im Parlament [X][X] einer Aussprache [X] ||| 0.0278341 1 ||| ||| 0.0344828
+you [X][X] a debate on [X] ||| im Parlament [X][X] einer Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.0185185
+you [X][X] a [X] ||| im Parlament [X][X] einer [X] ||| 0.0278341 1 ||| ||| 0.0714286
+you [X][X] a [X][X] [X] ||| im Parlament [X][X] einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0185185
+you [X][X] on [X] ||| im Parlament [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0185185
+you [X][X] [X] ||| im Parlament [X][X] nach [X] ||| 0.0278341 1 ||| ||| 0.142857
+you [X][X] a debate [X] ||| im Parlament [X][X] nach einer Aussprache [X] ||| 0.0278341 1 ||| ||| 0.0344828
+you [X][X] a debate on [X] ||| im Parlament [X][X] nach einer Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.0185185
+you [X][X] a [X] ||| im Parlament [X][X] nach einer [X] ||| 0.0278341 1 ||| ||| 0.0714286
+you [X][X] a [X][X] [X] ||| im Parlament [X][X] nach einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0185185
+you have [X] ||| im Parlament besteht [X] ||| 0.0278341 1 ||| ||| 1
+you have [X][X] debate [X] ||| im Parlament besteht [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.0344828
+you have [X][X] debate on [X] ||| im Parlament besteht [X][X] Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.0185185
+you have [X][X] [X] ||| im Parlament besteht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.12443
+you have [X][X] on [X] ||| im Parlament besteht [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0185185
+you have requested [X] ||| im Parlament besteht der Wunsch [X] ||| 0.0278341 1 ||| ||| 0.166667
+you have requested [X][X] [X] ||| im Parlament besteht der Wunsch [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0530013
+you have requested [X][X] on [X] ||| im Parlament besteht der Wunsch [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0185185
+you have requested [X] ||| im Parlament besteht der Wunsch nach [X] ||| 0.0278341 1 ||| ||| 0.142857
+you have requested [X][X] [X] ||| im Parlament besteht der Wunsch nach [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0530013
+you have requested [X][X] on [X] ||| im Parlament besteht der Wunsch nach [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0185185
+you have requested a debate [X] ||| im Parlament besteht der Wunsch nach einer Aussprache [X] ||| 0.0278341 1 ||| ||| 0.0344828
+you have requested a [X] ||| im Parlament besteht der Wunsch nach einer [X] ||| 0.0278341 1 ||| ||| 0.0714286
+you have requested a [X][X] [X] ||| im Parlament besteht der Wunsch nach einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0185185
+you have [X] ||| im Parlament besteht der [X] ||| 0.0278341 1 ||| ||| 1
+you have [X][X] debate [X] ||| im Parlament besteht der [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.0344828
+you have [X][X] debate on [X] ||| im Parlament besteht der [X][X] Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.0185185
+you have [X][X] [X] ||| im Parlament besteht der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.12443
+you have [X][X] on [X] ||| im Parlament besteht der [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0185185
+in keeping with [X] ||| im Sinne [X] ||| 0.0278341 1 ||| ||| 0.5
+in keeping with [X][X] [X] ||| im Sinne [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142857
+in keeping with the positions [X] ||| im Sinne der Position [X] ||| 0.0278341 1 ||| ||| 0.142857
+in keeping with the [X] ||| im Sinne der [X] ||| 0.0278341 1 ||| ||| 0.25
+concerning inadmissibility . [X] ||| im Zusammenhang mit der Unzulässigkeit geben ? [X] ||| 0.0278341 1 ||| ||| 0.333333
+concerning inadmissibility [X] ||| im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0278341 1 ||| ||| 1
+concerning [X] ||| im Zusammenhang mit der [X] ||| 0.0278341 1 ||| ||| 1
+concerning [X][X] [X] ||| im Zusammenhang mit der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.333333
+in [X] ||| im [X] ||| 0.013917 1 ||| ||| 2
+on [X] ||| im [X] ||| 0.013917 1 ||| ||| 2
+[X][X] debate [X] ||| im [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.0344828
+[X][X] debate on [X] ||| im [X][X] Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.0185185
+in [X][X] positions [X] ||| im [X][X] Position [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] requested [X] ||| im [X][X] Wunsch [X] ||| 0.0278341 1 ||| ||| 0.166667
+[X][X] requested [X][X] [X] ||| im [X][X] Wunsch [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0530013
+[X][X] requested [X][X] on [X] ||| im [X][X] Wunsch [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0185185
+[X][X] requested [X] ||| im [X][X] Wunsch nach [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] requested [X][X] [X] ||| im [X][X] Wunsch nach [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0530013
+[X][X] requested [X][X] on [X] ||| im [X][X] Wunsch nach [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0185185
+[X][X] requested a debate [X] ||| im [X][X] Wunsch nach einer Aussprache [X] ||| 0.0278341 1 ||| ||| 0.0344828
+[X][X] requested a debate on [X] ||| im [X][X] Wunsch nach einer Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.0185185
+[X][X] requested a [X] ||| im [X][X] Wunsch nach einer [X] ||| 0.0278341 1 ||| ||| 0.0714286
+[X][X] requested a [X][X] [X] ||| im [X][X] Wunsch nach einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0185185
+in [X][X] [X] ||| im [X][X] [X] ||| 0.0278341 1 ||| ||| 0.892857
+in [X][X] the positions [X] ||| im [X][X] der Position [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] requested [X] ||| im [X][X] der Wunsch [X] ||| 0.0278341 1 ||| ||| 0.166667
+[X][X] requested [X][X] [X] ||| im [X][X] der Wunsch [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0530013
+[X][X] requested [X][X] on [X] ||| im [X][X] der Wunsch [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0185185
+[X][X] requested [X] ||| im [X][X] der Wunsch nach [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] requested [X][X] [X] ||| im [X][X] der Wunsch nach [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0530013
+[X][X] requested [X][X] on [X] ||| im [X][X] der Wunsch nach [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0185185
+[X][X] requested a debate [X] ||| im [X][X] der Wunsch nach einer Aussprache [X] ||| 0.0278341 1 ||| ||| 0.0344828
+[X][X] requested a debate on [X] ||| im [X][X] der Wunsch nach einer Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.0185185
+[X][X] requested a [X] ||| im [X][X] der Wunsch nach einer [X] ||| 0.0278341 1 ||| ||| 0.0714286
+[X][X] requested a [X][X] [X] ||| im [X][X] der Wunsch nach einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0185185
+in [X][X] the [X] ||| im [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] a debate [X] ||| im [X][X] einer Aussprache [X] ||| 0.0278341 1 ||| ||| 0.0344828
+[X][X] a debate on [X] ||| im [X][X] einer Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.0185185
+[X][X] a [X] ||| im [X][X] einer [X] ||| 0.0278341 1 ||| ||| 0.0714286
+[X][X] a [X][X] [X] ||| im [X][X] einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0185185
+[X][X] on [X] ||| im [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.0185185
+[X][X] a debate [X] ||| im [X][X] nach einer Aussprache [X] ||| 0.0278341 1 ||| ||| 0.0344828
+[X][X] a debate on [X] ||| im [X][X] nach einer Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.0185185
+[X][X] a [X] ||| im [X][X] nach einer [X] ||| 0.0278341 1 ||| ||| 0.0714286
+[X][X] a [X][X] [X] ||| im [X][X] nach einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0185185
+always [X] ||| immer [X] ||| 0.013917 1 ||| ||| 2
+has always [X] ||| immer [X] ||| 0.013917 1 ||| ||| 2
+always [X][X] [X] ||| immer [X][X] [X] ||| 0.0173963 1 ||| ||| 0.533333
+has always [X][X] [X] ||| immer [X][X] [X] ||| 0.0104378 1 ||| ||| 0.533333
+always adopted . [X] ||| immer vertreten haben . [X] ||| 0.0173963 1 ||| ||| 0.533333
+has always adopted . [X] ||| immer vertreten haben . [X] ||| 0.0104378 1 ||| ||| 0.533333
+always adopted [X] ||| immer vertreten haben [X] ||| 0.0185561 1 ||| ||| 1.5
+has always adopted [X] ||| immer vertreten haben [X] ||| 0.00927803 1 ||| ||| 1.5
+consistently shown [X] ||| immer wieder befaßt [X] ||| 0.00927803 1 ||| ||| 3
+consistently shown an [X] ||| immer wieder befaßt [X] ||| 0.00927803 1 ||| ||| 3
+consistently shown an interest [X] ||| immer wieder befaßt [X] ||| 0.00927803 1 ||| ||| 3
+has consistently shown [X] ||| immer wieder befaßt hat [X] ||| 0.0128465 1 ||| ||| 1.08333
+has consistently shown an [X] ||| immer wieder befaßt hat [X] ||| 0.00856433 1 ||| ||| 1.08333
+has consistently shown an interest [X] ||| immer wieder befaßt hat [X] ||| 0.00642326 1 ||| ||| 1.08333
+has consistently shown [X][X] [X] ||| immer wieder befaßt hat [X][X] [X] ||| 0.013917 1 ||| ||| 0.222222
+has consistently shown an [X][X] [X] ||| immer wieder befaßt hat [X][X] [X] ||| 0.013917 1 ||| ||| 0.222222
+in paragraph 6 [X] ||| in Absatz 6 [X] ||| 0.0278341 1 ||| ||| 0.333333
+proposal in paragraph 6 that [X] ||| in Absatz 6 vorschlägt , [X] ||| 0.0278341 1 ||| ||| 0.2
+proposal in paragraph 6 [X] ||| in Absatz 6 vorschlägt [X] ||| 0.0278341 1 ||| ||| 0.25
+in paragraph [X] ||| in Absatz [X] ||| 0.0278341 1 ||| ||| 1
+appealing [X] ||| in Berufung [X] ||| 0.0278341 1 ||| ||| 1
+is appealing . [X] ||| in Berufung geht . [X] ||| 0.0278341 1 ||| ||| 0.333333
+is appealing [X] ||| in Berufung geht [X] ||| 0.0278341 1 ||| ||| 1
+in Russia , [X] ||| in Rußland [X] ||| 0.00927803 1 ||| ||| 1.5
+in Russia [X] ||| in Rußland [X] ||| 0.0185561 1 ||| ||| 1.5
+in Sri Lanka [X] ||| in Sri Lanka [X] ||| 0.0278341 1 ||| ||| 0.666666
+[X][X] killings in Sri Lanka [X] ||| in Sri Lanka [X][X] Toten [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] in Sri Lanka [X] ||| in Sri Lanka [X][X] [X] ||| 0.0216487 1 ||| ||| 0.160714
+in Sri Lanka [X][X] [X] ||| in Sri Lanka [X][X] [X] ||| 0.00618536 1 ||| ||| 0.160714
+in Sri Lanka [X] ||| in Sri Lanka zu [X] ||| 0.0278341 1 ||| ||| 0.25
+in Sri Lanka [X][X] [X] ||| in Sri Lanka zu [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0357143
+in Sri Lanka [X] ||| in Sri Lanka zu beklagen [X] ||| 0.0278341 1 ||| ||| 0.2
+in Sri Lanka [X][X] [X] ||| in Sri Lanka zu beklagen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0357143
+in Sri Lanka was [X] ||| in Sri Lanka zu beklagen gab , [X] ||| 0.0278341 1 ||| ||| 0.0833333
+in Sri Lanka was [X] ||| in Sri Lanka zu beklagen gab , zählt [X] ||| 0.0278341 1 ||| ||| 0.0714286
+in Sri Lanka was Mr [X] ||| in Sri Lanka zu beklagen gab , zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 0.0357143
+in Sri Lanka was [X] ||| in Sri Lanka zu beklagen gab , zählt auch [X] ||| 0.0278341 1 ||| ||| 0.0625
+in Sri Lanka was [X] ||| in Sri Lanka zu beklagen gab [X] ||| 0.0278341 1 ||| ||| 0.1
+in Sri [X] ||| in Sri [X] ||| 0.241419 1 ||| ||| 2
+in Sri [X][X] [X] ||| in Sri [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0833333
+in Sri [X][X] [X] ||| in Sri [X][X] , zählt [X] ||| 0.0278341 1 ||| ||| 0.0714286
+in Sri [X][X] Mr [X] ||| in Sri [X][X] , zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 0.0357143
+in Sri [X][X] [X] ||| in Sri [X][X] , zählt auch [X] ||| 0.0278341 1 ||| ||| 0.0625
+in Sri [X][X] Mr [X] ||| in Sri [X][X] Herr [X] ||| 0.0278341 1 ||| ||| 0.0357143
+in Sri [X][X] [X] ||| in Sri [X][X] [X] ||| 0.0278341 1 ||| ||| 0.352976
+in Sri [X][X] Mr [X] ||| in Sri [X][X] auch Herr [X] ||| 0.0278341 1 ||| ||| 0.0357143
+in Sri [X][X] [X] ||| in Sri [X][X] auch [X] ||| 0.0278341 1 ||| ||| 0.0625
+in Sri [X][X] [X] ||| in Sri [X][X] zählt [X] ||| 0.0278341 1 ||| ||| 0.0714286
+in Sri [X][X] Mr [X] ||| in Sri [X][X] zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 0.0357143
+in Sri [X][X] [X] ||| in Sri [X][X] zählt auch [X] ||| 0.0278341 1 ||| ||| 0.0625
+in Texas [X] ||| in Texas [X] ||| 0.0278341 1 ||| ||| 1
+as [X] ||| in [X] ||| 0.00253037 1 ||| ||| 11
+in [X] ||| in [X] ||| 0.818182 1 ||| ||| 11
+to [X] ||| in [X] ||| 0.00253037 1 ||| ||| 11
+in [X][X] [X] ||| in [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0833333
+in [X][X] [X] ||| in [X][X] , zählt [X] ||| 0.0278341 1 ||| ||| 0.0714286
+in [X][X] Mr [X] ||| in [X][X] , zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 0.0357143
+in [X][X] [X] ||| in [X][X] , zählt auch [X] ||| 0.0278341 1 ||| ||| 0.0625
+[X][X] . [X] ||| in [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.333333
+in [X][X] European Union [X] ||| in [X][X] Europäischen Union [X] ||| 0.0278341 1 ||| ||| 0.04
+in [X][X] European [X] ||| in [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.0526316
+in [X][X] Mr [X] ||| in [X][X] Herr [X] ||| 0.0278341 1 ||| ||| 0.0357143
+in [X][X] countries [X] ||| in [X][X] Ländern [X] ||| 0.0278341 1 ||| ||| 0.166667
+in [X][X] countries [X][X] European [X] ||| in [X][X] Ländern [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.0526316
+in [X][X] countries [X][X] Union [X] ||| in [X][X] Ländern [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.04
+in [X][X] countries [X][X] [X] ||| in [X][X] Ländern [X][X] [X] ||| 0.0278341 1 ||| ||| 0.16406
+in [X][X] countries of the [X] ||| in [X][X] Ländern der [X] ||| 0.0278341 1 ||| ||| 0.0714286
+in [X][X] few days , [X] ||| in [X][X] Tagen [X] ||| 0.0121774 1 ||| ||| 0.253968
+in [X][X] few days [X] ||| in [X][X] Tagen [X] ||| 0.0156567 1 ||| ||| 0.253968
+in [X][X] Union [X] ||| in [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.04
+in [X][X] , [X] ||| in [X][X] [X] ||| 0.000562429 1 ||| ||| 5.49878
+in [X][X] [X] ||| in [X][X] [X] ||| 0.737316 1 ||| ||| 5.49878
+to [X][X] [X] ||| in [X][X] [X] ||| 0.00506187 1 ||| ||| 5.49878
+to [X][X] to [X] ||| in [X][X] [X] ||| 0.00168729 1 ||| ||| 5.49878
+[X][X] killings in [X][X] [X] ||| in [X][X] [X][X] Toten [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] in [X][X] [X] ||| in [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.125
+in [X][X] Mr [X] ||| in [X][X] auch Herr [X] ||| 0.0278341 1 ||| ||| 0.0357143
+in [X][X] [X] ||| in [X][X] auch [X] ||| 0.0278341 1 ||| ||| 0.0625
+in [X][X] [X] ||| in [X][X] beklagen [X] ||| 0.0278341 1 ||| ||| 0.2
+in [X][X] was [X] ||| in [X][X] beklagen gab , [X] ||| 0.0278341 1 ||| ||| 0.0833333
+in [X][X] was [X] ||| in [X][X] beklagen gab , zählt [X] ||| 0.0278341 1 ||| ||| 0.0714286
+in [X][X] was Mr [X] ||| in [X][X] beklagen gab , zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 0.0357143
+in [X][X] was [X] ||| in [X][X] beklagen gab , zählt auch [X] ||| 0.0278341 1 ||| ||| 0.0625
+in [X][X] was [X] ||| in [X][X] beklagen gab [X] ||| 0.0278341 1 ||| ||| 0.1
+to [X][X] the [X] ||| in [X][X] das [X] ||| 0.013917 1 ||| ||| 0.333334
+to [X][X] to the [X] ||| in [X][X] das [X] ||| 0.013917 1 ||| ||| 0.333334
+in [X][X] of the European [X] ||| in [X][X] der Europäischen [X] ||| 0.0278341 1 ||| ||| 0.0526316
+in [X][X] of the [X] ||| in [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0714286
+in [X][X] of the [X][X] [X] ||| in [X][X] der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.04
+in [X][X] was [X] ||| in [X][X] gab , [X] ||| 0.0278341 1 ||| ||| 0.0833333
+in [X][X] was [X] ||| in [X][X] gab , zählt [X] ||| 0.0278341 1 ||| ||| 0.0714286
+in [X][X] was Mr [X] ||| in [X][X] gab , zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 0.0357143
+in [X][X] was [X] ||| in [X][X] gab , zählt auch [X] ||| 0.0278341 1 ||| ||| 0.0625
+in [X][X] was [X] ||| in [X][X] gab [X] ||| 0.0278341 1 ||| ||| 0.1
+a number [X][X] in [X][X] [X] ||| in [X][X] mehrere [X][X] [X] ||| 0.0278341 1 ||| ||| 0.125
+in [X][X] next few days [X] ||| in [X][X] nächsten Tagen [X] ||| 0.0278341 1 ||| ||| 0.142857
+in [X][X] next [X] ||| in [X][X] nächsten [X] ||| 0.0278341 1 ||| ||| 0.333333
+in [X][X] next [X][X] , [X] ||| in [X][X] nächsten [X][X] [X] ||| 0.00847125 1 ||| ||| 0.365079
+in [X][X] next [X][X] [X] ||| in [X][X] nächsten [X][X] [X] ||| 0.0193629 1 ||| ||| 0.365079
+proposal in [X][X] that [X] ||| in [X][X] vorschlägt , [X] ||| 0.0278341 1 ||| ||| 0.2
+proposal in [X][X] [X] ||| in [X][X] vorschlägt [X] ||| 0.0278341 1 ||| ||| 0.25
+in [X][X] [X] ||| in [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.25
+in [X][X] [X] ||| in [X][X] zu beklagen [X] ||| 0.0278341 1 ||| ||| 0.2
+in [X][X] was [X] ||| in [X][X] zu beklagen gab , [X] ||| 0.0278341 1 ||| ||| 0.0833333
+in [X][X] was [X] ||| in [X][X] zu beklagen gab , zählt [X] ||| 0.0278341 1 ||| ||| 0.0714286
+in [X][X] was Mr [X] ||| in [X][X] zu beklagen gab , zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 0.0357143
+in [X][X] was [X] ||| in [X][X] zu beklagen gab , zählt auch [X] ||| 0.0278341 1 ||| ||| 0.0625
+in [X][X] was [X] ||| in [X][X] zu beklagen gab [X] ||| 0.0278341 1 ||| ||| 0.1
+in [X][X] [X] ||| in [X][X] zählt [X] ||| 0.0278341 1 ||| ||| 0.0714286
+in [X][X] Mr [X] ||| in [X][X] zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 0.0357143
+in [X][X] [X] ||| in [X][X] zählt auch [X] ||| 0.0278341 1 ||| ||| 0.0625
+, [X][X] in America , [X] ||| in den Vereinigten Staaten , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.166667
+, [X][X] in America [X] ||| in den Vereinigten Staaten , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.166667
+, [X][X] in America [X][X] [X] ||| in den Vereinigten Staaten , [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142857
+, in Texas in America [X] ||| in den Vereinigten Staaten , in Texas [X] ||| 0.0278341 1 ||| ||| 0.166667
+in America [X] ||| in den Vereinigten Staaten [X] ||| 0.0278341 1 ||| ||| 1
+[X][X] in America , [X] ||| in den Vereinigten Staaten [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.166667
+[X][X] in America , for [X] ||| in den Vereinigten Staaten [X][X] , für [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] Texas in America , [X] ||| in den Vereinigten Staaten [X][X] Texas , [X] ||| 0.0278341 1 ||| ||| 0.166667
+[X][X] Texas in America [X] ||| in den Vereinigten Staaten [X][X] Texas [X] ||| 0.0278341 1 ||| ||| 0.166667
+[X][X] Texas in America [X][X] [X] ||| in den Vereinigten Staaten [X][X] Texas [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142857
+[X][X] in America [X] ||| in den Vereinigten Staaten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.166667
+Thursday [X][X] in America [X][X] [X] ||| in den Vereinigten Staaten [X][X] [X][X] Donnerstag [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] in America [X][X] [X] ||| in den Vereinigten Staaten [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142857
+in [X] ||| in den [X] ||| 0.0111336 1 ||| ||| 2.5
+in the [X] ||| in den [X] ||| 0.0111336 1 ||| ||| 2.5
+in the course of the [X] ||| in den [X] ||| 0.00556682 1 ||| ||| 2.5
+in the [X][X] European Union [X] ||| in den [X][X] Europäischen Union [X] ||| 0.0278341 1 ||| ||| 0.04
+in the [X][X] European [X] ||| in den [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.0526316
+in the [X][X] Union [X] ||| in den [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.04
+in the [X][X] [X] ||| in den [X][X] [X] ||| 0.0278341 1 ||| ||| 0.330727
+in the [X][X] of the [X] ||| in den [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0714286
+in the various countries [X] ||| in den verschiedenen Ländern [X] ||| 0.0278341 1 ||| ||| 0.166667
+in the various countries [X][X] [X] ||| in den verschiedenen Ländern [X][X] [X] ||| 0.0278341 1 ||| ||| 0.16406
+in the various [X] ||| in den verschiedenen [X] ||| 0.0278341 1 ||| ||| 0.333333
+in the various [X][X] European [X] ||| in den verschiedenen [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.0526316
+in the various [X][X] Union [X] ||| in den verschiedenen [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.04
+in the various [X][X] [X] ||| in den verschiedenen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.16406
+to write a letter [X] ||| in einem Schreiben [X] ||| 0.0167005 1 ||| ||| 0.833333
+to write a letter to [X] ||| in einem Schreiben [X] ||| 0.0111336 1 ||| ||| 0.833333
+to write a letter [X][X] [X] ||| in einem Schreiben [X][X] [X] ||| 0.0278341 1 ||| ||| 0.166667
+particularly those [X] ||| insbesondere [X] ||| 0.0278341 1 ||| ||| 1
+is [X] ||| ist , [X] ||| 0.0278341 1 ||| ||| 1
+[X][X] objection [X] ||| ist , [X][X] Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.25
+an objection [X] ||| ist , einen Einwand gegen [X] ||| 0.0222673 1 ||| ||| 1.25
+raise an objection [X] ||| ist , einen Einwand gegen [X] ||| 0.00556682 1 ||| ||| 1.25
+an [X] ||| ist , einen [X] ||| 0.013917 1 ||| ||| 2
+raise an [X] ||| ist , einen [X] ||| 0.013917 1 ||| ||| 2
+. [X] ||| ist . [X] ||| 0.0278341 1 ||| ||| 1
+is [X] ||| ist [X] ||| 0.777778 1 ||| ||| 9
+is a [X] ||| ist [X] ||| 0.00309268 1 ||| ||| 9
+which is [X] ||| ist [X] ||| 0.00309268 1 ||| ||| 9
+[X][X] , he is [X] ||| ist [X][X] , daß er [X] ||| 0.0278341 1 ||| ||| 0.111111
+is [X][X] . [X] ||| ist [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0344828
+is [X][X] Alexander Nikitin . [X] ||| ist [X][X] Alexander Nikitin . [X] ||| 0.0278341 1 ||| ||| 0.0344828
+is [X][X] Alexander Nikitin [X] ||| ist [X][X] Alexander Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0526316
+is [X][X] Alexander [X] ||| ist [X][X] Alexander [X] ||| 0.0278341 1 ||| ||| 0.0909091
+is [X][X] Alexander [X][X] [X] ||| ist [X][X] Alexander [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0344828
+[X][X] objection [X] ||| ist [X][X] Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.25
+is [X][X] Nikitin . [X] ||| ist [X][X] Nikitin . [X] ||| 0.0278341 1 ||| ||| 0.0344828
+is [X][X] Nikitin [X] ||| ist [X][X] Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0526316
+is [X][X] positions [X] ||| ist [X][X] Position [X] ||| 0.0278341 1 ||| ||| 0.0588235
+is [X][X] keeping with [X] ||| ist [X][X] Sinne [X] ||| 0.0278341 1 ||| ||| 0.125
+is [X][X] keeping with [X][X] [X] ||| ist [X][X] Sinne [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0588235
+is [X][X] keeping with the [X] ||| ist [X][X] Sinne der [X] ||| 0.0278341 1 ||| ||| 0.0833333
+[X][X] is [X] ||| ist [X][X] [X] ||| 0.00222555 1 ||| ||| 1.38962
+is [X][X] [X] ||| ist [X][X] [X] ||| 0.222115 1 ||| ||| 1.38962
+[X][X] he is [X] ||| ist [X][X] daß er [X] ||| 0.0278341 1 ||| ||| 0.111111
+is [X][X] the positions [X] ||| ist [X][X] der Position [X] ||| 0.0278341 1 ||| ||| 0.0588235
+is [X][X] the [X] ||| ist [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0833333
+[X][X] he is [X] ||| ist [X][X] er [X] ||| 0.0278341 1 ||| ||| 0.111111
+is [X][X] of Alexander Nikitin [X] ||| ist [X][X] von Alexander Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0526316
+is [X][X] of Alexander [X] ||| ist [X][X] von Alexander [X] ||| 0.0278341 1 ||| ||| 0.0909091
+is [X][X] of Alexander [X][X] [X] ||| ist [X][X] von Alexander [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0344828
+is [X][X] of [X] ||| ist [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.166667
+is [X][X] of [X][X] . [X] ||| ist [X][X] von [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0344828
+is [X][X] of [X][X] [X] ||| ist [X][X] von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0871143
+the [X] ||| ist auch der [X] ||| 0.0278341 1 ||| ||| 1
+is the case [X] ||| ist der Fall [X] ||| 0.0278341 1 ||| ||| 0.333333
+is the case [X][X] . [X] ||| ist der Fall [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0344828
+is the case [X][X] Nikitin [X] ||| ist der Fall [X][X] Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0526316
+is the case [X][X] [X] ||| ist der Fall [X][X] [X] ||| 0.0278341 1 ||| ||| 0.178023
+is the case of Alexander [X] ||| ist der Fall von Alexander [X] ||| 0.0278341 1 ||| ||| 0.0909091
+is the case of [X] ||| ist der Fall von [X] ||| 0.0278341 1 ||| ||| 0.166667
+is the case of [X][X] [X] ||| ist der Fall von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0871143
+is the [X] ||| ist der [X] ||| 0.0278341 1 ||| ||| 1
+is the [X][X] . [X] ||| ist der [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0344828
+is the [X][X] Alexander Nikitin [X] ||| ist der [X][X] Alexander Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0526316
+is the [X][X] Alexander [X] ||| ist der [X][X] Alexander [X] ||| 0.0278341 1 ||| ||| 0.0909091
+is the [X][X] Alexander [X][X] [X] ||| ist der [X][X] Alexander [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0344828
+is the [X][X] Nikitin . [X] ||| ist der [X][X] Nikitin . [X] ||| 0.0278341 1 ||| ||| 0.0344828
+is the [X][X] Nikitin [X] ||| ist der [X][X] Nikitin [X] ||| 0.0278341 1 ||| ||| 0.0526316
+is the [X][X] [X] ||| ist der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.34469
+, [X][X] is [X] ||| ist es [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111111
+, [X][X] he is [X] ||| ist es [X][X] daß er [X] ||| 0.0278341 1 ||| ||| 0.111111
+, [X][X] he is [X] ||| ist es [X][X] er [X] ||| 0.0278341 1 ||| ||| 0.111111
+, however , he is [X] ||| ist es aber so , daß er [X] ||| 0.0278341 1 ||| ||| 0.111111
+, however [X][X] is [X] ||| ist es aber so [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111111
+is quite [X] ||| ist ganz [X] ||| 0.0278341 1 ||| ||| 1
+is quite [X][X] positions [X] ||| ist ganz [X][X] Position [X] ||| 0.0278341 1 ||| ||| 0.0588235
+is quite [X][X] [X] ||| ist ganz [X][X] [X] ||| 0.0278341 1 ||| ||| 0.267157
+is quite [X][X] the positions [X] ||| ist ganz [X][X] der Position [X] ||| 0.0278341 1 ||| ||| 0.0588235
+is quite [X][X] the [X] ||| ist ganz [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0833333
+is quite in keeping with [X] ||| ist ganz im Sinne [X] ||| 0.0278341 1 ||| ||| 0.125
+is quite in [X] ||| ist ganz im [X] ||| 0.0278341 1 ||| ||| 0.333333
+is quite in [X][X] positions [X] ||| ist ganz im [X][X] Position [X] ||| 0.0278341 1 ||| ||| 0.0588235
+is quite in [X][X] [X] ||| ist ganz im [X][X] [X] ||| 0.0278341 1 ||| ||| 0.267157
+is quite in [X][X] the [X] ||| ist ganz im [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0833333
+yes , Mr Evans , [X] ||| ja , Herr Evans , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+yes , Mr Evans [X] ||| ja , Herr Evans [X] ||| 0.0278341 1 ||| ||| 0.166667
+yes , Mr Evans [X][X] [X] ||| ja , Herr Evans [X][X] [X] ||| 0.0278341 1 ||| ||| 0.112755
+yes , Mr [X] ||| ja , Herr [X] ||| 0.0278341 1 ||| ||| 0.333333
+yes , Mr [X][X] [X] ||| ja , Herr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.203664
+yes , Mr [X][X] feel [X] ||| ja , Herr [X][X] denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0344828
+yes , Mr [X][X] an [X] ||| ja , Herr [X][X] eine [X] ||| 0.0278341 1 ||| ||| 0.025641
+yes , Mr [X][X] I [X] ||| ja , Herr [X][X] ich [X] ||| 0.0278341 1 ||| ||| 0.0526316
+yes , [X] ||| ja , [X] ||| 0.0278341 1 ||| ||| 1
+yes , [X][X] , [X] ||| ja , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+yes , [X][X] , [X][X] [X] ||| ja , [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0601238
+yes , [X][X] , I [X] ||| ja , [X][X] , ich [X] ||| 0.0278341 1 ||| ||| 0.0526316
+yes , [X][X] [X] ||| ja , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.370331
+yes , [X][X] feel [X] ||| ja , [X][X] denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0344828
+yes , [X][X] feel an [X] ||| ja , [X][X] denke , daß eine [X] ||| 0.0278341 1 ||| ||| 0.025641
+yes , [X][X] an [X] ||| ja , [X][X] eine [X] ||| 0.0278341 1 ||| ||| 0.025641
+yes , [X][X] I [X] ||| ja , [X][X] ich [X] ||| 0.0278341 1 ||| ||| 0.0526316
+yes , [X][X] I [X][X] [X] ||| ja , [X][X] ich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.025641
+yes , [X][X] I feel [X] ||| ja , [X][X] ich denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0344828
+yes [X] ||| ja [X] ||| 0.0278341 1 ||| ||| 1
+yes [X][X] , [X] ||| ja [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+yes [X][X] , [X][X] [X] ||| ja [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0601238
+yes [X][X] , [X][X] an [X] ||| ja [X][X] , [X][X] eine [X] ||| 0.0278341 1 ||| ||| 0.025641
+yes [X][X] , I [X] ||| ja [X][X] , ich [X] ||| 0.0278341 1 ||| ||| 0.0526316
+yes [X][X] , I [X][X] [X] ||| ja [X][X] , ich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.025641
+yes [X][X] , I feel [X] ||| ja [X][X] , ich denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0344828
+yes [X][X] Evans , [X] ||| ja [X][X] Evans , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+yes [X][X] Evans , [X][X] [X] ||| ja [X][X] Evans , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0601238
+yes [X][X] Evans , I [X] ||| ja [X][X] Evans , ich [X] ||| 0.0278341 1 ||| ||| 0.0526316
+yes [X][X] Evans [X] ||| ja [X][X] Evans [X] ||| 0.0278341 1 ||| ||| 0.166667
+yes [X][X] Evans [X][X] [X] ||| ja [X][X] Evans [X][X] [X] ||| 0.0278341 1 ||| ||| 0.112755
+yes [X][X] Evans [X][X] feel [X] ||| ja [X][X] Evans [X][X] denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0344828
+yes [X][X] Evans [X][X] an [X] ||| ja [X][X] Evans [X][X] eine [X] ||| 0.0278341 1 ||| ||| 0.025641
+yes [X][X] [X] ||| ja [X][X] [X] ||| 0.0278341 1 ||| ||| 0.703664
+yes [X][X] feel [X] ||| ja [X][X] denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0344828
+yes [X][X] feel an [X] ||| ja [X][X] denke , daß eine [X] ||| 0.0278341 1 ||| ||| 0.025641
+yes [X][X] an [X] ||| ja [X][X] eine [X] ||| 0.0278341 1 ||| ||| 0.025641
+yes [X][X] I [X] ||| ja [X][X] ich [X] ||| 0.0278341 1 ||| ||| 0.0526316
+yes [X][X] I [X][X] [X] ||| ja [X][X] ich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.025641
+yes [X][X] I feel [X] ||| ja [X][X] ich denke , daß [X] ||| 0.0278341 1 ||| ||| 0.0344828
+yes [X][X] I feel an [X] ||| ja [X][X] ich denke , daß eine [X] ||| 0.0278341 1 ||| ||| 0.025641
+young 34 year-old man who [X] ||| jungen Mannes [X] ||| 0.0278341 1 ||| ||| 0.166667
+young 34 [X] ||| jungen [X] ||| 0.00927803 1 ||| ||| 3
+young 34 year-old [X] ||| jungen [X] ||| 0.00927803 1 ||| ||| 3
+young [X] ||| jungen [X] ||| 0.00927803 1 ||| ||| 3
+young 34 [X][X] [X] ||| jungen [X][X] [X] ||| 0.00927803 1 ||| ||| 0.500001
+young 34 year-old [X][X] [X] ||| jungen [X][X] [X] ||| 0.00927803 1 ||| ||| 0.500001
+young [X][X] [X] ||| jungen [X][X] [X] ||| 0.00927803 1 ||| ||| 0.500001
+legal case [X] ||| juristischer Fall [X] ||| 0.0278341 1 ||| ||| 1
+legal [X] ||| juristischer [X] ||| 0.0278341 1 ||| ||| 1
+annually [X] ||| jährlich [X] ||| 0.0278341 1 ||| ||| 1
+recently [X] ||| jüngster Zeit [X] ||| 0.0278341 1 ||| ||| 1
+recently [X][X] [X] ||| jüngster Zeit [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.047619
+recently [X][X] [X] ||| jüngster Zeit [X][X] , zählt [X] ||| 0.0278341 1 ||| ||| 0.04
+recently [X][X] Lanka [X] ||| jüngster Zeit [X][X] Lanka [X] ||| 0.0278341 1 ||| ||| 0.166667
+recently [X][X] Lanka [X] ||| jüngster Zeit [X][X] Lanka zu [X] ||| 0.0278341 1 ||| ||| 0.125
+recently [X][X] Lanka [X] ||| jüngster Zeit [X][X] Lanka zu beklagen [X] ||| 0.0278341 1 ||| ||| 0.1
+recently [X][X] Lanka was [X] ||| jüngster Zeit [X][X] Lanka zu beklagen gab , [X] ||| 0.0278341 1 ||| ||| 0.047619
+recently [X][X] Lanka was [X] ||| jüngster Zeit [X][X] Lanka zu beklagen gab , zählt [X] ||| 0.0278341 1 ||| ||| 0.04
+recently [X][X] Lanka was [X] ||| jüngster Zeit [X][X] Lanka zu beklagen gab [X] ||| 0.0278341 1 ||| ||| 0.0588235
+recently [X][X] [X] ||| jüngster Zeit [X][X] [X] ||| 0.0278341 1 ||| ||| 0.871443
+recently [X][X] [X] ||| jüngster Zeit [X][X] beklagen [X] ||| 0.0278341 1 ||| ||| 0.1
+recently [X][X] was [X] ||| jüngster Zeit [X][X] beklagen gab , [X] ||| 0.0278341 1 ||| ||| 0.047619
+recently [X][X] was [X] ||| jüngster Zeit [X][X] beklagen gab , zählt [X] ||| 0.0278341 1 ||| ||| 0.04
+recently [X][X] was [X] ||| jüngster Zeit [X][X] beklagen gab [X] ||| 0.0278341 1 ||| ||| 0.0588235
+recently [X][X] was [X] ||| jüngster Zeit [X][X] gab , [X] ||| 0.0278341 1 ||| ||| 0.047619
+recently [X][X] was [X] ||| jüngster Zeit [X][X] gab , zählt [X] ||| 0.0278341 1 ||| ||| 0.04
+recently [X][X] was [X] ||| jüngster Zeit [X][X] gab [X] ||| 0.0278341 1 ||| ||| 0.0588235
+recently [X][X] [X] ||| jüngster Zeit [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.125
+recently [X][X] [X] ||| jüngster Zeit [X][X] zu beklagen [X] ||| 0.0278341 1 ||| ||| 0.1
+recently [X][X] was [X] ||| jüngster Zeit [X][X] zu beklagen gab , [X] ||| 0.0278341 1 ||| ||| 0.047619
+recently [X][X] was [X] ||| jüngster Zeit [X][X] zu beklagen gab , zählt [X] ||| 0.0278341 1 ||| ||| 0.04
+recently [X][X] was [X] ||| jüngster Zeit [X][X] zu beklagen gab [X] ||| 0.0278341 1 ||| ||| 0.0588235
+recently [X][X] [X] ||| jüngster Zeit [X][X] zählt [X] ||| 0.0278341 1 ||| ||| 0.04
+recently in Sri Lanka [X] ||| jüngster Zeit in Sri Lanka [X] ||| 0.0278341 1 ||| ||| 0.166667
+recently in Sri Lanka [X] ||| jüngster Zeit in Sri Lanka zu [X] ||| 0.0278341 1 ||| ||| 0.125
+recently in Sri Lanka [X] ||| jüngster Zeit in Sri Lanka zu beklagen [X] ||| 0.0278341 1 ||| ||| 0.1
+recently in Sri Lanka was [X] ||| jüngster Zeit in Sri Lanka zu beklagen gab , [X] ||| 0.0278341 1 ||| ||| 0.047619
+recently in Sri Lanka was [X] ||| jüngster Zeit in Sri Lanka zu beklagen gab , zählt [X] ||| 0.0278341 1 ||| ||| 0.04
+recently in Sri Lanka was [X] ||| jüngster Zeit in Sri Lanka zu beklagen gab [X] ||| 0.0278341 1 ||| ||| 0.0588235
+recently in Sri [X] ||| jüngster Zeit in Sri [X] ||| 0.0278341 1 ||| ||| 0.333333
+recently in Sri [X][X] [X] ||| jüngster Zeit in Sri [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.047619
+recently in Sri [X][X] [X] ||| jüngster Zeit in Sri [X][X] , zählt [X] ||| 0.0278341 1 ||| ||| 0.04
+recently in Sri [X][X] [X] ||| jüngster Zeit in Sri [X][X] [X] ||| 0.0278341 1 ||| ||| 0.146443
+recently in Sri [X][X] [X] ||| jüngster Zeit in Sri [X][X] zählt [X] ||| 0.0278341 1 ||| ||| 0.04
+recently in [X] ||| jüngster Zeit in [X] ||| 0.0278341 1 ||| ||| 1
+recently in [X][X] [X] ||| jüngster Zeit in [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.047619
+recently in [X][X] [X] ||| jüngster Zeit in [X][X] , zählt [X] ||| 0.0278341 1 ||| ||| 0.04
+recently in [X][X] [X] ||| jüngster Zeit in [X][X] [X] ||| 0.0278341 1 ||| ||| 0.538109
+recently in [X][X] [X] ||| jüngster Zeit in [X][X] beklagen [X] ||| 0.0278341 1 ||| ||| 0.1
+recently in [X][X] was [X] ||| jüngster Zeit in [X][X] beklagen gab , [X] ||| 0.0278341 1 ||| ||| 0.047619
+recently in [X][X] was [X] ||| jüngster Zeit in [X][X] beklagen gab , zählt [X] ||| 0.0278341 1 ||| ||| 0.04
+recently in [X][X] was [X] ||| jüngster Zeit in [X][X] beklagen gab [X] ||| 0.0278341 1 ||| ||| 0.0588235
+recently in [X][X] was [X] ||| jüngster Zeit in [X][X] gab , [X] ||| 0.0278341 1 ||| ||| 0.047619
+recently in [X][X] was [X] ||| jüngster Zeit in [X][X] gab , zählt [X] ||| 0.0278341 1 ||| ||| 0.04
+recently in [X][X] was [X] ||| jüngster Zeit in [X][X] gab [X] ||| 0.0278341 1 ||| ||| 0.0588235
+recently in [X][X] [X] ||| jüngster Zeit in [X][X] zu [X] ||| 0.0278341 1 ||| ||| 0.125
+recently in [X][X] [X] ||| jüngster Zeit in [X][X] zu beklagen [X] ||| 0.0278341 1 ||| ||| 0.1
+recently in [X][X] was [X] ||| jüngster Zeit in [X][X] zu beklagen gab , [X] ||| 0.0278341 1 ||| ||| 0.047619
+recently in [X][X] was [X] ||| jüngster Zeit in [X][X] zu beklagen gab , zählt [X] ||| 0.0278341 1 ||| ||| 0.04
+recently in [X][X] was [X] ||| jüngster Zeit in [X][X] zu beklagen gab [X] ||| 0.0278341 1 ||| ||| 0.0588235
+recently in [X][X] [X] ||| jüngster Zeit in [X][X] zählt [X] ||| 0.0278341 1 ||| ||| 0.04
+not a legislative proposal [X] ||| keinen Legislativvorschlag [X] ||| 0.0278341 1 ||| ||| 0.333333
+not a [X] ||| keinen [X] ||| 0.0278341 1 ||| ||| 1
+not a [X][X] [X] ||| keinen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.333333
+come up [X] ||| kommen [X] ||| 0.0278341 1 ||| ||| 1
+will come up [X] ||| kommen wird [X] ||| 0.0278341 1 ||| ||| 0.5
+a constitutional right [X] ||| konstitutionelles Recht [X] ||| 0.00927803 1 ||| ||| 1.5
+constitutional right [X] ||| konstitutionelles Recht [X] ||| 0.0185561 1 ||| ||| 1.5
+[X][X] constitutional right . [X] ||| konstitutionelles Recht [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.166667
+[X][X] constitutional right [X] ||| konstitutionelles Recht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+is a constitutional right . [X] ||| konstitutionelles Recht ist . [X] ||| 0.0278341 1 ||| ||| 0.166667
+is a constitutional right [X] ||| konstitutionelles Recht ist [X] ||| 0.0278341 1 ||| ||| 0.2
+a constitutional [X] ||| konstitutionelles [X] ||| 0.013917 1 ||| ||| 2
+constitutional [X] ||| konstitutionelles [X] ||| 0.013917 1 ||| ||| 2
+you may , [X] ||| können Sie , [X] ||| 0.0278341 1 ||| ||| 0.5
+you may , [X][X] , [X] ||| können Sie , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.047619
+you may , [X][X] [X] ||| können Sie , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.285714
+you may , [X][X] wish [X] ||| können Sie , [X][X] wollen [X] ||| 0.0278341 1 ||| ||| 0.0714286
+you may , if you [X] ||| können Sie , wenn Sie [X] ||| 0.0278341 1 ||| ||| 0.125
+you may , if [X] ||| können Sie , wenn [X] ||| 0.0278341 1 ||| ||| 0.25
+you may , if [X][X] [X] ||| können Sie , wenn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.160714
+you may [X] ||| können Sie [X] ||| 0.0278341 1 ||| ||| 1
+you may [X][X] , [X] ||| können Sie [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.047619
+you may [X][X] , [X][X] [X] ||| können Sie [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0416667
+you may [X][X] you [X] ||| können Sie [X][X] Sie [X] ||| 0.0278341 1 ||| ||| 0.125
+you may [X][X] you [X][X] [X] ||| können Sie [X][X] Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0892857
+you may [X][X] you wish [X] ||| können Sie [X][X] Sie wollen [X] ||| 0.0278341 1 ||| ||| 0.0714286
+you may [X][X] [X] ||| können Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.535714
+you may [X][X] raise [X][X] [X] ||| können Sie [X][X] [X][X] ansprechen [X] ||| 0.0278341 1 ||| ||| 0.0416667
+you may [X][X] wish , [X] ||| können Sie [X][X] wollen , [X] ||| 0.0278341 1 ||| ||| 0.047619
+you may [X][X] wish [X] ||| können Sie [X][X] wollen [X] ||| 0.0278341 1 ||| ||| 0.0714286
+you may [X][X] wish [X][X] [X] ||| können Sie [X][X] wollen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0416667
+may [X] ||| können [X] ||| 0.0278341 1 ||| ||| 1
+I would like your [X] ||| könnten Sie mir [X] ||| 0.0278341 1 ||| ||| 1
+I would like your [X][X] [X] ||| könnten Sie mir [X][X] [X] ||| 0.0278341 1 ||| ||| 0.396429
+I would like your advice [X] ||| könnten Sie mir eine Auskunft [X] ||| 0.0278341 1 ||| ||| 0.333333
+I would like your [X] ||| könnten Sie mir eine [X] ||| 0.0278341 1 ||| ||| 1
+I would like your [X][X] [X] ||| könnten Sie mir eine [X][X] [X] ||| 0.0278341 1 ||| ||| 0.396429
+would [X] ||| könnten [X] ||| 0.0278341 1 ||| ||| 1
+merely [X] ||| lediglich um [X] ||| 0.0278341 1 ||| ||| 1
+merely [X][X] legislative proposal [X] ||| lediglich um [X][X] Legislativvorschlag [X] ||| 0.0278341 1 ||| ||| 0.0588235
+merely [X][X] [X] ||| lediglich um [X][X] [X] ||| 0.0278341 1 ||| ||| 0.630252
+merely [X][X] not a [X] ||| lediglich um [X][X] keinen [X] ||| 0.0278341 1 ||| ||| 0.0714286
+merely [X][X] not a [X][X] [X] ||| lediglich um [X][X] keinen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0588235
+merely [X][X] , [X] ||| lediglich um [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.166667
+merely [X][X] , [X][X] [X] ||| lediglich um [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.130252
+merely [X][X] , not a [X] ||| lediglich um [X][X] und keinen [X] ||| 0.0278341 1 ||| ||| 0.0714286
+merely a report [X] ||| lediglich um einen Bericht [X] ||| 0.0278341 1 ||| ||| 0.333333
+merely a report [X][X] [X] ||| lediglich um einen Bericht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.130252
+merely a report , [X] ||| lediglich um einen Bericht und [X] ||| 0.0278341 1 ||| ||| 0.166667
+merely a report , [X][X] [X] ||| lediglich um einen Bericht und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.130252
+merely a [X] ||| lediglich um einen [X] ||| 0.0278341 1 ||| ||| 1
+merely a [X][X] legislative proposal [X] ||| lediglich um einen [X][X] Legislativvorschlag [X] ||| 0.0278341 1 ||| ||| 0.0588235
+merely a [X][X] [X] ||| lediglich um einen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.296919
+merely a [X][X] not a [X] ||| lediglich um einen [X][X] keinen [X] ||| 0.0278341 1 ||| ||| 0.0714286
+, unfortunately [X] ||| leider [X] ||| 0.00695852 1 ||| ||| 4
+been set , unfortunately [X] ||| leider [X] ||| 0.00695852 1 ||| ||| 4
+has been set , unfortunately [X] ||| leider [X] ||| 0.00695852 1 ||| ||| 4
+set , unfortunately [X] ||| leider [X] ||| 0.00695852 1 ||| ||| 4
+, unfortunately [X][X] [X] ||| leider [X][X] [X] ||| 0.010946 1 ||| ||| 1.48333
+been set , unfortunately [X][X] [X] ||| leider [X][X] [X] ||| 0.00844405 1 ||| ||| 1.48333
+set , unfortunately [X][X] [X] ||| leider [X][X] [X] ||| 0.00844405 1 ||| ||| 1.48333
+, unfortunately [X][X] [X] ||| leider [X][X] zusammen [X] ||| 0.0107054 1 ||| ||| 0.65
+been set , unfortunately [X][X] [X] ||| leider [X][X] zusammen [X] ||| 0.00856434 1 ||| ||| 0.65
+set , unfortunately [X][X] [X] ||| leider [X][X] zusammen [X] ||| 0.00856434 1 ||| ||| 0.65
+, unfortunately for [X] ||| leider damit [X] ||| 0.00835023 1 ||| ||| 1.66667
+, unfortunately for next [X] ||| leider damit [X] ||| 0.00556682 1 ||| ||| 1.66667
+been set , unfortunately for [X] ||| leider damit [X] ||| 0.00417512 1 ||| ||| 1.66667
+set , unfortunately for [X] ||| leider damit [X] ||| 0.00556682 1 ||| ||| 1.66667
+set , unfortunately for next [X] ||| leider damit [X] ||| 0.00417512 1 ||| ||| 1.66667
+, unfortunately for [X] ||| leider damit zusammen [X] ||| 0.00907634 1 ||| ||| 1.53333
+, unfortunately for next [X] ||| leider damit zusammen [X] ||| 0.00453817 1 ||| ||| 1.53333
+been set , unfortunately for [X] ||| leider damit zusammen [X] ||| 0.00453817 1 ||| ||| 1.53333
+set , unfortunately for [X] ||| leider damit zusammen [X] ||| 0.00605089 1 ||| ||| 1.53333
+set , unfortunately for next [X] ||| leider damit zusammen [X] ||| 0.00363054 1 ||| ||| 1.53333
+last plenary part-session [X] ||| letzten Plenartagung [X] ||| 0.0278341 1 ||| ||| 0.5
+last [X] ||| letzten [X] ||| 0.0278341 1 ||| ||| 1
+last [X][X] [X] ||| letzten [X][X] [X] ||| 0.241419 1 ||| ||| 1.09156
+make [X] ||| machen [X] ||| 0.013917 1 ||| ||| 2
+make representations [X] ||| machen [X] ||| 0.013917 1 ||| ||| 2
+a number [X] ||| mehrere [X] ||| 0.013917 1 ||| ||| 2
+a number of [X] ||| mehrere [X] ||| 0.013917 1 ||| ||| 2
+a number [X][X] killings [X] ||| mehrere [X][X] Toten [X] ||| 0.013917 1 ||| ||| 0.285714
+a number of [X][X] killings [X] ||| mehrere [X][X] Toten [X] ||| 0.013917 1 ||| ||| 0.285714
+a number [X][X] [X] ||| mehrere [X][X] [X] ||| 0.013917 1 ||| ||| 0.785714
+a number of [X][X] [X] ||| mehrere [X][X] [X] ||| 0.013917 1 ||| ||| 0.785714
+multiannual guidance programmes [X] ||| mehrjährige Ausrichtungsprogramme [X] ||| 0.0167005 1 ||| ||| 0.833333
+multiannual guidance programmes comes [X] ||| mehrjährige Ausrichtungsprogramme [X] ||| 0.0111336 1 ||| ||| 0.833333
+multiannual guidance programmes [X][X] [X] ||| mehrjährige Ausrichtungsprogramme [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.111111
+multiannual guidance programmes [X][X] [X] ||| mehrjährige Ausrichtungsprogramme [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0909091
+multiannual guidance programmes [X][X] [X] ||| mehrjährige Ausrichtungsprogramme [X][X] [X] ||| 0.0278341 1 ||| ||| 0.344877
+multiannual guidance programmes [X][X] [X] ||| mehrjährige Ausrichtungsprogramme [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0909091
+multiannual guidance programmes comes before [X] ||| mehrjährige Ausrichtungsprogramme befassen , [X] ||| 0.0278341 1 ||| ||| 0.111111
+multiannual guidance programmes comes before [X] ||| mehrjährige Ausrichtungsprogramme befassen , der [X] ||| 0.0278341 1 ||| ||| 0.0909091
+multiannual guidance programmes comes before [X] ||| mehrjährige Ausrichtungsprogramme befassen [X] ||| 0.0278341 1 ||| ||| 0.142857
+multiannual [X] ||| mehrjährige [X] ||| 0.0278341 1 ||| ||| 1
+multiannual [X][X] [X] ||| mehrjährige [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.111111
+multiannual [X][X] [X] ||| mehrjährige [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0909091
+multiannual [X][X] [X] ||| mehrjährige [X][X] [X] ||| 0.18818 1 ||| ||| 1.51154
+multiannual [X][X] comes [X] ||| mehrjährige [X][X] [X] ||| 0.00613811 1 ||| ||| 1.51154
+multiannual [X][X] before [X] ||| mehrjährige [X][X] befassen , [X] ||| 0.013917 1 ||| ||| 0.222222
+multiannual [X][X] comes before [X] ||| mehrjährige [X][X] befassen , [X] ||| 0.013917 1 ||| ||| 0.222222
+multiannual [X][X] before [X] ||| mehrjährige [X][X] befassen , der [X] ||| 0.013917 1 ||| ||| 0.181818
+multiannual [X][X] comes before [X] ||| mehrjährige [X][X] befassen , der [X] ||| 0.013917 1 ||| ||| 0.181818
+multiannual [X][X] before [X] ||| mehrjährige [X][X] befassen [X] ||| 0.013917 1 ||| ||| 0.285714
+multiannual [X][X] comes before [X] ||| mehrjährige [X][X] befassen [X] ||| 0.013917 1 ||| ||| 0.285714
+multiannual [X][X] [X] ||| mehrjährige [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0909091
+believe that [X] ||| meine , daß [X] ||| 0.0278341 1 ||| ||| 1
+believe that [X][X] stability [X] ||| meine , daß [X][X] Stabilität [X] ||| 0.0157865 1 ||| ||| 0.0607986
+believe that [X][X] stability is [X] ||| meine , daß [X][X] Stabilität [X] ||| 0.0120476 1 ||| ||| 0.0607986
+believe that [X][X] stability [X][X] [X] ||| meine , daß [X][X] Stabilität [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0376495
+believe that [X][X] [X] ||| meine , daß [X][X] [X] ||| 0.0261501 1 ||| ||| 0.434971
+believe that [X][X] is [X] ||| meine , daß [X][X] [X] ||| 0.00168397 1 ||| ||| 0.434971
+believe that [X][X] is [X][X] [X] ||| meine , daß [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0172414
+believe that [X][X] of [X] ||| meine , daß [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0909091
+believe that [X][X] of [X][X] [X] ||| meine , daß [X][X] der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0984481
+believe that [X][X] of relative [X] ||| meine , daß [X][X] der relativen [X] ||| 0.0278341 1 ||| ||| 0.0526316
+believe that [X][X] a [X] ||| meine , daß [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.0408164
+believe that [X][X] is a [X] ||| meine , daß [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.0408164
+believe that [X][X] a fundamental [X] ||| meine , daß [X][X] einen elementaren [X] ||| 0.0278341 1 ||| ||| 0.0172414
+believe that [X][X] fundamental [X] ||| meine , daß [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0172414
+believe that [X][X] relative stability [X] ||| meine , daß [X][X] relativen Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0344828
+believe that [X][X] relative [X] ||| meine , daß [X][X] relativen [X] ||| 0.0278341 1 ||| ||| 0.0526316
+believe that [X][X] relative [X][X] [X] ||| meine , daß [X][X] relativen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0639653
+believe that the principle [X] ||| meine , daß der Grundsatz [X] ||| 0.0278341 1 ||| ||| 0.166667
+believe that the principle [X][X] [X] ||| meine , daß der Grundsatz [X][X] [X] ||| 0.0278341 1 ||| ||| 0.15108
+believe that the principle of [X] ||| meine , daß der Grundsatz der [X] ||| 0.0278341 1 ||| ||| 0.0909091
+believe that the [X] ||| meine , daß der [X] ||| 0.0278341 1 ||| ||| 0.333333
+believe that the [X][X] stability [X] ||| meine , daß der [X][X] Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0344828
+believe that the [X][X] [X] ||| meine , daß der [X][X] [X] ||| 0.0251041 1 ||| ||| 0.268305
+believe that the [X][X] is [X] ||| meine , daß der [X][X] [X] ||| 0.00273002 1 ||| ||| 0.268305
+believe that the [X][X] a [X] ||| meine , daß der [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0204082
+believe that the [X][X] fundamental [X] ||| meine , daß der [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0172414
+believe that the [X][X] relative [X] ||| meine , daß der [X][X] relativen [X] ||| 0.0278341 1 ||| ||| 0.0526316
+my question [X] ||| meine Frage [X] ||| 0.0278341 1 ||| ||| 1
+my question [X][X] that [X] ||| meine Frage [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.0555556
+my question [X][X] [X] ||| meine Frage [X][X] [X] ||| 0.0278341 1 ||| ||| 0.346465
+my question [X][X] something that [X] ||| meine Frage [X][X] eine Angelegenheit , die [X] ||| 0.0278341 1 ||| ||| 0.0555556
+my question [X][X] something [X] ||| meine Frage [X][X] eine Angelegenheit [X] ||| 0.0278341 1 ||| ||| 0.0909091
+my question relates [X] ||| meine Frage betrifft [X] ||| 0.0173963 1 ||| ||| 0.533333
+my question relates to [X] ||| meine Frage betrifft [X] ||| 0.0104378 1 ||| ||| 0.533333
+my question relates [X][X] that [X] ||| meine Frage betrifft [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.0555556
+my question relates [X][X] [X] ||| meine Frage betrifft [X][X] [X] ||| 0.0201797 1 ||| ||| 0.202021
+my question relates to [X][X] [X] ||| meine Frage betrifft [X][X] [X] ||| 0.00765437 1 ||| ||| 0.202021
+my question relates to something [X] ||| meine Frage betrifft eine Angelegenheit [X] ||| 0.0278341 1 ||| ||| 0.0909091
+believe [X] ||| meine [X] ||| 0.013917 1 ||| ||| 2
+my [X] ||| meine [X] ||| 0.013917 1 ||| ||| 2
+my [X][X] that [X] ||| meine [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.0555556
+believe [X][X] principle [X] ||| meine [X][X] Grundsatz [X] ||| 0.0278341 1 ||| ||| 0.166667
+believe [X][X] principle [X][X] stability [X] ||| meine [X][X] Grundsatz [X][X] Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0344828
+believe [X][X] principle [X][X] [X] ||| meine [X][X] Grundsatz [X][X] [X] ||| 0.023705 1 ||| ||| 0.177396
+believe [X][X] principle [X][X] is [X] ||| meine [X][X] Grundsatz [X][X] [X] ||| 0.00412905 1 ||| ||| 0.177396
+believe [X][X] principle [X][X] a [X] ||| meine [X][X] Grundsatz [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0204082
+believe [X][X] principle [X][X] fundamental [X] ||| meine [X][X] Grundsatz [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0172414
+believe [X][X] principle of [X] ||| meine [X][X] Grundsatz der [X] ||| 0.0278341 1 ||| ||| 0.0909091
+believe [X][X] principle of [X][X] [X] ||| meine [X][X] Grundsatz der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0984481
+believe [X][X] principle of relative [X] ||| meine [X][X] Grundsatz der relativen [X] ||| 0.0278341 1 ||| ||| 0.0526316
+believe [X][X] stability [X] ||| meine [X][X] Stabilität [X] ||| 0.0157865 1 ||| ||| 0.0607986
+believe [X][X] stability is [X] ||| meine [X][X] Stabilität [X] ||| 0.0120476 1 ||| ||| 0.0607986
+believe [X][X] stability [X][X] [X] ||| meine [X][X] Stabilität [X][X] [X] ||| 0.0190913 1 ||| ||| 0.0548909
+believe [X][X] stability is [X][X] [X] ||| meine [X][X] Stabilität [X][X] [X] ||| 0.00874278 1 ||| ||| 0.0548909
+believe [X][X] stability [X][X] fundamental [X] ||| meine [X][X] Stabilität [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0172414
+believe [X][X] stability is a [X] ||| meine [X][X] Stabilität einen [X] ||| 0.0278341 1 ||| ||| 0.0204082
+believe [X][X] [X] ||| meine [X][X] [X] ||| 0.0125311 1 ||| ||| 1.6481
+believe [X][X] is [X] ||| meine [X][X] [X] ||| 0.000444436 1 ||| ||| 1.6481
+my [X][X] [X] ||| meine [X][X] [X] ||| 0.0114808 1 ||| ||| 1.6481
+my [X][X] to [X] ||| meine [X][X] [X] ||| 0.00337771 1 ||| ||| 1.6481
+believe [X][X] is [X][X] [X] ||| meine [X][X] [X][X] [X] ||| 0.00659229 1 ||| ||| 0.072797
+my [X][X] to [X][X] [X] ||| meine [X][X] [X][X] [X] ||| 0.0212418 1 ||| ||| 0.072797
+believe [X][X] of [X] ||| meine [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0909091
+believe [X][X] of [X][X] [X] ||| meine [X][X] der [X][X] [X] ||| 0.0219632 1 ||| ||| 0.124764
+believe [X][X] of [X][X] is [X] ||| meine [X][X] der [X][X] [X] ||| 0.0058709 1 ||| ||| 0.124764
+believe [X][X] of [X][X] a [X] ||| meine [X][X] der [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0204082
+believe [X][X] of [X][X] fundamental [X] ||| meine [X][X] der [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0172414
+believe [X][X] of relative stability [X] ||| meine [X][X] der relativen Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0344828
+believe [X][X] of relative [X] ||| meine [X][X] der relativen [X] ||| 0.0278341 1 ||| ||| 0.0526316
+believe [X][X] of relative [X][X] [X] ||| meine [X][X] der relativen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0639653
+my [X][X] something that [X] ||| meine [X][X] eine Angelegenheit , die [X] ||| 0.013917 1 ||| ||| 0.111111
+my [X][X] to something that [X] ||| meine [X][X] eine Angelegenheit , die [X] ||| 0.013917 1 ||| ||| 0.111111
+my [X][X] something [X] ||| meine [X][X] eine Angelegenheit [X] ||| 0.013917 1 ||| ||| 0.181818
+my [X][X] to something [X] ||| meine [X][X] eine Angelegenheit [X] ||| 0.013917 1 ||| ||| 0.181818
+believe [X][X] a [X] ||| meine [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.0408164
+believe [X][X] is a [X] ||| meine [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.0408164
+believe [X][X] a fundamental [X] ||| meine [X][X] einen elementaren [X] ||| 0.013917 1 ||| ||| 0.0344828
+believe [X][X] is a fundamental [X] ||| meine [X][X] einen elementaren [X] ||| 0.013917 1 ||| ||| 0.0344828
+believe [X][X] fundamental [X] ||| meine [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0172414
+believe [X][X] relative stability [X] ||| meine [X][X] relativen Stabilität [X] ||| 0.0157865 1 ||| ||| 0.0607986
+believe [X][X] relative stability is [X] ||| meine [X][X] relativen Stabilität [X] ||| 0.0120476 1 ||| ||| 0.0607986
+believe [X][X] relative stability [X][X] [X] ||| meine [X][X] relativen Stabilität [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0376495
+believe [X][X] relative [X] ||| meine [X][X] relativen [X] ||| 0.0278341 1 ||| ||| 0.0526316
+believe [X][X] relative [X][X] [X] ||| meine [X][X] relativen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0639653
+believe [X][X] relative [X][X] a [X] ||| meine [X][X] relativen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0204082
+believe [X][X] relative [X][X] fundamental [X] ||| meine [X][X] relativen [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.0172414
+myself [X] ||| mir selbst , [X] ||| 0.0278341 1 ||| ||| 1
+myself [X] ||| mir selbst [X] ||| 0.0278341 1 ||| ||| 1
+and [X] ||| mit [X] ||| 0.00695852 1 ||| ||| 4
+and contains [X] ||| mit [X] ||| 0.00695852 1 ||| ||| 4
+in [X] ||| mit [X] ||| 0.00695852 1 ||| ||| 4
+introduced [X] ||| mit [X] ||| 0.00695852 1 ||| ||| 4
+in [X][X] . [X] ||| mit [X][X] . [X] ||| 0.00927803 1 ||| ||| 0.076923
+in [X][X] an interest . [X] ||| mit [X][X] . [X] ||| 0.00927803 1 ||| ||| 0.076923
+in [X][X] interest . [X] ||| mit [X][X] . [X] ||| 0.00927803 1 ||| ||| 0.076923
+in [X][X] Parliament [X] ||| mit [X][X] Parlament [X] ||| 0.0278341 1 ||| ||| 0.125
+in [X][X] Parliament [X][X] . [X] ||| mit [X][X] Parlament [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.025641
+in [X][X] Parliament [X][X] [X] ||| mit [X][X] Parlament [X][X] [X] ||| 0.0193243 1 ||| ||| 0.182984
+in [X][X] Parliament [X][X] an [X] ||| mit [X][X] Parlament [X][X] [X] ||| 0.00460946 1 ||| ||| 0.182984
+in [X][X] Parliament [X][X] interest [X] ||| mit [X][X] Parlament [X][X] [X] ||| 0.00390031 1 ||| ||| 0.182984
+in [X][X] Parliament has [X][X] [X] ||| mit [X][X] Parlament [X][X] hat [X] ||| 0.0278341 1 ||| ||| 0.101399
+[X][X] quota penalties [X][X] introduced [X] ||| mit [X][X] Quotenstrafe belegt [X][X] [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] introduced [X] ||| mit [X][X] [X] ||| 0.00490988 1 ||| ||| 0.708625
+in [X][X] [X] ||| mit [X][X] [X] ||| 0.0197196 1 ||| ||| 0.708625
+in [X][X] an [X] ||| mit [X][X] [X] ||| 0.00119027 1 ||| ||| 0.708625
+in [X][X] an interest [X] ||| mit [X][X] [X] ||| 0.00100715 1 ||| ||| 0.708625
+in [X][X] interest [X] ||| mit [X][X] [X] ||| 0.00100715 1 ||| ||| 0.708625
+[X][X] of [X][X] introduced [X] ||| mit [X][X] [X][X] [X] ||| 0.0230964 1 ||| ||| 0.150641
+in [X][X] an [X][X] [X] ||| mit [X][X] [X][X] [X] ||| 0.00473772 1 ||| ||| 0.150641
+in [X][X] has [X][X] . [X] ||| mit [X][X] [X][X] hat . [X] ||| 0.0278341 1 ||| ||| 0.025641
+in [X][X] has [X][X] [X] ||| mit [X][X] [X][X] hat [X] ||| 0.0179376 1 ||| ||| 0.157343
+in [X][X] has [X][X] an [X] ||| mit [X][X] [X][X] hat [X] ||| 0.00536062 1 ||| ||| 0.157343
+in [X][X] has [X][X] interest [X] ||| mit [X][X] [X][X] hat [X] ||| 0.00453591 1 ||| ||| 0.157343
+in [X][X] has consistently shown [X] ||| mit [X][X] immer wieder befaßt hat [X] ||| 0.0278341 1 ||| ||| 0.0454545
+[X][X] should be introduced [X] ||| mit [X][X] werden sollen [X] ||| 0.0278341 1 ||| ||| 0.125
+in which [X] ||| mit dem [X] ||| 0.0278341 1 ||| ||| 1
+in which [X][X] . [X] ||| mit dem [X][X] . [X] ||| 0.013917 1 ||| ||| 0.051282
+in which [X][X] interest . [X] ||| mit dem [X][X] . [X] ||| 0.013917 1 ||| ||| 0.051282
+in which [X][X] [X] ||| mit dem [X][X] [X] ||| 0.0210275 1 ||| ||| 0.333625
+in which [X][X] an [X] ||| mit dem [X][X] [X] ||| 0.00252816 1 ||| ||| 0.333625
+in which [X][X] an interest [X] ||| mit dem [X][X] [X] ||| 0.00213921 1 ||| ||| 0.333625
+in which [X][X] interest [X] ||| mit dem [X][X] [X] ||| 0.00213921 1 ||| ||| 0.333625
+in which [X][X] an [X][X] [X] ||| mit dem [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.025641
+in which [X][X] has [X][X] [X] ||| mit dem [X][X] [X][X] hat [X] ||| 0.0278341 1 ||| ||| 0.101399
+in which [X] ||| mit dem sich [X] ||| 0.0278341 1 ||| ||| 1
+in which [X][X] . [X] ||| mit dem sich [X][X] . [X] ||| 0.013917 1 ||| ||| 0.051282
+in which [X][X] interest . [X] ||| mit dem sich [X][X] . [X] ||| 0.013917 1 ||| ||| 0.051282
+in which [X][X] [X] ||| mit dem sich [X][X] [X] ||| 0.0210275 1 ||| ||| 0.333625
+in which [X][X] an [X] ||| mit dem sich [X][X] [X] ||| 0.00252816 1 ||| ||| 0.333625
+in which [X][X] an interest [X] ||| mit dem sich [X][X] [X] ||| 0.00213921 1 ||| ||| 0.333625
+in which [X][X] interest [X] ||| mit dem sich [X][X] [X] ||| 0.00213921 1 ||| ||| 0.333625
+in which [X][X] an [X][X] [X] ||| mit dem sich [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.025641
+in which [X][X] has [X][X] [X] ||| mit dem sich [X][X] [X][X] hat [X] ||| 0.0278341 1 ||| ||| 0.101399
+in which this Parliament [X] ||| mit dem sich dieses Parlament [X] ||| 0.0278341 1 ||| ||| 0.125
+in which this Parliament [X][X] [X] ||| mit dem sich dieses Parlament [X][X] [X] ||| 0.0278341 1 ||| ||| 0.12704
+in which this [X] ||| mit dem sich dieses [X] ||| 0.0278341 1 ||| ||| 0.25
+in which this [X][X] . [X] ||| mit dem sich dieses [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.025641
+in which this [X][X] [X] ||| mit dem sich dieses [X][X] [X] ||| 0.0193243 1 ||| ||| 0.182984
+in which this [X][X] an [X] ||| mit dem sich dieses [X][X] [X] ||| 0.00460946 1 ||| ||| 0.182984
+in which this [X][X] interest [X] ||| mit dem sich dieses [X][X] [X] ||| 0.00390031 1 ||| ||| 0.182984
+a form [X][X] introduced [X] ||| mit einer Art [X][X] [X] ||| 0.013917 1 ||| ||| 0.25
+a form of [X][X] introduced [X] ||| mit einer Art [X][X] [X] ||| 0.013917 1 ||| ||| 0.25
+a [X][X] introduced [X] ||| mit einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.125
+a [X][X] should be introduced [X] ||| mit einer [X][X] werden sollen [X] ||| 0.0278341 1 ||| ||| 0.125
+should like to [X] ||| möchte Sie [X] ||| 0.0278341 1 ||| ||| 1
+should like to [X][X] [X] ||| möchte Sie [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.142857
+should like to [X][X] in [X] ||| möchte Sie [X][X] , mit [X] ||| 0.0278341 1 ||| ||| 0.125
+should like to [X][X] [X] ||| möchte Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.467857
+should like to [X][X] in [X] ||| möchte Sie [X][X] mit [X] ||| 0.0278341 1 ||| ||| 0.125
+should like to [X] ||| möchte [X] ||| 0.013917 1 ||| ||| 2
+would [X] ||| möchte [X] ||| 0.013917 1 ||| ||| 2
+should like to [X][X] [X] ||| möchte [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.142857
+should like to [X][X] in [X] ||| möchte [X][X] , mit [X] ||| 0.0278341 1 ||| ||| 0.125
+should like to [X][X] [X] ||| möchte [X][X] [X] ||| 0.0278341 1 ||| ||| 0.467857
+should like to [X][X] in [X] ||| möchte [X][X] mit [X] ||| 0.0278341 1 ||| ||| 0.125
+I should like to [X] ||| möchte ich Sie [X] ||| 0.0278341 1 ||| ||| 1
+, I should like to [X] ||| möchte ich Sie bitten - [X] ||| 0.0278341 1 ||| ||| 0.333333
+I should like to [X] ||| möchte ich Sie bitten [X] ||| 0.0278341 1 ||| ||| 1
+I would [X] ||| möchte ich [X] ||| 0.0278341 1 ||| ||| 1
+want to know [X] ||| möchte wissen , [X] ||| 0.0278341 1 ||| ||| 1
+want to know [X][X] [X] ||| möchte wissen , [X][X] , [X] ||| 0.0205972 1 ||| ||| 0.160257
+want to know [X][X] raise [X] ||| möchte wissen , [X][X] , [X] ||| 0.00723686 1 ||| ||| 0.160257
+want to know [X][X] an [X] ||| möchte wissen , [X][X] , einen [X] ||| 0.0278341 1 ||| ||| 0.027027
+want to know [X][X] [X] ||| möchte wissen , [X][X] [X] ||| 0.0222413 1 ||| ||| 0.997787
+want to know [X][X] raise [X] ||| möchte wissen , [X][X] [X] ||| 0.00559284 1 ||| ||| 0.997787
+want to know [X][X] an [X] ||| möchte wissen , [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.027027
+want to know [X][X] [X] ||| möchte wissen , [X][X] ist , [X] ||| 0.0205972 1 ||| ||| 0.160257
+want to know [X][X] raise [X] ||| möchte wissen , [X][X] ist , [X] ||| 0.00723686 1 ||| ||| 0.160257
+want to know [X][X] an [X] ||| möchte wissen , [X][X] ist , einen [X] ||| 0.0278341 1 ||| ||| 0.027027
+want to know [X][X] [X] ||| möchte wissen , [X][X] ist [X] ||| 0.0203114 1 ||| ||| 0.217647
+want to know [X][X] raise [X] ||| möchte wissen , [X][X] ist [X] ||| 0.00752271 1 ||| ||| 0.217647
+want to know [X][X] can [X] ||| möchte wissen , [X][X] möglich [X] ||| 0.0278341 1 ||| ||| 0.142857
+want to know [X][X] can [X] ||| möchte wissen , [X][X] möglich ist , [X] ||| 0.0278341 1 ||| ||| 0.0769231
+want to know [X][X] can [X] ||| möchte wissen , [X][X] möglich ist [X] ||| 0.0278341 1 ||| ||| 0.1
+want to know whether [X] ||| möchte wissen , ob [X] ||| 0.0278341 1 ||| ||| 0.5
+want to know whether [X][X] [X] ||| möchte wissen , ob [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.11859
+want to know whether [X][X] [X] ||| möchte wissen , ob [X][X] [X] ||| 0.0278341 1 ||| ||| 0.547297
+want to know whether [X][X] [X] ||| möchte wissen , ob [X][X] ist , [X] ||| 0.0278341 1 ||| ||| 0.11859
+want to know whether [X][X] [X] ||| möchte wissen , ob [X][X] ist [X] ||| 0.0278341 1 ||| ||| 0.158824
+want to know whether one [X] ||| möchte wissen , ob es [X] ||| 0.0278341 1 ||| ||| 0.25
+can [X] ||| möglich [X] ||| 0.013917 1 ||| ||| 2
+can raise [X] ||| möglich [X] ||| 0.013917 1 ||| ||| 2
+can [X][X] objection [X] ||| möglich [X][X] Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0714286
+can [X][X] [X] ||| möglich [X][X] [X] ||| 0.0208756 1 ||| ||| 0.285715
+can raise [X][X] [X] ||| möglich [X][X] [X] ||| 0.00695852 1 ||| ||| 0.285715
+can [X] ||| möglich ist , [X] ||| 0.013917 1 ||| ||| 2
+can raise [X] ||| möglich ist , [X] ||| 0.013917 1 ||| ||| 2
+can [X][X] objection [X] ||| möglich ist , [X][X] Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0714286
+can [X][X] [X] ||| möglich ist , [X][X] [X] ||| 0.0208756 1 ||| ||| 0.285715
+can raise [X][X] [X] ||| möglich ist , [X][X] [X] ||| 0.00695852 1 ||| ||| 0.285715
+can raise an objection [X] ||| möglich ist , einen Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0714286
+can raise an [X] ||| möglich ist , einen [X] ||| 0.0278341 1 ||| ||| 0.142857
+can [X] ||| möglich ist [X] ||| 0.013917 1 ||| ||| 2
+can raise [X] ||| möglich ist [X] ||| 0.013917 1 ||| ||| 2
+can [X][X] objection [X] ||| möglich ist [X][X] Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0714286
+can [X][X] [X] ||| möglich ist [X][X] [X] ||| 0.0208756 1 ||| ||| 0.285715
+can raise [X][X] [X] ||| möglich ist [X][X] [X] ||| 0.00695852 1 ||| ||| 0.285715
+[X][X] on [X] ||| nach [X][X] im [X] ||| 0.0278341 1 ||| ||| 0.25
+a debate [X] ||| nach einer Aussprache [X] ||| 0.0278341 1 ||| ||| 1
+a debate on [X] ||| nach einer Aussprache im [X] ||| 0.0278341 1 ||| ||| 0.25
+a [X] ||| nach einer [X] ||| 0.0278341 1 ||| ||| 1
+a [X][X] [X] ||| nach einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.25
+fail [X] ||| nicht [X] ||| 0.013917 1 ||| ||| 2
+not [X] ||| nicht [X] ||| 0.013917 1 ||| ||| 2
+fail [X][X] [X] ||| nicht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.5
+fail to meet [X] ||| nicht erfüllen , [X] ||| 0.0278341 1 ||| ||| 0.5
+not solely [X] ||| nicht nur [X] ||| 0.0278341 1 ||| ||| 1
+now [X] ||| nun [X] ||| 0.0278341 1 ||| ||| 1
+now [X][X] [X] ||| nun [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111111
+now [X][X] , he is [X] ||| nun ist [X][X] , daß er [X] ||| 0.0278341 1 ||| ||| 0.111111
+now [X][X] is [X] ||| nun ist [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111111
+now [X][X] he is [X] ||| nun ist [X][X] daß er [X] ||| 0.0278341 1 ||| ||| 0.111111
+now [X][X] he is [X] ||| nun ist [X][X] er [X] ||| 0.0278341 1 ||| ||| 0.111111
+now , [X][X] is [X] ||| nun ist es [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111111
+now , [X][X] he is [X] ||| nun ist es [X][X] daß er [X] ||| 0.0278341 1 ||| ||| 0.111111
+now , [X][X] he is [X] ||| nun ist es [X][X] er [X] ||| 0.0278341 1 ||| ||| 0.111111
+now , however [X][X] is [X] ||| nun ist es aber so [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111111
+now [X] ||| nunmehr [X] ||| 0.0278341 1 ||| ||| 1
+now constantly [X] ||| nunmehr ständig [X] ||| 0.0278341 1 ||| ||| 1
+solely [X] ||| nur [X] ||| 0.0278341 1 ||| ||| 1
+solely a [X] ||| nur ein [X] ||| 0.0278341 1 ||| ||| 1
+next few days , [X] ||| nächsten Tagen [X] ||| 0.0111336 1 ||| ||| 0.833333
+next few days [X] ||| nächsten Tagen [X] ||| 0.0167005 1 ||| ||| 0.833333
+next [X] ||| nächsten [X] ||| 0.0278341 1 ||| ||| 1
+next [X][X] , [X] ||| nächsten [X][X] [X] ||| 0.0079526 1 ||| ||| 1.16667
+next [X][X] [X] ||| nächsten [X][X] [X] ||| 0.0198815 1 ||| ||| 1.16667
+whether [X] ||| ob [X] ||| 0.241419 1 ||| ||| 2
+whether [X][X] [X] ||| ob [X][X] , [X] ||| 0.0212069 1 ||| ||| 0.381818
+whether [X][X] raise [X] ||| ob [X][X] , [X] ||| 0.00662717 1 ||| ||| 0.381818
+whether [X][X] raise [X][X] [X] ||| ob [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0222222
+whether [X][X] an objection [X] ||| ob [X][X] , einen Einwand gegen [X] ||| 0.013917 1 ||| ||| 0.0444444
+whether [X][X] raise an objection [X] ||| ob [X][X] , einen Einwand gegen [X] ||| 0.013917 1 ||| ||| 0.0444444
+whether [X][X] an [X] ||| ob [X][X] , einen [X] ||| 0.013917 1 ||| ||| 0.08
+whether [X][X] raise an [X] ||| ob [X][X] , einen [X] ||| 0.013917 1 ||| ||| 0.08
+whether [X][X] objection [X] ||| ob [X][X] Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0222222
+whether [X][X] [X] ||| ob [X][X] [X] ||| 0.181558 1 ||| ||| 1.67737
+whether [X][X] raise [X] ||| ob [X][X] [X] ||| 0.00690155 1 ||| ||| 1.67737
+whether [X][X] raise [X][X] [X] ||| ob [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0666667
+whether [X][X] an objection [X] ||| ob [X][X] einen Einwand gegen [X] ||| 0.013917 1 ||| ||| 0.0444444
+whether [X][X] raise an objection [X] ||| ob [X][X] einen Einwand gegen [X] ||| 0.013917 1 ||| ||| 0.0444444
+whether [X][X] an [X] ||| ob [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.08
+whether [X][X] raise an [X] ||| ob [X][X] einen [X] ||| 0.013917 1 ||| ||| 0.08
+whether [X][X] [X] ||| ob [X][X] ist , [X] ||| 0.0212069 1 ||| ||| 0.381818
+whether [X][X] raise [X] ||| ob [X][X] ist , [X] ||| 0.00662717 1 ||| ||| 0.381818
+whether [X][X] raise [X][X] [X] ||| ob [X][X] ist , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0222222
+whether [X][X] an objection [X] ||| ob [X][X] ist , einen Einwand gegen [X] ||| 0.013917 1 ||| ||| 0.0444444
+whether [X][X] raise an objection [X] ||| ob [X][X] ist , einen Einwand gegen [X] ||| 0.013917 1 ||| ||| 0.0444444
+whether [X][X] an [X] ||| ob [X][X] ist , einen [X] ||| 0.013917 1 ||| ||| 0.08
+whether [X][X] raise an [X] ||| ob [X][X] ist , einen [X] ||| 0.013917 1 ||| ||| 0.08
+whether [X][X] [X] ||| ob [X][X] ist [X] ||| 0.0208756 1 ||| ||| 0.5
+whether [X][X] raise [X] ||| ob [X][X] ist [X] ||| 0.00695852 1 ||| ||| 0.5
+whether [X][X] raise [X][X] [X] ||| ob [X][X] ist [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0222222
+whether one [X] ||| ob es [X] ||| 0.0278341 1 ||| ||| 1
+whether one [X][X] [X] ||| ob es [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+whether one [X][X] an objection [X] ||| ob es [X][X] , einen Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0222222
+whether one [X][X] an [X] ||| ob es [X][X] , einen [X] ||| 0.0278341 1 ||| ||| 0.04
+whether one [X][X] objection [X] ||| ob es [X][X] Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0222222
+whether one [X][X] [X] ||| ob es [X][X] [X] ||| 0.0278341 1 ||| ||| 0.478131
+whether one [X][X] an objection [X] ||| ob es [X][X] einen Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0222222
+whether one [X][X] an [X] ||| ob es [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.04
+whether one [X][X] [X] ||| ob es [X][X] ist , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+whether one [X][X] an objection [X] ||| ob es [X][X] ist , einen Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0222222
+whether one [X][X] an [X] ||| ob es [X][X] ist , einen [X] ||| 0.0278341 1 ||| ||| 0.04
+whether one [X][X] [X] ||| ob es [X][X] ist [X] ||| 0.0278341 1 ||| ||| 0.125
+whether one can [X] ||| ob es möglich [X] ||| 0.0173963 1 ||| ||| 0.533333
+whether one can raise [X] ||| ob es möglich [X] ||| 0.0104378 1 ||| ||| 0.533333
+whether one can [X][X] objection [X] ||| ob es möglich [X][X] Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0222222
+whether one can [X][X] [X] ||| ob es möglich [X][X] [X] ||| 0.0205093 1 ||| ||| 0.0844444
+whether one can raise [X][X] [X] ||| ob es möglich [X][X] [X] ||| 0.00732476 1 ||| ||| 0.0844444
+whether one can [X] ||| ob es möglich ist , [X] ||| 0.0191359 1 ||| ||| 0.290909
+whether one can raise [X] ||| ob es möglich ist , [X] ||| 0.00869816 1 ||| ||| 0.290909
+whether one can [X][X] objection [X] ||| ob es möglich ist , [X][X] Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0222222
+whether one can [X][X] [X] ||| ob es möglich ist , [X][X] [X] ||| 0.0205093 1 ||| ||| 0.0844444
+whether one can raise [X][X] [X] ||| ob es möglich ist , [X][X] [X] ||| 0.00732476 1 ||| ||| 0.0844444
+whether one can raise an [X] ||| ob es möglich ist , einen [X] ||| 0.0278341 1 ||| ||| 0.04
+whether one can [X] ||| ob es möglich ist [X] ||| 0.0185561 1 ||| ||| 0.375
+whether one can raise [X] ||| ob es möglich ist [X] ||| 0.00927803 1 ||| ||| 0.375
+whether one can [X][X] objection [X] ||| ob es möglich ist [X][X] Einwand gegen [X] ||| 0.0278341 1 ||| ||| 0.0222222
+whether one can [X][X] [X] ||| ob es möglich ist [X][X] [X] ||| 0.0205093 1 ||| ||| 0.0844444
+whether one can raise [X][X] [X] ||| ob es möglich ist [X][X] [X] ||| 0.00732476 1 ||| ||| 0.0844444
+legally [X] ||| rechtlich [X] ||| 0.0278341 1 ||| ||| 1
+legally inadmissible [X] ||| rechtlich unzulässig [X] ||| 0.0278341 1 ||| ||| 1
+[X][X] legally inadmissible . [X] ||| rechtlich unzulässig [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] legally inadmissible [X] ||| rechtlich unzulässig [X][X] [X] ||| 0.0278341 1 ||| ||| 0.333333
+would be legally inadmissible . [X] ||| rechtlich unzulässig wäre . [X] ||| 0.0278341 1 ||| ||| 0.25
+would be legally inadmissible [X] ||| rechtlich unzulässig wäre [X] ||| 0.0278341 1 ||| ||| 0.333333
+relative stability [X] ||| relativen Stabilität [X] ||| 0.193135 1 ||| ||| 2.5
+relative stability is [X] ||| relativen Stabilität [X] ||| 0.00556682 1 ||| ||| 2.5
+relative stability [X][X] legal principle [X] ||| relativen Stabilität [X][X] Rechtsgrundsatz [X] ||| 0.0278341 1 ||| ||| 0.05
+relative stability [X][X] [X] ||| relativen Stabilität [X][X] [X] ||| 0.0176564 1 ||| ||| 0.62029
+relative stability is [X][X] [X] ||| relativen Stabilität [X][X] [X] ||| 0.0101777 1 ||| ||| 0.62029
+relative stability [X][X] of the [X] ||| relativen Stabilität [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0434783
+relative stability [X][X] fundamental [X] ||| relativen Stabilität [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.1
+relative stability [X][X] fundamental [X][X] [X] ||| relativen Stabilität [X][X] elementaren [X][X] [X] ||| 0.0278341 1 ||| ||| 0.126812
+relative stability [X][X] common [X] ||| relativen Stabilität [X][X] gemeinsamen [X] ||| 0.013917 1 ||| ||| 0.0666666
+relative stability is [X][X] common [X] ||| relativen Stabilität [X][X] gemeinsamen [X] ||| 0.013917 1 ||| ||| 0.0666666
+relative stability is a [X] ||| relativen Stabilität einen [X] ||| 0.0278341 1 ||| ||| 0.166667
+relative stability is a [X][X] [X] ||| relativen Stabilität einen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.126812
+relative stability is a fundamental [X] ||| relativen Stabilität einen elementaren [X] ||| 0.0278341 1 ||| ||| 0.1
+relative [X] ||| relativen [X] ||| 0.241419 1 ||| ||| 2
+relative [X][X] legal principle [X] ||| relativen [X][X] Rechtsgrundsatz [X] ||| 0.0278341 1 ||| ||| 0.05
+relative [X][X] legal principle [X][X] [X] ||| relativen [X][X] Rechtsgrundsatz [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0768116
+relative [X][X] [X] ||| relativen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.893478
+relative [X][X] of the [X] ||| relativen [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0434783
+relative [X][X] of the common [X] ||| relativen [X][X] der gemeinsamen [X] ||| 0.0278341 1 ||| ||| 0.0333333
+relative [X][X] a [X] ||| relativen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.166667
+relative [X][X] a [X][X] [X] ||| relativen [X][X] einen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.126812
+relative [X][X] a [X][X] common [X] ||| relativen [X][X] einen [X][X] gemeinsamen [X] ||| 0.0278341 1 ||| ||| 0.0333333
+relative [X][X] a fundamental [X] ||| relativen [X][X] einen elementaren [X] ||| 0.0278341 1 ||| ||| 0.1
+relative [X][X] a fundamental [X][X] [X] ||| relativen [X][X] einen elementaren [X][X] [X] ||| 0.0278341 1 ||| ||| 0.126812
+relative [X][X] fundamental legal principle [X] ||| relativen [X][X] elementaren Rechtsgrundsatz [X] ||| 0.0278341 1 ||| ||| 0.05
+relative [X][X] fundamental [X] ||| relativen [X][X] elementaren [X] ||| 0.0278341 1 ||| ||| 0.1
+relative [X][X] fundamental [X][X] [X] ||| relativen [X][X] elementaren [X][X] [X] ||| 0.0278341 1 ||| ||| 0.126812
+relative [X][X] fundamental [X][X] common [X] ||| relativen [X][X] elementaren [X][X] gemeinsamen [X] ||| 0.0278341 1 ||| ||| 0.0333333
+relative [X][X] common [X] ||| relativen [X][X] gemeinsamen [X] ||| 0.0278341 1 ||| ||| 0.0333333
+difficult situation [X] ||| schwierigen Situation [X] ||| 0.0278341 1 ||| ||| 1
+difficult [X] ||| schwierigen [X] ||| 0.0278341 1 ||| ||| 1
+very [X] ||| sehr [X] ||| 0.241419 1 ||| ||| 2
+very [X][X] [X] ||| sehr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.333333
+very difficult situation [X] ||| sehr schwierigen Situation [X] ||| 0.0278341 1 ||| ||| 0.333333
+very difficult [X] ||| sehr schwierigen [X] ||| 0.0278341 1 ||| ||| 1
+very many [X] ||| sehr vielen [X] ||| 0.0278341 1 ||| ||| 1
+his [X] ||| seinen [X] ||| 0.0278341 1 ||| ||| 1
+is [X] ||| sich [X] ||| 0.0278341 1 ||| ||| 1
+[X][X] . [X] ||| sich [X][X] . [X] ||| 0.00927803 1 ||| ||| 0.136363
+[X][X] an interest . [X] ||| sich [X][X] . [X] ||| 0.00927803 1 ||| ||| 0.136363
+[X][X] interest . [X] ||| sich [X][X] . [X] ||| 0.00927803 1 ||| ||| 0.136363
+is [X][X] report [X] ||| sich [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.166667
+is [X][X] report [X][X] [X] ||| sich [X][X] Bericht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0892857
+is [X][X] report , [X] ||| sich [X][X] Bericht und [X] ||| 0.0278341 1 ||| ||| 0.0909091
+is [X][X] report , [X][X] [X] ||| sich [X][X] Bericht und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0892857
+is [X][X] legislative proposal [X] ||| sich [X][X] Legislativvorschlag [X] ||| 0.0278341 1 ||| ||| 0.0416667
+is [X][X] [X] ||| sich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.680195
+[X][X] has [X][X] . [X] ||| sich [X][X] [X][X] hat . [X] ||| 0.013917 1 ||| ||| 0.090909
+[X][X] has [X][X] interest . [X] ||| sich [X][X] [X][X] hat . [X] ||| 0.013917 1 ||| ||| 0.090909
+[X][X] has [X][X] [X] ||| sich [X][X] [X][X] hat [X] ||| 0.0153906 1 ||| ||| 0.505952
+[X][X] has [X][X] an [X] ||| sich [X][X] [X][X] hat [X] ||| 0.00458444 1 ||| ||| 0.505952
+[X][X] has [X][X] an interest [X] ||| sich [X][X] [X][X] hat [X] ||| 0.00392952 1 ||| ||| 0.505952
+[X][X] has [X][X] interest [X] ||| sich [X][X] [X][X] hat [X] ||| 0.00392952 1 ||| ||| 0.505952
+[X][X] has consistently shown [X] ||| sich [X][X] immer wieder befaßt hat [X] ||| 0.0167005 1 ||| ||| 0.208333
+[X][X] has consistently shown an [X] ||| sich [X][X] immer wieder befaßt hat [X] ||| 0.0111336 1 ||| ||| 0.208333
+[X][X] has consistently shown [X][X] [X] ||| sich [X][X] immer wieder befaßt hat [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0454545
+is [X][X] not a [X] ||| sich [X][X] keinen [X] ||| 0.0278341 1 ||| ||| 0.047619
+is [X][X] not a [X][X] [X] ||| sich [X][X] keinen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0416667
+[X][X] and contains [X] ||| sich [X][X] mit [X] ||| 0.0278341 1 ||| ||| 0.25
+is [X][X] , [X] ||| sich [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0909091
+is [X][X] , [X][X] [X] ||| sich [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0892857
+is [X][X] , not a [X] ||| sich [X][X] und keinen [X] ||| 0.0278341 1 ||| ||| 0.047619
+on Thursday [X] ||| sich am Donnerstag [X] ||| 0.0278341 1 ||| ||| 1
+on Thursday [X][X] [X] ||| sich am Donnerstag [X][X] [X] ||| 0.0278341 1 ||| ||| 0.25
+on Thursday and contains [X] ||| sich am Donnerstag mit [X] ||| 0.0278341 1 ||| ||| 0.25
+this Parliament [X] ||| sich dieses Parlament [X] ||| 0.0278341 1 ||| ||| 1
+this Parliament [X][X] . [X] ||| sich dieses Parlament [X][X] . [X] ||| 0.013917 1 ||| ||| 0.090909
+this Parliament [X][X] interest . [X] ||| sich dieses Parlament [X][X] . [X] ||| 0.013917 1 ||| ||| 0.090909
+this Parliament [X][X] [X] ||| sich dieses Parlament [X][X] [X] ||| 0.0164164 1 ||| ||| 0.551407
+this Parliament [X][X] an [X] ||| sich dieses Parlament [X][X] [X] ||| 0.00420653 1 ||| ||| 0.551407
+this Parliament [X][X] an interest [X] ||| sich dieses Parlament [X][X] [X] ||| 0.0036056 1 ||| ||| 0.551407
+this Parliament [X][X] interest [X] ||| sich dieses Parlament [X][X] [X] ||| 0.0036056 1 ||| ||| 0.551407
+this Parliament [X][X] an [X][X] [X] ||| sich dieses Parlament [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0454545
+this Parliament has [X][X] . [X] ||| sich dieses Parlament [X][X] hat . [X] ||| 0.0278341 1 ||| ||| 0.0454545
+this Parliament has [X][X] [X] ||| sich dieses Parlament [X][X] hat [X] ||| 0.0179206 1 ||| ||| 0.434524
+this Parliament has [X][X] an [X] ||| sich dieses Parlament [X][X] hat [X] ||| 0.00533804 1 ||| ||| 0.434524
+this Parliament has [X][X] interest [X] ||| sich dieses Parlament [X][X] hat [X] ||| 0.00457547 1 ||| ||| 0.434524
+this Parliament has consistently shown [X] ||| sich dieses Parlament immer wieder befaßt hat [X] ||| 0.0278341 1 ||| ||| 0.125
+this [X] ||| sich dieses [X] ||| 0.0278341 1 ||| ||| 1
+this [X][X] . [X] ||| sich dieses [X][X] . [X] ||| 0.00927803 1 ||| ||| 0.136363
+this [X][X] an interest . [X] ||| sich dieses [X][X] . [X] ||| 0.00927803 1 ||| ||| 0.136363
+this [X][X] interest . [X] ||| sich dieses [X][X] . [X] ||| 0.00927803 1 ||| ||| 0.136363
+this [X][X] [X] ||| sich dieses [X][X] [X] ||| 0.0164164 1 ||| ||| 0.551407
+this [X][X] an [X] ||| sich dieses [X][X] [X] ||| 0.00420653 1 ||| ||| 0.551407
+this [X][X] an interest [X] ||| sich dieses [X][X] [X] ||| 0.0036056 1 ||| ||| 0.551407
+this [X][X] interest [X] ||| sich dieses [X][X] [X] ||| 0.0036056 1 ||| ||| 0.551407
+this [X][X] an [X][X] [X] ||| sich dieses [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0454545
+is merely [X] ||| sich lediglich um [X] ||| 0.0278341 1 ||| ||| 1
+is merely [X][X] legislative proposal [X] ||| sich lediglich um [X][X] Legislativvorschlag [X] ||| 0.0278341 1 ||| ||| 0.0416667
+is merely [X][X] [X] ||| sich lediglich um [X][X] [X] ||| 0.0278341 1 ||| ||| 0.346861
+is merely [X][X] not a [X] ||| sich lediglich um [X][X] keinen [X] ||| 0.0278341 1 ||| ||| 0.047619
+is merely [X][X] , [X] ||| sich lediglich um [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0909091
+is merely [X][X] , [X][X] [X] ||| sich lediglich um [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0892857
+is merely a report [X] ||| sich lediglich um einen Bericht [X] ||| 0.0278341 1 ||| ||| 0.166667
+is merely a report [X][X] [X] ||| sich lediglich um einen Bericht [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0892857
+is merely a report , [X] ||| sich lediglich um einen Bericht und [X] ||| 0.0278341 1 ||| ||| 0.0909091
+is merely a [X] ||| sich lediglich um einen [X] ||| 0.0278341 1 ||| ||| 0.333333
+is merely a [X][X] [X] ||| sich lediglich um einen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.180195
+will be [X] ||| sicher [X] ||| 0.0278341 1 ||| ||| 1
+will be [X][X] that [X] ||| sicher [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.142857
+will be [X][X] [X] ||| sicher [X][X] [X] ||| 0.0278341 1 ||| ||| 0.242857
+will be aware [X][X] television [X] ||| sicher [X][X] dem Fernsehen wissen [X] ||| 0.0278341 1 ||| ||| 0.1
+will be aware [X][X] that [X] ||| sicher [X][X] wissen , [X] ||| 0.0278341 1 ||| ||| 0.142857
+will be aware [X][X] [X] ||| sicher [X][X] wissen [X] ||| 0.0278341 1 ||| ||| 0.1
+will be aware from [X][X] [X] ||| sicher aus [X][X] wissen [X] ||| 0.0278341 1 ||| ||| 0.1
+urging [X] ||| sie auffordern [X] ||| 0.0278341 1 ||| ||| 1
+urging [X] ||| sie auffordern würden , [X] ||| 0.0278341 1 ||| ||| 1
+urging [X] ||| sie auffordern würden [X] ||| 0.0278341 1 ||| ||| 1
+to [X] ||| soll , [X] ||| 0.00695852 1 ||| ||| 4
+to go [X] ||| soll , [X] ||| 0.00695852 1 ||| ||| 4
+to go before [X] ||| soll , [X] ||| 0.00695852 1 ||| ||| 4
+to go before the [X] ||| soll , [X] ||| 0.00695852 1 ||| ||| 4
+to [X] ||| soll [X] ||| 0.00695852 1 ||| ||| 4
+to go [X] ||| soll [X] ||| 0.00695852 1 ||| ||| 4
+to go before [X] ||| soll [X] ||| 0.00695852 1 ||| ||| 4
+to go before the [X] ||| soll [X] ||| 0.00695852 1 ||| ||| 4
+should [X] ||| sollen [X] ||| 0.241419 1 ||| ||| 2
+says [X][X] should [X] ||| sollen [X][X] Strafen [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] should [X] ||| sollen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.75
+says that this should [X] ||| sollen derartige Strafen [X] ||| 0.0278341 1 ||| ||| 0.25
+that this should [X] ||| sollen derartige [X] ||| 0.0278341 1 ||| ||| 0.5
+always [X] ||| stets [X] ||| 0.0278341 1 ||| ||| 1
+always upheld [X] ||| stets verteidigt [X] ||| 0.0278341 1 ||| ||| 1
+have always upheld . [X] ||| stets verteidigt haben . [X] ||| 0.0278341 1 ||| ||| 0.333333
+have always upheld [X] ||| stets verteidigt haben [X] ||| 0.0278341 1 ||| ||| 0.5
+constantly [X] ||| ständig [X] ||| 0.0278341 1 ||| ||| 1
+despite [X] ||| trotz [X] ||| 0.0278341 1 ||| ||| 1
+despite [X][X] stability [X] ||| trotz [X][X] Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] despite [X][X] stability . [X] ||| trotz [X][X] Stabilität [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] despite [X][X] stability [X] ||| trotz [X][X] Stabilität [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0666667
+done despite [X][X] stability [X] ||| trotz [X][X] Stabilität verhängt [X] ||| 0.0278341 1 ||| ||| 0.0666667
+be done despite [X][X] stability [X] ||| trotz [X][X] Stabilität verhängt werden [X] ||| 0.0278341 1 ||| ||| 0.0666667
+despite [X][X] [X] ||| trotz [X][X] [X] ||| 0.0278341 1 ||| ||| 0.643541
+[X][X] despite [X][X] . [X] ||| trotz [X][X] [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] despite [X][X] [X] ||| trotz [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0666667
+despite [X][X] of [X] ||| trotz [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.166667
+despite [X][X] of [X][X] [X] ||| trotz [X][X] der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+done despite [X][X] of [X][X] [X] ||| trotz [X][X] der [X][X] verhängt [X] ||| 0.0278341 1 ||| ||| 0.0666667
+despite [X][X] of relative stability [X] ||| trotz [X][X] der relativen Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0526316
+despite [X][X] of relative [X] ||| trotz [X][X] der relativen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+despite [X][X] relative stability [X] ||| trotz [X][X] relativen Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] despite [X][X] relative stability [X] ||| trotz [X][X] relativen Stabilität [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0666667
+done despite [X][X] relative stability [X] ||| trotz [X][X] relativen Stabilität verhängt [X] ||| 0.0278341 1 ||| ||| 0.0666667
+despite [X][X] relative [X] ||| trotz [X][X] relativen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+done despite [X][X] [X] ||| trotz [X][X] verhängt [X] ||| 0.0278341 1 ||| ||| 0.0666667
+be done despite [X][X] . [X] ||| trotz [X][X] verhängt werden . [X] ||| 0.0278341 1 ||| ||| 0.125
+be done despite [X][X] [X] ||| trotz [X][X] verhängt werden [X] ||| 0.0278341 1 ||| ||| 0.0666667
+despite the principle [X] ||| trotz des Grundsatzes [X] ||| 0.0278341 1 ||| ||| 0.333333
+despite the principle [X][X] stability [X] ||| trotz des Grundsatzes [X][X] Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0526316
+despite the principle [X][X] [X] ||| trotz des Grundsatzes [X][X] [X] ||| 0.0278341 1 ||| ||| 0.143541
+[X][X] despite the principle [X][X] [X] ||| trotz des Grundsatzes [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0666667
+done despite the principle [X][X] [X] ||| trotz des Grundsatzes [X][X] verhängt [X] ||| 0.0278341 1 ||| ||| 0.0666667
+despite the principle of [X] ||| trotz des Grundsatzes der [X] ||| 0.0278341 1 ||| ||| 0.166667
+despite the principle of [X][X] [X] ||| trotz des Grundsatzes der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+despite the principle of relative [X] ||| trotz des Grundsatzes der relativen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+despite the [X] ||| trotz des [X] ||| 0.0278341 1 ||| ||| 1
+despite the [X][X] stability [X] ||| trotz des [X][X] Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] despite the [X][X] stability [X] ||| trotz des [X][X] Stabilität [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0666667
+done despite the [X][X] stability [X] ||| trotz des [X][X] Stabilität verhängt [X] ||| 0.0278341 1 ||| ||| 0.0666667
+despite the [X][X] [X] ||| trotz des [X][X] [X] ||| 0.0278341 1 ||| ||| 0.310207
+[X][X] despite the [X][X] . [X] ||| trotz des [X][X] [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.125
+[X][X] despite the [X][X] [X] ||| trotz des [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0666667
+despite the [X][X] relative stability [X] ||| trotz des [X][X] relativen Stabilität [X] ||| 0.0278341 1 ||| ||| 0.0526316
+despite the [X][X] relative [X] ||| trotz des [X][X] relativen [X] ||| 0.0278341 1 ||| ||| 0.0909091
+done despite the [X][X] [X] ||| trotz des [X][X] verhängt [X] ||| 0.0278341 1 ||| ||| 0.0666667
+be done despite the [X][X] [X] ||| trotz des [X][X] verhängt werden [X] ||| 0.0278341 1 ||| ||| 0.0666667
+do [X] ||| tun [X] ||| 0.241419 1 ||| ||| 2
+and to the Governor [X] ||| und Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.2
+and to the Governor [X][X] [X] ||| und Gouverneur [X][X] [X] ||| 0.0278341 1 ||| ||| 0.152597
+and to the Governor of [X] ||| und Gouverneur von [X] ||| 0.0278341 1 ||| ||| 0.111111
+, [X] ||| und [X] ||| 0.00146495 1 ||| ||| 19
+, and [X] ||| und [X] ||| 0.00146495 1 ||| ||| 19
+and [X] ||| und [X] ||| 0.736842 1 ||| ||| 19
+and the [X] ||| und [X] ||| 0.00146495 1 ||| ||| 19
+and to [X] ||| und [X] ||| 0.00146495 1 ||| ||| 19
+and to the [X] ||| und [X] ||| 0.00146495 1 ||| ||| 19
+and [X][X] , [X] ||| und [X][X] , [X] ||| 0.00375419 1 ||| ||| 0.476623
+and [X][X] [X] ||| und [X][X] , [X] ||| 0.0199086 1 ||| ||| 0.476623
+and to [X][X] , [X] ||| und [X][X] , [X] ||| 0.00208566 1 ||| ||| 0.476623
+and to the [X][X] , [X] ||| und [X][X] , [X] ||| 0.00208566 1 ||| ||| 0.476623
+and [X][X] , [X][X] [X] ||| und [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0149254
+and [X][X] , to [X] ||| und [X][X] , bei [X] ||| 0.0278341 1 ||| ||| 0.0188679
+and [X][X] , to the [X] ||| und [X][X] , bei dem [X] ||| 0.0278341 1 ||| ||| 0.0149254
+and [X][X] that [X] ||| und [X][X] , daß [X] ||| 0.0278341 1 ||| ||| 0.2
+and [X][X] that [X][X] , [X] ||| und [X][X] , daß [X][X] [X] ||| 0.00927805 1 ||| ||| 0.2
+and [X][X] that [X][X] [X] ||| und [X][X] , daß [X][X] [X] ||| 0.018556 1 ||| ||| 0.2
+and [X][X] that [X][X] too [X] ||| und [X][X] , daß auch [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0666667
+and [X][X] you [X] ||| und [X][X] , die Sie [X] ||| 0.0278341 1 ||| ||| 0.1
+and [X][X] you [X][X] [X] ||| und [X][X] , die Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0623647
+and [X][X] you [X][X] to [X] ||| und [X][X] , die Sie [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0188679
+and [X][X] you [X][X] the [X] ||| und [X][X] , die Sie [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0149254
+and [X][X] you represent , [X] ||| und [X][X] , die Sie vertreten , [X] ||| 0.0278341 1 ||| ||| 0.0285714
+and [X][X] you represent [X] ||| und [X][X] , die Sie vertreten [X] ||| 0.0278341 1 ||| ||| 0.0526316
+and [X][X] you represent [X][X] [X] ||| und [X][X] , die Sie vertreten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0337933
+and [X][X] [X] ||| und [X][X] , die [X] ||| 0.0278341 1 ||| ||| 0.2
+and [X][X] to subvert it [X] ||| und [X][X] , diesen zu unterlaufen , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+and [X][X] to subvert it [X] ||| und [X][X] , diesen zu unterlaufen [X] ||| 0.0278341 1 ||| ||| 0.142857
+and [X][X] Bush , [X] ||| und [X][X] Bush , [X] ||| 0.013917 1 ||| ||| 0.0714286
+and to [X][X] Bush , [X] ||| und [X][X] Bush , [X] ||| 0.013917 1 ||| ||| 0.0714286
+and [X][X] Bush [X] ||| und [X][X] Bush [X] ||| 0.00927803 1 ||| ||| 0.136363
+and to [X][X] Bush [X] ||| und [X][X] Bush [X] ||| 0.00927803 1 ||| ||| 0.136363
+and to the [X][X] Bush [X] ||| und [X][X] Bush [X] ||| 0.00927803 1 ||| ||| 0.136363
+and [X][X] European Community [X] ||| und [X][X] Europäischen Union [X] ||| 0.013917 1 ||| ||| 0.0571428
+and [X][X] the European Community [X] ||| und [X][X] Europäischen Union [X] ||| 0.013917 1 ||| ||| 0.0571428
+and [X][X] European [X] ||| und [X][X] Europäischen [X] ||| 0.00927803 1 ||| ||| 0.12
+and [X][X] of the European [X] ||| und [X][X] Europäischen [X] ||| 0.00927803 1 ||| ||| 0.12
+and [X][X] the European [X] ||| und [X][X] Europäischen [X] ||| 0.00927803 1 ||| ||| 0.12
+, [X][X] legislative proposal [X] ||| und [X][X] Legislativvorschlag [X] ||| 0.0278341 1 ||| ||| 0.2
+and [X][X] you [X] ||| und [X][X] Sie [X] ||| 0.0278341 1 ||| ||| 0.1
+and [X][X] you [X][X] [X] ||| und [X][X] Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0623647
+and [X][X] you [X][X] to [X] ||| und [X][X] Sie [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0188679
+and [X][X] you [X][X] the [X] ||| und [X][X] Sie [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0149254
+and [X][X] you represent , [X] ||| und [X][X] Sie vertreten , [X] ||| 0.0278341 1 ||| ||| 0.0285714
+and [X][X] you represent [X] ||| und [X][X] Sie vertreten [X] ||| 0.0278341 1 ||| ||| 0.0526316
+and [X][X] you represent [X][X] [X] ||| und [X][X] Sie vertreten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0337933
+and [X][X] Texas , Mr [X] ||| und [X][X] Texas , George W. [X] ||| 0.0278341 1 ||| ||| 0.0714286
+and [X][X] Community [X] ||| und [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0285714
+and [X][X] condemned person [X] ||| und [X][X] Verurteilten [X] ||| 0.0278341 1 ||| ||| 0.0714286
+, [X][X] [X] ||| und [X][X] [X] ||| 0.00307123 1 ||| ||| 6.34399
+and [X][X] , [X] ||| und [X][X] [X] ||| 0.000292498 1 ||| ||| 6.34399
+and [X][X] [X] ||| und [X][X] [X] ||| 0.724475 1 ||| ||| 6.34399
+and [X][X] of [X] ||| und [X][X] [X] ||| 0.000438748 1 ||| ||| 6.34399
+and [X][X] of the [X] ||| und [X][X] [X] ||| 0.000337498 1 ||| ||| 6.34399
+and [X][X] the [X] ||| und [X][X] [X] ||| 0.000337498 1 ||| ||| 6.34399
+and to [X][X] [X] ||| und [X][X] [X] ||| 0.00203451 1 ||| ||| 6.34399
+and to the [X][X] [X] ||| und [X][X] [X] ||| 0.00115702 1 ||| ||| 6.34399
+and [X][X] of [X][X] Community [X] ||| und [X][X] [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0285714
+and [X][X] of [X][X] [X] ||| und [X][X] [X][X] [X] ||| 0.0151822 1 ||| ||| 0.125714
+and [X][X] of the [X][X] [X] ||| und [X][X] [X][X] [X] ||| 0.00632593 1 ||| ||| 0.125714
+and [X][X] the [X][X] [X] ||| und [X][X] [X][X] [X] ||| 0.00632593 1 ||| ||| 0.125714
+and [X][X] in Russia [X][X] [X] ||| und [X][X] [X][X] in Rußland [X] ||| 0.0278341 1 ||| ||| 0.133333
+and [X][X] in [X][X] too [X] ||| und [X][X] auch in [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0666667
+and [X][X] to [X] ||| und [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0188679
+and [X][X] to the [X] ||| und [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0149254
+and [X][X] the [X] ||| und [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0149254
+and [X][X] the condemned person [X] ||| und [X][X] des Verurteilten [X] ||| 0.0278341 1 ||| ||| 0.0714286
+and [X][X] the [X] ||| und [X][X] des [X] ||| 0.0278341 1 ||| ||| 0.166667
+and [X][X] the [X][X] [X] ||| und [X][X] des [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0714286
+and [X][X] you [X] ||| und [X][X] die Sie [X] ||| 0.0278341 1 ||| ||| 0.1
+and [X][X] you [X][X] [X] ||| und [X][X] die Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0623647
+and [X][X] you [X][X] to [X] ||| und [X][X] die Sie [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0188679
+and [X][X] you [X][X] the [X] ||| und [X][X] die Sie [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0149254
+and [X][X] you represent , [X] ||| und [X][X] die Sie vertreten , [X] ||| 0.0278341 1 ||| ||| 0.0285714
+and [X][X] you represent [X] ||| und [X][X] die Sie vertreten [X] ||| 0.0278341 1 ||| ||| 0.0526316
+and [X][X] you represent [X][X] [X] ||| und [X][X] die Sie vertreten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0337933
+and [X][X] [X] ||| und [X][X] die [X] ||| 0.0278341 1 ||| ||| 0.2
+and made [X][X] that [X] ||| und [X][X] gemacht hat , daß [X] ||| 0.0278341 1 ||| ||| 0.2
+and made [X][X] that [X][X] [X] ||| und [X][X] gemacht hat , daß [X][X] [X] ||| 0.0278341 1 ||| ||| 0.133333
+and made [X][X] [X] ||| und [X][X] gemacht hat [X] ||| 0.0278341 1 ||| ||| 0.333333
+and [X][X] whole [X] ||| und [X][X] gesamten [X] ||| 0.0135016 1 ||| ||| 0.34359
+and [X][X] whole of [X] ||| und [X][X] gesamten [X] ||| 0.00810096 1 ||| ||| 0.34359
+and [X][X] whole of the [X] ||| und [X][X] gesamten [X] ||| 0.00623151 1 ||| ||| 0.34359
+and [X][X] whole [X][X] Community [X] ||| und [X][X] gesamten [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0285714
+and [X][X] whole [X][X] [X] ||| und [X][X] gesamten [X][X] [X] ||| 0.013917 1 ||| ||| 0.137143
+and [X][X] whole of [X][X] [X] ||| und [X][X] gesamten [X][X] [X] ||| 0.013917 1 ||| ||| 0.137143
+and [X][X] represent , [X] ||| und [X][X] vertreten , [X] ||| 0.0278341 1 ||| ||| 0.0285714
+and [X][X] represent , [X][X] [X] ||| und [X][X] vertreten , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0149254
+and [X][X] represent , to [X] ||| und [X][X] vertreten , bei [X] ||| 0.0278341 1 ||| ||| 0.0188679
+and [X][X] represent [X] ||| und [X][X] vertreten [X] ||| 0.0278341 1 ||| ||| 0.0526316
+and [X][X] represent [X][X] [X] ||| und [X][X] vertreten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0337933
+and [X][X] represent [X][X] the [X] ||| und [X][X] vertreten [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0149254
+and [X][X] of [X] ||| und [X][X] von [X] ||| 0.013917 1 ||| ||| 0.222222
+and to [X][X] of [X] ||| und [X][X] von [X] ||| 0.013917 1 ||| ||| 0.222222
+and [X][X] of [X][X] , [X] ||| und [X][X] von [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0357143
+and [X][X] of [X][X] Bush [X] ||| und [X][X] von [X][X] Bush [X] ||| 0.0278341 1 ||| ||| 0.0454545
+and [X][X] of [X][X] [X] ||| und [X][X] von [X][X] [X] ||| 0.013917 1 ||| ||| 0.305194
+and to [X][X] of [X][X] [X] ||| und [X][X] von [X][X] [X] ||| 0.013917 1 ||| ||| 0.305194
+and the other [X] ||| und anderen [X] ||| 0.0278341 1 ||| ||| 0.333333
+and [X] ||| und auf [X] ||| 0.0278341 1 ||| ||| 1
+and [X][X] [X] ||| und auf [X][X] [X] ||| 0.0278341 1 ||| ||| 0.25
+and which [X] ||| und auf die [X] ||| 0.0278341 1 ||| ||| 1
+and which I [X] ||| und auf die ich [X] ||| 0.0278341 1 ||| ||| 0.25
+and that [X] ||| und daß [X] ||| 0.0278341 1 ||| ||| 1
+and television [X] ||| und dem Fernsehen [X] ||| 0.0278341 1 ||| ||| 1
+and the institution [X] ||| und der Institution , [X] ||| 0.0278341 1 ||| ||| 0.25
+and the institution [X][X] , [X] ||| und der Institution , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0285714
+and the institution [X][X] [X] ||| und der Institution , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.114996
+and the institution [X][X] to [X] ||| und der Institution , [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0188679
+and the institution [X][X] the [X] ||| und der Institution , [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0149254
+and the institution you [X] ||| und der Institution , die Sie [X] ||| 0.0278341 1 ||| ||| 0.1
+and the institution you [X][X] [X] ||| und der Institution , die Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0623647
+and the institution you represent [X] ||| und der Institution , die Sie vertreten [X] ||| 0.0278341 1 ||| ||| 0.0526316
+and the institution [X] ||| und der Institution , die [X] ||| 0.0278341 1 ||| ||| 0.2
+and the institution [X][X] , [X] ||| und der Institution , die [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0285714
+and the institution [X][X] [X] ||| und der Institution , die [X][X] [X] ||| 0.0278341 1 ||| ||| 0.114996
+and the institution [X][X] to [X] ||| und der Institution , die [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0188679
+and the institution [X][X] the [X] ||| und der Institution , die [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0149254
+and the institution [X] ||| und der Institution [X] ||| 0.0278341 1 ||| ||| 0.333333
+and the institution [X][X] , [X] ||| und der Institution [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0285714
+and the institution [X][X] [X] ||| und der Institution [X][X] [X] ||| 0.0278341 1 ||| ||| 0.114996
+and the institution [X][X] to [X] ||| und der Institution [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0188679
+and the institution [X][X] the [X] ||| und der Institution [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0149254
+and the [X] ||| und der [X] ||| 0.0278341 1 ||| ||| 1
+and the [X][X] , [X] ||| und der [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0285714
+and the [X][X] , [X][X] [X] ||| und der [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0149254
+and the [X][X] , to [X] ||| und der [X][X] , bei [X] ||| 0.0278341 1 ||| ||| 0.0188679
+and the [X][X] [X] ||| und der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.214996
+and the [X][X] to [X] ||| und der [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.0188679
+and the [X][X] to the [X] ||| und der [X][X] bei dem [X] ||| 0.0278341 1 ||| ||| 0.0149254
+and the [X][X] the [X] ||| und der [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0149254
+and the [X][X] represent , [X] ||| und der [X][X] vertreten , [X] ||| 0.0278341 1 ||| ||| 0.0285714
+and the [X][X] represent [X] ||| und der [X][X] vertreten [X] ||| 0.0278341 1 ||| ||| 0.0526316
+and the [X][X] represent [X][X] [X] ||| und der [X][X] vertreten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0337933
+and made it clear that [X] ||| und deutlich gemacht hat , daß [X] ||| 0.0278341 1 ||| ||| 0.2
+and made it clear [X] ||| und deutlich gemacht hat [X] ||| 0.0278341 1 ||| ||| 0.333333
+and made it clear [X][X] [X] ||| und deutlich gemacht hat [X][X] [X] ||| 0.0278341 1 ||| ||| 0.133333
+and a proposal [X] ||| und ein Vorschlag [X] ||| 0.0278341 1 ||| ||| 0.333333
+and a proposal [X][X] [X] ||| und ein Vorschlag [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+and a proposal [X][X] [X] ||| und ein Vorschlag [X][X] [X] ||| 0.0278341 1 ||| ||| 0.233766
+and a [X] ||| und ein [X] ||| 0.0278341 1 ||| ||| 1
+and a [X][X] [X] ||| und ein [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+and a [X][X] [X] ||| und ein [X][X] [X] ||| 0.0278341 1 ||| ||| 0.233766
+, not a legislative proposal [X] ||| und keinen Legislativvorschlag [X] ||| 0.0278341 1 ||| ||| 0.2
+, not a [X] ||| und keinen [X] ||| 0.0278341 1 ||| ||| 0.5
+, not a [X][X] [X] ||| und keinen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+and whether [X] ||| und ob [X] ||| 0.0278341 1 ||| ||| 1
+and urging [X] ||| und sie auffordern [X] ||| 0.0278341 1 ||| ||| 1
+and urging [X] ||| und sie auffordern würden , [X] ||| 0.0278341 1 ||| ||| 1
+and urging [X] ||| und sie auffordern würden [X] ||| 0.0278341 1 ||| ||| 1
+and by [X] ||| und von [X] ||| 0.0278341 1 ||| ||| 1
+and by [X][X] European Community [X] ||| und von [X][X] Europäischen Union [X] ||| 0.0278341 1 ||| ||| 0.0285714
+and by [X][X] European [X] ||| und von [X][X] Europäischen [X] ||| 0.013917 1 ||| ||| 0.08
+and by [X][X] the European [X] ||| und von [X][X] Europäischen [X] ||| 0.013917 1 ||| ||| 0.08
+and by [X][X] Community [X] ||| und von [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0285714
+and by [X][X] [X] ||| und von [X][X] [X] ||| 0.0172252 1 ||| ||| 0.666007
+and by [X][X] of [X] ||| und von [X][X] [X] ||| 0.00417925 1 ||| ||| 0.666007
+and by [X][X] of the [X] ||| und von [X][X] [X] ||| 0.00321481 1 ||| ||| 0.666007
+and by [X][X] the [X] ||| und von [X][X] [X] ||| 0.00321481 1 ||| ||| 0.666007
+and by [X][X] of [X][X] [X] ||| und von [X][X] [X][X] [X] ||| 0.0196476 1 ||| ||| 0.0971428
+and by [X][X] the [X][X] [X] ||| und von [X][X] [X][X] [X] ||| 0.0081865 1 ||| ||| 0.0971428
+and by the [X] ||| und von der [X] ||| 0.0278341 1 ||| ||| 0.333333
+and by the [X][X] European [X] ||| und von der [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.04
+and by the [X][X] Community [X] ||| und von der [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0285714
+and by the [X][X] [X] ||| und von der [X][X] [X] ||| 0.0211934 1 ||| ||| 0.322418
+and by the [X][X] the [X] ||| und von der [X][X] [X] ||| 0.00664071 1 ||| ||| 0.322418
+and by the whole [X] ||| und von der gesamten [X] ||| 0.0173963 1 ||| ||| 0.266667
+and by the whole of [X] ||| und von der gesamten [X] ||| 0.0104378 1 ||| ||| 0.266667
+and by the whole [X][X] [X] ||| und von der gesamten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0685714
+, and we [X] ||| und wir [X] ||| 0.00927803 1 ||| ||| 1.5
+and we [X] ||| und wir [X] ||| 0.0185561 1 ||| ||| 1.5
+and to reprieve [X] ||| und zur Begnadigung [X] ||| 0.0278341 1 ||| ||| 0.333333
+and to reprieve [X][X] [X] ||| und zur Begnadigung [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0714286
+and to reprieve the [X] ||| und zur Begnadigung des [X] ||| 0.0278341 1 ||| ||| 0.166667
+and to reprieve the [X][X] [X] ||| und zur Begnadigung des [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0714286
+and to [X] ||| und zur [X] ||| 0.0278341 1 ||| ||| 1
+and to [X][X] condemned person [X] ||| und zur [X][X] Verurteilten [X] ||| 0.0278341 1 ||| ||| 0.0714286
+and to [X][X] [X] ||| und zur [X][X] [X] ||| 0.0278341 1 ||| ||| 0.238095
+it [X] ||| und zwar [X] ||| 0.0278341 1 ||| ||| 1
+it says [X][X] [X] ||| und zwar [X][X] Strafen [X] ||| 0.0278341 1 ||| ||| 0.2
+it [X][X] [X] ||| und zwar [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+it says [X][X] should [X] ||| und zwar sollen [X][X] Strafen [X] ||| 0.0278341 1 ||| ||| 0.2
+it [X][X] should [X] ||| und zwar sollen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+it says that this should [X] ||| und zwar sollen derartige Strafen [X] ||| 0.0278341 1 ||| ||| 0.2
+of us [X] ||| uns [X] ||| 0.013917 1 ||| ||| 2
+us [X] ||| uns [X] ||| 0.013917 1 ||| ||| 2
+of us here [X] ||| uns hier [X] ||| 0.00927803 1 ||| ||| 1.5
+us here [X] ||| uns hier [X] ||| 0.0185561 1 ||| ||| 1.5
+[X][X] us here [X] ||| uns hier [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+all of us here [X] ||| uns hier alle [X] ||| 0.0278341 1 ||| ||| 0.2
+people signed [X] ||| unterzeichnet worden [X] ||| 0.013917 1 ||| ||| 2
+signed [X] ||| unterzeichnet worden [X] ||| 0.013917 1 ||| ||| 2
+people signed [X] ||| unterzeichnet worden ist [X] ||| 0.013917 1 ||| ||| 2
+signed [X] ||| unterzeichnet worden ist [X] ||| 0.013917 1 ||| ||| 2
+inadmissible [X] ||| unzulässig [X] ||| 0.0278341 1 ||| ||| 1
+last year [X] ||| vergangenen Jahres- [X] ||| 0.0278341 1 ||| ||| 1
+last [X] ||| vergangenen [X] ||| 0.0278341 1 ||| ||| 1
+done [X] ||| verhängt [X] ||| 0.0278341 1 ||| ||| 1
+be done [X] ||| verhängt werden [X] ||| 0.0278341 1 ||| ||| 1
+various countries [X] ||| verschiedenen Ländern [X] ||| 0.0278341 1 ||| ||| 1
+various countries [X][X] European Union [X] ||| verschiedenen Ländern [X][X] Europäischen Union [X] ||| 0.0278341 1 ||| ||| 0.0909091
+various countries [X][X] European [X] ||| verschiedenen Ländern [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.142857
+various countries [X][X] Union [X] ||| verschiedenen Ländern [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0909091
+various countries [X][X] [X] ||| verschiedenen Ländern [X][X] [X] ||| 0.0278341 1 ||| ||| 0.483766
+various countries of the European [X] ||| verschiedenen Ländern der Europäischen [X] ||| 0.0278341 1 ||| ||| 0.142857
+various countries of the [X] ||| verschiedenen Ländern der [X] ||| 0.0278341 1 ||| ||| 0.25
+various countries of the [X][X] [X] ||| verschiedenen Ländern der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0909091
+various [X] ||| verschiedenen [X] ||| 0.0278341 1 ||| ||| 1
+various [X][X] European Union [X] ||| verschiedenen [X][X] Europäischen Union [X] ||| 0.0278341 1 ||| ||| 0.0909091
+various [X][X] European [X] ||| verschiedenen [X][X] Europäischen [X] ||| 0.0278341 1 ||| ||| 0.142857
+various [X][X] Union [X] ||| verschiedenen [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.0909091
+various [X][X] [X] ||| verschiedenen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.483766
+upheld [X] ||| verteidigt [X] ||| 0.0278341 1 ||| ||| 1
+represent , [X] ||| vertreten , [X] ||| 0.0278341 1 ||| ||| 1
+represent , [X][X] Governor [X] ||| vertreten , [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0444444
+represent , [X][X] the Governor [X] ||| vertreten , [X][X] Gouverneur [X] ||| 0.013917 1 ||| ||| 0.0444444
+represent , [X][X] Governor of [X] ||| vertreten , [X][X] Gouverneur von [X] ||| 0.0278341 1 ||| ||| 0.0181818
+represent , [X][X] President [X] ||| vertreten , [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0909091
+represent , [X][X] President [X][X] [X] ||| vertreten , [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.108376
+represent , [X][X] President and [X] ||| vertreten , [X][X] Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.0526316
+represent , [X][X] [X] ||| vertreten , [X][X] [X] ||| 0.0224568 1 ||| ||| 0.518815
+represent , [X][X] the [X] ||| vertreten , [X][X] [X] ||| 0.00173063 1 ||| ||| 0.518815
+represent , [X][X] to [X] ||| vertreten , [X][X] [X] ||| 0.00191605 1 ||| ||| 0.518815
+represent , [X][X] to the [X] ||| vertreten , [X][X] [X] ||| 0.00173063 1 ||| ||| 0.518815
+represent , [X][X] the [X][X] [X] ||| vertreten , [X][X] [X][X] [X] ||| 0.00863817 1 ||| ||| 0.0585858
+represent , [X][X] to [X][X] [X] ||| vertreten , [X][X] [X][X] [X] ||| 0.0191959 1 ||| ||| 0.0585858
+represent , [X][X] and [X] ||| vertreten , [X][X] und [X] ||| 0.016582 1 ||| ||| 0.0883459
+represent , [X][X] and to [X] ||| vertreten , [X][X] und [X] ||| 0.0112521 1 ||| ||| 0.0883459
+represent , [X][X] and [X][X] [X] ||| vertreten , [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.040404
+represent , [X][X] of [X] ||| vertreten , [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0181818
+represent , to [X] ||| vertreten , bei [X] ||| 0.0278341 1 ||| ||| 0.333333
+represent , to [X][X] Governor [X] ||| vertreten , bei [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.0222222
+represent , to [X][X] [X] ||| vertreten , bei [X][X] [X] ||| 0.0219197 1 ||| ||| 0.319889
+represent , to [X][X] the [X] ||| vertreten , bei [X][X] [X] ||| 0.00280683 1 ||| ||| 0.319889
+represent , to [X][X] to [X] ||| vertreten , bei [X][X] [X] ||| 0.00310756 1 ||| ||| 0.319889
+represent , to [X][X] and [X] ||| vertreten , bei [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.0526316
+represent , to [X][X] of [X] ||| vertreten , bei [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0181818
+represent , to the President [X] ||| vertreten , bei dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0909091
+represent , to the [X] ||| vertreten , bei dem [X] ||| 0.0278341 1 ||| ||| 0.166667
+represent , to the [X][X] [X] ||| vertreten , bei dem [X][X] [X] ||| 0.0278341 1 ||| ||| 0.161008
+represent [X] ||| vertreten [X] ||| 0.0278341 1 ||| ||| 1
+represent [X][X] Governor [X] ||| vertreten [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.0666666
+represent [X][X] the Governor [X] ||| vertreten [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.0666666
+represent [X][X] to the Governor [X] ||| vertreten [X][X] Gouverneur [X] ||| 0.00927803 1 ||| ||| 0.0666666
+represent [X][X] Governor of [X] ||| vertreten [X][X] Gouverneur von [X] ||| 0.013917 1 ||| ||| 0.0363636
+represent [X][X] the Governor of [X] ||| vertreten [X][X] Gouverneur von [X] ||| 0.013917 1 ||| ||| 0.0363636
+represent [X][X] President [X] ||| vertreten [X][X] Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0909091
+represent [X][X] President [X][X] Governor [X] ||| vertreten [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.0222222
+represent [X][X] President [X][X] [X] ||| vertreten [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0214496 1 ||| ||| 0.140634
+represent [X][X] President [X][X] the [X] ||| vertreten [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.00638448 1 ||| ||| 0.140634
+represent [X][X] President [X][X] of [X] ||| vertreten [X][X] Präsidentschaftskandidaten [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0181818
+represent [X][X] President and [X] ||| vertreten [X][X] Präsidentschaftskandidaten und [X] ||| 0.016582 1 ||| ||| 0.0883459
+represent [X][X] President and to [X] ||| vertreten [X][X] Präsidentschaftskandidaten und [X] ||| 0.0112521 1 ||| ||| 0.0883459
+represent [X][X] President and [X][X] [X] ||| vertreten [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.040404
+represent [X][X] [X] ||| vertreten [X][X] [X] ||| 0.0245602 1 ||| ||| 0.852148
+represent [X][X] the [X] ||| vertreten [X][X] [X] ||| 0.00105366 1 ||| ||| 0.852148
+represent [X][X] to [X] ||| vertreten [X][X] [X] ||| 0.00116655 1 ||| ||| 0.852148
+represent [X][X] to the [X] ||| vertreten [X][X] [X] ||| 0.00105366 1 ||| ||| 0.852148
+represent [X][X] the [X][X] [X] ||| vertreten [X][X] [X][X] [X] ||| 0.00659229 1 ||| ||| 0.0767676
+represent [X][X] to [X][X] [X] ||| vertreten [X][X] [X][X] [X] ||| 0.0146495 1 ||| ||| 0.0767676
+represent [X][X] to the [X][X] [X] ||| vertreten [X][X] [X][X] [X] ||| 0.00659229 1 ||| ||| 0.0767676
+represent [X][X] to [X][X] of [X] ||| vertreten [X][X] [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0181818
+represent [X][X] the President [X] ||| vertreten [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0278341 1 ||| ||| 0.0909091
+represent [X][X] the President [X][X] [X] ||| vertreten [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0278341 1 ||| ||| 0.108376
+represent [X][X] the President and [X] ||| vertreten [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0278341 1 ||| ||| 0.0526316
+represent [X][X] the [X] ||| vertreten [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.166667
+represent [X][X] the [X][X] Governor [X] ||| vertreten [X][X] dem [X][X] Gouverneur [X] ||| 0.0278341 1 ||| ||| 0.0222222
+represent [X][X] the [X][X] [X] ||| vertreten [X][X] dem [X][X] [X] ||| 0.0195716 1 ||| ||| 0.22898
+represent [X][X] the [X][X] the [X] ||| vertreten [X][X] dem [X][X] [X] ||| 0.00392119 1 ||| ||| 0.22898
+represent [X][X] the [X][X] to [X] ||| vertreten [X][X] dem [X][X] [X] ||| 0.00434131 1 ||| ||| 0.22898
+represent [X][X] the [X][X] of [X] ||| vertreten [X][X] dem [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0181818
+represent [X][X] and [X] ||| vertreten [X][X] und [X] ||| 0.0121468 1 ||| ||| 0.120604
+represent [X][X] and to [X] ||| vertreten [X][X] und [X] ||| 0.00824247 1 ||| ||| 0.120604
+represent [X][X] and to the [X] ||| vertreten [X][X] und [X] ||| 0.00744482 1 ||| ||| 0.120604
+represent [X][X] and [X][X] [X] ||| vertreten [X][X] und [X][X] [X] ||| 0.013917 1 ||| ||| 0.080808
+represent [X][X] and to [X][X] [X] ||| vertreten [X][X] und [X][X] [X] ||| 0.013917 1 ||| ||| 0.080808
+represent [X][X] and [X][X] of [X] ||| vertreten [X][X] und [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0181818
+represent [X][X] of [X] ||| vertreten [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0181818
+adopted . [X] ||| vertreten haben . [X] ||| 0.0278341 1 ||| ||| 1
+adopted [X] ||| vertreten haben [X] ||| 0.0278341 1 ||| ||| 1
+many [X][X] , [X][X] [X] ||| vielen , [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.087037
+many [X][X] , [X][X] [X] ||| vielen , [X][X] , [X][X] ist [X] ||| 0.0278341 1 ||| ||| 0.037037
+many people signed , [X][X] [X] ||| vielen , [X][X] , unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.05
+many people signed , [X][X] [X] ||| vielen , [X][X] , unterzeichnet worden ist [X] ||| 0.0278341 1 ||| ||| 0.037037
+many [X][X] , [X][X] [X] ||| vielen , [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.174074
+many [X][X] , [X][X] [X] ||| vielen , [X][X] [X][X] ist [X] ||| 0.0278341 1 ||| ||| 0.0740741
+many people signed , [X][X] [X] ||| vielen , [X][X] unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.05
+many people signed , [X][X] [X] ||| vielen , [X][X] unterzeichnet worden ist [X] ||| 0.0278341 1 ||| ||| 0.037037
+many [X][X] , including myself [X] ||| vielen , auch von mir selbst , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.087037
+many [X][X] , including myself [X] ||| vielen , auch von mir selbst , [X][X] ist [X] ||| 0.0278341 1 ||| ||| 0.037037
+many [X][X] , including myself [X] ||| vielen , auch von mir selbst [X][X] [X] ||| 0.0278341 1 ||| ||| 0.087037
+many [X][X] , including myself [X] ||| vielen , auch von mir selbst [X][X] ist [X] ||| 0.0278341 1 ||| ||| 0.037037
+many resolutions [X] ||| vielen Entschließungen [X] ||| 0.0278341 1 ||| ||| 1
+many [X] ||| vielen [X] ||| 0.160946 1 ||| ||| 3
+many people [X] ||| vielen [X] ||| 0.00927803 1 ||| ||| 3
+many people signed [X][X] [X] ||| vielen [X][X] , unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.05
+many people signed [X][X] [X] ||| vielen [X][X] , unterzeichnet worden ist [X] ||| 0.0278341 1 ||| ||| 0.037037
+many [X][X] [X] ||| vielen [X][X] [X] ||| 0.013917 1 ||| ||| 0.174074
+many people [X][X] [X] ||| vielen [X][X] [X] ||| 0.013917 1 ||| ||| 0.174074
+many [X][X] [X] ||| vielen [X][X] ist [X] ||| 0.013917 1 ||| ||| 0.074074
+many people [X][X] [X] ||| vielen [X][X] ist [X] ||| 0.013917 1 ||| ||| 0.074074
+many people signed [X][X] myself [X] ||| vielen [X][X] mir selbst , unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.05
+many people signed [X][X] myself [X] ||| vielen [X][X] mir selbst , unterzeichnet worden ist [X] ||| 0.0278341 1 ||| ||| 0.037037
+many people signed [X][X] [X] ||| vielen [X][X] unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.05
+many people signed [X][X] [X] ||| vielen [X][X] unterzeichnet worden ist [X] ||| 0.0278341 1 ||| ||| 0.037037
+many people signed [X][X] myself [X] ||| vielen [X][X] von mir selbst , unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.05
+many people signed [X][X] myself [X] ||| vielen [X][X] von mir selbst , unterzeichnet worden ist [X] ||| 0.0278341 1 ||| ||| 0.037037
+by the European Parliament [X] ||| vom Europäischen Parlament [X] ||| 0.0278341 1 ||| ||| 0.25
+by the European Parliament [X][X] [X] ||| vom Europäischen Parlament [X][X] [X] ||| 0.0278341 1 ||| ||| 0.211951
+by the European Parliament and [X] ||| vom Europäischen Parlament und [X] ||| 0.0278341 1 ||| ||| 0.125
+by the European [X] ||| vom Europäischen [X] ||| 0.0278341 1 ||| ||| 0.5
+by the European [X][X] [X] ||| vom Europäischen [X][X] [X] ||| 0.0237954 1 ||| ||| 0.394141
+by the European [X][X] of [X] ||| vom Europäischen [X][X] [X] ||| 0.00207705 1 ||| ||| 0.394141
+by the European [X][X] the [X] ||| vom Europäischen [X][X] [X] ||| 0.00196166 1 ||| ||| 0.394141
+by the European [X][X] the [X] ||| vom Europäischen [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.047619
+by the European [X][X] whole [X] ||| vom Europäischen [X][X] gesamten [X] ||| 0.0278341 1 ||| ||| 0.0357143
+by the European [X][X] by [X] ||| vom Europäischen [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0714286
+by the [X] ||| vom [X] ||| 0.0278341 1 ||| ||| 1
+by the [X][X] [X] ||| vom [X][X] [X] ||| 0.0243143 1 ||| ||| 0.671918
+by the [X][X] of [X] ||| vom [X][X] [X] ||| 0.00121838 1 ||| ||| 0.671918
+by the [X][X] of the [X] ||| vom [X][X] [X] ||| 0.00115069 1 ||| ||| 0.671918
+by the [X][X] the [X] ||| vom [X][X] [X] ||| 0.00115069 1 ||| ||| 0.671918
+by the [X][X] the [X] ||| vom [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.047619
+by the [X][X] the [X][X] [X] ||| vom [X][X] der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0571895
+by the [X][X] the whole [X] ||| vom [X][X] der gesamten [X] ||| 0.0278341 1 ||| ||| 0.0357143
+by the [X][X] whole [X] ||| vom [X][X] gesamten [X] ||| 0.0152639 1 ||| ||| 0.0651261
+by the [X][X] whole of [X] ||| vom [X][X] gesamten [X] ||| 0.0125702 1 ||| ||| 0.0651261
+by the [X][X] and [X] ||| vom [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.125
+by the [X][X] and [X][X] [X] ||| vom [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.140523
+by the [X][X] and by [X] ||| vom [X][X] und von [X] ||| 0.0278341 1 ||| ||| 0.0714286
+by the [X][X] by [X] ||| vom [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.0714286
+by the [X][X] by [X][X] [X] ||| vom [X][X] von [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0929038
+by the [X][X] by the [X] ||| vom [X][X] von der [X] ||| 0.0278341 1 ||| ||| 0.047619
+of Alexander Nikitin . [X] ||| von Alexander Nikitin . [X] ||| 0.0278341 1 ||| ||| 0.166667
+of Alexander Nikitin [X] ||| von Alexander Nikitin [X] ||| 0.0278341 1 ||| ||| 0.333333
+of Alexander [X] ||| von Alexander [X] ||| 0.0278341 1 ||| ||| 1
+of Alexander [X][X] [X] ||| von Alexander [X][X] [X] ||| 0.0278341 1 ||| ||| 0.166667
+as Mr Evans [X] ||| von Herrn Evans [X] ||| 0.0108094 1 ||| ||| 0.858333
+as Mr Evans has [X] ||| von Herrn Evans [X] ||| 0.00648562 1 ||| ||| 0.858333
+do as Mr Evans [X] ||| von Herrn Evans [X] ||| 0.00648562 1 ||| ||| 0.858333
+do as Mr Evans has [X] ||| von Herrn Evans [X] ||| 0.00405351 1 ||| ||| 0.858333
+at his [X] ||| von Herrn Ponnambalam [X] ||| 0.0278341 1 ||| ||| 1
+at his [X][X] [X] ||| von Herrn Ponnambalam [X][X] [X] ||| 0.0278341 1 ||| ||| 0.458333
+at his [X][X] other [X] ||| von Herrn Ponnambalam [X][X] anderen [X] ||| 0.0278341 1 ||| ||| 0.125
+at his and [X] ||| von Herrn Ponnambalam und [X] ||| 0.0167005 1 ||| ||| 0.833333
+at his and the [X] ||| von Herrn Ponnambalam und [X] ||| 0.0111336 1 ||| ||| 0.833333
+at his and [X][X] [X] ||| von Herrn Ponnambalam und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.125
+at his and the other [X] ||| von Herrn Ponnambalam und anderen [X] ||| 0.0278341 1 ||| ||| 0.125
+as Mr [X] ||| von Herrn [X] ||| 0.0185561 1 ||| ||| 1.5
+do as Mr [X] ||| von Herrn [X] ||| 0.00927803 1 ||| ||| 1.5
+as Mr [X][X] [X] ||| von Herrn [X][X] [X] ||| 0.0171287 1 ||| ||| 0.325
+do as Mr [X][X] [X] ||| von Herrn [X][X] [X] ||| 0.0107054 1 ||| ||| 0.325
+Sri Lankan [X] ||| von Sri Lanka [X] ||| 0.0278341 1 ||| ||| 1
+[X][X] Sri Lankan [X] ||| von Sri Lanka [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0769231
+[X][X] the Sri Lankan [X] ||| von Sri Lanka [X][X] das [X] ||| 0.013917 1 ||| ||| 0.153846
+[X][X] to the Sri Lankan [X] ||| von Sri Lanka [X][X] das [X] ||| 0.013917 1 ||| ||| 0.153846
+to [X][X] Sri Lankan [X] ||| von Sri Lanka in [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0769231
+to [X][X] the Sri Lankan [X] ||| von Sri Lanka in [X][X] das [X] ||| 0.0278341 1 ||| ||| 0.0769231
+in Sri Lanka [X] ||| von Sri Lanka übermitteln [X] ||| 0.0278341 1 ||| ||| 0.333333
+in Sri Lanka [X][X] [X] ||| von Sri Lanka übermitteln [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+in Sri Lanka [X][X] [X] ||| von Sri Lanka übermitteln [X][X] [X] ||| 0.0278341 1 ||| ||| 0.210207
+in Sri Lanka [X][X] [X] ||| von Sri Lanka übermitteln [X][X] würden , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+in Sri Lanka [X][X] [X] ||| von Sri Lanka übermitteln [X][X] würden [X] ||| 0.0278341 1 ||| ||| 0.0666667
+in Sri Lanka and [X] ||| von Sri Lanka übermitteln und [X] ||| 0.0278341 1 ||| ||| 0.166667
+in Sri Lanka and urging [X] ||| von Sri Lanka übermitteln und sie auffordern [X] ||| 0.0278341 1 ||| ||| 0.0909091
+in Sri Lanka and urging [X] ||| von Sri Lanka übermitteln und sie auffordern würden , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+in Sri Lanka and urging [X] ||| von Sri Lanka übermitteln und sie auffordern würden [X] ||| 0.0278341 1 ||| ||| 0.0666667
+Sri [X] ||| von Sri [X] ||| 0.013917 1 ||| ||| 2
+in Sri [X] ||| von Sri [X] ||| 0.013917 1 ||| ||| 2
+in Sri [X][X] [X] ||| von Sri [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+in Sri [X][X] [X] ||| von Sri [X][X] [X] ||| 0.0278341 1 ||| ||| 0.376874
+in Sri [X][X] urging [X] ||| von Sri [X][X] sie auffordern [X] ||| 0.0278341 1 ||| ||| 0.0909091
+in Sri [X][X] urging [X] ||| von Sri [X][X] sie auffordern würden , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+in Sri [X][X] urging [X] ||| von Sri [X][X] sie auffordern würden [X] ||| 0.0278341 1 ||| ||| 0.0666667
+in Sri [X][X] [X] ||| von Sri [X][X] würden , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+in Sri [X][X] [X] ||| von Sri [X][X] würden [X] ||| 0.0278341 1 ||| ||| 0.0666667
+of Texas , Mr Bush [X] ||| von Texas , George W. Bush [X] ||| 0.0278341 1 ||| ||| 0.25
+of Texas , Mr [X] ||| von Texas , George W. [X] ||| 0.0278341 1 ||| ||| 0.5
+of Texas , Mr [X][X] [X] ||| von Texas , George W. [X][X] [X] ||| 0.0278341 1 ||| ||| 0.266667
+as [X] ||| von [X] ||| 0.0039763 1 ||| ||| 7
+by [X] ||| von [X] ||| 0.0039763 1 ||| ||| 7
+do as [X] ||| von [X] ||| 0.0039763 1 ||| ||| 7
+in [X] ||| von [X] ||| 0.0039763 1 ||| ||| 7
+of [X] ||| von [X] ||| 0.246446 1 ||| ||| 7
+in [X][X] [X] ||| von [X][X] , [X] ||| 0.00668018 1 ||| ||| 0.219299
+of [X][X] , [X] ||| von [X][X] , [X] ||| 0.0211539 1 ||| ||| 0.219299
+[X][X] signed , [X][X] [X] ||| von [X][X] , [X][X] , unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] signed , [X][X] [X] ||| von [X][X] , [X][X] unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] signed , including myself [X] ||| von [X][X] , auch von mir selbst , unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.037037
+of [X][X] , who [X] ||| von [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.1
+of [X][X] . [X] ||| von [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.166667
+of [X][X] Bush , [X] ||| von [X][X] Bush , [X] ||| 0.0278341 1 ||| ||| 0.166667
+of [X][X] Bush , who [X] ||| von [X][X] Bush , der [X] ||| 0.0278341 1 ||| ||| 0.1
+of [X][X] Bush [X] ||| von [X][X] Bush [X] ||| 0.0278341 1 ||| ||| 0.25
+of [X][X] Bush [X][X] [X] ||| von [X][X] Bush [X][X] [X] ||| 0.0278341 1 ||| ||| 0.1
+by [X][X] European Community [X] ||| von [X][X] Europäischen Union [X] ||| 0.013917 1 ||| ||| 0.08
+by [X][X] the European Community [X] ||| von [X][X] Europäischen Union [X] ||| 0.013917 1 ||| ||| 0.08
+by [X][X] European [X] ||| von [X][X] Europäischen [X] ||| 0.00927803 1 ||| ||| 0.1875
+by [X][X] of the European [X] ||| von [X][X] Europäischen [X] ||| 0.00927803 1 ||| ||| 0.1875
+by [X][X] the European [X] ||| von [X][X] Europäischen [X] ||| 0.00927803 1 ||| ||| 0.1875
+by [X][X] Community [X] ||| von [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.04
+as [X][X] [X] ||| von [X][X] [X] ||| 0.00317563 1 ||| ||| 4.67461
+as [X][X] has [X] ||| von [X][X] [X] ||| 0.00119086 1 ||| ||| 4.67461
+by [X][X] [X] ||| von [X][X] [X] ||| 0.00463657 1 ||| ||| 4.67461
+by [X][X] of [X] ||| von [X][X] [X] ||| 0.00119086 1 ||| ||| 4.67461
+by [X][X] of the [X] ||| von [X][X] [X] ||| 0.000850615 1 ||| ||| 4.67461
+by [X][X] the [X] ||| von [X][X] [X] ||| 0.000850615 1 ||| ||| 4.67461
+do as [X][X] [X] ||| von [X][X] [X] ||| 0.00193515 1 ||| ||| 4.67461
+do as [X][X] has [X] ||| von [X][X] [X] ||| 0.000744289 1 ||| ||| 4.67461
+in [X][X] [X] ||| von [X][X] [X] ||| 0.00422879 1 ||| ||| 4.67461
+of [X][X] [X] ||| von [X][X] [X] ||| 0.0783279 1 ||| ||| 4.67461
+[X][X] signed [X][X] [X] ||| von [X][X] [X][X] , unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.037037
+by [X][X] of [X][X] Community [X] ||| von [X][X] [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.04
+by [X][X] of [X][X] [X] ||| von [X][X] [X][X] [X] ||| 0.0156328 1 ||| ||| 0.1825
+by [X][X] of the [X][X] [X] ||| von [X][X] [X][X] [X] ||| 0.00610062 1 ||| ||| 0.1825
+by [X][X] the [X][X] [X] ||| von [X][X] [X][X] [X] ||| 0.00610062 1 ||| ||| 0.1825
+[X][X] the [X][X] [X] ||| von [X][X] [X][X] das [X] ||| 0.013917 1 ||| ||| 0.153846
+[X][X] to the [X][X] [X] ||| von [X][X] [X][X] das [X] ||| 0.013917 1 ||| ||| 0.153846
+[X][X] signed [X][X] myself [X] ||| von [X][X] [X][X] mir selbst , unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] signed [X][X] [X] ||| von [X][X] [X][X] unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] signed [X][X] myself [X] ||| von [X][X] [X][X] von mir selbst , unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.037037
+of [X][X] who [X] ||| von [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.1
+to [X][X] the [X][X] [X] ||| von [X][X] in [X][X] das [X] ||| 0.013917 1 ||| ||| 0.153846
+to [X][X] to the [X][X] [X] ||| von [X][X] in [X][X] das [X] ||| 0.013917 1 ||| ||| 0.153846
+in [X][X] urging [X] ||| von [X][X] sie auffordern [X] ||| 0.0278341 1 ||| ||| 0.0909091
+in [X][X] urging [X] ||| von [X][X] sie auffordern würden , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+in [X][X] urging [X] ||| von [X][X] sie auffordern würden [X] ||| 0.0278341 1 ||| ||| 0.0666667
+in [X][X] and [X] ||| von [X][X] und [X] ||| 0.0278341 1 ||| ||| 0.166667
+in [X][X] and urging [X] ||| von [X][X] und sie auffordern [X] ||| 0.0278341 1 ||| ||| 0.0909091
+in [X][X] and urging [X] ||| von [X][X] und sie auffordern würden , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+in [X][X] and urging [X] ||| von [X][X] und sie auffordern würden [X] ||| 0.0278341 1 ||| ||| 0.0666667
+in [X][X] [X] ||| von [X][X] würden , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+in [X][X] [X] ||| von [X][X] würden [X] ||| 0.0278341 1 ||| ||| 0.0666667
+by the [X] ||| von der [X] ||| 0.0278341 1 ||| ||| 1
+by the [X][X] European Community [X] ||| von der [X][X] Europäischen Union [X] ||| 0.0278341 1 ||| ||| 0.04
+by the [X][X] European [X] ||| von der [X][X] Europäischen [X] ||| 0.013917 1 ||| ||| 0.125
+by the [X][X] the European [X] ||| von der [X][X] Europäischen [X] ||| 0.013917 1 ||| ||| 0.125
+by the [X][X] Community [X] ||| von der [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.04
+by the [X][X] [X] ||| von der [X][X] [X] ||| 0.0210742 1 ||| ||| 0.588214
+by the [X][X] the [X] ||| von der [X][X] [X] ||| 0.00675995 1 ||| ||| 0.588214
+by the [X][X] the [X][X] [X] ||| von der [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.04
+by the whole [X] ||| von der gesamten [X] ||| 0.013721 1 ||| ||| 0.67619
+by the whole of [X] ||| von der gesamten [X] ||| 0.00823263 1 ||| ||| 0.67619
+by the whole of the [X] ||| von der gesamten [X] ||| 0.00588044 1 ||| ||| 0.67619
+by the whole [X][X] Community [X] ||| von der gesamten [X][X] Union [X] ||| 0.0278341 1 ||| ||| 0.04
+by the whole [X][X] [X] ||| von der gesamten [X][X] [X] ||| 0.013917 1 ||| ||| 0.205
+by the whole of [X][X] [X] ||| von der gesamten [X][X] [X] ||| 0.013917 1 ||| ||| 0.205
+myself [X] ||| von mir selbst , [X] ||| 0.0278341 1 ||| ||| 1
+myself [X] ||| von mir selbst [X] ||| 0.0278341 1 ||| ||| 1
+many [X][X] , [X][X] [X] ||| von vielen , [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.037037
+many people signed , [X][X] [X] ||| von vielen , [X][X] , unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.037037
+many [X][X] , [X][X] [X] ||| von vielen , [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0740741
+many people signed , [X][X] [X] ||| von vielen , [X][X] unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.037037
+many [X][X] , including myself [X] ||| von vielen , auch von mir selbst , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.037037
+many [X][X] , including myself [X] ||| von vielen , auch von mir selbst [X][X] [X] ||| 0.0278341 1 ||| ||| 0.037037
+many [X] ||| von vielen [X] ||| 0.013917 1 ||| ||| 2
+many people [X] ||| von vielen [X] ||| 0.013917 1 ||| ||| 2
+many people signed [X][X] [X] ||| von vielen [X][X] , unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.037037
+many [X][X] [X] ||| von vielen [X][X] [X] ||| 0.013917 1 ||| ||| 0.074074
+many people [X][X] [X] ||| von vielen [X][X] [X] ||| 0.013917 1 ||| ||| 0.074074
+many people signed [X][X] myself [X] ||| von vielen [X][X] mir selbst , unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.037037
+many people signed [X][X] [X] ||| von vielen [X][X] unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.037037
+many people signed [X][X] myself [X] ||| von vielen [X][X] von mir selbst , unterzeichnet worden [X] ||| 0.0278341 1 ||| ||| 0.037037
+[X][X] months ago [X] ||| vor [X][X] Monaten [X] ||| 0.0278341 1 ||| ||| 0.25
+[X][X] months ago [X] ||| vor [X][X] Monaten einen [X] ||| 0.0278341 1 ||| ||| 0.2
+a few months ago [X] ||| vor wenigen Monaten [X] ||| 0.0278341 1 ||| ||| 0.25
+a few months ago [X] ||| vor wenigen Monaten einen [X] ||| 0.0278341 1 ||| ||| 0.2
+a few [X] ||| vor wenigen [X] ||| 0.0278341 1 ||| ||| 1
+a few [X][X] [X] ||| vor wenigen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.45
+a few [X][X] [X] ||| vor wenigen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.2
+proposal [X] ||| vorschlägt [X] ||| 0.0278341 1 ||| ||| 1
+because [X] ||| weil [X] ||| 0.160946 1 ||| ||| 3
+because of [X] ||| weil [X] ||| 0.00927803 1 ||| ||| 3
+because [X][X] . [X] ||| weil [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0666667
+because [X][X] is appealing . [X] ||| weil [X][X] Berufung geht . [X] ||| 0.0278341 1 ||| ||| 0.0666667
+because [X][X] is appealing [X] ||| weil [X][X] Berufung geht [X] ||| 0.0278341 1 ||| ||| 0.0769231
+because [X][X] [X] ||| weil [X][X] [X] ||| 0.0278341 1 ||| ||| 0.560256
+because [X][X] is appealing . [X] ||| weil [X][X] in Berufung geht . [X] ||| 0.0278341 1 ||| ||| 0.0666667
+because [X][X] is appealing [X] ||| weil [X][X] in Berufung geht [X] ||| 0.0278341 1 ||| ||| 0.0769231
+because [X][X] [X] ||| weil [X][X] in [X] ||| 0.0278341 1 ||| ||| 0.166667
+because the public prosecutor [X] ||| weil der Staatsanwalt [X] ||| 0.0278341 1 ||| ||| 0.25
+because the public prosecutor [X][X] [X] ||| weil der Staatsanwalt [X][X] [X] ||| 0.0278341 1 ||| ||| 0.14359
+because the public prosecutor [X] ||| weil der Staatsanwalt in [X] ||| 0.0278341 1 ||| ||| 0.166667
+because the public prosecutor [X][X] [X] ||| weil der Staatsanwalt in [X][X] [X] ||| 0.0278341 1 ||| ||| 0.14359
+because the [X] ||| weil der [X] ||| 0.0278341 1 ||| ||| 1
+because the [X][X] . [X] ||| weil der [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0666667
+because the [X][X] is appealing [X] ||| weil der [X][X] Berufung geht [X] ||| 0.0278341 1 ||| ||| 0.0769231
+because the [X][X] [X] ||| weil der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.560256
+because the [X][X] is appealing [X] ||| weil der [X][X] in Berufung geht [X] ||| 0.0278341 1 ||| ||| 0.0769231
+because the [X][X] [X] ||| weil der [X][X] in [X] ||| 0.0278341 1 ||| ||| 0.166667
+a few months ago [X] ||| wenigen Monaten [X] ||| 0.0278341 1 ||| ||| 0.333333
+a few months ago [X] ||| wenigen Monaten einen [X] ||| 0.0278341 1 ||| ||| 0.25
+a few [X] ||| wenigen [X] ||| 0.0278341 1 ||| ||| 1
+a few [X][X] [X] ||| wenigen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.583333
+a few [X][X] [X] ||| wenigen [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.25
+for you , Madam President [X] ||| wenn Sie , Frau Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0909091
+for you , Madam [X] ||| wenn Sie , Frau [X] ||| 0.0278341 1 ||| ||| 0.166667
+for you , Madam [X][X] [X] ||| wenn Sie , Frau [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0896686
+for you , Madam [X][X] [X] ||| wenn Sie , Frau [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.037037
+for you , [X] ||| wenn Sie , [X] ||| 0.0278341 1 ||| ||| 0.333333
+for you , [X][X] , [X] ||| wenn Sie , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+for you , [X][X] , [X] ||| wenn Sie , [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.037037
+for you , [X][X] [X] ||| wenn Sie , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.180578
+for you , [X][X] [X] ||| wenn Sie , [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.037037
+for you [X] ||| wenn Sie [X] ||| 0.013917 1 ||| ||| 2
+if you [X] ||| wenn Sie [X] ||| 0.013917 1 ||| ||| 2
+for you [X][X] , [X] ||| wenn Sie [X][X] , [X] ||| 0.0142739 1 ||| ||| 0.102632
+if you [X][X] , [X] ||| wenn Sie [X][X] , [X] ||| 0.0135602 1 ||| ||| 0.102632
+if you [X][X] , i.e. [X] ||| wenn Sie [X][X] , d. h. [X] ||| 0.0278341 1 ||| ||| 0.0434783
+for you [X][X] , [X] ||| wenn Sie [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.037037
+for you [X][X] President , [X] ||| wenn Sie [X][X] Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+for you [X][X] President , [X] ||| wenn Sie [X][X] Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.037037
+for you [X][X] President [X] ||| wenn Sie [X][X] Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0909091
+for you [X][X] [X] ||| wenn Sie [X][X] [X] ||| 0.0145077 1 ||| ||| 0.666212
+if you [X][X] [X] ||| wenn Sie [X][X] [X] ||| 0.0133264 1 ||| ||| 0.666212
+if you [X][X] raise [X][X] [X] ||| wenn Sie [X][X] [X][X] ansprechen [X] ||| 0.0278341 1 ||| ||| 0.0588235
+if you [X][X] i.e. [X] ||| wenn Sie [X][X] d. h. [X] ||| 0.0278341 1 ||| ||| 0.0434783
+for you [X][X] [X] ||| wenn Sie [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.037037
+if you wish , [X] ||| wenn Sie wollen , [X] ||| 0.0278341 1 ||| ||| 0.166667
+if you wish , [X][X] [X] ||| wenn Sie wollen , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.152302
+if you wish [X] ||| wenn Sie wollen [X] ||| 0.0278341 1 ||| ||| 0.333333
+if you wish [X][X] , [X] ||| wenn Sie wollen [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.05
+if you wish [X][X] [X] ||| wenn Sie wollen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.152302
+if you wish [X][X] i.e. [X] ||| wenn Sie wollen [X][X] d. h. [X] ||| 0.0278341 1 ||| ||| 0.0434783
+for [X] ||| wenn [X] ||| 0.00927803 1 ||| ||| 3
+if [X] ||| wenn [X] ||| 0.160946 1 ||| ||| 3
+for [X][X] , [X] ||| wenn [X][X] , [X] ||| 0.00406697 1 ||| ||| 0.360208
+if [X][X] , [X] ||| wenn [X][X] , [X] ||| 0.0237671 1 ||| ||| 0.360208
+if [X][X] , [X][X] , [X] ||| wenn [X][X] , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.05
+if [X][X] , [X][X] [X] ||| wenn [X][X] , [X][X] [X] ||| 0.023726 1 ||| ||| 0.324186
+if [X][X] , [X][X] do [X] ||| wenn [X][X] , [X][X] [X] ||| 0.00410806 1 ||| ||| 0.324186
+if [X][X] , raise [X][X] [X] ||| wenn [X][X] , [X][X] ansprechen [X] ||| 0.0278341 1 ||| ||| 0.0588235
+if [X][X] , [X][X] i.e. [X] ||| wenn [X][X] , [X][X] d. h. [X] ||| 0.0278341 1 ||| ||| 0.0434783
+if [X][X] , [X][X] [X] ||| wenn [X][X] , [X][X] dem [X] ||| 0.0201633 1 ||| ||| 0.0636592
+if [X][X] , [X][X] do [X] ||| wenn [X][X] , [X][X] dem [X] ||| 0.00767083 1 ||| ||| 0.0636592
+if [X][X] , I [X][X] [X] ||| wenn [X][X] , [X][X] ich [X] ||| 0.0278341 1 ||| ||| 0.030303
+if [X][X] , I [X][X] [X] ||| wenn [X][X] , [X][X] ich dem [X] ||| 0.0278341 1 ||| ||| 0.0175439
+if [X][X] , i.e. [X] ||| wenn [X][X] , d. h. [X] ||| 0.0278341 1 ||| ||| 0.0434783
+for [X][X] , [X] ||| wenn [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.037037
+if [X][X] , I shall [X] ||| wenn [X][X] , werde ich [X] ||| 0.0278341 1 ||| ||| 0.047619
+if [X][X] , I shall [X] ||| wenn [X][X] , werde ich dem [X] ||| 0.0278341 1 ||| ||| 0.0285714
+for [X][X] Madam President , [X] ||| wenn [X][X] Frau Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+for [X][X] Madam President , [X] ||| wenn [X][X] Frau Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.037037
+for [X][X] Madam President [X] ||| wenn [X][X] Frau Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0909091
+for [X][X] Madam [X] ||| wenn [X][X] Frau [X] ||| 0.0278341 1 ||| ||| 0.166667
+for [X][X] Madam [X][X] [X] ||| wenn [X][X] Frau [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0896686
+for [X][X] Madam [X][X] [X] ||| wenn [X][X] Frau [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.037037
+for [X][X] President , [X] ||| wenn [X][X] Präsidentin , [X] ||| 0.0278341 1 ||| ||| 0.0526316
+for [X][X] President , [X] ||| wenn [X][X] Präsidentin , der [X] ||| 0.0278341 1 ||| ||| 0.037037
+for [X][X] President [X] ||| wenn [X][X] Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.0909091
+for [X][X] [X] ||| wenn [X][X] [X] ||| 0.00903923 1 ||| ||| 2.09567
+if [X][X] [X] ||| wenn [X][X] [X] ||| 0.157505 1 ||| ||| 2.09567
+if [X][X] do [X] ||| wenn [X][X] [X] ||| 0.000635488 1 ||| ||| 2.09567
+if [X][X] raise [X][X] , [X] ||| wenn [X][X] [X][X] ansprechen , [X] ||| 0.0278341 1 ||| ||| 0.05
+if [X][X] raise [X][X] [X] ||| wenn [X][X] [X][X] ansprechen [X] ||| 0.0278341 1 ||| ||| 0.0588235
+if [X][X] I [X][X] [X] ||| wenn [X][X] [X][X] ich [X] ||| 0.0278341 1 ||| ||| 0.030303
+if [X][X] I [X][X] [X] ||| wenn [X][X] [X][X] ich dem [X] ||| 0.0278341 1 ||| ||| 0.0175439
+if [X][X] i.e. [X] ||| wenn [X][X] d. h. [X] ||| 0.0278341 1 ||| ||| 0.0434783
+if [X][X] agrees , [X] ||| wenn [X][X] damit einverstanden ist , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+if [X][X] agrees , [X][X] [X] ||| wenn [X][X] damit einverstanden ist , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.124037
+if [X][X] agrees , [X][X] [X] ||| wenn [X][X] damit einverstanden ist , [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0461153
+if [X][X] agrees [X] ||| wenn [X][X] damit einverstanden ist [X] ||| 0.0278341 1 ||| ||| 0.166667
+if [X][X] agrees [X][X] [X] ||| wenn [X][X] damit einverstanden ist [X][X] [X] ||| 0.020086 1 ||| ||| 0.171884
+if [X][X] agrees [X][X] do [X] ||| wenn [X][X] damit einverstanden ist [X][X] [X] ||| 0.00774811 1 ||| ||| 0.171884
+if [X][X] agrees [X][X] [X] ||| wenn [X][X] damit einverstanden ist [X][X] dem [X] ||| 0.0201633 1 ||| ||| 0.0636592
+if [X][X] agrees [X][X] do [X] ||| wenn [X][X] damit einverstanden ist [X][X] dem [X] ||| 0.00767083 1 ||| ||| 0.0636592
+if [X][X] [X] ||| wenn [X][X] dem [X] ||| 0.0201633 1 ||| ||| 0.0636592
+if [X][X] do [X] ||| wenn [X][X] dem [X] ||| 0.00767083 1 ||| ||| 0.0636592
+for [X][X] [X] ||| wenn [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.037037
+if [X][X] raise this question [X] ||| wenn [X][X] diese Frage ansprechen [X] ||| 0.0278341 1 ||| ||| 0.0588235
+if [X][X] I shall [X] ||| wenn [X][X] werde ich [X] ||| 0.0170097 1 ||| ||| 0.077922
+if [X][X] I shall do [X] ||| wenn [X][X] werde ich [X] ||| 0.0108244 1 ||| ||| 0.077922
+if [X][X] I shall [X] ||| wenn [X][X] werde ich dem [X] ||| 0.017245 1 ||| ||| 0.0461153
+if [X][X] I shall do [X] ||| wenn [X][X] werde ich dem [X] ||| 0.0105891 1 ||| ||| 0.0461153
+if the House [X] ||| wenn das Haus [X] ||| 0.0278341 1 ||| ||| 0.333333
+if the House [X][X] [X] ||| wenn das Haus [X][X] [X] ||| 0.0227663 1 ||| ||| 0.262793
+if the House [X][X] do [X] ||| wenn das Haus [X][X] [X] ||| 0.00506778 1 ||| ||| 0.262793
+if the House [X][X] [X] ||| wenn das Haus [X][X] dem [X] ||| 0.0201633 1 ||| ||| 0.0636592
+if the House [X][X] do [X] ||| wenn das Haus [X][X] dem [X] ||| 0.00767083 1 ||| ||| 0.0636592
+if the House agrees , [X] ||| wenn das Haus damit einverstanden ist , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+if the House agrees [X] ||| wenn das Haus damit einverstanden ist [X] ||| 0.0278341 1 ||| ||| 0.166667
+if the House agrees [X][X] [X] ||| wenn das Haus damit einverstanden ist [X][X] [X] ||| 0.0278341 1 ||| ||| 0.124037
+if the House agrees [X][X] [X] ||| wenn das Haus damit einverstanden ist [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0461153
+if the [X] ||| wenn das [X] ||| 0.0278341 1 ||| ||| 1
+if the [X][X] , [X] ||| wenn das [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0909091
+if the [X][X] , [X][X] [X] ||| wenn das [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.124037
+if the [X][X] , [X][X] [X] ||| wenn das [X][X] , [X][X] dem [X] ||| 0.0278341 1 ||| ||| 0.0461153
+if the [X][X] [X] ||| wenn das [X][X] [X] ||| 0.0247331 1 ||| ||| 0.42946
+if the [X][X] do [X] ||| wenn das [X][X] [X] ||| 0.00310105 1 ||| ||| 0.42946
+if the [X][X] I [X][X] [X] ||| wenn das [X][X] [X][X] ich [X] ||| 0.0278341 1 ||| ||| 0.030303
+if the [X][X] I [X][X] [X] ||| wenn das [X][X] [X][X] ich dem [X] ||| 0.0278341 1 ||| ||| 0.0175439
+if the [X][X] [X] ||| wenn das [X][X] dem [X] ||| 0.0201633 1 ||| ||| 0.0636592
+if the [X][X] do [X] ||| wenn das [X][X] dem [X] ||| 0.00767083 1 ||| ||| 0.0636592
+if the [X][X] I shall [X] ||| wenn das [X][X] werde ich [X] ||| 0.0278341 1 ||| ||| 0.047619
+if the [X][X] I shall [X] ||| wenn das [X][X] werde ich dem [X] ||| 0.0278341 1 ||| ||| 0.0285714
+shall [X] ||| werde [X] ||| 0.00927803 1 ||| ||| 3
+shall do [X] ||| werde [X] ||| 0.00927803 1 ||| ||| 3
+will [X] ||| werde [X] ||| 0.00927803 1 ||| ||| 3
+I shall [X] ||| werde ich [X] ||| 0.0185561 1 ||| ||| 1.5
+I shall do [X] ||| werde ich [X] ||| 0.00927803 1 ||| ||| 1.5
+I shall [X][X] . [X] ||| werde ich [X][X] . [X] ||| 0.013917 1 ||| ||| 0.117647
+I shall do [X][X] . [X] ||| werde ich [X][X] . [X] ||| 0.013917 1 ||| ||| 0.117647
+I shall [X][X] [X] ||| werde ich [X][X] [X] ||| 0.013917 1 ||| ||| 0.217648
+I shall do [X][X] [X] ||| werde ich [X][X] [X] ||| 0.013917 1 ||| ||| 0.217648
+I shall [X][X] suggested . [X] ||| werde ich dem Vorschlag [X][X] folgen . [X] ||| 0.0278341 1 ||| ||| 0.0588235
+I shall [X][X] has suggested [X] ||| werde ich dem Vorschlag [X][X] folgen [X] ||| 0.00927803 1 ||| ||| 0.15
+I shall [X][X] suggested [X] ||| werde ich dem Vorschlag [X][X] folgen [X] ||| 0.00927803 1 ||| ||| 0.15
+I shall do [X][X] suggested [X] ||| werde ich dem Vorschlag [X][X] folgen [X] ||| 0.00927803 1 ||| ||| 0.15
+I shall [X] ||| werde ich dem [X] ||| 0.0185561 1 ||| ||| 1.5
+I shall do [X] ||| werde ich dem [X] ||| 0.00927803 1 ||| ||| 1.5
+I shall [X][X] . [X] ||| werde ich dem [X][X] . [X] ||| 0.013917 1 ||| ||| 0.117647
+I shall do [X][X] . [X] ||| werde ich dem [X][X] . [X] ||| 0.013917 1 ||| ||| 0.117647
+I shall [X][X] [X] ||| werde ich dem [X][X] [X] ||| 0.013917 1 ||| ||| 0.217648
+I shall do [X][X] [X] ||| werde ich dem [X][X] [X] ||| 0.013917 1 ||| ||| 0.217648
+be [X] ||| werden [X] ||| 0.241419 1 ||| ||| 2
+to [X] ||| werden soll , [X] ||| 0.00695852 1 ||| ||| 4
+to go [X] ||| werden soll , [X] ||| 0.00695852 1 ||| ||| 4
+to go before [X] ||| werden soll , [X] ||| 0.00695852 1 ||| ||| 4
+to go before the [X] ||| werden soll , [X] ||| 0.00695852 1 ||| ||| 4
+to [X] ||| werden soll [X] ||| 0.00695852 1 ||| ||| 4
+to go [X] ||| werden soll [X] ||| 0.00695852 1 ||| ||| 4
+to go before [X] ||| werden soll [X] ||| 0.00695852 1 ||| ||| 4
+to go before the [X] ||| werden soll [X] ||| 0.00695852 1 ||| ||| 4
+should be [X] ||| werden sollen [X] ||| 0.0278341 1 ||| ||| 1
+you [X] ||| wie Sie [X] ||| 0.0278341 1 ||| ||| 1
+you [X][X] [X] ||| wie Sie [X][X] [X] ||| 0.0278341 1 ||| ||| 0.583333
+you [X][X] aware [X][X] television [X] ||| wie Sie [X][X] [X][X] dem Fernsehen wissen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+you [X][X] aware [X][X] [X] ||| wie Sie [X][X] [X][X] wissen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+you [X][X] aware from [X][X] [X] ||| wie Sie [X][X] aus [X][X] wissen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+you will be [X] ||| wie Sie sicher [X] ||| 0.0278341 1 ||| ||| 0.5
+you will be [X][X] [X] ||| wie Sie sicher [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0833333
+you will be aware [X][X] [X] ||| wie Sie sicher [X][X] wissen [X] ||| 0.0278341 1 ||| ||| 0.0833333
+once more [X] ||| wieder [X] ||| 0.0278341 1 ||| ||| 1
+[X][X] once more [X] ||| wieder [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.025
+[X][X] once more [X][X] [X] ||| wieder [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0263158
+[X][X] once more because [X] ||| wieder [X][X] , weil [X] ||| 0.0278341 1 ||| ||| 0.0238095
+[X][X] once more because the [X] ||| wieder [X][X] , weil der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+[X][X] once more [X] ||| wieder [X][X] [X] ||| 0.132239 1 ||| ||| 2.6587
+before [X][X] once more [X] ||| wieder [X][X] [X] ||| 0.00436211 1 ||| ||| 2.6587
+go [X][X] once more [X] ||| wieder [X][X] [X] ||| 0.00411284 1 ||| ||| 2.6587
+go before [X][X] once more [X] ||| wieder [X][X] [X] ||| 0.00411284 1 ||| ||| 2.6587
+[X][X] before [X][X] once more [X] ||| wieder [X][X] [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.05
+[X][X] before [X][X] once more [X] ||| wieder [X][X] [X][X] [X] ||| 0.0196753 1 ||| ||| 0.179555
+[X][X] once more [X][X] [X] ||| wieder [X][X] [X][X] [X] ||| 0.00815882 1 ||| ||| 0.179555
+to [X][X] once more [X] ||| wieder [X][X] soll , [X] ||| 0.0139171 1 ||| ||| 0.05
+to go [X][X] once more [X] ||| wieder [X][X] soll , [X] ||| 0.0139171 1 ||| ||| 0.05
+to [X][X] once more [X][X] [X] ||| wieder [X][X] soll , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0263158
+to [X][X] once more because [X] ||| wieder [X][X] soll , weil [X] ||| 0.0278341 1 ||| ||| 0.0238095
+to [X][X] once more [X] ||| wieder [X][X] soll [X] ||| 0.0139171 1 ||| ||| 0.076923
+to go [X][X] once more [X] ||| wieder [X][X] soll [X] ||| 0.0139171 1 ||| ||| 0.076923
+to [X][X] once more [X][X] [X] ||| wieder [X][X] soll [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0263158
+[X][X] once more because [X] ||| wieder [X][X] weil [X] ||| 0.0278341 1 ||| ||| 0.0238095
+[X][X] once more because the [X] ||| wieder [X][X] weil der [X] ||| 0.0278341 1 ||| ||| 0.0263158
+[X][X] once more [X] ||| wieder [X][X] werden [X] ||| 0.0153906 1 ||| ||| 1.0119
+before [X][X] once more [X] ||| wieder [X][X] werden [X] ||| 0.00458445 1 ||| ||| 1.0119
+go [X][X] once more [X] ||| wieder [X][X] werden [X] ||| 0.00392951 1 ||| ||| 1.0119
+go before [X][X] once more [X] ||| wieder [X][X] werden [X] ||| 0.00392951 1 ||| ||| 1.0119
+[X][X] before [X][X] once more [X] ||| wieder [X][X] werden [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.025
+[X][X] before [X][X] once more [X] ||| wieder [X][X] werden [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0634615
+to [X][X] once more [X] ||| wieder [X][X] werden soll , [X] ||| 0.0139171 1 ||| ||| 0.05
+to go [X][X] once more [X] ||| wieder [X][X] werden soll , [X] ||| 0.0139171 1 ||| ||| 0.05
+to [X][X] once more [X][X] [X] ||| wieder [X][X] werden soll , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0263158
+to [X][X] once more because [X] ||| wieder [X][X] werden soll , weil [X] ||| 0.0278341 1 ||| ||| 0.0238095
+to [X][X] once more [X] ||| wieder [X][X] werden soll [X] ||| 0.0139171 1 ||| ||| 0.076923
+to go [X][X] once more [X] ||| wieder [X][X] werden soll [X] ||| 0.0139171 1 ||| ||| 0.076923
+to [X][X] once more [X][X] [X] ||| wieder [X][X] werden soll [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0263158
+before the courts once more [X] ||| wieder angeklagt [X] ||| 0.00642326 1 ||| ||| 1.08333
+courts once more [X] ||| wieder angeklagt [X] ||| 0.0128465 1 ||| ||| 1.08333
+the courts once more [X] ||| wieder angeklagt [X] ||| 0.00856433 1 ||| ||| 1.08333
+[X][X] courts once more [X] ||| wieder angeklagt [X][X] , [X] ||| 0.0139171 1 ||| ||| 0.05
+[X][X] the courts once more [X] ||| wieder angeklagt [X][X] , [X] ||| 0.0139171 1 ||| ||| 0.05
+[X][X] courts once more [X][X] [X] ||| wieder angeklagt [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0263158
+[X][X] courts once more because [X] ||| wieder angeklagt [X][X] , weil [X] ||| 0.0278341 1 ||| ||| 0.0238095
+[X][X] courts once more [X] ||| wieder angeklagt [X][X] [X] ||| 0.013917 1 ||| ||| 0.126923
+[X][X] the courts once more [X] ||| wieder angeklagt [X][X] [X] ||| 0.013917 1 ||| ||| 0.126923
+[X][X] courts once more [X][X] [X] ||| wieder angeklagt [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] courts once more because [X] ||| wieder angeklagt [X][X] weil [X] ||| 0.0278341 1 ||| ||| 0.0238095
+before the courts once more [X] ||| wieder angeklagt werden [X] ||| 0.00506075 1 ||| ||| 0.916667
+courts once more [X] ||| wieder angeklagt werden [X] ||| 0.0151822 1 ||| ||| 0.916667
+the courts once more [X] ||| wieder angeklagt werden [X] ||| 0.00759112 1 ||| ||| 0.916667
+[X][X] courts once more [X] ||| wieder angeklagt werden [X][X] , [X] ||| 0.0139171 1 ||| ||| 0.05
+[X][X] the courts once more [X] ||| wieder angeklagt werden [X][X] , [X] ||| 0.0139171 1 ||| ||| 0.05
+[X][X] courts once more [X][X] [X] ||| wieder angeklagt werden [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0263158
+[X][X] courts once more because [X] ||| wieder angeklagt werden [X][X] , weil [X] ||| 0.0278341 1 ||| ||| 0.0238095
+[X][X] courts once more [X] ||| wieder angeklagt werden [X][X] [X] ||| 0.013917 1 ||| ||| 0.126923
+[X][X] the courts once more [X] ||| wieder angeklagt werden [X][X] [X] ||| 0.013917 1 ||| ||| 0.126923
+[X][X] courts once more [X][X] [X] ||| wieder angeklagt werden [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+[X][X] courts once more because [X] ||| wieder angeklagt werden [X][X] weil [X] ||| 0.0278341 1 ||| ||| 0.0238095
+of our [X] ||| wir [X] ||| 0.00556682 1 ||| ||| 5
+our [X] ||| wir [X] ||| 0.00556682 1 ||| ||| 5
+we [X] ||| wir [X] ||| 0.345024 1 ||| ||| 5
+[X][X] that [X] ||| wir [X][X] , daß [X] ||| 0.0278341 1 ||| ||| 0.0833333
+[X][X] that [X][X] [X] ||| wir [X][X] , daß [X][X] [X] ||| 0.0197532 1 ||| ||| 0.132479
+[X][X] that [X][X] have [X] ||| wir [X][X] , daß [X][X] [X] ||| 0.00808086 1 ||| ||| 0.132479
+[X][X] that the courts [X] ||| wir [X][X] , daß das Gericht [X] ||| 0.0164474 1 ||| ||| 0.0940171
+[X][X] that the courts have [X] ||| wir [X][X] , daß das Gericht [X] ||| 0.0113867 1 ||| ||| 0.0940171
+[X][X] that the [X] ||| wir [X][X] , daß das [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] that the [X][X] [X] ||| wir [X][X] , daß das [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0384615
+we [X][X] . [X] ||| wir [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] courts [X] ||| wir [X][X] Gericht [X] ||| 0.0164474 1 ||| ||| 0.0940171
+[X][X] courts have [X] ||| wir [X][X] Gericht [X] ||| 0.0113867 1 ||| ||| 0.0940171
+we [X][X] [X] ||| wir [X][X] [X] ||| 0.241419 1 ||| ||| 1.49841
+[X][X] here [X][X] [X] ||| wir [X][X] [X][X] hier [X] ||| 0.0278341 1 ||| ||| 0.125
+all [X][X] here [X][X] that [X] ||| wir [X][X] [X][X] hier alle , daß [X] ||| 0.0278341 1 ||| ||| 0.0833333
+all [X][X] here [X][X] [X] ||| wir [X][X] [X][X] hier alle [X] ||| 0.0278341 1 ||| ||| 0.0666667
+all [X][X] that [X] ||| wir [X][X] alle , daß [X] ||| 0.013917 1 ||| ||| 0.166667
+all of [X][X] that [X] ||| wir [X][X] alle , daß [X] ||| 0.013917 1 ||| ||| 0.166667
+all [X][X] that [X][X] [X] ||| wir [X][X] alle , daß [X][X] [X] ||| 0.0115538 1 ||| ||| 0.226496
+all [X][X] that [X][X] have [X] ||| wir [X][X] alle , daß [X][X] [X] ||| 0.00472654 1 ||| ||| 0.226496
+all of [X][X] that [X][X] [X] ||| wir [X][X] alle , daß [X][X] [X] ||| 0.0115538 1 ||| ||| 0.226496
+all [X][X] that the courts [X] ||| wir [X][X] alle , daß das Gericht [X] ||| 0.0278341 1 ||| ||| 0.0555556
+all [X][X] that the [X] ||| wir [X][X] alle , daß das [X] ||| 0.013917 1 ||| ||| 0.181818
+all of [X][X] that the [X] ||| wir [X][X] alle , daß das [X] ||| 0.013917 1 ||| ||| 0.181818
+all [X][X] that the [X][X] [X] ||| wir [X][X] alle , daß das [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0384615
+all [X][X] [X] ||| wir [X][X] alle [X] ||| 0.013917 1 ||| ||| 0.133333
+all of [X][X] [X] ||| wir [X][X] alle [X] ||| 0.013917 1 ||| ||| 0.133333
+[X][X] the courts [X] ||| wir [X][X] das Gericht [X] ||| 0.0164474 1 ||| ||| 0.0940171
+[X][X] the courts have [X] ||| wir [X][X] das Gericht [X] ||| 0.0113867 1 ||| ||| 0.0940171
+[X][X] the [X] ||| wir [X][X] das [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] the [X][X] [X] ||| wir [X][X] das [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0384615
+we have [X][X] . [X] ||| wir [X][X] haben . [X] ||| 0.0278341 1 ||| ||| 0.2
+we have [X][X] [X] ||| wir [X][X] haben [X] ||| 0.0278341 1 ||| ||| 0.333333
+of us here [X][X] [X] ||| wir [X][X] uns hier [X] ||| 0.00927803 1 ||| ||| 0.375
+us here [X][X] [X] ||| wir [X][X] uns hier [X] ||| 0.0185561 1 ||| ||| 0.375
+[X][X] us here [X][X] that [X] ||| wir [X][X] uns hier [X][X] , daß [X] ||| 0.0278341 1 ||| ||| 0.0833333
+[X][X] us here [X][X] [X] ||| wir [X][X] uns hier [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0666667
+all of us here [X][X] [X] ||| wir [X][X] uns hier alle [X] ||| 0.0278341 1 ||| ||| 0.0666667
+this House [X] ||| wir als Parlament [X] ||| 0.013917 1 ||| ||| 2
+this House has [X] ||| wir als Parlament [X] ||| 0.013917 1 ||| ||| 2
+this House [X][X] . [X] ||| wir als Parlament [X][X] . [X] ||| 0.013917 1 ||| ||| 0.153846
+this House has [X][X] . [X] ||| wir als Parlament [X][X] . [X] ||| 0.013917 1 ||| ||| 0.153846
+this House [X][X] [X] ||| wir als Parlament [X][X] [X] ||| 0.0189627 1 ||| ||| 0.68956
+this House has [X][X] [X] ||| wir als Parlament [X][X] [X] ||| 0.00887142 1 ||| ||| 0.68956
+this House [X][X] adopted . [X] ||| wir als Parlament [X][X] vertreten haben . [X] ||| 0.0278341 1 ||| ||| 0.0769231
+this House [X][X] adopted [X] ||| wir als Parlament [X][X] vertreten haben [X] ||| 0.0278341 1 ||| ||| 0.142857
+this House has always [X] ||| wir als Parlament immer [X] ||| 0.0278341 1 ||| ||| 0.25
+this House has always [X][X] [X] ||| wir als Parlament immer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0769231
+this House has always adopted [X] ||| wir als Parlament immer vertreten haben [X] ||| 0.0278341 1 ||| ||| 0.142857
+are pleased [X] ||| wir freuen [X] ||| 0.0278341 1 ||| ||| 1
+[X][X] are pleased that [X] ||| wir freuen [X][X] , daß [X] ||| 0.0278341 1 ||| ||| 0.0833333
+[X][X] are pleased that [X][X] [X] ||| wir freuen [X][X] , daß [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0940171
+[X][X] are pleased that the [X] ||| wir freuen [X][X] , daß das [X] ||| 0.0278341 1 ||| ||| 0.0909091
+[X][X] are pleased [X] ||| wir freuen [X][X] [X] ||| 0.0216942 1 ||| ||| 0.566667
+of [X][X] are pleased [X] ||| wir freuen [X][X] [X] ||| 0.00613987 1 ||| ||| 0.566667
+[X][X] are pleased [X][X] courts [X] ||| wir freuen [X][X] [X][X] Gericht [X] ||| 0.0278341 1 ||| ||| 0.0555556
+[X][X] are pleased [X][X] [X] ||| wir freuen [X][X] [X][X] [X] ||| 0.0230418 1 ||| ||| 0.223388
+[X][X] are pleased [X][X] have [X] ||| wir freuen [X][X] [X][X] [X] ||| 0.00479231 1 ||| ||| 0.223388
+all [X][X] are pleased that [X] ||| wir freuen [X][X] alle , daß [X] ||| 0.0278341 1 ||| ||| 0.0833333
+all [X][X] are pleased [X] ||| wir freuen [X][X] alle [X] ||| 0.013917 1 ||| ||| 0.133333
+all of [X][X] are pleased [X] ||| wir freuen [X][X] alle [X] ||| 0.013917 1 ||| ||| 0.133333
+all [X][X] are pleased [X][X] [X] ||| wir freuen [X][X] alle [X][X] [X] ||| 0.0278341 1 ||| ||| 0.184926
+[X][X] here are pleased [X] ||| wir freuen [X][X] hier [X] ||| 0.0278341 1 ||| ||| 0.125
+all [X][X] here are pleased [X] ||| wir freuen [X][X] hier alle [X] ||| 0.0278341 1 ||| ||| 0.0666667
+of us here are pleased [X] ||| wir freuen uns hier [X] ||| 0.00927803 1 ||| ||| 0.375
+us here are pleased [X] ||| wir freuen uns hier [X] ||| 0.0185561 1 ||| ||| 0.375
+[X][X] us here are pleased [X] ||| wir freuen uns hier [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0666667
+we have [X] ||| wir haben [X] ||| 0.0278341 1 ||| ||| 1
+we have always upheld . [X] ||| wir stets verteidigt haben . [X] ||| 0.0278341 1 ||| ||| 0.2
+we have always upheld [X] ||| wir stets verteidigt haben [X] ||| 0.0278341 1 ||| ||| 0.333333
+we know , [X] ||| wir wissen [X] ||| 0.00927803 1 ||| ||| 1.5
+we know [X] ||| wir wissen [X] ||| 0.0185561 1 ||| ||| 1.5
+will [X] ||| wird [X] ||| 0.0278341 1 ||| ||| 1
+[X][X] and contains [X] ||| wird [X][X] mit [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] and contains [X] ||| wird sich [X][X] mit [X] ||| 0.0278341 1 ||| ||| 0.2
+on Thursday [X] ||| wird sich am Donnerstag [X] ||| 0.0278341 1 ||| ||| 1
+on Thursday [X][X] [X] ||| wird sich am Donnerstag [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+on Thursday and contains [X] ||| wird sich am Donnerstag mit [X] ||| 0.0278341 1 ||| ||| 0.2
+aware [X] ||| wissen [X] ||| 0.00695852 1 ||| ||| 4
+know , [X] ||| wissen [X] ||| 0.00695852 1 ||| ||| 4
+know [X] ||| wissen [X] ||| 0.120709 1 ||| ||| 4
+know [X][X] [X] ||| wissen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.590909
+know , and [X] ||| wissen und [X] ||| 0.0278341 1 ||| ||| 0.333333
+wish , [X] ||| wollen , [X] ||| 0.0278341 1 ||| ||| 1
+wish , [X][X] , [X] ||| wollen , [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.125
+wish , [X][X] , [X][X] [X] ||| wollen , [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.113095
+wish , [X][X] , i.e. [X] ||| wollen , [X][X] , d. h. [X] ||| 0.0278341 1 ||| ||| 0.1
+wish , [X][X] Thursday prior [X] ||| wollen , [X][X] Donnerstag [X] ||| 0.0278341 1 ||| ||| 0.0416667
+wish , [X][X] [X] ||| wollen , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.504762
+wish , [X][X] on [X] ||| wollen , [X][X] am [X] ||| 0.0278341 1 ||| ||| 0.0714286
+wish , [X][X] on [X][X] [X] ||| wollen , [X][X] am [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0416667
+wish , raise [X][X] , [X] ||| wollen , [X][X] ansprechen , [X] ||| 0.0278341 1 ||| ||| 0.125
+wish , raise [X][X] [X] ||| wollen , [X][X] ansprechen [X] ||| 0.0278341 1 ||| ||| 0.166667
+wish , [X][X] i.e. [X] ||| wollen , [X][X] d. h. [X] ||| 0.0278341 1 ||| ||| 0.1
+wish , [X][X] i.e. [X][X] [X] ||| wollen , [X][X] d. h. [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0416667
+wish , [X][X] i.e. on [X] ||| wollen , [X][X] d. h. am [X] ||| 0.0278341 1 ||| ||| 0.0714286
+wish , raise this question [X] ||| wollen , diese Frage ansprechen [X] ||| 0.0278341 1 ||| ||| 0.166667
+wish [X] ||| wollen [X] ||| 0.0278341 1 ||| ||| 1
+wish [X][X] , [X] ||| wollen [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.125
+wish [X][X] , [X][X] [X] ||| wollen [X][X] , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.113095
+wish [X][X] , i.e. [X] ||| wollen [X][X] , d. h. [X] ||| 0.0278341 1 ||| ||| 0.1
+wish [X][X] , i.e. [X][X] [X] ||| wollen [X][X] , d. h. [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0416667
+wish [X][X] , i.e. on [X] ||| wollen [X][X] , d. h. am [X] ||| 0.0278341 1 ||| ||| 0.0714286
+wish [X][X] Thursday prior [X] ||| wollen [X][X] Donnerstag [X] ||| 0.0278341 1 ||| ||| 0.0416667
+wish [X][X] [X] ||| wollen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.504762
+wish [X][X] on Thursday prior [X] ||| wollen [X][X] am Donnerstag [X] ||| 0.0278341 1 ||| ||| 0.0416667
+wish [X][X] on [X] ||| wollen [X][X] am [X] ||| 0.0278341 1 ||| ||| 0.0714286
+wish [X][X] on [X][X] [X] ||| wollen [X][X] am [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0416667
+wish [X][X] i.e. [X] ||| wollen [X][X] d. h. [X] ||| 0.0278341 1 ||| ||| 0.1
+wish [X][X] i.e. [X][X] [X] ||| wollen [X][X] d. h. [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0416667
+wish [X][X] i.e. on [X] ||| wollen [X][X] d. h. am [X] ||| 0.0278341 1 ||| ||| 0.0714286
+wish [X][X] i.e. on [X][X] [X] ||| wollen [X][X] d. h. am [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0416667
+has been [X] ||| worden ist [X] ||| 0.0278341 1 ||| ||| 1
+has [X] ||| wurde [X] ||| 0.0278341 1 ||| ||| 1
+has [X][X] [X] ||| wurde [X][X] [X] ||| 0.0278341 1 ||| ||| 0.5
+[X][X] has [X][X] [X] ||| wurde [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] has [X][X] presented , [X] ||| wurde [X][X] [X][X] eingereicht , [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] has [X][X] presented [X] ||| wurde [X][X] [X][X] eingereicht [X] ||| 0.0278341 1 ||| ||| 0.2
+a petition has [X][X] [X] ||| wurde [X][X] eine Petition [X] ||| 0.0278341 1 ||| ||| 0.2
+a petition has [X][X] presented [X] ||| wurde [X][X] eine Petition eingereicht [X] ||| 0.0278341 1 ||| ||| 0.2
+has already been [X] ||| wurde bereits [X] ||| 0.0278341 1 ||| ||| 0.5
+[X][X] has already been [X] ||| wurde bereits [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] has already been [X][X] [X] ||| wurde bereits [X][X] [X][X] [X] ||| 0.0278341 1 ||| ||| 0.611111
+[X][X] has already been [X][X] [X] ||| wurde bereits [X][X] [X][X] von [X] ||| 0.0278341 1 ||| ||| 0.111111
+[X][X] has already been presented [X] ||| wurde bereits [X][X] eingereicht [X] ||| 0.0278341 1 ||| ||| 0.2
+a petition has already been [X] ||| wurde bereits eine Petition [X] ||| 0.0278341 1 ||| ||| 0.2
+during [X] ||| während [X] ||| 0.0278341 1 ||| ||| 1
+during the [X] ||| während der [X] ||| 0.0278341 1 ||| ||| 1
+would be [X] ||| wäre [X] ||| 0.0278341 1 ||| ||| 1
+would it be [X] ||| wäre es [X] ||| 0.0278341 1 ||| ||| 1
+would it be [X][X] , [X] ||| wäre es [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.088141
+would it be [X][X] Madam [X] ||| wäre es [X][X] Frau [X] ||| 0.0278341 1 ||| ||| 0.04
+would it be [X][X] President [X] ||| wäre es [X][X] Präsidentin [X] ||| 0.0278341 1 ||| ||| 0.030303
+would it be [X][X] you [X] ||| wäre es [X][X] Sie [X] ||| 0.0278341 1 ||| ||| 0.1
+would it be [X][X] [X] ||| wäre es [X][X] [X] ||| 0.0278341 1 ||| ||| 0.458444
+would it be appropriate [X] ||| wäre es angemessen , [X] ||| 0.0278341 1 ||| ||| 0.5
+would it be appropriate [X][X] [X] ||| wäre es angemessen , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.258444
+would it be appropriate for [X] ||| wäre es angemessen , wenn [X] ||| 0.0278341 1 ||| ||| 0.2
+would it be appropriate [X] ||| wäre es angemessen [X] ||| 0.0278341 1 ||| ||| 0.5
+would it be appropriate [X][X] [X] ||| wäre es angemessen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.258444
+her to do [X][X] possibly [X] ||| würden , [X][X] in ihrem Kräften stehende zu tun [X] ||| 0.0278341 1 ||| ||| 0.2
+everything [X] ||| würden , alles [X] ||| 0.013917 1 ||| ||| 2
+everything she [X] ||| würden , alles [X] ||| 0.013917 1 ||| ||| 2
+her to do everything [X][X] [X] ||| würden , alles in ihrem [X][X] stehende zu tun [X] ||| 0.0278341 1 ||| ||| 0.7
+her to do everything [X][X] [X] ||| würden , alles in ihrem [X][X] zu tun [X] ||| 0.0278341 1 ||| ||| 0.7
+her to do [X][X] possibly [X] ||| würden [X][X] in ihrem Kräften stehende zu tun [X] ||| 0.0278341 1 ||| ||| 0.2
+about Rule 143 [X] ||| zu Artikel 143 [X] ||| 0.0278341 1 ||| ||| 0.333333
+about Rule 143 [X][X] . [X] ||| zu Artikel 143 [X][X] ? [X] ||| 0.0278341 1 ||| ||| 0.0526316
+about Rule 143 [X][X] [X] ||| zu Artikel 143 [X][X] [X] ||| 0.0278341 1 ||| ||| 0.143541
+about Rule 143 concerning inadmissibility [X] ||| zu Artikel 143 im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0278341 1 ||| ||| 0.0909091
+about Rule 143 concerning [X] ||| zu Artikel 143 im Zusammenhang mit der [X] ||| 0.0278341 1 ||| ||| 0.166667
+about Rule 143 concerning [X][X] [X] ||| zu Artikel 143 im Zusammenhang mit der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+about Rule [X] ||| zu Artikel [X] ||| 0.0278341 1 ||| ||| 1
+about Rule [X][X] . [X] ||| zu Artikel [X][X] ? [X] ||| 0.0278341 1 ||| ||| 0.0526316
+about Rule [X][X] inadmissibility . [X] ||| zu Artikel [X][X] Unzulässigkeit geben ? [X] ||| 0.0278341 1 ||| ||| 0.0526316
+about Rule [X][X] inadmissibility [X] ||| zu Artikel [X][X] Unzulässigkeit geben [X] ||| 0.0278341 1 ||| ||| 0.0909091
+about Rule [X][X] [X] ||| zu Artikel [X][X] [X] ||| 0.0278341 1 ||| ||| 0.310207
+to the start [X] ||| zu Beginn [X] ||| 0.0278341 1 ||| ||| 0.5
+to the start [X][X] . [X] ||| zu Beginn [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0322581
+to the start [X][X] presentation [X] ||| zu Beginn [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.142857
+to the start [X][X] report [X] ||| zu Beginn [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.0454545
+to the start [X][X] [X] ||| zu Beginn [X][X] [X] ||| 0.0278341 1 ||| ||| 0.587236
+to the start [X][X] the [X] ||| zu Beginn [X][X] den [X] ||| 0.0278341 1 ||| ||| 0.0666667
+to the start [X][X] of [X] ||| zu Beginn [X][X] über [X] ||| 0.0278341 1 ||| ||| 0.1
+to the start of the [X] ||| zu Beginn der [X] ||| 0.0278341 1 ||| ||| 0.2
+to environmental information [X] ||| zu Umweltinformationen [X] ||| 0.0278341 1 ||| ||| 0.5
+to environmental information [X][X] . [X] ||| zu Umweltinformationen [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.111111
+to environmental information [X][X] [X] ||| zu Umweltinformationen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.211111
+to environmental information is [X][X] [X] ||| zu Umweltinformationen [X][X] ist [X] ||| 0.0278341 1 ||| ||| 0.1
+about [X] ||| zu [X] ||| 0.00347926 1 ||| ||| 8
+of [X] ||| zu [X] ||| 0.00347926 1 ||| ||| 8
+on [X] ||| zu [X] ||| 0.00347926 1 ||| ||| 8
+one [X] ||| zu [X] ||| 0.00347926 1 ||| ||| 8
+one of [X] ||| zu [X] ||| 0.00347926 1 ||| ||| 8
+to [X] ||| zu [X] ||| 0.21564 1 ||| ||| 8
+to [X][X] . [X] ||| zu [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.143369
+about [X][X] . [X] ||| zu [X][X] ? [X] ||| 0.0278341 1 ||| ||| 0.0526316
+one [X][X] people assassinated very [X] ||| zu [X][X] Attentatsopfern , die es in [X] ||| 0.0278341 1 ||| ||| 0.142857
+to [X][X] presentation [X] ||| zu [X][X] Aussprache [X] ||| 0.0278341 1 ||| ||| 0.142857
+to [X][X] presentation [X][X] . [X] ||| zu [X][X] Aussprache [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0322581
+to [X][X] presentation [X][X] report [X] ||| zu [X][X] Aussprache [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.0454545
+to [X][X] presentation [X][X] [X] ||| zu [X][X] Aussprache [X][X] [X] ||| 0.0278341 1 ||| ||| 0.144379
+to [X][X] presentation of [X] ||| zu [X][X] Aussprache über [X] ||| 0.0278341 1 ||| ||| 0.1
+to [X][X] presentation of [X][X] [X] ||| zu [X][X] Aussprache über [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0777126
+to [X][X] presentation of the [X] ||| zu [X][X] Aussprache über den [X] ||| 0.0278341 1 ||| ||| 0.0666667
+to [X][X] report . [X] ||| zu [X][X] Bericht . [X] ||| 0.0278341 1 ||| ||| 0.0322581
+to [X][X] report [X] ||| zu [X][X] Bericht [X] ||| 0.0278341 1 ||| ||| 0.0454545
+[X][X] Kumar Ponnambalam [X] ||| zu [X][X] Kumar Ponnambalam [X] ||| 0.0278341 1 ||| ||| 0.111111
+about [X][X] inadmissibility . [X] ||| zu [X][X] Unzulässigkeit geben ? [X] ||| 0.0278341 1 ||| ||| 0.0526316
+about [X][X] inadmissibility [X] ||| zu [X][X] Unzulässigkeit geben [X] ||| 0.0278341 1 ||| ||| 0.0909091
+about [X][X] [X] ||| zu [X][X] [X] ||| 0.00360531 1 ||| ||| 4.96834
+of [X][X] [X] ||| zu [X][X] [X] ||| 0.0517276 1 ||| ||| 4.96834
+one [X][X] [X] ||| zu [X][X] [X] ||| 0.00362815 1 ||| ||| 4.96834
+one of [X][X] [X] ||| zu [X][X] [X] ||| 0.00176072 1 ||| ||| 4.96834
+to [X][X] [X] ||| zu [X][X] [X] ||| 0.266013 1 ||| ||| 4.96834
+to [X][X] is [X][X] right [X] ||| zu [X][X] [X][X] Recht ist [X] ||| 0.0278341 1 ||| ||| 0.1
+to [X][X] is [X][X] . [X] ||| zu [X][X] [X][X] ist . [X] ||| 0.0278341 1 ||| ||| 0.111111
+to [X][X] is [X][X] [X] ||| zu [X][X] [X][X] ist [X] ||| 0.0139171 1 ||| ||| 0.2
+to [X][X] is a [X][X] [X] ||| zu [X][X] [X][X] ist [X] ||| 0.0139171 1 ||| ||| 0.2
+of [X][X] to [X] ||| zu [X][X] bei [X] ||| 0.0278341 1 ||| ||| 0.25
+of [X][X] to [X][X] [X] ||| zu [X][X] bei [X][X] [X] ||| 0.0278341 1 ||| ||| 0.171679
+of [X][X] to [X][X] a [X] ||| zu [X][X] bei [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0357143
+of [X][X] to [X][X] merely [X] ||| zu [X][X] bei [X][X] lediglich um [X] ||| 0.0278341 1 ||| ||| 0.0526316
+of [X][X] to what [X] ||| zu [X][X] bei dem es [X] ||| 0.0278341 1 ||| ||| 0.142857
+of [X][X] to what [X][X] [X] ||| zu [X][X] bei dem es [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0883459
+of [X][X] to what is [X] ||| zu [X][X] bei dem es sich [X] ||| 0.0278341 1 ||| ||| 0.0833333
+of [X][X] what [X] ||| zu [X][X] dem es [X] ||| 0.0278341 1 ||| ||| 0.142857
+of [X][X] what [X][X] [X] ||| zu [X][X] dem es [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0883459
+of [X][X] what [X][X] a [X] ||| zu [X][X] dem es [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0357143
+of [X][X] what is [X] ||| zu [X][X] dem es sich [X] ||| 0.0278341 1 ||| ||| 0.0833333
+of [X][X] what is [X][X] [X] ||| zu [X][X] dem es sich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0357143
+of [X][X] what is merely [X] ||| zu [X][X] dem es sich lediglich um [X] ||| 0.0278341 1 ||| ||| 0.0526316
+to [X][X] the report . [X] ||| zu [X][X] den Bericht . [X] ||| 0.0278341 1 ||| ||| 0.0322581
+to [X][X] the report [X] ||| zu [X][X] den Bericht [X] ||| 0.0278341 1 ||| ||| 0.0454545
+to [X][X] the [X] ||| zu [X][X] den [X] ||| 0.0278341 1 ||| ||| 0.0666667
+to [X][X] the [X][X] [X] ||| zu [X][X] den [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0322581
+to [X][X] of the presentation [X] ||| zu [X][X] der Aussprache [X] ||| 0.0278341 1 ||| ||| 0.142857
+to [X][X] of the [X] ||| zu [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.2
+to [X][X] of the [X][X] [X] ||| zu [X][X] der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.244379
+of [X][X] a [X] ||| zu [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0357143
+about [X][X] concerning inadmissibility . [X] ||| zu [X][X] im Zusammenhang mit der Unzulässigkeit geben ? [X] ||| 0.0278341 1 ||| ||| 0.0526316
+about [X][X] concerning inadmissibility [X] ||| zu [X][X] im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0278341 1 ||| ||| 0.0909091
+about [X][X] concerning [X] ||| zu [X][X] im Zusammenhang mit der [X] ||| 0.0278341 1 ||| ||| 0.166667
+about [X][X] concerning [X][X] [X] ||| zu [X][X] im Zusammenhang mit der [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0526316
+one [X][X] in [X] ||| zu [X][X] in [X] ||| 0.013917 1 ||| ||| 0.142857
+one of [X][X] in [X] ||| zu [X][X] in [X] ||| 0.013917 1 ||| ||| 0.142857
+one [X][X] recently [X] ||| zu [X][X] jüngster Zeit [X] ||| 0.0139171 1 ||| ||| 0.2
+one of [X][X] recently [X] ||| zu [X][X] jüngster Zeit [X] ||| 0.0139171 1 ||| ||| 0.2
+one [X][X] recently in [X] ||| zu [X][X] jüngster Zeit in [X] ||| 0.013917 1 ||| ||| 0.142857
+one of [X][X] recently in [X] ||| zu [X][X] jüngster Zeit in [X] ||| 0.013917 1 ||| ||| 0.142857
+of [X][X] merely [X] ||| zu [X][X] lediglich um [X] ||| 0.0278341 1 ||| ||| 0.0526316
+of [X][X] merely a [X] ||| zu [X][X] lediglich um einen [X] ||| 0.0278341 1 ||| ||| 0.0357143
+of [X][X] is [X] ||| zu [X][X] sich [X] ||| 0.0278341 1 ||| ||| 0.0833333
+of [X][X] is [X][X] [X] ||| zu [X][X] sich [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0357143
+of [X][X] is merely [X] ||| zu [X][X] sich lediglich um [X] ||| 0.0278341 1 ||| ||| 0.0526316
+of [X][X] is merely a [X] ||| zu [X][X] sich lediglich um einen [X] ||| 0.0278341 1 ||| ||| 0.0357143
+to [X][X] of [X] ||| zu [X][X] über [X] ||| 0.0278341 1 ||| ||| 0.1
+to [X][X] of [X][X] . [X] ||| zu [X][X] über [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.0322581
+to [X][X] of [X][X] [X] ||| zu [X][X] über [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0777126
+to [X][X] of the report [X] ||| zu [X][X] über den Bericht [X] ||| 0.0278341 1 ||| ||| 0.0454545
+to [X][X] of the [X] ||| zu [X][X] über den [X] ||| 0.0278341 1 ||| ||| 0.0666667
+to [X][X] of the [X][X] [X] ||| zu [X][X] über den [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0322581
+[X][X] Kumar Ponnambalam [X] ||| zu beklagen [X][X] Kumar Ponnambalam [X] ||| 0.0278341 1 ||| ||| 0.111111
+was [X] ||| zu beklagen gab , [X] ||| 0.0278341 1 ||| ||| 1
+was [X][X] [X] ||| zu beklagen gab , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111111
+was [X] ||| zu beklagen gab , zählt [X] ||| 0.0278341 1 ||| ||| 1
+was [X][X] [X] ||| zu beklagen gab , zählt [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111111
+was Mr Kumar Ponnambalam [X] ||| zu beklagen gab , zählt auch Herr Kumar Ponnambalam [X] ||| 0.0278341 1 ||| ||| 0.111111
+was Mr [X] ||| zu beklagen gab , zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 1
+was Mr [X][X] [X] ||| zu beklagen gab , zählt auch Herr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111111
+was [X] ||| zu beklagen gab , zählt auch [X] ||| 0.0278341 1 ||| ||| 1
+was [X][X] [X] ||| zu beklagen gab , zählt auch [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111111
+was [X] ||| zu beklagen gab [X] ||| 0.0278341 1 ||| ||| 1
+was [X][X] [X] ||| zu beklagen gab [X][X] [X] ||| 0.0278341 1 ||| ||| 0.111111
+one of the [X] ||| zu den [X] ||| 0.0278341 1 ||| ||| 0.333333
+one of the [X][X] [X] ||| zu den [X][X] [X] ||| 0.0278341 1 ||| ||| 0.314286
+one of the [X][X] in [X] ||| zu den [X][X] in [X] ||| 0.0278341 1 ||| ||| 0.0714286
+one of the [X][X] recently [X] ||| zu den [X][X] jüngster Zeit [X] ||| 0.0278341 1 ||| ||| 0.1
+for this [X] ||| zu einer [X] ||| 0.0278341 1 ||| ||| 1
+for this [X][X] . [X] ||| zu einer [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.333333
+for this [X][X] [X] ||| zu einer [X][X] [X] ||| 0.0278341 1 ||| ||| 0.833333
+of that kind [X] ||| zu erheben , [X] ||| 0.0278341 1 ||| ||| 0.5
+of that kind [X][X] [X] ||| zu erheben , [X][X] [X] ||| 0.0278341 1 ||| ||| 0.314536
+of that kind [X][X] a [X] ||| zu erheben , [X][X] einen [X] ||| 0.0278341 1 ||| ||| 0.0357143
+of that kind [X][X] merely [X] ||| zu erheben , [X][X] lediglich um [X] ||| 0.0278341 1 ||| ||| 0.0526316
+of that kind [X][X] is [X] ||| zu erheben , [X][X] sich [X] ||| 0.0278341 1 ||| ||| 0.0833333
+of that kind to [X] ||| zu erheben , bei [X] ||| 0.0278341 1 ||| ||| 0.25
+of that kind to [X][X] [X] ||| zu erheben , bei [X][X] [X] ||| 0.0278341 1 ||| ||| 0.171679
+of that kind to what [X] ||| zu erheben , bei dem es [X] ||| 0.0278341 1 ||| ||| 0.142857
+to make [X] ||| zu machen [X] ||| 0.0185561 1 ||| ||| 1.5
+to make representations [X] ||| zu machen [X] ||| 0.00927803 1 ||| ||| 1.5
+do on [X] ||| zu tun [X] ||| 0.0278341 1 ||| ||| 1
+sentenced to death . [X] ||| zum Tode verurteilten [X] ||| 0.013917 1 ||| ||| 2
+sentenced to death [X] ||| zum Tode verurteilten [X] ||| 0.013917 1 ||| ||| 2
+expressing [X] ||| zum [X] ||| 0.0278341 1 ||| ||| 1
+to reprieve [X] ||| zur Begnadigung [X] ||| 0.0278341 1 ||| ||| 1
+to reprieve [X][X] [X] ||| zur Begnadigung [X][X] [X] ||| 0.0278341 1 ||| ||| 0.125
+to reprieve the condemned person [X] ||| zur Begnadigung des Verurteilten [X] ||| 0.0278341 1 ||| ||| 0.125
+to reprieve the [X] ||| zur Begnadigung des [X] ||| 0.0278341 1 ||| ||| 0.333333
+to reprieve the [X][X] [X] ||| zur Begnadigung des [X][X] [X] ||| 0.0278341 1 ||| ||| 0.125
+reduction targets [X] ||| zur Flottenverkleinerung [X] ||| 0.0278341 1 ||| ||| 1
+on a point of order [X] ||| zur Geschäftsordnung [X] ||| 0.0278341 1 ||| ||| 1
+on [X] ||| zur [X] ||| 0.0804729 1 ||| ||| 6
+power to order [X] ||| zur [X] ||| 0.00463902 1 ||| ||| 6
+the power to order [X] ||| zur [X] ||| 0.00463902 1 ||| ||| 6
+to [X] ||| zur [X] ||| 0.00463902 1 ||| ||| 6
+to order [X] ||| zur [X] ||| 0.00463902 1 ||| ||| 6
+on [X][X] . [X] ||| zur [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.666666
+power to order [X][X] reprieve [X] ||| zur [X][X] Begnadigung [X] ||| 0.0123707 1 ||| ||| 0.225
+to order [X][X] reprieve [X] ||| zur [X][X] Begnadigung [X] ||| 0.0154634 1 ||| ||| 0.225
+to order [X][X] reprieve the [X] ||| zur [X][X] Begnadigung des [X] ||| 0.0278341 1 ||| ||| 0.0769231
+to [X][X] condemned person [X] ||| zur [X][X] Verurteilten [X] ||| 0.0278341 1 ||| ||| 0.125
+on [X][X] [X] ||| zur [X][X] [X] ||| 0.0763531 1 ||| ||| 5.26979
+power to order [X][X] [X] ||| zur [X][X] [X] ||| 0.0465756 1 ||| ||| 5.26979
+the power to order [X][X] [X] ||| zur [X][X] [X] ||| 0.00471592 1 ||| ||| 5.26979
+to [X][X] [X] ||| zur [X][X] [X] ||| 0.00242084 1 ||| ||| 5.26979
+to order [X][X] [X] ||| zur [X][X] [X] ||| 0.0565896 1 ||| ||| 5.26979
+to order [X][X] the [X] ||| zur [X][X] des [X] ||| 0.0278341 1 ||| ||| 0.0769231
+power to order [X][X] and [X] ||| zur [X][X] und [X] ||| 0.0119289 1 ||| ||| 0.583333
+to order [X][X] and [X] ||| zur [X][X] und [X] ||| 0.0159052 1 ||| ||| 0.583333
+to order [X][X] and [X][X] [X] ||| zur [X][X] und [X][X] [X] ||| 0.0278341 1 ||| ||| 0.201923
+to order [X][X] and to [X] ||| zur [X][X] und zur [X] ||| 0.0278341 1 ||| ||| 0.2
+to order [X][X] to reprieve [X] ||| zur [X][X] zur Begnadigung [X] ||| 0.0278341 1 ||| ||| 0.125
+power to order [X][X] to [X] ||| zur [X][X] zur [X] ||| 0.0126519 1 ||| ||| 0.366667
+to order [X][X] to [X] ||| zur [X][X] zur [X] ||| 0.0151822 1 ||| ||| 0.366667
+to order [X][X] to [X][X] [X] ||| zur [X][X] zur [X][X] [X] ||| 0.0278341 1 ||| ||| 0.0769231
+, [X] ||| zusammen , [X] ||| 0.0278341 1 ||| ||| 1
+, [X] ||| zusammen , daß [X] ||| 0.0278341 1 ||| ||| 1
+it [X] ||| zwar [X] ||| 0.0278341 1 ||| ||| 1
+it says [X][X] [X] ||| zwar [X][X] Strafen [X] ||| 0.0278341 1 ||| ||| 0.2
+it [X][X] [X] ||| zwar [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+it says [X][X] should [X] ||| zwar sollen [X][X] Strafen [X] ||| 0.0278341 1 ||| ||| 0.2
+it [X][X] should [X] ||| zwar sollen [X][X] [X] ||| 0.0278341 1 ||| ||| 0.2
+it says that this should [X] ||| zwar sollen derartige Strafen [X] ||| 0.0278341 1 ||| ||| 0.2
+[X][X] , who [X] ||| zählt [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.142857
+Mr Kumar Ponnambalam , who [X] ||| zählt auch Herr Kumar Ponnambalam , der [X] ||| 0.0278341 1 ||| ||| 0.142857
+Mr Kumar Ponnambalam [X] ||| zählt auch Herr Kumar Ponnambalam [X] ||| 0.0278341 1 ||| ||| 0.5
+Mr Kumar Ponnambalam [X][X] [X] ||| zählt auch Herr Kumar Ponnambalam [X][X] [X] ||| 0.0278341 1 ||| ||| 0.142857
+Mr [X] ||| zählt auch Herr [X] ||| 0.0278341 1 ||| ||| 1
+Mr [X][X] , who [X] ||| zählt auch Herr [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.142857
+Mr [X][X] [X] ||| zählt auch Herr [X][X] [X] ||| 0.0278341 1 ||| ||| 0.642857
+[X][X] , who [X] ||| zählt auch [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.142857
+of [X] ||| über [X] ||| 0.013917 1 ||| ||| 2
+on [X] ||| über [X] ||| 0.013917 1 ||| ||| 2
+on [X][X] [X] ||| über [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0666667
+on [X][X] [X] ||| über [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0526316
+of [X][X] . [X] ||| über [X][X] . [X] ||| 0.0278341 1 ||| ||| 0.166667
+of [X][X] [X] ||| über [X][X] [X] ||| 0.0107589 1 ||| ||| 1.29354
+on [X][X] [X] ||| über [X][X] [X] ||| 0.0134889 1 ||| ||| 1.29354
+on [X][X] comes [X] ||| über [X][X] [X] ||| 0.0035863 1 ||| ||| 1.29354
+on [X][X] before [X] ||| über [X][X] befassen , [X] ||| 0.013917 1 ||| ||| 0.133333
+on [X][X] comes before [X] ||| über [X][X] befassen , [X] ||| 0.013917 1 ||| ||| 0.133333
+on [X][X] before [X] ||| über [X][X] befassen , der [X] ||| 0.013917 1 ||| ||| 0.105263
+on [X][X] comes before [X] ||| über [X][X] befassen , der [X] ||| 0.013917 1 ||| ||| 0.105263
+on [X][X] before [X] ||| über [X][X] befassen [X] ||| 0.013917 1 ||| ||| 0.181818
+on [X][X] comes before [X] ||| über [X][X] befassen [X] ||| 0.013917 1 ||| ||| 0.181818
+on [X][X] [X] ||| über [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0526316
+of the report . [X] ||| über den Bericht . [X] ||| 0.0278341 1 ||| ||| 0.166667
+of the report [X] ||| über den Bericht [X] ||| 0.0278341 1 ||| ||| 0.333333
+of the [X] ||| über den [X] ||| 0.0278341 1 ||| ||| 1
+of the [X][X] [X] ||| über den [X][X] [X] ||| 0.0278341 1 ||| ||| 0.166667
+on multiannual guidance programmes [X] ||| über mehrjährige Ausrichtungsprogramme [X] ||| 0.0167004 1 ||| ||| 0.416667
+on multiannual guidance programmes comes [X] ||| über mehrjährige Ausrichtungsprogramme [X] ||| 0.0111337 1 ||| ||| 0.416667
+on multiannual guidance programmes [X][X] [X] ||| über mehrjährige Ausrichtungsprogramme [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0666667
+on multiannual guidance programmes [X][X] [X] ||| über mehrjährige Ausrichtungsprogramme [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0526316
+on multiannual guidance programmes [X][X] [X] ||| über mehrjährige Ausrichtungsprogramme [X][X] [X] ||| 0.0278341 1 ||| ||| 0.210207
+on multiannual guidance programmes [X][X] [X] ||| über mehrjährige Ausrichtungsprogramme [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0526316
+on multiannual [X] ||| über mehrjährige [X] ||| 0.0278341 1 ||| ||| 1
+on multiannual [X][X] [X] ||| über mehrjährige [X][X] , [X] ||| 0.0278341 1 ||| ||| 0.0666667
+on multiannual [X][X] [X] ||| über mehrjährige [X][X] , der [X] ||| 0.0278341 1 ||| ||| 0.0526316
+on multiannual [X][X] [X] ||| über mehrjährige [X][X] [X] ||| 0.0219881 1 ||| ||| 0.793541
+on multiannual [X][X] comes [X] ||| über mehrjährige [X][X] [X] ||| 0.00584598 1 ||| ||| 0.793541
+on multiannual [X][X] before [X] ||| über mehrjährige [X][X] befassen , [X] ||| 0.013917 1 ||| ||| 0.133333
+on multiannual [X][X] comes before [X] ||| über mehrjährige [X][X] befassen , [X] ||| 0.013917 1 ||| ||| 0.133333
+on multiannual [X][X] before [X] ||| über mehrjährige [X][X] befassen , der [X] ||| 0.013917 1 ||| ||| 0.105263
+on multiannual [X][X] comes before [X] ||| über mehrjährige [X][X] befassen , der [X] ||| 0.013917 1 ||| ||| 0.105263
+on multiannual [X][X] before [X] ||| über mehrjährige [X][X] befassen [X] ||| 0.013917 1 ||| ||| 0.181818
+on multiannual [X][X] comes before [X] ||| über mehrjährige [X][X] befassen [X] ||| 0.013917 1 ||| ||| 0.181818
+on multiannual [X][X] [X] ||| über mehrjährige [X][X] der [X] ||| 0.0278341 1 ||| ||| 0.0526316
diff --git a/regression-testing/tests/score.hierarchical/truth/results.txt b/regression-testing/tests/score.hierarchical/truth/results.txt
new file mode 100644
index 000000000..f07957f0f
--- /dev/null
+++ b/regression-testing/tests/score.hierarchical/truth/results.txt
@@ -0,0 +1,10000 @@
+resumption [X] ||| Wiederaufnahme [X] ||| 0.0182166 1 ||| ||| 1
+of the [X] ||| der [X] ||| 0.0182166 1 ||| ||| 1
+session [X] ||| Sitzungsperiode [X] ||| 0.0182166 1 ||| ||| 1
+resumption of the [X] ||| Wiederaufnahme der [X] ||| 0.0182166 1 ||| ||| 0.5
+resumption [X][X] [X] ||| Wiederaufnahme [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.75
+of the session [X] ||| der Sitzungsperiode [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] session [X] ||| [X][X] Sitzungsperiode [X] ||| 0.0182166 1 ||| 0-0 ||| 0.75
+resumption of the session [X] ||| Wiederaufnahme der Sitzungsperiode [X] ||| 0.0182166 1 ||| ||| 0.25
+resumption [X][X] session [X] ||| Wiederaufnahme [X][X] Sitzungsperiode [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+you [X] ||| Parlament [X] ||| 0.0182166 1 ||| ||| 1
+have [X] ||| besteht [X] ||| 0.0182166 1 ||| ||| 1
+requested [X] ||| Wunsch [X] ||| 0.0182166 1 ||| ||| 1
+a [X] ||| einer [X] ||| 0.0182166 1 ||| ||| 1
+debate [X] ||| Aussprache [X] ||| 0.0182166 1 ||| ||| 1
+on [X] ||| im [X] ||| 0.0182166 1 ||| ||| 1
+in [X] ||| in [X] ||| 0.0182166 1 ||| ||| 1
+the course of the [X] ||| den [X] ||| 0.0182166 1 ||| ||| 1
+next [X] ||| nächsten [X] ||| 0.0182166 1 ||| ||| 1
+few days [X] ||| Tagen [X] ||| 0.0182166 1 ||| ||| 1
+few days , [X] ||| Tagen [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+you [X] ||| im Parlament [X] ||| 0.0182166 1 ||| ||| 1
+you have [X] ||| Parlament besteht [X] ||| 0.0182166 1 ||| ||| 1
+have [X] ||| besteht der [X] ||| 0.0182166 1 ||| ||| 1
+requested [X] ||| der Wunsch [X] ||| 0.00910828 1 ||| ||| 2
+requested [X] ||| Wunsch nach [X] ||| 0.00910828 1 ||| ||| 2
+a [X] ||| nach einer [X] ||| 0.0182166 1 ||| ||| 1
+a debate [X] ||| einer Aussprache [X] ||| 0.0182166 1 ||| ||| 1
+debate on [X] ||| Aussprache im [X] ||| 0.0182166 1 ||| ||| 1
+in the course of the [X] ||| in den [X] ||| 0.0182166 1 ||| ||| 0.5
+in [X][X] [X] ||| in [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.0873
+the course of the next [X] ||| den nächsten [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] next [X] ||| [X][X] nächsten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.833333
+next few days [X] ||| nächsten Tagen [X] ||| 0.0182166 1 ||| ||| 0.5
+next [X][X] [X] ||| nächsten [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.833333
+next few days , [X] ||| nächsten Tagen [X] ||| 0.0182166 1 ||| ||| 0.333333
+next [X][X] , [X] ||| nächsten [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+you have [X] ||| im Parlament besteht [X] ||| 0.00910828 1 ||| ||| 2
+you have [X] ||| Parlament besteht der [X] ||| 0.00910828 1 ||| ||| 2
+have requested [X] ||| besteht der Wunsch [X] ||| 0.0182166 1 ||| ||| 1
+requested [X] ||| der Wunsch nach [X] ||| 0.0182166 1 ||| ||| 1
+requested a [X] ||| Wunsch nach einer [X] ||| 0.0182166 1 ||| ||| 1
+a debate [X] ||| nach einer Aussprache [X] ||| 0.0182166 1 ||| ||| 1
+a debate on [X] ||| einer Aussprache im [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] on [X] ||| [X][X] im [X] ||| 0.0182166 1 ||| 0-0 ||| 0.910185
+a [X][X] [X] ||| einer [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+in [X][X] next [X] ||| in [X][X] nächsten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+[X][X] next few days [X] ||| [X][X] nächsten Tagen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.392857
+[X][X] next [X][X] [X] ||| [X][X] nächsten [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.703968
+[X][X] few days [X] ||| [X][X] Tagen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.392857
+the course of the [X][X] [X] ||| den [X][X] [X] ||| 0.0182166 1 ||| 4-1 ||| 0.45
+[X][X] next few days , [X] ||| [X][X] nächsten Tagen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.311111
+[X][X] next [X][X] , [X] ||| [X][X] nächsten [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.311111
+[X][X] few days , [X] ||| [X][X] Tagen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.311111
+you have [X] ||| im Parlament besteht der [X] ||| 0.0182166 1 ||| ||| 1
+you have requested [X] ||| Parlament besteht der Wunsch [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] requested [X] ||| [X][X] der Wunsch [X] ||| 0.00910828 1 ||| 0-0 ||| 0.833334
+[X][X] requested [X] ||| [X][X] Wunsch [X] ||| 0.00910828 1 ||| 0-0 ||| 0.833334
+you [X][X] [X] ||| Parlament [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.627778
+have requested [X] ||| besteht der Wunsch nach [X] ||| 0.0182166 1 ||| ||| 1
+requested a [X] ||| der Wunsch nach einer [X] ||| 0.0182166 1 ||| ||| 1
+requested a debate [X] ||| Wunsch nach einer Aussprache [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] debate [X] ||| [X][X] Aussprache [X] ||| 0.0182166 1 ||| 0-0 ||| 0.634483
+requested [X][X] [X] ||| Wunsch [X][X] [X] ||| 0.00910828 1 ||| 1-1 ||| 0.75
+requested [X][X] [X] ||| Wunsch nach [X][X] [X] ||| 0.00910828 1 ||| 1-2 ||| 0.75
+a debate on [X] ||| nach einer Aussprache im [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] on [X] ||| nach [X][X] im [X] ||| 0.0182166 1 ||| 0-1 ||| 0.25
+a [X][X] [X] ||| nach einer [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.25
+in [X][X] next few days [X] ||| in [X][X] nächsten Tagen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+in [X][X] next [X][X] [X] ||| in [X][X] nächsten [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.253968
+in [X][X] few days [X] ||| in [X][X] Tagen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+in [X][X] next [X][X] , [X] ||| in [X][X] nächsten [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.111111
+in [X][X] few days , [X] ||| in [X][X] Tagen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+in [X][X] , [X] ||| in [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+you have requested [X] ||| im Parlament besteht der Wunsch [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] requested [X] ||| im [X][X] der Wunsch [X] ||| 0.00910828 1 ||| 0-1 ||| 0.333334
+[X][X] requested [X] ||| im [X][X] Wunsch [X] ||| 0.00910828 1 ||| 0-1 ||| 0.333334
+you [X][X] [X] ||| im Parlament [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.433954
+you have requested [X] ||| Parlament besteht der Wunsch nach [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] requested [X] ||| [X][X] der Wunsch nach [X] ||| 0.00910828 1 ||| 0-0 ||| 0.685714
+[X][X] requested [X] ||| [X][X] Wunsch nach [X] ||| 0.00910828 1 ||| 0-0 ||| 0.685714
+you [X][X] [X] ||| Parlament [X][X] nach [X] ||| 0.0182166 1 ||| 1-1 ||| 0.2
+have requested a [X] ||| besteht der Wunsch nach einer [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] a [X] ||| [X][X] nach einer [X] ||| 0.00910828 1 ||| 0-0 ||| 0.742858
+[X][X] a [X] ||| [X][X] einer [X] ||| 0.00910828 1 ||| 0-0 ||| 0.742858
+have [X][X] [X] ||| besteht [X][X] [X] ||| 0.00910828 1 ||| 1-1 ||| 0.711112
+have [X][X] [X] ||| besteht der [X][X] [X] ||| 0.00910828 1 ||| 1-2 ||| 0.711112
+requested a debate [X] ||| der Wunsch nach einer Aussprache [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] debate [X] ||| der [X][X] Aussprache [X] ||| 0.0182166 1 ||| 0-1 ||| 0.2
+requested [X][X] [X] ||| der Wunsch [X][X] [X] ||| 0.00910828 1 ||| 1-2 ||| 0.6
+requested [X][X] [X] ||| der Wunsch nach [X][X] [X] ||| 0.00910828 1 ||| 1-3 ||| 0.6
+requested a debate on [X] ||| Wunsch nach einer Aussprache im [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] debate on [X] ||| [X][X] Aussprache im [X] ||| 0.0182166 1 ||| 0-0 ||| 0.326852
+requested [X][X] on [X] ||| Wunsch [X][X] im [X] ||| 0.00910828 1 ||| 1-1 ||| 0.25
+requested [X][X] on [X] ||| Wunsch nach [X][X] im [X] ||| 0.00910828 1 ||| 1-2 ||| 0.25
+requested a [X][X] [X] ||| Wunsch nach einer [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.125
+you have requested [X] ||| im Parlament besteht der Wunsch nach [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] requested [X] ||| im [X][X] der Wunsch nach [X] ||| 0.00910828 1 ||| 0-1 ||| 0.285714
+[X][X] requested [X] ||| im [X][X] Wunsch nach [X] ||| 0.00910828 1 ||| 0-1 ||| 0.285714
+you [X][X] [X] ||| im Parlament [X][X] nach [X] ||| 0.0182166 1 ||| 1-2 ||| 0.142857
+you have requested a [X] ||| Parlament besteht der Wunsch nach einer [X] ||| 0.0182166 1 ||| ||| 0.1
+[X][X] requested a [X] ||| [X][X] der Wunsch nach einer [X] ||| 0.00910828 1 ||| 0-0 ||| 0.342858
+[X][X] requested a [X] ||| [X][X] Wunsch nach einer [X] ||| 0.00910828 1 ||| 0-0 ||| 0.342858
+you [X][X] a [X] ||| Parlament [X][X] nach einer [X] ||| 0.00910828 1 ||| 1-1 ||| 0.2
+you [X][X] a [X] ||| Parlament [X][X] einer [X] ||| 0.00910828 1 ||| 1-1 ||| 0.2
+you have [X][X] [X] ||| Parlament besteht [X][X] [X] ||| 0.00910828 1 ||| 2-2 ||| 0.355556
+you have [X][X] [X] ||| Parlament besteht der [X][X] [X] ||| 0.00910828 1 ||| 2-3 ||| 0.355556
+have requested a debate [X] ||| besteht der Wunsch nach einer Aussprache [X] ||| 0.0182166 1 ||| ||| 0.1
+[X][X] a debate [X] ||| [X][X] nach einer Aussprache [X] ||| 0.00910828 1 ||| 0-0 ||| 0.368966
+[X][X] a debate [X] ||| [X][X] einer Aussprache [X] ||| 0.00910828 1 ||| 0-0 ||| 0.368966
+have [X][X] debate [X] ||| besteht [X][X] Aussprache [X] ||| 0.00910828 1 ||| 1-1 ||| 0.2
+have [X][X] debate [X] ||| besteht der [X][X] Aussprache [X] ||| 0.00910828 1 ||| 1-2 ||| 0.2
+have requested [X][X] [X] ||| besteht der Wunsch [X][X] [X] ||| 0.00910828 1 ||| 2-3 ||| 0.311112
+have requested [X][X] [X] ||| besteht der Wunsch nach [X][X] [X] ||| 0.00910828 1 ||| 2-4 ||| 0.311112
+requested a debate on [X] ||| der Wunsch nach einer Aussprache im [X] ||| 0.0182166 1 ||| ||| 0.1
+[X][X] debate on [X] ||| der [X][X] Aussprache im [X] ||| 0.0182166 1 ||| 0-1 ||| 0.1
+[X][X] on [X] ||| der [X][X] im [X] ||| 0.0182166 1 ||| 0-1 ||| 0.1
+requested [X][X] on [X] ||| der Wunsch [X][X] im [X] ||| 0.00910828 1 ||| 1-2 ||| 0.2
+requested [X][X] on [X] ||| der Wunsch nach [X][X] im [X] ||| 0.00910828 1 ||| 1-3 ||| 0.2
+requested a [X][X] [X] ||| der Wunsch nach einer [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.1
+you have requested a [X] ||| im Parlament besteht der Wunsch nach einer [X] ||| 0.0182166 1 ||| ||| 0.0714286
+[X][X] requested a [X] ||| im [X][X] der Wunsch nach einer [X] ||| 0.00910828 1 ||| 0-1 ||| 0.142857
+[X][X] requested a [X] ||| im [X][X] Wunsch nach einer [X] ||| 0.00910828 1 ||| 0-1 ||| 0.142857
+[X][X] a [X] ||| im [X][X] nach einer [X] ||| 0.00910828 1 ||| 0-1 ||| 0.142857
+[X][X] a [X] ||| im [X][X] einer [X] ||| 0.00910828 1 ||| 0-1 ||| 0.142857
+you [X][X] a [X] ||| im Parlament [X][X] nach einer [X] ||| 0.00910828 1 ||| 1-2 ||| 0.142857
+you [X][X] a [X] ||| im Parlament [X][X] einer [X] ||| 0.00910828 1 ||| 1-2 ||| 0.142857
+you have [X][X] [X] ||| im Parlament besteht [X][X] [X] ||| 0.00910828 1 ||| 2-3 ||| 0.24886
+you have [X][X] [X] ||| im Parlament besteht der [X][X] [X] ||| 0.00910828 1 ||| 2-4 ||| 0.24886
+you have requested a debate [X] ||| Parlament besteht der Wunsch nach einer Aussprache [X] ||| 0.0182166 1 ||| ||| 0.05
+[X][X] requested a debate [X] ||| [X][X] der Wunsch nach einer Aussprache [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0844828
+[X][X] requested [X][X] [X] ||| [X][X] der Wunsch [X][X] [X] ||| 0.00910828 1 ||| 0-0 2-3 ||| 0.261558
+[X][X] requested [X][X] [X] ||| [X][X] der Wunsch nach [X][X] [X] ||| 0.00910828 1 ||| 0-0 2-4 ||| 0.261558
+[X][X] requested a debate [X] ||| [X][X] Wunsch nach einer Aussprache [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0844828
+[X][X] requested [X][X] [X] ||| [X][X] Wunsch [X][X] [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.261558
+[X][X] requested [X][X] [X] ||| [X][X] Wunsch nach [X][X] [X] ||| 0.00910828 1 ||| 0-0 2-3 ||| 0.261558
+you [X][X] a debate [X] ||| Parlament [X][X] nach einer Aussprache [X] ||| 0.00910828 1 ||| 1-1 ||| 0.1
+you [X][X] a debate [X] ||| Parlament [X][X] einer Aussprache [X] ||| 0.00910828 1 ||| 1-1 ||| 0.1
+you [X][X] debate [X] ||| Parlament [X][X] Aussprache [X] ||| 0.0182166 1 ||| 1-1 ||| 0.05
+you have [X][X] debate [X] ||| Parlament besteht [X][X] Aussprache [X] ||| 0.00910828 1 ||| 2-2 ||| 0.1
+you have [X][X] debate [X] ||| Parlament besteht der [X][X] Aussprache [X] ||| 0.00910828 1 ||| 2-3 ||| 0.1
+you have requested [X][X] [X] ||| Parlament besteht der Wunsch [X][X] [X] ||| 0.00910828 1 ||| 3-4 ||| 0.155556
+you have requested [X][X] [X] ||| Parlament besteht der Wunsch nach [X][X] [X] ||| 0.00910828 1 ||| 3-5 ||| 0.155556
+have requested a debate on [X] ||| besteht der Wunsch nach einer Aussprache im [X] ||| 0.0182166 1 ||| ||| 0.0555556
+[X][X] a debate on [X] ||| [X][X] nach einer Aussprache im [X] ||| 0.0182166 1 ||| 0-0 ||| 0.101852
+[X][X] a [X][X] [X] ||| [X][X] nach einer [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.101852
+[X][X] a debate on [X] ||| [X][X] einer Aussprache im [X] ||| 0.0182166 1 ||| 0-0 ||| 0.101852
+[X][X] a [X][X] [X] ||| [X][X] einer [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.101852
+have [X][X] debate on [X] ||| besteht [X][X] Aussprache im [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+have [X][X] on [X] ||| besteht [X][X] im [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+have [X][X] debate on [X] ||| besteht der [X][X] Aussprache im [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0555556
+have [X][X] on [X] ||| besteht der [X][X] im [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0555556
+have requested [X][X] on [X] ||| besteht der Wunsch [X][X] im [X] ||| 0.00910828 1 ||| 2-3 ||| 0.111111
+have requested [X][X] on [X] ||| besteht der Wunsch nach [X][X] im [X] ||| 0.00910828 1 ||| 2-4 ||| 0.111111
+have requested a [X][X] [X] ||| besteht der Wunsch nach einer [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0555556
+you have requested a debate [X] ||| im Parlament besteht der Wunsch nach einer Aussprache [X] ||| 0.0182166 1 ||| ||| 0.0344828
+[X][X] requested a debate [X] ||| im [X][X] der Wunsch nach einer Aussprache [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0344828
+[X][X] requested [X][X] [X] ||| im [X][X] der Wunsch [X][X] [X] ||| 0.00910828 1 ||| 0-1 2-4 ||| 0.106003
+[X][X] requested [X][X] [X] ||| im [X][X] der Wunsch nach [X][X] [X] ||| 0.00910828 1 ||| 0-1 2-5 ||| 0.106003
+[X][X] requested a debate [X] ||| im [X][X] Wunsch nach einer Aussprache [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0344828
+[X][X] requested [X][X] [X] ||| im [X][X] Wunsch [X][X] [X] ||| 0.00910828 1 ||| 0-1 2-3 ||| 0.106003
+[X][X] requested [X][X] [X] ||| im [X][X] Wunsch nach [X][X] [X] ||| 0.00910828 1 ||| 0-1 2-4 ||| 0.106003
+[X][X] a debate [X] ||| im [X][X] nach einer Aussprache [X] ||| 0.00910828 1 ||| 0-1 ||| 0.0689656
+[X][X] a debate [X] ||| im [X][X] einer Aussprache [X] ||| 0.00910828 1 ||| 0-1 ||| 0.0689656
+[X][X] debate [X] ||| im [X][X] Aussprache [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0344828
+you [X][X] a debate [X] ||| im Parlament [X][X] nach einer Aussprache [X] ||| 0.00910828 1 ||| 1-2 ||| 0.0689656
+you [X][X] a debate [X] ||| im Parlament [X][X] einer Aussprache [X] ||| 0.00910828 1 ||| 1-2 ||| 0.0689656
+you [X][X] debate [X] ||| im Parlament [X][X] Aussprache [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0344828
+you have [X][X] debate [X] ||| im Parlament besteht [X][X] Aussprache [X] ||| 0.00910828 1 ||| 2-3 ||| 0.0689656
+you have [X][X] debate [X] ||| im Parlament besteht der [X][X] Aussprache [X] ||| 0.00910828 1 ||| 2-4 ||| 0.0689656
+you have requested [X][X] [X] ||| im Parlament besteht der Wunsch [X][X] [X] ||| 0.00910828 1 ||| 3-5 ||| 0.106003
+you have requested [X][X] [X] ||| im Parlament besteht der Wunsch nach [X][X] [X] ||| 0.00910828 1 ||| 3-6 ||| 0.106003
+[X][X] requested a debate on [X] ||| [X][X] der Wunsch nach einer Aussprache im [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0462963
+[X][X] requested [X][X] on [X] ||| [X][X] der Wunsch [X][X] im [X] ||| 0.00910828 1 ||| 0-0 2-3 ||| 0.0925926
+[X][X] requested [X][X] on [X] ||| [X][X] der Wunsch nach [X][X] im [X] ||| 0.00910828 1 ||| 0-0 2-4 ||| 0.0925926
+[X][X] requested a [X][X] [X] ||| [X][X] der Wunsch nach einer [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.0462963
+[X][X] requested a debate on [X] ||| [X][X] Wunsch nach einer Aussprache im [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0462963
+[X][X] requested [X][X] on [X] ||| [X][X] Wunsch [X][X] im [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.0925926
+[X][X] requested [X][X] on [X] ||| [X][X] Wunsch nach [X][X] im [X] ||| 0.00910828 1 ||| 0-0 2-3 ||| 0.0925926
+[X][X] requested a [X][X] [X] ||| [X][X] Wunsch nach einer [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.0462963
+you [X][X] a debate on [X] ||| Parlament [X][X] nach einer Aussprache im [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0277778
+you [X][X] a [X][X] [X] ||| Parlament [X][X] nach einer [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-4 ||| 0.0277778
+you [X][X] a debate on [X] ||| Parlament [X][X] einer Aussprache im [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0277778
+you [X][X] a [X][X] [X] ||| Parlament [X][X] einer [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0277778
+you [X][X] debate on [X] ||| Parlament [X][X] Aussprache im [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0277778
+you [X][X] on [X] ||| Parlament [X][X] im [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0277778
+you have [X][X] debate on [X] ||| Parlament besteht [X][X] Aussprache im [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0277778
+you have [X][X] on [X] ||| Parlament besteht [X][X] im [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0277778
+you have [X][X] debate on [X] ||| Parlament besteht der [X][X] Aussprache im [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0277778
+you have [X][X] on [X] ||| Parlament besteht der [X][X] im [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0277778
+you have requested [X][X] on [X] ||| Parlament besteht der Wunsch [X][X] im [X] ||| 0.00910828 1 ||| 3-4 ||| 0.0555556
+you have requested [X][X] on [X] ||| Parlament besteht der Wunsch nach [X][X] im [X] ||| 0.00910828 1 ||| 3-5 ||| 0.0555556
+you have requested a [X][X] [X] ||| Parlament besteht der Wunsch nach einer [X][X] [X] ||| 0.0182166 1 ||| 4-6 ||| 0.0277778
+[X][X] requested a debate on [X] ||| im [X][X] der Wunsch nach einer Aussprache im [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0185185
+[X][X] requested [X][X] on [X] ||| im [X][X] der Wunsch [X][X] im [X] ||| 0.00910828 1 ||| 0-1 2-4 ||| 0.037037
+[X][X] requested [X][X] on [X] ||| im [X][X] der Wunsch nach [X][X] im [X] ||| 0.00910828 1 ||| 0-1 2-5 ||| 0.037037
+[X][X] requested a [X][X] [X] ||| im [X][X] der Wunsch nach einer [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-6 ||| 0.0185185
+[X][X] requested a debate on [X] ||| im [X][X] Wunsch nach einer Aussprache im [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0185185
+[X][X] requested [X][X] on [X] ||| im [X][X] Wunsch [X][X] im [X] ||| 0.00910828 1 ||| 0-1 2-3 ||| 0.037037
+[X][X] requested [X][X] on [X] ||| im [X][X] Wunsch nach [X][X] im [X] ||| 0.00910828 1 ||| 0-1 2-4 ||| 0.037037
+[X][X] requested a [X][X] [X] ||| im [X][X] Wunsch nach einer [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-5 ||| 0.0185185
+[X][X] a debate on [X] ||| im [X][X] nach einer Aussprache im [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0185185
+[X][X] a [X][X] [X] ||| im [X][X] nach einer [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-4 ||| 0.0185185
+[X][X] a debate on [X] ||| im [X][X] einer Aussprache im [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0185185
+[X][X] a [X][X] [X] ||| im [X][X] einer [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0185185
+[X][X] debate on [X] ||| im [X][X] Aussprache im [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0185185
+[X][X] on [X] ||| im [X][X] im [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0185185
+you [X][X] a debate on [X] ||| im Parlament [X][X] nach einer Aussprache im [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0185185
+you [X][X] a [X][X] [X] ||| im Parlament [X][X] nach einer [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-5 ||| 0.0185185
+you [X][X] a debate on [X] ||| im Parlament [X][X] einer Aussprache im [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0185185
+you [X][X] a [X][X] [X] ||| im Parlament [X][X] einer [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0185185
+you [X][X] debate on [X] ||| im Parlament [X][X] Aussprache im [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0185185
+you [X][X] on [X] ||| im Parlament [X][X] im [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0185185
+you have [X][X] debate on [X] ||| im Parlament besteht [X][X] Aussprache im [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0185185
+you have [X][X] on [X] ||| im Parlament besteht [X][X] im [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0185185
+you have [X][X] debate on [X] ||| im Parlament besteht der [X][X] Aussprache im [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0185185
+you have [X][X] on [X] ||| im Parlament besteht der [X][X] im [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0185185
+you have requested [X][X] on [X] ||| im Parlament besteht der Wunsch [X][X] im [X] ||| 0.00910828 1 ||| 3-5 ||| 0.037037
+you have requested [X][X] on [X] ||| im Parlament besteht der Wunsch nach [X][X] im [X] ||| 0.00910828 1 ||| 3-6 ||| 0.037037
+you have requested a [X][X] [X] ||| im Parlament besteht der Wunsch nach einer [X][X] [X] ||| 0.0182166 1 ||| 4-7 ||| 0.0185185
+meantime [X] ||| heute [X] ||| 0.0182166 1 ||| ||| 1
+I [X] ||| ich [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| - [X] ||| 0.0182166 1 ||| ||| 1
+in [X] ||| das [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| der [X] ||| 0.0182166 1 ||| ||| 1
+requested [X] ||| Wunsch [X] ||| 0.0182166 1 ||| ||| 1
+have requested [X] ||| Wunsch [X] ||| 0.0182166 1 ||| ||| 1
+a [X] ||| einiger [X] ||| 0.0182166 1 ||| ||| 1
+a number [X] ||| einiger [X] ||| 0.0182166 1 ||| ||| 1
+a number of [X] ||| einiger [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| , [X] ||| 0.218091 1 ||| ||| 2
+, on [X] ||| , [X] ||| 0.0182166 1 ||| ||| 1
+, on behalf [X] ||| , [X] ||| 0.0182166 1 ||| ||| 1
+, on behalf of [X] ||| , [X] ||| 0.0182166 1 ||| ||| 1
+all [X] ||| allen [X] ||| 0.0182166 1 ||| ||| 1
+all the [X] ||| allen [X] ||| 0.0182166 1 ||| ||| 1
+of all [X] ||| allen [X] ||| 0.0182166 1 ||| ||| 1
+of all the [X] ||| allen [X] ||| 0.0182166 1 ||| ||| 1
+behalf of all [X] ||| allen [X] ||| 0.0182166 1 ||| ||| 1
+behalf of all the [X] ||| allen [X] ||| 0.0182166 1 ||| ||| 1
+on behalf of all [X] ||| allen [X] ||| 0.0182166 1 ||| ||| 1
+on behalf of all the [X] ||| allen [X] ||| 0.0182166 1 ||| ||| 1
+victims [X] ||| Opfern [X] ||| 0.0182166 1 ||| ||| 1
+the victims [X] ||| Opfern [X] ||| 0.0182166 1 ||| ||| 1
+of the [X] ||| der [X] ||| 0.218091 1 ||| ||| 2
+particularly those [X] ||| insbesondere [X] ||| 0.0182166 1 ||| ||| 1
+in [X] ||| in [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| den [X] ||| 0.0182166 1 ||| ||| 1
+various [X] ||| verschiedenen [X] ||| 0.0182166 1 ||| ||| 1
+countries [X] ||| Ländern [X] ||| 0.0182166 1 ||| ||| 1
+European [X] ||| Europäischen [X] ||| 0.0182166 1 ||| ||| 1
+Union [X] ||| Union [X] ||| 0.0182166 1 ||| ||| 1
+as [X] ||| in [X] ||| 0.0182166 1 ||| ||| 1
+a [X] ||| einer [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| bitten - [X] ||| 0.0182166 1 ||| ||| 1
+in [X] ||| das ist [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| auch der [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| - , [X] ||| 0.0182166 1 ||| ||| 1
+, on [X] ||| - , [X] ||| 0.0182166 1 ||| ||| 1
+, on behalf [X] ||| - , [X] ||| 0.0182166 1 ||| ||| 1
+, on behalf of [X] ||| - , [X] ||| 0.0182166 1 ||| ||| 1
+, on behalf of all [X] ||| , allen [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] behalf of all [X] ||| [X][X] allen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.242857
+[X][X] of all [X] ||| [X][X] allen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.242857
+[X][X] all [X] ||| [X][X] allen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.242857
+, on behalf [X][X] [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 3-1 ||| 0.292857
+, on [X][X] [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.292857
+, [X][X] [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.292857
+[X][X] behalf of all the [X] ||| [X][X] allen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.176923
+[X][X] of all the [X] ||| [X][X] allen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.176923
+[X][X] all the [X] ||| [X][X] allen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.176923
+, on behalf of [X][X] [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 4-1 ||| 0.15
+, on behalf [X][X] the [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 3-1 ||| 0.1
+, on [X][X] the [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.1
+, [X][X] the [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+all the victims [X] ||| allen Opfern [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] victims [X] ||| [X][X] Opfern [X] ||| 0.0182166 1 ||| 0-0 ||| 0.883449
+all [X][X] [X] ||| allen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+of all the victims [X] ||| allen Opfern [X] ||| 0.0182166 1 ||| ||| 0.2
+of [X][X] victims [X] ||| [X][X] Opfern [X] ||| 0.0182166 1 ||| 1-0 ||| 0.2
+[X][X] the victims [X] ||| [X][X] Opfern [X] ||| 0.0182166 1 ||| 0-0 ||| 0.550115
+of all [X][X] [X] ||| allen [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.2
+behalf of all the victims [X] ||| allen Opfern [X] ||| 0.0182166 1 ||| ||| 0.142857
+behalf of [X][X] victims [X] ||| [X][X] Opfern [X] ||| 0.0182166 1 ||| 2-0 ||| 0.142857
+behalf [X][X] the victims [X] ||| [X][X] Opfern [X] ||| 0.0182166 1 ||| 1-0 ||| 0.142857
+behalf [X][X] victims [X] ||| [X][X] Opfern [X] ||| 0.0182166 1 ||| 1-0 ||| 0.142857
+behalf of all [X][X] [X] ||| allen [X][X] [X] ||| 0.0182166 1 ||| 3-1 ||| 0.142857
+on behalf of [X][X] victims [X] ||| [X][X] Opfern [X] ||| 0.0182166 1 ||| 3-0 ||| 0.125
+on behalf [X][X] the victims [X] ||| [X][X] Opfern [X] ||| 0.0182166 1 ||| 2-0 ||| 0.125
+on behalf [X][X] victims [X] ||| [X][X] Opfern [X] ||| 0.0182166 1 ||| 2-0 ||| 0.125
+on [X][X] the victims [X] ||| [X][X] Opfern [X] ||| 0.0182166 1 ||| 1-0 ||| 0.125
+on [X][X] victims [X] ||| [X][X] Opfern [X] ||| 0.0182166 1 ||| 1-0 ||| 0.125
+on behalf of all [X][X] [X] ||| allen [X][X] [X] ||| 0.0182166 1 ||| 4-1 ||| 0.125
+in the [X] ||| in den [X] ||| 0.0182166 1 ||| ||| 1
+the various [X] ||| den verschiedenen [X] ||| 0.0182166 1 ||| ||| 1
+various countries [X] ||| verschiedenen Ländern [X] ||| 0.0182166 1 ||| ||| 1
+countries of the [X] ||| Ländern der [X] ||| 0.0182166 1 ||| ||| 0.5
+countries [X][X] [X] ||| Ländern [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.892857
+of the European [X] ||| der Europäischen [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] European [X] ||| [X][X] Europäischen [X] ||| 0.218091 1 ||| 0-0 ||| 1.02882
+European Union [X] ||| Europäischen Union [X] ||| 0.0182166 1 ||| ||| 1
+, as [X] ||| , in [X] ||| 0.0182166 1 ||| ||| 1
+I should like to [X] ||| möchte ich Sie [X] ||| 0.0182166 1 ||| ||| 1
+in [X] ||| das ist auch [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| ist auch der [X] ||| 0.0182166 1 ||| ||| 1
+Members [X] ||| Kolleginnen und Kollegen [X] ||| 0.0182166 1 ||| ||| 1
+Members have [X] ||| Kolleginnen und Kollegen [X] ||| 0.0182166 1 ||| ||| 1
+of Members [X] ||| Kolleginnen und Kollegen [X] ||| 0.0182166 1 ||| ||| 1
+of Members have [X] ||| Kolleginnen und Kollegen [X] ||| 0.0182166 1 ||| ||| 1
+number of Members [X] ||| Kolleginnen und Kollegen [X] ||| 0.0182166 1 ||| ||| 1
+number of Members have [X] ||| Kolleginnen und Kollegen [X] ||| 0.0182166 1 ||| ||| 1
+, on behalf of all [X] ||| - , allen [X] ||| 0.0182166 1 ||| ||| 0.1
+[X][X] behalf of all [X] ||| - [X][X] allen [X] ||| 0.0182166 1 ||| 0-1 ||| 0.1
+[X][X] of all [X] ||| - [X][X] allen [X] ||| 0.0182166 1 ||| 0-1 ||| 0.1
+[X][X] all [X] ||| - [X][X] allen [X] ||| 0.0182166 1 ||| 0-1 ||| 0.1
+, on behalf [X][X] [X] ||| - , [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.209181
+, on [X][X] [X] ||| - , [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.209181
+, [X][X] [X] ||| - , [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.209181
+[X][X] behalf of all the [X] ||| - [X][X] allen [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0769231
+[X][X] of all the [X] ||| - [X][X] allen [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0769231
+[X][X] all the [X] ||| - [X][X] allen [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0769231
+, on behalf of [X][X] [X] ||| - , [X][X] [X] ||| 0.0182166 1 ||| 4-2 ||| 0.109181
+, on behalf [X][X] the [X] ||| - , [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0769231
+, on [X][X] the [X] ||| - , [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0769231
+, [X][X] the [X] ||| - , [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0769231
+[X][X] behalf of [X][X] victims [X] ||| [X][X] [X][X] Opfern [X] ||| 0.0182166 1 ||| 0-0 3-1 ||| 0.0822581
+[X][X] behalf [X][X] the victims [X] ||| [X][X] [X][X] Opfern [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.0822581
+[X][X] behalf [X][X] victims [X] ||| [X][X] [X][X] Opfern [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.0822581
+[X][X] behalf of all [X][X] [X] ||| [X][X] allen [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-2 ||| 0.0822581
+[X][X] of all the victims [X] ||| [X][X] allen Opfern [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0822581
+[X][X] of [X][X] victims [X] ||| [X][X] [X][X] Opfern [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.0822581
+[X][X] of all [X][X] [X] ||| [X][X] allen [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0822581
+[X][X] all the victims [X] ||| [X][X] allen Opfern [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0822581
+[X][X] all [X][X] [X] ||| [X][X] allen [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0822581
+, on behalf [X][X] victims [X] ||| , [X][X] Opfern [X] ||| 0.0182166 1 ||| 3-1 ||| 0.05
+, on [X][X] the victims [X] ||| , [X][X] Opfern [X] ||| 0.0182166 1 ||| 2-1 ||| 0.05
+, on [X][X] victims [X] ||| , [X][X] Opfern [X] ||| 0.0182166 1 ||| 2-1 ||| 0.05
+, [X][X] the victims [X] ||| , [X][X] Opfern [X] ||| 0.0182166 1 ||| 1-1 ||| 0.05
+, [X][X] victims [X] ||| , [X][X] Opfern [X] ||| 0.0182166 1 ||| 1-1 ||| 0.05
+in the various [X] ||| in den verschiedenen [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] various [X] ||| [X][X] verschiedenen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.333333
+in [X][X] [X] ||| in [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.66406
+the various countries [X] ||| den verschiedenen Ländern [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] countries [X] ||| [X][X] Ländern [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+the [X][X] [X] ||| den [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.60049
+various countries of the [X] ||| verschiedenen Ländern der [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] of the [X] ||| [X][X] der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.446429
+various [X][X] [X] ||| verschiedenen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.483766
+various countries [X][X] [X] ||| verschiedenen Ländern [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.483766
+countries of the European [X] ||| Ländern der Europäischen [X] ||| 0.0182166 1 ||| ||| 0.25
+countries [X][X] European [X] ||| Ländern [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+of the European Union [X] ||| der Europäischen Union [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] European Union [X] ||| [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 0-0 ||| 0.58259
+[X][X] Union [X] ||| [X][X] Union [X] ||| 0.0182166 1 ||| 0-0 ||| 0.58259
+of the [X][X] [X] ||| der [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.25
+I should like to [X] ||| möchte ich Sie bitten [X] ||| 0.0182166 1 ||| ||| 1
+in the [X] ||| das ist auch der [X] ||| 0.0182166 1 ||| ||| 1
+a number of Members [X] ||| einiger Kolleginnen und Kollegen [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] of Members [X] ||| [X][X] Kolleginnen und Kollegen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.2
+[X][X] Members [X] ||| [X][X] Kolleginnen und Kollegen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.2
+a number [X][X] [X] ||| einiger [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.54478
+a [X][X] [X] ||| einiger [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.54478
+a number of Members have [X] ||| einiger Kolleginnen und Kollegen [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] of Members have [X] ||| [X][X] Kolleginnen und Kollegen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.125
+[X][X] Members have [X] ||| [X][X] Kolleginnen und Kollegen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.125
+a number of [X][X] [X] ||| einiger [X][X] [X] ||| 0.0182166 1 ||| 3-1 ||| 0.201923
+a number [X][X] have [X] ||| einiger [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.201923
+a [X][X] have [X] ||| einiger [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.201923
+Members [X] ||| Kolleginnen und Kollegen - [X] ||| 0.0182166 1 ||| ||| 1
+Members have [X] ||| Kolleginnen und Kollegen - [X] ||| 0.0182166 1 ||| ||| 1
+of Members [X] ||| Kolleginnen und Kollegen - [X] ||| 0.0182166 1 ||| ||| 1
+of Members have [X] ||| Kolleginnen und Kollegen - [X] ||| 0.0182166 1 ||| ||| 1
+number of Members [X] ||| Kolleginnen und Kollegen - [X] ||| 0.0182166 1 ||| ||| 1
+number of Members have [X] ||| Kolleginnen und Kollegen - [X] ||| 0.0182166 1 ||| ||| 1
+[X][X] behalf of [X][X] victims [X] ||| - [X][X] [X][X] Opfern [X] ||| 0.0182166 1 ||| 0-1 3-2 ||| 0.0322581
+[X][X] behalf [X][X] the victims [X] ||| - [X][X] [X][X] Opfern [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.0322581
+[X][X] behalf [X][X] victims [X] ||| - [X][X] [X][X] Opfern [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.0322581
+[X][X] behalf of all [X][X] [X] ||| - [X][X] allen [X][X] [X] ||| 0.0182166 1 ||| 0-1 4-3 ||| 0.0322581
+[X][X] of all the victims [X] ||| - [X][X] allen Opfern [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0322581
+[X][X] of [X][X] victims [X] ||| - [X][X] [X][X] Opfern [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.0322581
+[X][X] of all [X][X] [X] ||| - [X][X] allen [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-3 ||| 0.0322581
+[X][X] all the victims [X] ||| - [X][X] allen Opfern [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0322581
+[X][X] all [X][X] [X] ||| - [X][X] allen [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0322581
+[X][X] the victims [X] ||| - [X][X] Opfern [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0322581
+[X][X] victims [X] ||| - [X][X] Opfern [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0322581
+, on behalf [X][X] victims [X] ||| - , [X][X] Opfern [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0322581
+, on [X][X] the victims [X] ||| - , [X][X] Opfern [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0322581
+, on [X][X] victims [X] ||| - , [X][X] Opfern [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0322581
+, [X][X] the victims [X] ||| - , [X][X] Opfern [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0322581
+, [X][X] victims [X] ||| - , [X][X] Opfern [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0322581
+in the various countries [X] ||| in den verschiedenen Ländern [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] various countries [X] ||| [X][X] verschiedenen Ländern [X] ||| 0.0182166 1 ||| 0-0 ||| 0.166667
+in [X][X] countries [X] ||| in [X][X] Ländern [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+in the [X][X] [X] ||| in den [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.330727
+the various countries of the [X] ||| den verschiedenen Ländern der [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] countries of the [X] ||| [X][X] Ländern der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.196429
+[X][X] countries [X][X] [X] ||| [X][X] Ländern [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.431217
+the [X][X] of the [X] ||| den [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+the various [X][X] [X] ||| den verschiedenen [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.267157
+the various countries [X][X] [X] ||| den verschiedenen Ländern [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.267157
+various countries of the European [X] ||| verschiedenen Ländern der Europäischen [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] of the European [X] ||| [X][X] der Europäischen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.278822
+various [X][X] European [X] ||| verschiedenen [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+various countries [X][X] European [X] ||| verschiedenen Ländern [X][X] Europäischen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.142857
+countries of the European Union [X] ||| Ländern der Europäischen Union [X] ||| 0.0182166 1 ||| ||| 0.142857
+countries [X][X] European Union [X] ||| Ländern [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+countries [X][X] Union [X] ||| Ländern [X][X] Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+countries of the [X][X] [X] ||| Ländern der [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.142857
+, I should like to [X] ||| möchte ich Sie bitten - [X] ||| 0.0182166 1 ||| ||| 0.333333
+, [X][X] [X] ||| [X][X] bitten - [X] ||| 0.00910828 1 ||| 1-0 ||| 0.666666
+, [X][X] [X] ||| [X][X] - [X] ||| 0.00910828 1 ||| 1-0 ||| 0.666666
+a number of Members [X][X] [X] ||| [X][X] einiger Kolleginnen und Kollegen [X] ||| 0.0182166 1 ||| 4-0 ||| 0.0769231
+[X][X] of Members [X][X] [X] ||| [X][X] [X][X] Kolleginnen und Kollegen [X] ||| 0.0182166 1 ||| 3-0 0-1 ||| 0.0769231
+[X][X] Members [X][X] [X] ||| [X][X] [X][X] Kolleginnen und Kollegen [X] ||| 0.0182166 1 ||| 2-0 0-1 ||| 0.0769231
+[X][X] of Members have requested [X] ||| Wunsch [X][X] Kolleginnen und Kollegen [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0769231
+[X][X] of [X][X] requested [X] ||| Wunsch [X][X] [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.124542
+[X][X] Members have requested [X] ||| Wunsch [X][X] Kolleginnen und Kollegen [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0769231
+[X][X] have requested [X] ||| Wunsch [X][X] [X] ||| 0.0182166 1 ||| 0-1 ||| 0.124542
+[X][X] requested [X] ||| Wunsch [X][X] [X] ||| 0.0182166 1 ||| 0-1 ||| 0.124542
+a number of [X][X] requested [X] ||| Wunsch einiger [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.124542
+a number [X][X] have requested [X] ||| Wunsch einiger [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.124542
+a number [X][X] requested [X] ||| Wunsch einiger [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.124542
+a [X][X] have requested [X] ||| Wunsch einiger [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.124542
+a [X][X] requested [X] ||| Wunsch einiger [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.124542
+a number of Members [X] ||| einiger Kolleginnen und Kollegen - [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] of Members [X] ||| [X][X] Kolleginnen und Kollegen - [X] ||| 0.0182166 1 ||| 0-0 ||| 0.142857
+[X][X] Members [X] ||| [X][X] Kolleginnen und Kollegen - [X] ||| 0.0182166 1 ||| 0-0 ||| 0.142857
+a number [X][X] [X] ||| einiger [X][X] - [X] ||| 0.0182166 1 ||| 2-1 ||| 0.21978
+a [X][X] [X] ||| einiger [X][X] - [X] ||| 0.0182166 1 ||| 1-1 ||| 0.21978
+a number of Members have [X] ||| einiger Kolleginnen und Kollegen - [X] ||| 0.0182166 1 ||| ||| 0.0769231
+[X][X] of Members have [X] ||| [X][X] Kolleginnen und Kollegen - [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0769231
+[X][X] Members have [X] ||| [X][X] Kolleginnen und Kollegen - [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0769231
+a number of [X][X] [X] ||| einiger [X][X] - [X] ||| 0.0182166 1 ||| 3-1 ||| 0.0769231
+a number [X][X] have [X] ||| einiger [X][X] - [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0769231
+a [X][X] have [X] ||| einiger [X][X] - [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+victims [X][X] [X] ||| Opfern [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 1
+[X][X] in [X] ||| [X][X] in [X] ||| 0.0182166 1 ||| 0-0 ||| 1
+[X][X] various countries of the [X] ||| [X][X] verschiedenen Ländern der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0714286
+[X][X] various [X][X] [X] ||| [X][X] verschiedenen [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.16406
+[X][X] various countries [X][X] [X] ||| [X][X] verschiedenen Ländern [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.16406
+in [X][X] countries of the [X] ||| in [X][X] Ländern der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+in [X][X] countries [X][X] [X] ||| in [X][X] Ländern [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.16406
+in [X][X] of the [X] ||| in [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+in the [X][X] of the [X] ||| in den [X][X] der [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0714286
+in the various [X][X] [X] ||| in den verschiedenen [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.16406
+in the various countries [X][X] [X] ||| in den verschiedenen Ländern [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.16406
+[X][X] countries of the European [X] ||| [X][X] Ländern der Europäischen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.135965
+[X][X] countries [X][X] European [X] ||| [X][X] Ländern [X][X] Europäischen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.135965
+the [X][X] of the European [X] ||| den [X][X] der Europäischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+the [X][X] European [X] ||| den [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+the various [X][X] European [X] ||| den verschiedenen [X][X] Europäischen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0833333
+the various countries [X][X] European [X] ||| den verschiedenen Ländern [X][X] Europäischen [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0833333
+[X][X] of the European Union [X] ||| [X][X] der Europäischen Union [X] ||| 0.0182166 1 ||| 0-0 ||| 0.189733
+[X][X] of the [X][X] [X] ||| [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.189733
+various [X][X] European Union [X] ||| verschiedenen [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+various [X][X] Union [X] ||| verschiedenen [X][X] Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+various countries [X][X] European Union [X] ||| verschiedenen Ländern [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+various countries [X][X] Union [X] ||| verschiedenen Ländern [X][X] Union [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+various countries of the [X][X] [X] ||| verschiedenen Ländern der [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.0909091
+meantime , [X][X] [X] ||| heute [X][X] bitten - [X] ||| 0.00910828 1 ||| 2-1 ||| 0.666666
+meantime , [X][X] [X] ||| heute [X][X] - [X] ||| 0.00910828 1 ||| 2-1 ||| 0.666666
+meantime [X][X] [X] ||| heute [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+a number of Members [X][X] [X] ||| [X][X] einiger Kolleginnen und Kollegen - [X] ||| 0.0182166 1 ||| 4-0 ||| 0.047619
+[X][X] of Members [X][X] [X] ||| [X][X] [X][X] Kolleginnen und Kollegen - [X] ||| 0.0182166 1 ||| 3-0 0-1 ||| 0.047619
+[X][X] Members [X][X] [X] ||| [X][X] [X][X] Kolleginnen und Kollegen - [X] ||| 0.0182166 1 ||| 2-0 0-1 ||| 0.047619
+[X][X] of Members have requested [X] ||| Wunsch [X][X] Kolleginnen und Kollegen - [X] ||| 0.0182166 1 ||| 0-1 ||| 0.047619
+[X][X] of [X][X] requested [X] ||| Wunsch [X][X] [X][X] - [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.047619
+[X][X] Members have requested [X] ||| Wunsch [X][X] Kolleginnen und Kollegen - [X] ||| 0.0182166 1 ||| 0-1 ||| 0.047619
+[X][X] have requested [X] ||| Wunsch [X][X] - [X] ||| 0.0182166 1 ||| 0-1 ||| 0.047619
+[X][X] requested [X] ||| Wunsch [X][X] - [X] ||| 0.0182166 1 ||| 0-1 ||| 0.047619
+a number of [X][X] requested [X] ||| Wunsch einiger [X][X] - [X] ||| 0.0182166 1 ||| 3-2 ||| 0.047619
+a number [X][X] have requested [X] ||| Wunsch einiger [X][X] - [X] ||| 0.0182166 1 ||| 2-2 ||| 0.047619
+a number [X][X] requested [X] ||| Wunsch einiger [X][X] - [X] ||| 0.0182166 1 ||| 2-2 ||| 0.047619
+a [X][X] have requested [X] ||| Wunsch einiger [X][X] - [X] ||| 0.0182166 1 ||| 1-2 ||| 0.047619
+a [X][X] requested [X] ||| Wunsch einiger [X][X] - [X] ||| 0.0182166 1 ||| 1-2 ||| 0.047619
+[X][X] various [X][X] European [X] ||| [X][X] verschiedenen [X][X] Europäischen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0526316
+[X][X] various countries [X][X] European [X] ||| [X][X] verschiedenen Ländern [X][X] Europäischen [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0526316
+in [X][X] countries [X][X] European [X] ||| in [X][X] Ländern [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0526316
+in [X][X] of the European [X] ||| in [X][X] der Europäischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+in [X][X] European [X] ||| in [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+in the [X][X] European [X] ||| in den [X][X] Europäischen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+in the various [X][X] European [X] ||| in den verschiedenen [X][X] Europäischen [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0526316
+[X][X] countries [X][X] European Union [X] ||| [X][X] Ländern [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0988235
+[X][X] countries [X][X] Union [X] ||| [X][X] Ländern [X][X] Union [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0988235
+[X][X] countries of the [X][X] [X] ||| [X][X] Ländern der [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.0988235
+the [X][X] of the [X][X] [X] ||| den [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0588235
+the [X][X] European Union [X] ||| den [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0588235
+the [X][X] Union [X] ||| den [X][X] Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0588235
+the various [X][X] European Union [X] ||| den verschiedenen [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0588235
+the various [X][X] Union [X] ||| den verschiedenen [X][X] Union [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0588235
+the various countries [X][X] Union [X] ||| den verschiedenen Ländern [X][X] Union [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0588235
+[X][X] , as [X] ||| , in [X][X] [X] ||| 0.0182166 1 ||| 0-2 ||| 1
+[X][X] of Members [X][X] , [X] ||| [X][X] [X][X] Kolleginnen und Kollegen - , [X] ||| 0.0182166 1 ||| 3-0 0-1 ||| 0.0588235
+[X][X] Members [X][X] , [X] ||| [X][X] [X][X] Kolleginnen und Kollegen - , [X] ||| 0.0182166 1 ||| 2-0 0-1 ||| 0.0588235
+[X][X] , [X] ||| [X][X] - , [X] ||| 0.00910828 1 ||| 0-0 ||| 0.117647
+[X][X] , [X] ||| [X][X] , [X] ||| 0.00910828 1 ||| 0-0 ||| 0.117647
+[X][X] of [X][X] requested , [X] ||| Wunsch [X][X] [X][X] - , [X] ||| 0.00910828 1 ||| 0-1 2-2 ||| 0.117647
+[X][X] of [X][X] requested , [X] ||| Wunsch [X][X] [X][X] , [X] ||| 0.00910828 1 ||| 0-1 2-2 ||| 0.117647
+[X][X] Members have requested , [X] ||| Wunsch [X][X] Kolleginnen und Kollegen - , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0588235
+[X][X] have requested , [X] ||| Wunsch [X][X] - , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0588235
+[X][X] requested , [X] ||| Wunsch [X][X] - , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0588235
+[X][X] have requested , [X] ||| Wunsch [X][X] , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0588235
+[X][X] requested , [X] ||| Wunsch [X][X] , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0588235
+a number [X][X] requested , [X] ||| Wunsch einiger [X][X] - , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0588235
+a [X][X] have requested , [X] ||| Wunsch einiger [X][X] - , [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0588235
+a [X][X] requested , [X] ||| Wunsch einiger [X][X] - , [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0588235
+a number [X][X] requested , [X] ||| Wunsch einiger [X][X] , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0588235
+a [X][X] have requested , [X] ||| Wunsch einiger [X][X] , [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0588235
+a [X][X] requested , [X] ||| Wunsch einiger [X][X] , [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0588235
+[X][X] Members [X][X] , on [X] ||| [X][X] [X][X] Kolleginnen und Kollegen - , [X] ||| 0.0182166 1 ||| 2-0 0-1 ||| 0.0384615
+[X][X] , on [X] ||| [X][X] - , [X] ||| 0.00910828 1 ||| 0-0 ||| 0.076923
+[X][X] , on [X] ||| [X][X] , [X] ||| 0.00910828 1 ||| 0-0 ||| 0.076923
+[X][X] Members have requested [X][X] [X] ||| Wunsch [X][X] Kolleginnen und Kollegen [X][X] [X] ||| 0.00910828 1 ||| 0-1 4-5 ||| 0.208106
+[X][X] Members have requested [X][X] [X] ||| Wunsch [X][X] Kolleginnen und Kollegen - [X][X] [X] ||| 0.00910828 1 ||| 0-1 4-6 ||| 0.208106
+[X][X] have requested , on [X] ||| Wunsch [X][X] - , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0384615
+[X][X] have requested [X][X] [X] ||| Wunsch [X][X] [X][X] [X] ||| 0.0121444 1 ||| 0-1 3-2 ||| 0.312159
+[X][X] have requested [X][X] [X] ||| Wunsch [X][X] - [X][X] [X] ||| 0.00607219 1 ||| 0-1 3-3 ||| 0.312159
+[X][X] requested , on [X] ||| Wunsch [X][X] - , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0384615
+[X][X] requested [X][X] [X] ||| Wunsch [X][X] [X][X] [X] ||| 0.0121444 1 ||| 0-1 2-2 ||| 0.312159
+[X][X] requested [X][X] [X] ||| Wunsch [X][X] - [X][X] [X] ||| 0.00607219 1 ||| 0-1 2-3 ||| 0.312159
+[X][X] have requested , on [X] ||| Wunsch [X][X] , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0384615
+[X][X] requested , on [X] ||| Wunsch [X][X] , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0384615
+a number [X][X] requested [X][X] [X] ||| Wunsch einiger [X][X] [X][X] [X] ||| 0.0121444 1 ||| 2-2 4-3 ||| 0.312159
+a number [X][X] requested [X][X] [X] ||| Wunsch einiger [X][X] - [X][X] [X] ||| 0.00607219 1 ||| 2-2 4-4 ||| 0.312159
+a [X][X] have requested [X][X] [X] ||| Wunsch einiger [X][X] [X][X] [X] ||| 0.0121444 1 ||| 1-2 4-3 ||| 0.312159
+a [X][X] have requested [X][X] [X] ||| Wunsch einiger [X][X] - [X][X] [X] ||| 0.00607219 1 ||| 1-2 4-4 ||| 0.312159
+a [X][X] requested , on [X] ||| Wunsch einiger [X][X] - , [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0384615
+a [X][X] requested [X][X] [X] ||| Wunsch einiger [X][X] [X][X] [X] ||| 0.0121444 1 ||| 1-2 3-3 ||| 0.312159
+a [X][X] requested [X][X] [X] ||| Wunsch einiger [X][X] - [X][X] [X] ||| 0.00607219 1 ||| 1-2 3-4 ||| 0.312159
+a [X][X] requested , on [X] ||| Wunsch einiger [X][X] , [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0384615
+[X][X] , on behalf [X] ||| [X][X] - , [X] ||| 0.00910828 1 ||| 0-0 ||| 0.0666666
+[X][X] , on behalf [X] ||| [X][X] , [X] ||| 0.00910828 1 ||| 0-0 ||| 0.0666666
+[X][X] have requested [X][X] behalf [X] ||| Wunsch [X][X] [X][X] [X] ||| 0.0121444 1 ||| 0-1 3-2 ||| 0.1
+[X][X] have requested [X][X] behalf [X] ||| Wunsch [X][X] - [X][X] [X] ||| 0.00607218 1 ||| 0-1 3-3 ||| 0.1
+[X][X] requested , on behalf [X] ||| Wunsch [X][X] - , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0333333
+[X][X] requested [X][X] behalf [X] ||| Wunsch [X][X] [X][X] [X] ||| 0.0121444 1 ||| 0-1 2-2 ||| 0.1
+[X][X] requested [X][X] behalf [X] ||| Wunsch [X][X] - [X][X] [X] ||| 0.00607218 1 ||| 0-1 2-3 ||| 0.1
+[X][X] requested , on behalf [X] ||| Wunsch [X][X] , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0333333
+a [X][X] requested [X][X] behalf [X] ||| Wunsch einiger [X][X] [X][X] [X] ||| 0.0121444 1 ||| 1-2 3-3 ||| 0.1
+a [X][X] requested [X][X] behalf [X] ||| Wunsch einiger [X][X] - [X][X] [X] ||| 0.00607218 1 ||| 1-2 3-4 ||| 0.1
+[X][X] , on behalf of [X] ||| [X][X] - , [X] ||| 0.00910828 1 ||| 0-0 ||| 0.0645162
+[X][X] , on behalf of [X] ||| [X][X] , [X] ||| 0.00910828 1 ||| 0-0 ||| 0.0645162
+[X][X] have requested [X][X] of [X] ||| Wunsch [X][X] [X][X] [X] ||| 0.0121444 1 ||| 0-1 3-2 ||| 0.0967742
+[X][X] have requested [X][X] of [X] ||| Wunsch [X][X] - [X][X] [X] ||| 0.00607219 1 ||| 0-1 3-3 ||| 0.0967742
+[X][X] requested [X][X] behalf of [X] ||| Wunsch [X][X] [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.0645161
+[X][X] requested [X][X] of [X] ||| Wunsch [X][X] [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.0645161
+[X][X] requested [X][X] behalf of [X] ||| Wunsch [X][X] - [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0322581
+[X][X] requested [X][X] of [X] ||| Wunsch [X][X] - [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0322581
+a [X][X] requested [X][X] of [X] ||| Wunsch einiger [X][X] [X][X] [X] ||| 0.0121444 1 ||| 1-2 3-3 ||| 0.0967742
+a [X][X] requested [X][X] of [X] ||| Wunsch einiger [X][X] - [X][X] [X] ||| 0.00607219 1 ||| 1-2 3-4 ||| 0.0967742
+[X][X] various [X][X] European Union [X] ||| [X][X] verschiedenen [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.04
+[X][X] various [X][X] Union [X] ||| [X][X] verschiedenen [X][X] Union [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.04
+[X][X] various countries [X][X] Union [X] ||| [X][X] verschiedenen Ländern [X][X] Union [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.04
+in [X][X] countries [X][X] Union [X] ||| in [X][X] Ländern [X][X] Union [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.04
+in [X][X] of the [X][X] [X] ||| in [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.04
+in [X][X] European Union [X] ||| in [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+in [X][X] Union [X] ||| in [X][X] Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+in the [X][X] European Union [X] ||| in den [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 2-2 ||| 0.04
+in the [X][X] Union [X] ||| in den [X][X] Union [X] ||| 0.0182166 1 ||| 2-2 ||| 0.04
+in the various [X][X] Union [X] ||| in den verschiedenen [X][X] Union [X] ||| 0.0182166 1 ||| 3-3 ||| 0.04
+in the [X][X] [X] ||| [X][X] das ist auch der [X] ||| 0.0182166 1 ||| 2-0 ||| 0.142857
+in the meantime , [X][X] [X] ||| heute [X][X] bitten - das ist auch der [X] ||| 0.0182166 1 ||| 4-1 ||| 0.142857
+[X][X] meantime , [X][X] [X] ||| heute [X][X] bitten - [X][X] [X] ||| 0.0182166 1 ||| 3-1 0-4 ||| 0.142857
+in the meantime , [X][X] [X] ||| heute [X][X] - das ist auch der [X] ||| 0.0182166 1 ||| 4-1 ||| 0.142857
+[X][X] meantime , [X][X] [X] ||| heute [X][X] - [X][X] [X] ||| 0.0182166 1 ||| 3-1 0-3 ||| 0.142857
+in the meantime [X][X] [X] ||| heute [X][X] das ist auch der [X] ||| 0.0182166 1 ||| 3-1 ||| 0.142857
+[X][X] meantime [X][X] [X] ||| heute [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-1 0-2 ||| 0.142857
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+rise , then , [X] ||| , sich [X] ||| 0.0182166 1 ||| ||| 1
+for this [X] ||| zu einer [X] ||| 0.0182166 1 ||| ||| 1
+please [X] ||| ich bitte Sie [X] ||| 0.0182166 1 ||| ||| 1
+minute ' s silence [X] ||| Schweigeminute zu erheben [X] ||| 0.0182166 1 ||| ||| 1
+[X][X] for this [X] ||| [X][X] zu einer [X] ||| 0.0182166 1 ||| 0-0 ||| 0.833333
+rise , then , [X][X] [X] ||| , sich [X][X] [X] ||| 0.0182166 1 ||| 4-2 ||| 0.833333
+minute ' s silence . [X] ||| Schweigeminute zu erheben . [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.833333
+please rise , then , [X] ||| ich bitte Sie , sich [X] ||| 0.0182166 1 ||| ||| 0.5
+please [X][X] [X] ||| ich bitte Sie [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.833333
+[X][X] minute ' s silence [X] ||| [X][X] Schweigeminute zu erheben [X] ||| 0.0182166 1 ||| 0-0 ||| 0.833333
+for this [X][X] [X] ||| zu einer [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.833333
+for this [X][X] . [X] ||| zu einer [X][X] . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.333333
+please [X][X] for this [X] ||| ich bitte Sie [X][X] zu einer [X] ||| 0.0182166 1 ||| 1-3 ||| 0.333333
+[X][X] for this [X][X] [X] ||| [X][X] zu einer [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.333333
+( [X] ||| ( [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| das [X] ||| 0.0182166 1 ||| ||| 1
+House [X] ||| Parlament [X] ||| 0.0182166 1 ||| ||| 1
+a [X] ||| einer [X] ||| 0.0182166 1 ||| ||| 1
+) [X] ||| ) [X] ||| 0.0182166 1 ||| ||| 1
+( the [X] ||| ( das [X] ||| 0.0182166 1 ||| ||| 1
+the House [X] ||| das Parlament [X] ||| 0.0182166 1 ||| ||| 1
+minute ' s silence [X] ||| Schweigeminute . [X] ||| 0.0182166 1 ||| ||| 1
+( the House [X] ||| ( das Parlament [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] House [X] ||| [X][X] Parlament [X] ||| 0.0182166 1 ||| 0-0 ||| 0.333333
+( [X][X] [X] ||| ( [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.576191
+rose and observed [X] ||| erhebt sich zu [X] ||| 0.0182166 1 ||| ||| 1
+a minute ' s silence [X] ||| einer Schweigeminute . [X] ||| 0.0182166 1 ||| ||| 0.5
+a [X][X] [X] ||| einer [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.833333
+minute ' s silence ) [X] ||| Schweigeminute . ) [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] ) [X] ||| [X][X] ) [X] ||| 0.218091 1 ||| 0-0 ||| 1.125
+House rose and observed [X] ||| Parlament erhebt sich zu [X] ||| 0.0182166 1 ||| ||| 0.5
+House [X][X] [X] ||| Parlament [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.075
+rose and observed a [X] ||| erhebt sich zu einer [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] a [X] ||| [X][X] einer [X] ||| 0.218091 1 ||| 0-0 ||| 1.01667
+a [X][X] ) [X] ||| einer [X][X] ) [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+the House rose and observed [X] ||| das Parlament erhebt sich zu [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] rose and observed [X] ||| [X][X] erhebt sich zu [X] ||| 0.0182166 1 ||| 0-0 ||| 0.392857
+the [X][X] [X] ||| das [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.559524
+the House [X][X] [X] ||| das Parlament [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.559524
+House rose and observed a [X] ||| Parlament erhebt sich zu einer [X] ||| 0.0182166 1 ||| ||| 0.25
+House [X][X] a [X] ||| Parlament [X][X] einer [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+[X][X] House rose and observed [X] ||| [X][X] Parlament erhebt sich zu [X] ||| 0.0182166 1 ||| 0-0 ||| 0.142857
+[X][X] House [X][X] [X] ||| [X][X] Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.242857
+( [X][X] rose and observed [X] ||| ( [X][X] erhebt sich zu [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+( the [X][X] [X] ||| ( das [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.242857
+( the House [X][X] [X] ||| ( das Parlament [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.242857
+[X][X] rose and observed a [X] ||| [X][X] erhebt sich zu einer [X] ||| 0.0182166 1 ||| 0-0 ||| 0.266667
+the [X][X] a [X] ||| das [X][X] einer [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+the House [X][X] a [X] ||| das Parlament [X][X] einer [X] ||| 0.0182166 1 ||| 2-2 ||| 0.166667
+[X][X] a [X][X] [X] ||| [X][X] einer [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.884524
+[X][X] minute ' s silence [X] ||| [X][X] Schweigeminute . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.592857
+rose and observed [X][X] [X] ||| erhebt sich zu [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.416667
+rose and observed a [X][X] [X] ||| erhebt sich zu einer [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.416667
+[X][X] House [X][X] a [X] ||| [X][X] Parlament [X][X] einer [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.1
+( [X][X] a [X] ||| ( [X][X] einer [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+( the [X][X] a [X] ||| ( das [X][X] einer [X] ||| 0.0182166 1 ||| 2-2 ||| 0.1
+( the House [X][X] a [X] ||| ( das Parlament [X][X] einer [X] ||| 0.0182166 1 ||| 3-3 ||| 0.1
+House [X][X] a [X][X] [X] ||| Parlament [X][X] einer [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.325
+House rose and observed [X][X] [X] ||| Parlament erhebt sich zu [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.325
+[X][X] a [X][X] ) [X] ||| [X][X] einer [X][X] ) [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.291667
+rose and observed [X][X] ) [X] ||| erhebt sich zu [X][X] ) [X] ||| 0.0182166 1 ||| 3-3 ||| 0.166667
+[X][X] rose and observed [X][X] [X] ||| [X][X] erhebt sich zu [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.142857
+the [X][X] a [X][X] [X] ||| das [X][X] einer [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.142857
+the House [X][X] a [X][X] [X] ||| das Parlament [X][X] einer [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.142857
+House [X][X] a [X][X] ) [X] ||| Parlament [X][X] einer [X][X] ) [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.125
+House [X][X] ) [X] ||| Parlament [X][X] ) [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+Madam [X] ||| Frau [X] ||| 0.0182166 1 ||| ||| 1
+President [X] ||| Präsidentin [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| , [X] ||| 0.0182166 1 ||| ||| 1
+on [X] ||| zur [X] ||| 0.0182166 1 ||| ||| 1
+a point of order [X] ||| Geschäftsordnung [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+Madam President [X] ||| Frau Präsidentin [X] ||| 0.0182166 1 ||| ||| 1
+President , [X] ||| Präsidentin , [X] ||| 0.0182166 1 ||| ||| 1
+, on [X] ||| , zur [X] ||| 0.0182166 1 ||| ||| 1
+on a point of order [X] ||| zur Geschäftsordnung [X] ||| 0.0182166 1 ||| ||| 0.5
+on [X][X] [X] ||| zur [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.833333
+a point of order . [X] ||| Geschäftsordnung . [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] . [X] ||| [X][X] . [X] ||| 0.218091 1 ||| 0-0 ||| 1.20694
+Madam President , [X] ||| Frau Präsidentin , [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] , [X] ||| [X][X] , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.333333
+Madam [X][X] [X] ||| Frau [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.673611
+President , on [X] ||| Präsidentin , zur [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] on [X] ||| [X][X] zur [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+President [X][X] [X] ||| Präsidentin [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.644444
+[X][X] a point of order [X] ||| [X][X] Geschäftsordnung [X] ||| 0.0182166 1 ||| 0-0 ||| 0.644444
+, [X][X] [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.533333
+, on [X][X] [X] ||| , zur [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.533333
+on [X][X] . [X] ||| zur [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+Madam President , on [X] ||| Frau Präsidentin , zur [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] , on [X] ||| [X][X] , zur [X] ||| 0.0182166 1 ||| 0-0 ||| 0.166667
+Madam [X][X] on [X] ||| Frau [X][X] zur [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+Madam President [X][X] [X] ||| Frau Präsidentin [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.340278
+[X][X] on [X][X] [X] ||| [X][X] zur [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.484722
+President , [X][X] [X] ||| Präsidentin , [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.311111
+President , on [X][X] [X] ||| Präsidentin , zur [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.311111
+, [X][X] . [X] ||| , [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.2
+, on [X][X] . [X] ||| , zur [X][X] . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.2
+[X][X] , [X][X] [X] ||| [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.173611
+[X][X] , on [X][X] [X] ||| [X][X] , zur [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.173611
+Madam [X][X] on [X][X] [X] ||| Frau [X][X] zur [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.173611
+Madam President , [X][X] [X] ||| Frau Präsidentin , [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.173611
+Madam President , on [X][X] [X] ||| Frau Präsidentin , zur [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.173611
+[X][X] on [X][X] . [X] ||| [X][X] zur [X][X] . [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.173611
+President [X][X] . [X] ||| Präsidentin [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+President , [X][X] . [X] ||| Präsidentin , [X][X] . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.111111
+President , on [X][X] . [X] ||| Präsidentin , zur [X][X] . [X] ||| 0.0182166 1 ||| 3-3 ||| 0.111111
+[X][X] , [X][X] . [X] ||| [X][X] , [X][X] . [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0625
+[X][X] , on [X][X] . [X] ||| [X][X] , zur [X][X] . [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0625
+Madam [X][X] on [X][X] . [X] ||| Frau [X][X] zur [X][X] . [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0625
+Madam [X][X] . [X] ||| Frau [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0625
+Madam President [X][X] . [X] ||| Frau Präsidentin [X][X] . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0625
+Madam President , [X][X] . [X] ||| Frau Präsidentin , [X][X] . [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0625
+will be [X] ||| sicher [X] ||| 0.0182166 1 ||| ||| 1
+from [X] ||| aus [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| der [X] ||| 0.0182166 1 ||| ||| 1
+press [X] ||| Presse [X] ||| 0.0182166 1 ||| ||| 1
+and [X] ||| und [X] ||| 0.0182166 1 ||| ||| 1
+aware [X] ||| wissen [X] ||| 0.0182166 1 ||| ||| 1
+that [X] ||| , [X] ||| 0.0182166 1 ||| ||| 1
+in [X] ||| in [X] ||| 0.0182166 1 ||| ||| 1
+Sri [X] ||| Sri [X] ||| 0.0182166 1 ||| ||| 1
+Lanka [X] ||| Lanka [X] ||| 0.0182166 1 ||| ||| 1
+a number [X] ||| mehrere [X] ||| 0.0182166 1 ||| ||| 1
+a number of [X] ||| mehrere [X] ||| 0.0182166 1 ||| ||| 1
+and [X] ||| mit [X] ||| 0.0182166 1 ||| ||| 1
+killings [X] ||| Toten [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+you [X] ||| wie Sie [X] ||| 0.0182166 1 ||| ||| 1
+from the [X] ||| aus der [X] ||| 0.0182166 1 ||| ||| 1
+the press [X] ||| der Presse [X] ||| 0.0182166 1 ||| ||| 1
+press and [X] ||| Presse und [X] ||| 0.0182166 1 ||| ||| 1
+television [X] ||| dem Fernsehen [X] ||| 0.0182166 1 ||| ||| 1
+there have been [X] ||| gab es [X] ||| 0.0182166 1 ||| ||| 1
+in Sri [X] ||| in Sri [X] ||| 0.0182166 1 ||| ||| 1
+Sri Lanka [X] ||| Sri Lanka [X] ||| 0.0182166 1 ||| ||| 1
+you will be [X] ||| wie Sie sicher [X] ||| 0.0182166 1 ||| ||| 0.5
+you [X][X] [X] ||| wie Sie [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.583333
+from the press [X] ||| aus der Presse [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] press [X] ||| [X][X] Presse [X] ||| 0.0182166 1 ||| 0-0 ||| 0.333333
+from [X][X] [X] ||| aus [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.590909
+the press and [X] ||| der Presse und [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] and [X] ||| [X][X] und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+the [X][X] [X] ||| der [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.5
+and television [X] ||| und dem Fernsehen [X] ||| 0.0182166 1 ||| ||| 1
+that there have been [X] ||| , gab es [X] ||| 0.0182166 1 ||| ||| 0.5
+that [X][X] [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.5
+in Sri Lanka [X] ||| in Sri Lanka [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] Lanka [X] ||| [X][X] Lanka [X] ||| 0.0182166 1 ||| 0-0 ||| 0.333333
+in [X][X] [X] ||| in [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+bomb explosions and [X] ||| Bombenexplosionen mit zahlreichen [X] ||| 0.0182166 1 ||| ||| 1
+of bomb explosions and [X] ||| Bombenexplosionen mit zahlreichen [X] ||| 0.0182166 1 ||| ||| 1
+from the press and [X] ||| aus der Presse und [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] press and [X] ||| [X][X] Presse und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.166667
+from [X][X] and [X] ||| aus [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+from the [X][X] [X] ||| aus der [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.257576
+press and television [X] ||| Presse und dem Fernsehen [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] television [X] ||| [X][X] dem Fernsehen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.590909
+press [X][X] [X] ||| Presse [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+[X][X] of bomb explosions and [X] ||| [X][X] Bombenexplosionen mit zahlreichen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25
+[X][X] bomb explosions and [X] ||| [X][X] Bombenexplosionen mit zahlreichen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25
+a number of [X][X] [X] ||| mehrere [X][X] [X] ||| 0.0182166 1 ||| 3-1 ||| 0.392857
+a number [X][X] [X] ||| mehrere [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.392857
+bomb explosions and killings [X] ||| Bombenexplosionen mit zahlreichen Toten [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] killings [X] ||| [X][X] Toten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.976191
+of bomb explosions and killings [X] ||| Bombenexplosionen mit zahlreichen Toten [X] ||| 0.0182166 1 ||| ||| 0.333333
+of [X][X] killings [X] ||| [X][X] Toten [X] ||| 0.0182166 1 ||| 1-0 ||| 0.333333
+the press and television [X] ||| der Presse und dem Fernsehen [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] and television [X] ||| [X][X] und dem Fernsehen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.257576
+the [X][X] television [X] ||| der [X][X] dem Fernsehen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+the press [X][X] [X] ||| der Presse [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.166667
+[X][X] of [X][X] killings [X] ||| [X][X] [X][X] Toten [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.142857
+[X][X] bomb explosions and killings [X] ||| [X][X] Bombenexplosionen mit zahlreichen Toten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.142857
+a number of [X][X] killings [X] ||| mehrere [X][X] Toten [X] ||| 0.0182166 1 ||| 3-1 ||| 0.142857
+a number [X][X] killings [X] ||| mehrere [X][X] Toten [X] ||| 0.0182166 1 ||| 2-1 ||| 0.142857
+from the press and television [X] ||| aus der Presse und dem Fernsehen [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] press and television [X] ||| [X][X] Presse und dem Fernsehen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0909091
+[X][X] press [X][X] [X] ||| [X][X] Presse [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0909091
+from [X][X] and television [X] ||| aus [X][X] und dem Fernsehen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+from [X][X] television [X] ||| aus [X][X] dem Fernsehen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+from the [X][X] television [X] ||| aus der [X][X] dem Fernsehen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+from the press [X][X] [X] ||| aus der Presse [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0909091
+aware [X][X] press and television [X] ||| [X][X] Presse und dem Fernsehen wissen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0909091
+aware [X][X] press [X][X] [X] ||| [X][X] Presse [X][X] wissen [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0909091
+aware [X][X] and television [X] ||| [X][X] und dem Fernsehen wissen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0909091
+aware [X][X] television [X] ||| [X][X] dem Fernsehen wissen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0909091
+aware [X][X] [X] ||| [X][X] wissen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0909091
+aware from [X][X] and television [X] ||| aus [X][X] und dem Fernsehen wissen [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0909091
+aware from [X][X] television [X] ||| aus [X][X] dem Fernsehen wissen [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0909091
+aware from [X][X] [X] ||| aus [X][X] wissen [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0909091
+aware from the [X][X] television [X] ||| aus der [X][X] dem Fernsehen wissen [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0909091
+aware from the [X][X] [X] ||| aus der [X][X] wissen [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0909091
+aware from the press [X][X] [X] ||| aus der Presse [X][X] wissen [X] ||| 0.0182166 1 ||| 4-3 ||| 0.0909091
+[X][X] aware [X][X] and television [X] ||| [X][X] [X][X] und dem Fernsehen wissen [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.183333
+[X][X] aware [X][X] television [X] ||| [X][X] [X][X] dem Fernsehen wissen [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.183333
+[X][X] aware [X][X] [X] ||| [X][X] [X][X] wissen [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.183333
+[X][X] aware from [X][X] television [X] ||| [X][X] aus [X][X] dem Fernsehen wissen [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.183333
+[X][X] aware from [X][X] [X] ||| [X][X] aus [X][X] wissen [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.183333
+[X][X] aware from the [X][X] [X] ||| [X][X] aus der [X][X] wissen [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.183333
+will be aware [X][X] television [X] ||| sicher [X][X] dem Fernsehen wissen [X] ||| 0.0182166 1 ||| 3-1 ||| 0.1
+will be aware [X][X] [X] ||| sicher [X][X] wissen [X] ||| 0.0182166 1 ||| 3-1 ||| 0.1
+will be [X][X] [X] ||| sicher [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.242857
+will be aware from [X][X] [X] ||| sicher aus [X][X] wissen [X] ||| 0.0182166 1 ||| 4-2 ||| 0.1
+aware [X][X] press [X][X] that [X] ||| [X][X] Presse [X][X] wissen , [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.125
+aware [X][X] and television that [X] ||| [X][X] und dem Fernsehen wissen , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.125
+aware [X][X] television that [X] ||| [X][X] dem Fernsehen wissen , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.125
+aware [X][X] that [X] ||| [X][X] wissen , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.125
+[X][X] that [X] ||| [X][X] , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.267857
+aware from [X][X] television that [X] ||| aus [X][X] dem Fernsehen wissen , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+aware from [X][X] that [X] ||| aus [X][X] wissen , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+aware from the [X][X] that [X] ||| aus der [X][X] wissen , [X] ||| 0.0182166 1 ||| 3-2 ||| 0.125
+[X][X] killings [X][X] Lanka [X] ||| [X][X] Lanka [X][X] Toten [X] ||| 0.0182166 1 ||| 2-0 0-2 ||| 0.125
+[X][X] killings [X][X] [X] ||| [X][X] [X][X] Toten [X] ||| 0.0182166 1 ||| 2-0 0-1 ||| 0.125
+a number [X][X] killings [X][X] [X] ||| [X][X] mehrere [X][X] Toten [X] ||| 0.0182166 1 ||| 4-0 2-2 ||| 0.125
+[X][X] killings in [X][X] [X] ||| in [X][X] [X][X] Toten [X] ||| 0.0182166 1 ||| 3-1 0-2 ||| 0.125
+[X][X] in [X][X] [X] ||| in [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-1 0-2 ||| 0.125
+a number [X][X] in [X][X] [X] ||| in [X][X] mehrere [X][X] [X] ||| 0.0182166 1 ||| 4-1 2-3 ||| 0.125
+[X][X] killings in Sri Lanka [X] ||| in Sri Lanka [X][X] Toten [X] ||| 0.0182166 1 ||| 0-3 ||| 0.125
+[X][X] in Sri Lanka [X] ||| in Sri Lanka [X][X] [X] ||| 0.0182166 1 ||| 0-3 ||| 0.125
+[X][X] aware [X][X] television that [X] ||| [X][X] [X][X] dem Fernsehen wissen , [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.142857
+[X][X] aware [X][X] that [X] ||| [X][X] [X][X] wissen , [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.142857
+[X][X] aware from [X][X] that [X] ||| [X][X] aus [X][X] wissen , [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.142857
+will be aware [X][X] that [X] ||| sicher [X][X] wissen , [X] ||| 0.0182166 1 ||| 3-1 ||| 0.142857
+will be [X][X] that [X] ||| sicher [X][X] , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.142857
+you [X][X] aware [X][X] television [X] ||| wie Sie [X][X] [X][X] dem Fernsehen wissen [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.0833333
+you [X][X] aware [X][X] [X] ||| wie Sie [X][X] [X][X] wissen [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.0833333
+you [X][X] aware from [X][X] [X] ||| wie Sie [X][X] aus [X][X] wissen [X] ||| 0.0182166 1 ||| 1-2 4-4 ||| 0.0833333
+you will be aware [X][X] [X] ||| wie Sie sicher [X][X] wissen [X] ||| 0.0182166 1 ||| 4-3 ||| 0.0833333
+you will be [X][X] [X] ||| wie Sie sicher [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0833333
+aware [X][X] and television [X][X] [X] ||| [X][X] und dem Fernsehen wissen [X][X] [X] ||| 0.0182166 1 ||| 1-0 4-5 ||| 0.111111
+aware [X][X] television [X][X] [X] ||| [X][X] dem Fernsehen wissen [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-4 ||| 0.111111
+aware [X][X] television that [X][X] [X] ||| [X][X] dem Fernsehen wissen , [X][X] [X] ||| 0.0182166 1 ||| 1-0 4-5 ||| 0.111111
+aware [X][X] that [X][X] [X] ||| [X][X] wissen , [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-3 ||| 0.111111
+[X][X] that there have been [X] ||| [X][X] , gab es [X] ||| 0.0182166 1 ||| 0-0 ||| 0.111111
+[X][X] that [X][X] [X] ||| [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.111111
+[X][X] there have been [X] ||| [X][X] gab es [X] ||| 0.0182166 1 ||| 0-0 ||| 0.111111
+aware from [X][X] television [X][X] [X] ||| aus [X][X] dem Fernsehen wissen [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-5 ||| 0.111111
+aware from [X][X] that [X][X] [X] ||| aus [X][X] wissen , [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-4 ||| 0.111111
+one [X] ||| zu [X] ||| 0.0182166 1 ||| ||| 1
+one of [X] ||| zu [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| den [X] ||| 0.0182166 1 ||| ||| 1
+of the [X] ||| den [X] ||| 0.0182166 1 ||| ||| 1
+in [X] ||| in [X] ||| 0.0182166 1 ||| ||| 1
+Sri [X] ||| Sri [X] ||| 0.0182166 1 ||| ||| 1
+Lanka [X] ||| Lanka [X] ||| 0.0182166 1 ||| ||| 1
+was [X] ||| gab [X] ||| 0.0182166 1 ||| ||| 1
+Mr [X] ||| Herr [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| dem [X] ||| 0.0182166 1 ||| ||| 1
+European [X] ||| Europäischen [X] ||| 0.0182166 1 ||| ||| 1
+Parliament [X] ||| Parlament [X] ||| 0.0182166 1 ||| ||| 1
+just [X] ||| erst [X] ||| 0.0182166 1 ||| ||| 1
+a few [X] ||| wenigen [X] ||| 0.0182166 1 ||| ||| 1
+months ago [X] ||| Monaten [X] ||| 0.0182166 1 ||| ||| 1
+visited [X] ||| Besuch [X] ||| 0.0182166 1 ||| ||| 1
+had [X] ||| hatte [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+one of the [X] ||| zu den [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] the [X] ||| [X][X] den [X] ||| 0.0182166 1 ||| 0-0 ||| 0.333333
+one [X][X] [X] ||| zu [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.647619
+recently [X] ||| jüngster Zeit [X] ||| 0.0182166 1 ||| ||| 1
+in Sri [X] ||| in Sri [X] ||| 0.0182166 1 ||| ||| 1
+Sri Lanka [X] ||| Sri Lanka [X] ||| 0.0182166 1 ||| ||| 1
+Lanka [X] ||| Lanka zu [X] ||| 0.0182166 1 ||| ||| 1
+was [X] ||| beklagen gab [X] ||| 0.00910828 1 ||| ||| 2
+was [X] ||| gab , [X] ||| 0.00910828 1 ||| ||| 2
+Mr [X] ||| auch Herr [X] ||| 0.0182166 1 ||| ||| 1
+Kumar Ponnambalam [X] ||| Kumar Ponnambalam [X] ||| 0.0182166 1 ||| ||| 1
+, who [X] ||| , der [X] ||| 0.0182166 1 ||| ||| 1
+the European [X] ||| dem Europäischen [X] ||| 0.0182166 1 ||| ||| 1
+European Parliament [X] ||| Europäischen Parlament [X] ||| 0.0182166 1 ||| ||| 1
+Parliament just [X] ||| Parlament erst [X] ||| 0.0182166 1 ||| ||| 1
+just [X] ||| erst vor [X] ||| 0.0182166 1 ||| ||| 1
+a few [X] ||| vor wenigen [X] ||| 0.0182166 1 ||| ||| 1
+a few months ago [X] ||| wenigen Monaten [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] months ago [X] ||| [X][X] Monaten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.905079
+a few [X][X] [X] ||| wenigen [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.583333
+months ago [X] ||| Monaten einen [X] ||| 0.0182166 1 ||| ||| 1
+visited [X] ||| einen Besuch [X] ||| 0.00910828 1 ||| ||| 2
+visited [X] ||| Besuch abgestattet [X] ||| 0.00910828 1 ||| ||| 2
+had [X] ||| abgestattet hatte [X] ||| 0.0182166 1 ||| ||| 1
+recently in [X] ||| jüngster Zeit in [X] ||| 0.0182166 1 ||| ||| 1
+in Sri Lanka [X] ||| in Sri Lanka [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] Lanka [X] ||| [X][X] Lanka [X] ||| 0.0182166 1 ||| 0-0 ||| 0.590909
+in [X][X] [X] ||| in [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.13631
+Sri Lanka [X] ||| Sri Lanka zu [X] ||| 0.0182166 1 ||| ||| 1
+Lanka [X] ||| Lanka zu beklagen [X] ||| 0.0182166 1 ||| ||| 1
+was [X] ||| zu beklagen gab [X] ||| 0.00607219 1 ||| ||| 3
+was [X] ||| beklagen gab , [X] ||| 0.00607219 1 ||| ||| 3
+was [X] ||| gab , zählt [X] ||| 0.00607219 1 ||| ||| 3
+Mr [X] ||| zählt auch Herr [X] ||| 0.0182166 1 ||| ||| 1
+Mr Kumar Ponnambalam [X] ||| Herr Kumar Ponnambalam [X] ||| 0.0182166 1 ||| ||| 0.5
+Mr [X][X] [X] ||| Herr [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.7
+the European Parliament [X] ||| dem Europäischen Parlament [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] Parliament [X] ||| [X][X] Parlament [X] ||| 0.0182166 1 ||| 0-0 ||| 0.333333
+the [X][X] [X] ||| dem [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.736429
+European Parliament just [X] ||| Europäischen Parlament erst [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] just [X] ||| [X][X] erst [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+European [X][X] [X] ||| Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.756705
+Parliament just [X] ||| Parlament erst vor [X] ||| 0.0182166 1 ||| ||| 1
+just a few [X] ||| erst vor wenigen [X] ||| 0.0182166 1 ||| ||| 0.333333
+just [X][X] [X] ||| erst [X][X] [X] ||| 0.00910828 1 ||| 1-1 ||| 1.15238
+just [X][X] [X] ||| erst vor [X][X] [X] ||| 0.00910828 1 ||| 1-2 ||| 1.15238
+a few months ago [X] ||| vor wenigen Monaten [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] months ago [X] ||| vor [X][X] Monaten [X] ||| 0.0182166 1 ||| 0-1 ||| 0.25
+a few [X][X] [X] ||| vor wenigen [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.45
+a few months ago [X] ||| wenigen Monaten einen [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] months ago [X] ||| [X][X] Monaten einen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.663848
+a few [X][X] [X] ||| wenigen [X][X] einen [X] ||| 0.0182166 1 ||| 2-1 ||| 0.25
+visited [X] ||| einen Besuch abgestattet [X] ||| 0.0182166 1 ||| ||| 1
+had visited [X] ||| Besuch abgestattet hatte [X] ||| 0.0182166 1 ||| ||| 1
+recently in Sri [X] ||| jüngster Zeit in Sri [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] Sri [X] ||| [X][X] Sri [X] ||| 0.0182166 1 ||| 0-0 ||| 0.653114
+recently [X][X] [X] ||| jüngster Zeit [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.871443
+in Sri Lanka [X] ||| in Sri Lanka zu [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] Lanka [X] ||| [X][X] Lanka zu [X] ||| 0.0182166 1 ||| 0-0 ||| 0.375
+in [X][X] [X] ||| in [X][X] zu [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+Sri Lanka [X] ||| Sri Lanka zu beklagen [X] ||| 0.0182166 1 ||| ||| 1
+Lanka was [X] ||| Lanka zu beklagen gab [X] ||| 0.0182166 1 ||| ||| 1
+was [X] ||| zu beklagen gab , [X] ||| 0.00607219 1 ||| ||| 3
+was [X] ||| beklagen gab , zählt [X] ||| 0.00607219 1 ||| ||| 3
+was [X] ||| gab , zählt auch [X] ||| 0.00607219 1 ||| ||| 3
+Mr [X] ||| , zählt auch Herr [X] ||| 0.0182166 1 ||| ||| 1
+Mr Kumar Ponnambalam [X] ||| auch Herr Kumar Ponnambalam [X] ||| 0.0182166 1 ||| ||| 0.5
+Mr [X][X] [X] ||| auch Herr [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.666667
+Kumar Ponnambalam , who [X] ||| Kumar Ponnambalam , der [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] , who [X] ||| [X][X] , der [X] ||| 0.218091 1 ||| 0-0 ||| 1.09811
+Kumar Ponnambalam [X][X] [X] ||| Kumar Ponnambalam [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.333333
+the European Parliament just [X] ||| dem Europäischen Parlament erst [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] Parliament just [X] ||| [X][X] Parlament erst [X] ||| 0.0182166 1 ||| 0-0 ||| 0.166667
+the [X][X] just [X] ||| dem [X][X] erst [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+the European [X][X] [X] ||| dem Europäischen [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.403095
+European Parliament just [X] ||| Europäischen Parlament erst vor [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] just [X] ||| [X][X] erst vor [X] ||| 0.0182166 1 ||| 0-0 ||| 0.375
+European [X][X] [X] ||| Europäischen [X][X] vor [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+Parliament just a few [X] ||| Parlament erst vor wenigen [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] a few [X] ||| [X][X] vor wenigen [X] ||| 0.00910828 1 ||| 0-0 ||| 0.595238
+[X][X] a few [X] ||| [X][X] wenigen [X] ||| 0.00910828 1 ||| 0-0 ||| 0.595238
+Parliament [X][X] [X] ||| Parlament [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.305556
+Parliament just [X][X] [X] ||| Parlament erst [X][X] [X] ||| 0.00910828 1 ||| 2-2 ||| 0.611112
+Parliament just [X][X] [X] ||| Parlament erst vor [X][X] [X] ||| 0.00910828 1 ||| 2-3 ||| 0.611112
+just a few months ago [X] ||| erst vor wenigen Monaten [X] ||| 0.0182166 1 ||| ||| 0.142857
+just [X][X] months ago [X] ||| erst [X][X] Monaten [X] ||| 0.00910828 1 ||| 1-1 ||| 0.285714
+just [X][X] months ago [X] ||| erst vor [X][X] Monaten [X] ||| 0.00910828 1 ||| 1-2 ||| 0.285714
+just a few [X][X] [X] ||| erst vor wenigen [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.242857
+a few months ago [X] ||| vor wenigen Monaten einen [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] months ago [X] ||| vor [X][X] Monaten einen [X] ||| 0.0182166 1 ||| 0-1 ||| 0.2
+a few [X][X] [X] ||| vor wenigen [X][X] einen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.2
+had visited [X] ||| einen Besuch abgestattet hatte [X] ||| 0.0182166 1 ||| ||| 1
+people assassinated very [X] ||| Attentatsopfern , die es in [X] ||| 0.0182166 1 ||| ||| 1
+recently in Sri Lanka [X] ||| jüngster Zeit in Sri Lanka [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] Sri Lanka [X] ||| [X][X] Sri Lanka [X] ||| 0.0182166 1 ||| 0-0 ||| 0.257576
+recently [X][X] Lanka [X] ||| jüngster Zeit [X][X] Lanka [X] ||| 0.0182166 1 ||| 1-2 ||| 0.166667
+recently in [X][X] [X] ||| jüngster Zeit in [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.538109
+in Sri Lanka [X] ||| in Sri Lanka zu beklagen [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] Lanka [X] ||| [X][X] Lanka zu beklagen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.3
+in [X][X] [X] ||| in [X][X] zu beklagen [X] ||| 0.00910828 1 ||| 1-1 ||| 0.4
+in [X][X] [X] ||| in [X][X] beklagen [X] ||| 0.00910828 1 ||| 1-1 ||| 0.4
+Sri Lanka was [X] ||| Sri Lanka zu beklagen gab [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] was [X] ||| [X][X] zu beklagen gab [X] ||| 0.00607219 1 ||| 0-0 ||| 1.07647
+[X][X] was [X] ||| [X][X] beklagen gab [X] ||| 0.00607219 1 ||| 0-0 ||| 1.07647
+[X][X] was [X] ||| [X][X] gab [X] ||| 0.00607219 1 ||| 0-0 ||| 1.07647
+Sri [X][X] [X] ||| Sri [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.697024
+Lanka was [X] ||| Lanka zu beklagen gab , [X] ||| 0.0182166 1 ||| ||| 1
+was [X] ||| zu beklagen gab , zählt [X] ||| 0.00910828 1 ||| ||| 2
+was [X] ||| beklagen gab , zählt auch [X] ||| 0.00910828 1 ||| ||| 2
+was Mr [X] ||| gab , zählt auch Herr [X] ||| 0.0182166 1 ||| ||| 1
+Mr Kumar Ponnambalam [X] ||| zählt auch Herr Kumar Ponnambalam [X] ||| 0.0182166 1 ||| ||| 0.5
+Mr [X][X] [X] ||| zählt auch Herr [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.642857
+Mr Kumar Ponnambalam , who [X] ||| Herr Kumar Ponnambalam , der [X] ||| 0.0182166 1 ||| ||| 0.2
+Mr [X][X] , who [X] ||| Herr [X][X] , der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.2
+Mr Kumar Ponnambalam [X][X] [X] ||| Herr Kumar Ponnambalam [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.2
+the European Parliament just [X] ||| dem Europäischen Parlament erst vor [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] Parliament just [X] ||| [X][X] Parlament erst vor [X] ||| 0.0182166 1 ||| 0-0 ||| 0.125
+the [X][X] just [X] ||| dem [X][X] erst vor [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+the [X][X] [X] ||| dem [X][X] vor [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+the European [X][X] [X] ||| dem Europäischen [X][X] vor [X] ||| 0.0182166 1 ||| 2-2 ||| 0.125
+European Parliament just a few [X] ||| Europäischen Parlament erst vor wenigen [X] ||| 0.0182166 1 ||| ||| 0.0833333
+[X][X] just a few [X] ||| [X][X] erst vor wenigen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.130952
+[X][X] just [X][X] [X] ||| [X][X] erst [X][X] [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.5696
+[X][X] just [X][X] [X] ||| [X][X] erst vor [X][X] [X] ||| 0.00910828 1 ||| 0-0 2-3 ||| 0.5696
+European [X][X] a few [X] ||| Europäischen [X][X] vor wenigen [X] ||| 0.00910828 1 ||| 1-1 ||| 0.166667
+European [X][X] a few [X] ||| Europäischen [X][X] wenigen [X] ||| 0.00910828 1 ||| 1-1 ||| 0.166667
+European Parliament [X][X] [X] ||| Europäischen Parlament [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.173372
+European Parliament just [X][X] [X] ||| Europäischen Parlament erst [X][X] [X] ||| 0.00910828 1 ||| 3-3 ||| 0.346744
+European Parliament just [X][X] [X] ||| Europäischen Parlament erst vor [X][X] [X] ||| 0.00910828 1 ||| 3-4 ||| 0.346744
+[X][X] a few months ago [X] ||| [X][X] vor wenigen Monaten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.178889
+[X][X] a few [X][X] [X] ||| [X][X] vor wenigen [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.292737
+[X][X] a few months ago [X] ||| [X][X] wenigen Monaten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.178889
+[X][X] a few [X][X] [X] ||| [X][X] wenigen [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.292737
+Parliament [X][X] months ago [X] ||| Parlament [X][X] Monaten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+Parliament just [X][X] months ago [X] ||| Parlament erst [X][X] Monaten [X] ||| 0.00910828 1 ||| 2-2 ||| 0.166667
+Parliament just [X][X] months ago [X] ||| Parlament erst vor [X][X] Monaten [X] ||| 0.00910828 1 ||| 2-3 ||| 0.166667
+Parliament just a few [X][X] [X] ||| Parlament erst vor wenigen [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.138889
+just a few months ago [X] ||| erst vor wenigen Monaten einen [X] ||| 0.0182166 1 ||| ||| 0.1
+just [X][X] months ago [X] ||| erst [X][X] Monaten einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+just [X][X] [X] ||| erst [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+just [X][X] months ago [X] ||| erst vor [X][X] Monaten einen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.1
+just [X][X] [X] ||| erst vor [X][X] einen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.1
+just a few [X][X] [X] ||| erst vor wenigen [X][X] einen [X] ||| 0.0182166 1 ||| 3-3 ||| 0.1
+the people assassinated very [X] ||| den Attentatsopfern , die es in [X] ||| 0.0182166 1 ||| ||| 0.5
+the [X][X] [X] ||| den [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.01667
+of the people assassinated very [X] ||| den Attentatsopfern , die es in [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] people assassinated very [X] ||| [X][X] Attentatsopfern , die es in [X] ||| 0.0182166 1 ||| 0-0 ||| 0.476191
+of the [X][X] [X] ||| den [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.735256
+recently in Sri Lanka [X] ||| jüngster Zeit in Sri Lanka zu [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] Sri Lanka [X] ||| [X][X] Sri Lanka zu [X] ||| 0.0182166 1 ||| 0-0 ||| 0.125
+recently [X][X] Lanka [X] ||| jüngster Zeit [X][X] Lanka zu [X] ||| 0.0182166 1 ||| 1-2 ||| 0.125
+recently [X][X] [X] ||| jüngster Zeit [X][X] zu [X] ||| 0.0182166 1 ||| 1-2 ||| 0.125
+recently in [X][X] [X] ||| jüngster Zeit in [X][X] zu [X] ||| 0.0182166 1 ||| 2-3 ||| 0.125
+in Sri Lanka was [X] ||| in Sri Lanka zu beklagen gab [X] ||| 0.0182166 1 ||| ||| 0.1
+[X][X] Lanka was [X] ||| [X][X] Lanka zu beklagen gab [X] ||| 0.0182166 1 ||| 0-0 ||| 0.158824
+in [X][X] was [X] ||| in [X][X] zu beklagen gab [X] ||| 0.00607219 1 ||| 1-1 ||| 0.3
+in [X][X] was [X] ||| in [X][X] beklagen gab [X] ||| 0.00607219 1 ||| 1-1 ||| 0.3
+in [X][X] was [X] ||| in [X][X] gab [X] ||| 0.00607219 1 ||| 1-1 ||| 0.3
+in Sri [X][X] [X] ||| in Sri [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.352976
+Sri Lanka was [X] ||| Sri Lanka zu beklagen gab , [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] was [X] ||| [X][X] zu beklagen gab , [X] ||| 0.00607219 1 ||| 0-0 ||| 0.892857
+[X][X] was [X] ||| [X][X] beklagen gab , [X] ||| 0.00607219 1 ||| 0-0 ||| 0.892857
+[X][X] was [X] ||| [X][X] gab , [X] ||| 0.00607219 1 ||| 0-0 ||| 0.892857
+Sri [X][X] [X] ||| Sri [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+Lanka was [X] ||| Lanka zu beklagen gab , zählt [X] ||| 0.0182166 1 ||| ||| 1
+was [X] ||| zu beklagen gab , zählt auch [X] ||| 0.0182166 1 ||| ||| 1
+was Mr [X] ||| beklagen gab , zählt auch Herr [X] ||| 0.0182166 1 ||| ||| 1
+Mr Kumar Ponnambalam [X] ||| , zählt auch Herr Kumar Ponnambalam [X] ||| 0.0182166 1 ||| ||| 0.5
+Mr [X][X] [X] ||| , zählt auch Herr [X][X] [X] ||| 0.0182166 1 ||| 1-4 ||| 0.625
+Mr Kumar Ponnambalam , who [X] ||| auch Herr Kumar Ponnambalam , der [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] , who [X] ||| auch [X][X] , der [X] ||| 0.0182166 1 ||| 0-1 ||| 0.166667
+Mr [X][X] , who [X] ||| auch Herr [X][X] , der [X] ||| 0.0182166 1 ||| 1-2 ||| 0.166667
+Mr Kumar Ponnambalam [X][X] [X] ||| auch Herr Kumar Ponnambalam [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.166667
+[X][X] Parliament just a few [X] ||| [X][X] Parlament erst vor wenigen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.047619
+[X][X] Parliament [X][X] [X] ||| [X][X] Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.111429
+[X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst [X][X] [X] ||| 0.00910828 1 ||| 0-0 3-3 ||| 0.222858
+[X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst vor [X][X] [X] ||| 0.00910828 1 ||| 0-0 3-4 ||| 0.222858
+the [X][X] just a few [X] ||| dem [X][X] erst vor wenigen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.047619
+the [X][X] just [X][X] [X] ||| dem [X][X] erst [X][X] [X] ||| 0.00910828 1 ||| 1-1 3-3 ||| 0.222858
+the [X][X] just [X][X] [X] ||| dem [X][X] erst vor [X][X] [X] ||| 0.00910828 1 ||| 1-1 3-4 ||| 0.222858
+the [X][X] a few [X] ||| dem [X][X] vor wenigen [X] ||| 0.00910828 1 ||| 1-1 ||| 0.095238
+the [X][X] a few [X] ||| dem [X][X] wenigen [X] ||| 0.00910828 1 ||| 1-1 ||| 0.095238
+the European [X][X] a few [X] ||| dem Europäischen [X][X] vor wenigen [X] ||| 0.00910828 1 ||| 2-2 ||| 0.095238
+the European [X][X] a few [X] ||| dem Europäischen [X][X] wenigen [X] ||| 0.00910828 1 ||| 2-2 ||| 0.095238
+the European Parliament [X][X] [X] ||| dem Europäischen Parlament [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.111429
+the European Parliament just [X][X] [X] ||| dem Europäischen Parlament erst [X][X] [X] ||| 0.00910828 1 ||| 4-4 ||| 0.222858
+the European Parliament just [X][X] [X] ||| dem Europäischen Parlament erst vor [X][X] [X] ||| 0.00910828 1 ||| 4-5 ||| 0.222858
+[X][X] just [X][X] months ago [X] ||| [X][X] erst [X][X] Monaten [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.191111
+[X][X] just [X][X] months ago [X] ||| [X][X] erst vor [X][X] Monaten [X] ||| 0.00910828 1 ||| 0-0 2-3 ||| 0.191111
+[X][X] just a few [X][X] [X] ||| [X][X] erst vor wenigen [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.153848
+European [X][X] a few [X][X] [X] ||| Europäischen [X][X] vor wenigen [X][X] [X] ||| 0.00910828 1 ||| 1-1 4-4 ||| 0.180077
+European [X][X] a few [X][X] [X] ||| Europäischen [X][X] wenigen [X][X] [X] ||| 0.00910828 1 ||| 1-1 4-3 ||| 0.180077
+European [X][X] months ago [X] ||| Europäischen [X][X] Monaten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+European Parliament [X][X] months ago [X] ||| Europäischen Parlament [X][X] Monaten [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0555556
+[X][X] a few months ago [X] ||| [X][X] vor wenigen Monaten einen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.113848
+[X][X] a few [X][X] [X] ||| [X][X] vor wenigen [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.113848
+[X][X] a few months ago [X] ||| [X][X] wenigen Monaten einen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.113848
+[X][X] a few [X][X] [X] ||| [X][X] wenigen [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.113848
+Parliament [X][X] months ago [X] ||| Parlament [X][X] Monaten einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+Parliament [X][X] [X] ||| Parlament [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+Parliament just [X][X] months ago [X] ||| Parlament erst [X][X] Monaten einen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0555556
+Parliament just [X][X] [X] ||| Parlament erst [X][X] einen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0555556
+Parliament just [X][X] months ago [X] ||| Parlament erst vor [X][X] Monaten einen [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0555556
+Parliament just [X][X] [X] ||| Parlament erst vor [X][X] einen [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0555556
+Parliament just a few [X][X] [X] ||| Parlament erst vor wenigen [X][X] einen [X] ||| 0.0182166 1 ||| 4-4 ||| 0.0555556
+[X][X] the people assassinated very [X] ||| [X][X] den Attentatsopfern , die es in [X] ||| 0.0182166 1 ||| 0-0 ||| 0.142857
+[X][X] the [X][X] [X] ||| [X][X] den [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.314286
+one [X][X] people assassinated very [X] ||| zu [X][X] Attentatsopfern , die es in [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+one of [X][X] [X] ||| zu [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.314286
+one of the [X][X] [X] ||| zu den [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.314286
+people assassinated very recently [X] ||| Attentatsopfern , die es in jüngster Zeit [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] recently [X] ||| [X][X] jüngster Zeit [X] ||| 0.218091 1 ||| 0-0 ||| 1.05
+recently in Sri Lanka [X] ||| jüngster Zeit in Sri Lanka zu beklagen [X] ||| 0.0182166 1 ||| ||| 0.1
+[X][X] Sri Lanka [X] ||| [X][X] Sri Lanka zu beklagen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.1
+recently [X][X] Lanka [X] ||| jüngster Zeit [X][X] Lanka zu beklagen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.1
+recently [X][X] [X] ||| jüngster Zeit [X][X] zu beklagen [X] ||| 0.00910828 1 ||| 1-2 ||| 0.2
+recently [X][X] [X] ||| jüngster Zeit [X][X] beklagen [X] ||| 0.00910828 1 ||| 1-2 ||| 0.2
+recently in [X][X] [X] ||| jüngster Zeit in [X][X] zu beklagen [X] ||| 0.00910828 1 ||| 2-3 ||| 0.2
+recently in [X][X] [X] ||| jüngster Zeit in [X][X] beklagen [X] ||| 0.00910828 1 ||| 2-3 ||| 0.2
+in Sri Lanka was [X] ||| in Sri Lanka zu beklagen gab , [X] ||| 0.0182166 1 ||| ||| 0.0833333
+[X][X] Lanka was [X] ||| [X][X] Lanka zu beklagen gab , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.130952
+in [X][X] was [X] ||| in [X][X] zu beklagen gab , [X] ||| 0.00607219 1 ||| 1-1 ||| 0.25
+in [X][X] was [X] ||| in [X][X] beklagen gab , [X] ||| 0.00607219 1 ||| 1-1 ||| 0.25
+in [X][X] was [X] ||| in [X][X] gab , [X] ||| 0.00607219 1 ||| 1-1 ||| 0.25
+in [X][X] [X] ||| in [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+in Sri [X][X] [X] ||| in Sri [X][X] , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0833333
+Sri Lanka was [X] ||| Sri Lanka zu beklagen gab , zählt [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] was [X] ||| [X][X] zu beklagen gab , zählt [X] ||| 0.00607219 1 ||| 0-0 ||| 0.762858
+[X][X] was [X] ||| [X][X] beklagen gab , zählt [X] ||| 0.00607219 1 ||| 0-0 ||| 0.762858
+[X][X] was [X] ||| [X][X] gab , zählt [X] ||| 0.00607219 1 ||| 0-0 ||| 0.762858
+Sri [X][X] [X] ||| Sri [X][X] , zählt [X] ||| 0.00910828 1 ||| 1-1 ||| 0.285714
+Sri [X][X] [X] ||| Sri [X][X] zählt [X] ||| 0.00910828 1 ||| 1-1 ||| 0.285714
+Lanka was [X] ||| Lanka zu beklagen gab , zählt auch [X] ||| 0.0182166 1 ||| ||| 1
+was Mr [X] ||| zu beklagen gab , zählt auch Herr [X] ||| 0.0182166 1 ||| ||| 1
+was Mr Kumar Ponnambalam [X] ||| gab , zählt auch Herr Kumar Ponnambalam [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] Kumar Ponnambalam [X] ||| [X][X] Kumar Ponnambalam [X] ||| 0.0182166 1 ||| 0-0 ||| 0.426587
+was [X][X] [X] ||| gab [X][X] [X] ||| 0.00455414 1 ||| 1-1 ||| 0.857144
+was [X][X] [X] ||| gab , [X][X] [X] ||| 0.00455414 1 ||| 1-2 ||| 0.857144
+was [X][X] [X] ||| gab , zählt [X][X] [X] ||| 0.00455414 1 ||| 1-3 ||| 0.857144
+was [X][X] [X] ||| gab , zählt auch [X][X] [X] ||| 0.00455414 1 ||| 1-4 ||| 0.857144
+was Mr [X][X] [X] ||| gab , zählt auch Herr [X][X] [X] ||| 0.0182166 1 ||| 2-5 ||| 0.214286
+Mr Kumar Ponnambalam , who [X] ||| zählt auch Herr Kumar Ponnambalam , der [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] , who [X] ||| zählt [X][X] , der [X] ||| 0.00910828 1 ||| 0-1 ||| 0.285714
+[X][X] , who [X] ||| zählt auch [X][X] , der [X] ||| 0.00910828 1 ||| 0-2 ||| 0.285714
+Mr [X][X] , who [X] ||| zählt auch Herr [X][X] , der [X] ||| 0.0182166 1 ||| 1-3 ||| 0.142857
+Mr Kumar Ponnambalam [X][X] [X] ||| zählt auch Herr Kumar Ponnambalam [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.142857
+[X][X] Parliament [X][X] months ago [X] ||| [X][X] Parlament [X][X] Monaten [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.04
+the [X][X] a few [X][X] [X] ||| dem [X][X] vor wenigen [X][X] [X] ||| 0.00910828 1 ||| 1-1 4-4 ||| 0.127619
+the [X][X] a few [X][X] [X] ||| dem [X][X] wenigen [X][X] [X] ||| 0.00910828 1 ||| 1-1 4-3 ||| 0.127619
+the [X][X] months ago [X] ||| dem [X][X] Monaten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+the European [X][X] months ago [X] ||| dem Europäischen [X][X] Monaten [X] ||| 0.0182166 1 ||| 2-2 ||| 0.04
+[X][X] just [X][X] months ago [X] ||| [X][X] erst [X][X] Monaten einen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0582923
+[X][X] just [X][X] [X] ||| [X][X] erst [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0582923
+[X][X] just [X][X] months ago [X] ||| [X][X] erst vor [X][X] Monaten einen [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0582923
+[X][X] just [X][X] [X] ||| [X][X] erst vor [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0582923
+[X][X] just a few [X][X] [X] ||| [X][X] erst vor wenigen [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.0582923
+European [X][X] a few [X][X] [X] ||| Europäischen [X][X] vor wenigen [X][X] einen [X] ||| 0.00910828 1 ||| 1-1 4-4 ||| 0.0689656
+European [X][X] a few [X][X] [X] ||| Europäischen [X][X] wenigen [X][X] einen [X] ||| 0.00910828 1 ||| 1-1 4-3 ||| 0.0689656
+European [X][X] months ago [X] ||| Europäischen [X][X] Monaten einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+European [X][X] [X] ||| Europäischen [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+European Parliament [X][X] months ago [X] ||| Europäischen Parlament [X][X] Monaten einen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0344828
+European Parliament [X][X] [X] ||| Europäischen Parlament [X][X] einen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0344828
+European Parliament just [X][X] [X] ||| Europäischen Parlament erst [X][X] einen [X] ||| 0.00910828 1 ||| 3-3 ||| 0.0689656
+European Parliament just [X][X] [X] ||| Europäischen Parlament erst vor [X][X] einen [X] ||| 0.00910828 1 ||| 3-4 ||| 0.0689656
+the people assassinated very recently [X] ||| den Attentatsopfern , die es in jüngster Zeit [X] ||| 0.0182166 1 ||| ||| 0.25
+the [X][X] recently [X] ||| den [X][X] jüngster Zeit [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+[X][X] people assassinated very recently [X] ||| [X][X] Attentatsopfern , die es in jüngster Zeit [X] ||| 0.0182166 1 ||| 0-0 ||| 0.3
+of [X][X] recently [X] ||| [X][X] jüngster Zeit [X] ||| 0.0182166 1 ||| 1-0 ||| 0.2
+of the [X][X] recently [X] ||| den [X][X] jüngster Zeit [X] ||| 0.0182166 1 ||| 2-1 ||| 0.2
+people assassinated very recently in [X] ||| Attentatsopfern , die es in jüngster Zeit in [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] recently in [X] ||| [X][X] jüngster Zeit in [X] ||| 0.0182166 1 ||| 0-0 ||| 0.613095
+[X][X] in [X] ||| [X][X] in [X] ||| 0.0182166 1 ||| 0-0 ||| 0.613095
+people assassinated very [X][X] [X] ||| Attentatsopfern , die es in [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.483766
+recently in Sri Lanka was [X] ||| jüngster Zeit in Sri Lanka zu beklagen gab [X] ||| 0.0182166 1 ||| ||| 0.0588235
+[X][X] Sri Lanka was [X] ||| [X][X] Sri Lanka zu beklagen gab [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0588235
+[X][X] Sri [X][X] [X] ||| [X][X] Sri [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.146443
+recently [X][X] Lanka was [X] ||| jüngster Zeit [X][X] Lanka zu beklagen gab [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0588235
+recently [X][X] was [X] ||| jüngster Zeit [X][X] zu beklagen gab [X] ||| 0.00607219 1 ||| 1-2 ||| 0.176471
+recently [X][X] was [X] ||| jüngster Zeit [X][X] beklagen gab [X] ||| 0.00607219 1 ||| 1-2 ||| 0.176471
+recently [X][X] was [X] ||| jüngster Zeit [X][X] gab [X] ||| 0.00607219 1 ||| 1-2 ||| 0.176471
+recently in [X][X] was [X] ||| jüngster Zeit in [X][X] zu beklagen gab [X] ||| 0.00607219 1 ||| 2-3 ||| 0.176471
+recently in [X][X] was [X] ||| jüngster Zeit in [X][X] beklagen gab [X] ||| 0.00607219 1 ||| 2-3 ||| 0.176471
+recently in [X][X] was [X] ||| jüngster Zeit in [X][X] gab [X] ||| 0.00607219 1 ||| 2-3 ||| 0.176471
+recently in Sri [X][X] [X] ||| jüngster Zeit in Sri [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.146443
+in Sri Lanka was [X] ||| in Sri Lanka zu beklagen gab , zählt [X] ||| 0.0182166 1 ||| ||| 0.0714286
+[X][X] Lanka was [X] ||| [X][X] Lanka zu beklagen gab , zählt [X] ||| 0.0182166 1 ||| 0-0 ||| 0.111429
+in [X][X] was [X] ||| in [X][X] zu beklagen gab , zählt [X] ||| 0.00607219 1 ||| 1-1 ||| 0.214286
+in [X][X] was [X] ||| in [X][X] beklagen gab , zählt [X] ||| 0.00607219 1 ||| 1-1 ||| 0.214286
+in [X][X] was [X] ||| in [X][X] gab , zählt [X] ||| 0.00607219 1 ||| 1-1 ||| 0.214286
+in [X][X] [X] ||| in [X][X] , zählt [X] ||| 0.00910828 1 ||| 1-1 ||| 0.142857
+in [X][X] [X] ||| in [X][X] zählt [X] ||| 0.00910828 1 ||| 1-1 ||| 0.142857
+in Sri [X][X] [X] ||| in Sri [X][X] , zählt [X] ||| 0.00910828 1 ||| 2-2 ||| 0.142857
+in Sri [X][X] [X] ||| in Sri [X][X] zählt [X] ||| 0.00910828 1 ||| 2-2 ||| 0.142857
+Sri Lanka was [X] ||| Sri Lanka zu beklagen gab , zählt auch [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] was [X] ||| [X][X] zu beklagen gab , zählt auch [X] ||| 0.00607219 1 ||| 0-0 ||| 0.5625
+[X][X] was [X] ||| [X][X] beklagen gab , zählt auch [X] ||| 0.00607219 1 ||| 0-0 ||| 0.5625
+[X][X] was [X] ||| [X][X] gab , zählt auch [X] ||| 0.00607219 1 ||| 0-0 ||| 0.5625
+Sri [X][X] [X] ||| Sri [X][X] , zählt auch [X] ||| 0.00607219 1 ||| 1-1 ||| 0.375
+Sri [X][X] [X] ||| Sri [X][X] zählt auch [X] ||| 0.00607219 1 ||| 1-1 ||| 0.375
+Sri [X][X] [X] ||| Sri [X][X] auch [X] ||| 0.00607219 1 ||| 1-1 ||| 0.375
+Lanka was Mr [X] ||| Lanka zu beklagen gab , zählt auch Herr [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] Mr [X] ||| [X][X] , zählt auch Herr [X] ||| 0.00455414 1 ||| 0-0 ||| 0.892856
+[X][X] Mr [X] ||| [X][X] zählt auch Herr [X] ||| 0.00455414 1 ||| 0-0 ||| 0.892856
+[X][X] Mr [X] ||| [X][X] auch Herr [X] ||| 0.00455414 1 ||| 0-0 ||| 0.892856
+[X][X] Mr [X] ||| [X][X] Herr [X] ||| 0.00455414 1 ||| 0-0 ||| 0.892856
+Lanka [X][X] [X] ||| Lanka [X][X] [X] ||| 0.00607219 1 ||| 1-1 ||| 0.517857
+Lanka [X][X] [X] ||| Lanka zu [X][X] [X] ||| 0.00607219 1 ||| 1-2 ||| 0.517857
+Lanka [X][X] [X] ||| Lanka zu beklagen [X][X] [X] ||| 0.00607219 1 ||| 1-3 ||| 0.517857
+was Mr Kumar Ponnambalam [X] ||| beklagen gab , zählt auch Herr Kumar Ponnambalam [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] Kumar Ponnambalam [X] ||| beklagen [X][X] Kumar Ponnambalam [X] ||| 0.0182166 1 ||| 0-1 ||| 0.125
+was [X][X] [X] ||| beklagen gab [X][X] [X] ||| 0.00455414 1 ||| 1-2 ||| 0.735296
+was [X][X] [X] ||| beklagen gab , [X][X] [X] ||| 0.00455414 1 ||| 1-3 ||| 0.735296
+was [X][X] [X] ||| beklagen gab , zählt [X][X] [X] ||| 0.00455414 1 ||| 1-4 ||| 0.735296
+was [X][X] [X] ||| beklagen gab , zählt auch [X][X] [X] ||| 0.00455414 1 ||| 1-5 ||| 0.735296
+was Mr [X][X] [X] ||| beklagen gab , zählt auch Herr [X][X] [X] ||| 0.0182166 1 ||| 2-6 ||| 0.183824
+Mr Kumar Ponnambalam , who [X] ||| , zählt auch Herr Kumar Ponnambalam , der [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] , who [X] ||| , [X][X] , der [X] ||| 0.00607219 1 ||| 0-1 ||| 0.375
+[X][X] , who [X] ||| , zählt [X][X] , der [X] ||| 0.00607219 1 ||| 0-2 ||| 0.375
+[X][X] , who [X] ||| , zählt auch [X][X] , der [X] ||| 0.00607219 1 ||| 0-3 ||| 0.375
+Mr [X][X] , who [X] ||| , zählt auch Herr [X][X] , der [X] ||| 0.0182166 1 ||| 1-4 ||| 0.125
+Mr Kumar Ponnambalam [X][X] [X] ||| , zählt auch Herr Kumar Ponnambalam [X][X] [X] ||| 0.0182166 1 ||| 3-6 ||| 0.125
+[X][X] Parliament [X][X] months ago [X] ||| [X][X] Parlament [X][X] Monaten einen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0238095
+[X][X] Parliament [X][X] [X] ||| [X][X] Parlament [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0238095
+[X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst [X][X] einen [X] ||| 0.00910828 1 ||| 0-0 3-3 ||| 0.047619
+[X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst vor [X][X] einen [X] ||| 0.00910828 1 ||| 0-0 3-4 ||| 0.047619
+the [X][X] just [X][X] [X] ||| dem [X][X] erst [X][X] einen [X] ||| 0.00910828 1 ||| 1-1 3-3 ||| 0.047619
+the [X][X] just [X][X] [X] ||| dem [X][X] erst vor [X][X] einen [X] ||| 0.00910828 1 ||| 1-1 3-4 ||| 0.047619
+the [X][X] a few [X][X] [X] ||| dem [X][X] vor wenigen [X][X] einen [X] ||| 0.00910828 1 ||| 1-1 4-4 ||| 0.047619
+the [X][X] a few [X][X] [X] ||| dem [X][X] wenigen [X][X] einen [X] ||| 0.00910828 1 ||| 1-1 4-3 ||| 0.047619
+the [X][X] months ago [X] ||| dem [X][X] Monaten einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0238095
+the [X][X] [X] ||| dem [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0238095
+the European [X][X] months ago [X] ||| dem Europäischen [X][X] Monaten einen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0238095
+the European [X][X] [X] ||| dem Europäischen [X][X] einen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0238095
+the European Parliament [X][X] [X] ||| dem Europäischen Parlament [X][X] einen [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0238095
+the European Parliament just [X][X] [X] ||| dem Europäischen Parlament erst [X][X] einen [X] ||| 0.00910828 1 ||| 4-4 ||| 0.047619
+the European Parliament just [X][X] [X] ||| dem Europäischen Parlament erst vor [X][X] einen [X] ||| 0.00910828 1 ||| 4-5 ||| 0.047619
+[X][X] the [X][X] recently [X] ||| [X][X] den [X][X] jüngster Zeit [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.1
+one of [X][X] recently [X] ||| zu [X][X] jüngster Zeit [X] ||| 0.0182166 1 ||| 2-1 ||| 0.1
+one [X][X] recently [X] ||| zu [X][X] jüngster Zeit [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+one of the [X][X] recently [X] ||| zu den [X][X] jüngster Zeit [X] ||| 0.0182166 1 ||| 3-2 ||| 0.1
+the [X][X] recently in [X] ||| den [X][X] jüngster Zeit in [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+the [X][X] in [X] ||| den [X][X] in [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+the people assassinated very [X][X] [X] ||| den Attentatsopfern , die es in [X][X] [X] ||| 0.0182166 1 ||| 4-6 ||| 0.266667
+[X][X] people assassinated very [X][X] [X] ||| [X][X] Attentatsopfern , die es in [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-6 ||| 0.273352
+of [X][X] recently in [X] ||| [X][X] jüngster Zeit in [X] ||| 0.0182166 1 ||| 1-0 ||| 0.125
+of [X][X] in [X] ||| [X][X] in [X] ||| 0.0182166 1 ||| 1-0 ||| 0.125
+of the [X][X] recently in [X] ||| den [X][X] jüngster Zeit in [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+of the [X][X] in [X] ||| den [X][X] in [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+[X][X] recently in Sri [X] ||| [X][X] jüngster Zeit in Sri [X] ||| 0.0182166 1 ||| 0-0 ||| 0.31978
+[X][X] recently [X][X] [X] ||| [X][X] jüngster Zeit [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.410689
+[X][X] in Sri [X] ||| [X][X] in Sri [X] ||| 0.0182166 1 ||| 0-0 ||| 0.31978
+people assassinated very [X][X] Sri [X] ||| Attentatsopfern , die es in [X][X] Sri [X] ||| 0.0182166 1 ||| 3-5 ||| 0.142857
+people assassinated very recently [X][X] [X] ||| Attentatsopfern , die es in jüngster Zeit [X][X] [X] ||| 0.0182166 1 ||| 4-7 ||| 0.233766
+recently in Sri Lanka was [X] ||| jüngster Zeit in Sri Lanka zu beklagen gab , [X] ||| 0.0182166 1 ||| ||| 0.047619
+[X][X] Sri Lanka was [X] ||| [X][X] Sri Lanka zu beklagen gab , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.047619
+[X][X] Sri [X][X] [X] ||| [X][X] Sri [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.047619
+recently [X][X] Lanka was [X] ||| jüngster Zeit [X][X] Lanka zu beklagen gab , [X] ||| 0.0182166 1 ||| 1-2 ||| 0.047619
+recently [X][X] was [X] ||| jüngster Zeit [X][X] zu beklagen gab , [X] ||| 0.00607219 1 ||| 1-2 ||| 0.142857
+recently [X][X] was [X] ||| jüngster Zeit [X][X] beklagen gab , [X] ||| 0.00607219 1 ||| 1-2 ||| 0.142857
+recently [X][X] was [X] ||| jüngster Zeit [X][X] gab , [X] ||| 0.00607219 1 ||| 1-2 ||| 0.142857
+recently [X][X] [X] ||| jüngster Zeit [X][X] , [X] ||| 0.0182166 1 ||| 1-2 ||| 0.047619
+recently in [X][X] was [X] ||| jüngster Zeit in [X][X] zu beklagen gab , [X] ||| 0.00607219 1 ||| 2-3 ||| 0.142857
+recently in [X][X] was [X] ||| jüngster Zeit in [X][X] beklagen gab , [X] ||| 0.00607219 1 ||| 2-3 ||| 0.142857
+recently in [X][X] was [X] ||| jüngster Zeit in [X][X] gab , [X] ||| 0.00607219 1 ||| 2-3 ||| 0.142857
+recently in [X][X] [X] ||| jüngster Zeit in [X][X] , [X] ||| 0.0182166 1 ||| 2-3 ||| 0.047619
+recently in Sri [X][X] [X] ||| jüngster Zeit in Sri [X][X] , [X] ||| 0.0182166 1 ||| 3-4 ||| 0.047619
+in Sri Lanka was [X] ||| in Sri Lanka zu beklagen gab , zählt auch [X] ||| 0.0182166 1 ||| ||| 0.0625
+[X][X] Lanka was [X] ||| [X][X] Lanka zu beklagen gab , zählt auch [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0625
+in [X][X] was [X] ||| in [X][X] zu beklagen gab , zählt auch [X] ||| 0.00607219 1 ||| 1-1 ||| 0.1875
+in [X][X] was [X] ||| in [X][X] beklagen gab , zählt auch [X] ||| 0.00607219 1 ||| 1-1 ||| 0.1875
+in [X][X] was [X] ||| in [X][X] gab , zählt auch [X] ||| 0.00607219 1 ||| 1-1 ||| 0.1875
+in [X][X] [X] ||| in [X][X] , zählt auch [X] ||| 0.00607219 1 ||| 1-1 ||| 0.1875
+in [X][X] [X] ||| in [X][X] zählt auch [X] ||| 0.00607219 1 ||| 1-1 ||| 0.1875
+in [X][X] [X] ||| in [X][X] auch [X] ||| 0.00607219 1 ||| 1-1 ||| 0.1875
+in Sri [X][X] [X] ||| in Sri [X][X] , zählt auch [X] ||| 0.00607219 1 ||| 2-2 ||| 0.1875
+in Sri [X][X] [X] ||| in Sri [X][X] zählt auch [X] ||| 0.00607219 1 ||| 2-2 ||| 0.1875
+in Sri [X][X] [X] ||| in Sri [X][X] auch [X] ||| 0.00607219 1 ||| 2-2 ||| 0.1875
+Sri Lanka was Mr [X] ||| Sri Lanka zu beklagen gab , zählt auch Herr [X] ||| 0.0182166 1 ||| ||| 0.0625
+[X][X] was Mr [X] ||| [X][X] zu beklagen gab , zählt auch Herr [X] ||| 0.00607219 1 ||| 0-0 ||| 0.294643
+[X][X] was Mr [X] ||| [X][X] beklagen gab , zählt auch Herr [X] ||| 0.00607219 1 ||| 0-0 ||| 0.294643
+[X][X] was Mr [X] ||| [X][X] gab , zählt auch Herr [X] ||| 0.00607219 1 ||| 0-0 ||| 0.294643
+Sri [X][X] Mr [X] ||| Sri [X][X] , zählt auch Herr [X] ||| 0.00455414 1 ||| 1-1 ||| 0.25
+Sri [X][X] Mr [X] ||| Sri [X][X] zählt auch Herr [X] ||| 0.00455414 1 ||| 1-1 ||| 0.25
+Sri [X][X] Mr [X] ||| Sri [X][X] auch Herr [X] ||| 0.00455414 1 ||| 1-1 ||| 0.25
+Sri [X][X] Mr [X] ||| Sri [X][X] Herr [X] ||| 0.00455414 1 ||| 1-1 ||| 0.25
+Sri Lanka [X][X] [X] ||| Sri Lanka [X][X] [X] ||| 0.00607219 1 ||| 2-2 ||| 0.1875
+Sri Lanka [X][X] [X] ||| Sri Lanka zu [X][X] [X] ||| 0.00607219 1 ||| 2-3 ||| 0.1875
+Sri Lanka [X][X] [X] ||| Sri Lanka zu beklagen [X][X] [X] ||| 0.00607219 1 ||| 2-4 ||| 0.1875
+was Mr Kumar Ponnambalam [X] ||| zu beklagen gab , zählt auch Herr Kumar Ponnambalam [X] ||| 0.0182166 1 ||| ||| 0.111111
+[X][X] Kumar Ponnambalam [X] ||| zu [X][X] Kumar Ponnambalam [X] ||| 0.00910828 1 ||| 0-1 ||| 0.222222
+[X][X] Kumar Ponnambalam [X] ||| zu beklagen [X][X] Kumar Ponnambalam [X] ||| 0.00910828 1 ||| 0-2 ||| 0.222222
+was [X][X] [X] ||| zu beklagen gab [X][X] [X] ||| 0.00455414 1 ||| 1-3 ||| 0.444444
+was [X][X] [X] ||| zu beklagen gab , [X][X] [X] ||| 0.00455414 1 ||| 1-4 ||| 0.444444
+was [X][X] [X] ||| zu beklagen gab , zählt [X][X] [X] ||| 0.00455414 1 ||| 1-5 ||| 0.444444
+was [X][X] [X] ||| zu beklagen gab , zählt auch [X][X] [X] ||| 0.00455414 1 ||| 1-6 ||| 0.444444
+was Mr [X][X] [X] ||| zu beklagen gab , zählt auch Herr [X][X] [X] ||| 0.0182166 1 ||| 2-7 ||| 0.111111
+[X][X] Kumar Ponnambalam , who [X] ||| [X][X] Kumar Ponnambalam , der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.130252
+[X][X] Kumar Ponnambalam [X][X] [X] ||| [X][X] Kumar Ponnambalam [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.130252
+was [X][X] , who [X] ||| gab [X][X] , der [X] ||| 0.00455414 1 ||| 1-1 ||| 0.285714
+was [X][X] , who [X] ||| gab , [X][X] , der [X] ||| 0.00455414 1 ||| 1-2 ||| 0.285714
+was [X][X] , who [X] ||| gab , zählt [X][X] , der [X] ||| 0.00455414 1 ||| 1-3 ||| 0.285714
+was [X][X] , who [X] ||| gab , zählt auch [X][X] , der [X] ||| 0.00455414 1 ||| 1-4 ||| 0.285714
+was Mr [X][X] , who [X] ||| gab , zählt auch Herr [X][X] , der [X] ||| 0.0182166 1 ||| 2-5 ||| 0.0714286
+was Mr Kumar Ponnambalam [X][X] [X] ||| gab , zählt auch Herr Kumar Ponnambalam [X][X] [X] ||| 0.0182166 1 ||| 4-7 ||| 0.0714286
+visited [X][X] Parliament [X][X] [X] ||| [X][X] Parlament [X][X] einen Besuch [X] ||| 0.00910828 1 ||| 1-0 3-2 ||| 0.0714286
+visited [X][X] Parliament [X][X] [X] ||| [X][X] Parlament [X][X] Besuch [X] ||| 0.00910828 1 ||| 1-0 3-2 ||| 0.0714286
+visited [X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst [X][X] einen Besuch [X] ||| 0.00455414 1 ||| 1-0 4-3 ||| 0.142857
+visited [X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst [X][X] Besuch [X] ||| 0.00455414 1 ||| 1-0 4-3 ||| 0.142857
+visited [X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst vor [X][X] einen Besuch [X] ||| 0.00455414 1 ||| 1-0 4-4 ||| 0.142857
+visited [X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst vor [X][X] Besuch [X] ||| 0.00455414 1 ||| 1-0 4-4 ||| 0.142857
+visited [X][X] just [X][X] [X] ||| [X][X] erst [X][X] einen Besuch [X] ||| 0.00455414 1 ||| 1-0 3-2 ||| 0.142857
+visited [X][X] just [X][X] [X] ||| [X][X] erst [X][X] Besuch [X] ||| 0.00455414 1 ||| 1-0 3-2 ||| 0.142857
+visited [X][X] just [X][X] [X] ||| [X][X] erst vor [X][X] einen Besuch [X] ||| 0.00455414 1 ||| 1-0 3-3 ||| 0.142857
+visited [X][X] just [X][X] [X] ||| [X][X] erst vor [X][X] Besuch [X] ||| 0.00455414 1 ||| 1-0 3-3 ||| 0.142857
+visited [X][X] a few [X][X] [X] ||| [X][X] vor wenigen [X][X] einen Besuch [X] ||| 0.00455414 1 ||| 1-0 4-3 ||| 0.142857
+visited [X][X] a few [X][X] [X] ||| [X][X] vor wenigen [X][X] Besuch [X] ||| 0.00455414 1 ||| 1-0 4-3 ||| 0.142857
+visited [X][X] a few [X][X] [X] ||| [X][X] wenigen [X][X] einen Besuch [X] ||| 0.00455414 1 ||| 1-0 4-2 ||| 0.142857
+visited [X][X] a few [X][X] [X] ||| [X][X] wenigen [X][X] Besuch [X] ||| 0.00455414 1 ||| 1-0 4-2 ||| 0.142857
+visited [X][X] months ago [X] ||| [X][X] Monaten einen Besuch [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0357143
+visited [X][X] [X] ||| [X][X] einen Besuch [X] ||| 0.00910828 1 ||| 1-0 ||| 0.0714286
+visited [X][X] [X] ||| [X][X] Besuch [X] ||| 0.00910828 1 ||| 1-0 ||| 0.0714286
+visited the [X][X] just [X][X] [X] ||| dem [X][X] erst [X][X] einen Besuch [X] ||| 0.00455414 1 ||| 2-1 4-3 ||| 0.142857
+visited the [X][X] just [X][X] [X] ||| dem [X][X] erst [X][X] Besuch [X] ||| 0.00455414 1 ||| 2-1 4-3 ||| 0.142857
+visited the [X][X] just [X][X] [X] ||| dem [X][X] erst vor [X][X] einen Besuch [X] ||| 0.00455414 1 ||| 2-1 4-4 ||| 0.142857
+visited the [X][X] just [X][X] [X] ||| dem [X][X] erst vor [X][X] Besuch [X] ||| 0.00455414 1 ||| 2-1 4-4 ||| 0.142857
+visited the [X][X] months ago [X] ||| dem [X][X] Monaten einen Besuch [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0357143
+visited the [X][X] [X] ||| dem [X][X] einen Besuch [X] ||| 0.00910828 1 ||| 2-1 ||| 0.0714286
+visited the [X][X] [X] ||| dem [X][X] Besuch [X] ||| 0.00910828 1 ||| 2-1 ||| 0.0714286
+visited the European [X][X] [X] ||| dem Europäischen [X][X] einen Besuch [X] ||| 0.00910828 1 ||| 3-2 ||| 0.0714286
+visited the European [X][X] [X] ||| dem Europäischen [X][X] Besuch [X] ||| 0.00910828 1 ||| 3-2 ||| 0.0714286
+visited the European Parliament [X][X] [X] ||| dem Europäischen Parlament [X][X] einen Besuch [X] ||| 0.00910828 1 ||| 4-3 ||| 0.0714286
+visited the European Parliament [X][X] [X] ||| dem Europäischen Parlament [X][X] Besuch [X] ||| 0.00910828 1 ||| 4-3 ||| 0.0714286
+[X][X] the [X][X] recently in [X] ||| [X][X] den [X][X] jüngster Zeit in [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0714286
+[X][X] the [X][X] in [X] ||| [X][X] den [X][X] in [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0714286
+one of [X][X] recently in [X] ||| zu [X][X] jüngster Zeit in [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0714286
+one [X][X] recently in [X] ||| zu [X][X] jüngster Zeit in [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+one of [X][X] in [X] ||| zu [X][X] in [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0714286
+one [X][X] in [X] ||| zu [X][X] in [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+one of the [X][X] in [X] ||| zu den [X][X] in [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0714286
+the [X][X] recently in Sri [X] ||| den [X][X] jüngster Zeit in Sri [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+the [X][X] recently [X][X] [X] ||| den [X][X] jüngster Zeit [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-4 ||| 0.1
+the [X][X] in Sri [X] ||| den [X][X] in Sri [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+the [X][X] Sri [X] ||| den [X][X] Sri [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+of [X][X] recently in Sri [X] ||| [X][X] jüngster Zeit in Sri [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0769231
+of [X][X] recently [X][X] [X] ||| [X][X] jüngster Zeit [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-3 ||| 0.0769231
+of [X][X] in Sri [X] ||| [X][X] in Sri [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0769231
+of [X][X] Sri [X] ||| [X][X] Sri [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0769231
+of the [X][X] recently [X][X] [X] ||| den [X][X] jüngster Zeit [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-4 ||| 0.0769231
+of the [X][X] in Sri [X] ||| den [X][X] in Sri [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0769231
+of the [X][X] Sri [X] ||| den [X][X] Sri [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0769231
+[X][X] recently in Sri Lanka [X] ||| [X][X] jüngster Zeit in Sri Lanka [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0909091
+[X][X] recently [X][X] Lanka [X] ||| [X][X] jüngster Zeit [X][X] Lanka [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0909091
+[X][X] recently in [X][X] [X] ||| [X][X] jüngster Zeit in [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.0909091
+[X][X] in Sri Lanka [X] ||| [X][X] in Sri Lanka [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0909091
+[X][X] in [X][X] [X] ||| [X][X] in [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0909091
+people assassinated very [X][X] Lanka [X] ||| Attentatsopfern , die es in [X][X] Lanka [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0909091
+recently in Sri Lanka was [X] ||| jüngster Zeit in Sri Lanka zu beklagen gab , zählt [X] ||| 0.0182166 1 ||| ||| 0.04
+[X][X] Sri Lanka was [X] ||| [X][X] Sri Lanka zu beklagen gab , zählt [X] ||| 0.0182166 1 ||| 0-0 ||| 0.04
+[X][X] Sri [X][X] [X] ||| [X][X] Sri [X][X] , zählt [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.08
+[X][X] Sri [X][X] [X] ||| [X][X] Sri [X][X] zählt [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.08
+recently [X][X] Lanka was [X] ||| jüngster Zeit [X][X] Lanka zu beklagen gab , zählt [X] ||| 0.0182166 1 ||| 1-2 ||| 0.04
+recently [X][X] was [X] ||| jüngster Zeit [X][X] zu beklagen gab , zählt [X] ||| 0.00607219 1 ||| 1-2 ||| 0.12
+recently [X][X] was [X] ||| jüngster Zeit [X][X] beklagen gab , zählt [X] ||| 0.00607219 1 ||| 1-2 ||| 0.12
+recently [X][X] was [X] ||| jüngster Zeit [X][X] gab , zählt [X] ||| 0.00607219 1 ||| 1-2 ||| 0.12
+recently [X][X] [X] ||| jüngster Zeit [X][X] , zählt [X] ||| 0.00910828 1 ||| 1-2 ||| 0.08
+recently [X][X] [X] ||| jüngster Zeit [X][X] zählt [X] ||| 0.00910828 1 ||| 1-2 ||| 0.08
+recently in [X][X] was [X] ||| jüngster Zeit in [X][X] zu beklagen gab , zählt [X] ||| 0.00607219 1 ||| 2-3 ||| 0.12
+recently in [X][X] was [X] ||| jüngster Zeit in [X][X] beklagen gab , zählt [X] ||| 0.00607219 1 ||| 2-3 ||| 0.12
+recently in [X][X] was [X] ||| jüngster Zeit in [X][X] gab , zählt [X] ||| 0.00607219 1 ||| 2-3 ||| 0.12
+recently in [X][X] [X] ||| jüngster Zeit in [X][X] , zählt [X] ||| 0.00910828 1 ||| 2-3 ||| 0.08
+recently in [X][X] [X] ||| jüngster Zeit in [X][X] zählt [X] ||| 0.00910828 1 ||| 2-3 ||| 0.08
+recently in Sri [X][X] [X] ||| jüngster Zeit in Sri [X][X] , zählt [X] ||| 0.00910828 1 ||| 3-4 ||| 0.08
+recently in Sri [X][X] [X] ||| jüngster Zeit in Sri [X][X] zählt [X] ||| 0.00910828 1 ||| 3-4 ||| 0.08
+in Sri Lanka was Mr [X] ||| in Sri Lanka zu beklagen gab , zählt auch Herr [X] ||| 0.0182166 1 ||| ||| 0.0357143
+[X][X] Lanka was Mr [X] ||| [X][X] Lanka zu beklagen gab , zählt auch Herr [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0357143
+[X][X] Lanka [X][X] [X] ||| [X][X] Lanka [X][X] [X] ||| 0.00607219 1 ||| 0-0 2-2 ||| 0.107143
+[X][X] Lanka [X][X] [X] ||| [X][X] Lanka zu [X][X] [X] ||| 0.00607219 1 ||| 0-0 2-3 ||| 0.107143
+[X][X] Lanka [X][X] [X] ||| [X][X] Lanka zu beklagen [X][X] [X] ||| 0.00607219 1 ||| 0-0 2-4 ||| 0.107143
+in [X][X] was Mr [X] ||| in [X][X] zu beklagen gab , zählt auch Herr [X] ||| 0.00607219 1 ||| 1-1 ||| 0.107143
+in [X][X] was Mr [X] ||| in [X][X] beklagen gab , zählt auch Herr [X] ||| 0.00607219 1 ||| 1-1 ||| 0.107143
+in [X][X] was Mr [X] ||| in [X][X] gab , zählt auch Herr [X] ||| 0.00607219 1 ||| 1-1 ||| 0.107143
+in [X][X] Mr [X] ||| in [X][X] , zählt auch Herr [X] ||| 0.00455414 1 ||| 1-1 ||| 0.142857
+in [X][X] Mr [X] ||| in [X][X] zählt auch Herr [X] ||| 0.00455414 1 ||| 1-1 ||| 0.142857
+in [X][X] Mr [X] ||| in [X][X] auch Herr [X] ||| 0.00455414 1 ||| 1-1 ||| 0.142857
+in [X][X] Mr [X] ||| in [X][X] Herr [X] ||| 0.00455414 1 ||| 1-1 ||| 0.142857
+in Sri [X][X] Mr [X] ||| in Sri [X][X] , zählt auch Herr [X] ||| 0.00455414 1 ||| 2-2 ||| 0.142857
+in Sri [X][X] Mr [X] ||| in Sri [X][X] zählt auch Herr [X] ||| 0.00455414 1 ||| 2-2 ||| 0.142857
+in Sri [X][X] Mr [X] ||| in Sri [X][X] auch Herr [X] ||| 0.00455414 1 ||| 2-2 ||| 0.142857
+in Sri [X][X] Mr [X] ||| in Sri [X][X] Herr [X] ||| 0.00455414 1 ||| 2-2 ||| 0.142857
+in Sri Lanka [X][X] [X] ||| in Sri Lanka [X][X] [X] ||| 0.00607219 1 ||| 3-3 ||| 0.107143
+in Sri Lanka [X][X] [X] ||| in Sri Lanka zu [X][X] [X] ||| 0.00607219 1 ||| 3-4 ||| 0.107143
+in Sri Lanka [X][X] [X] ||| in Sri Lanka zu beklagen [X][X] [X] ||| 0.00607219 1 ||| 3-5 ||| 0.107143
+Lanka was Mr Kumar Ponnambalam [X] ||| Lanka zu beklagen gab , zählt auch Herr Kumar Ponnambalam [X] ||| 0.0182166 1 ||| ||| 0.047619
+[X][X] Mr Kumar Ponnambalam [X] ||| [X][X] , zählt auch Herr Kumar Ponnambalam [X] ||| 0.0182166 1 ||| 0-0 ||| 0.047619
+[X][X] Mr [X][X] [X] ||| [X][X] , zählt auch Herr [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-5 ||| 0.047619
+[X][X] Mr Kumar Ponnambalam [X] ||| [X][X] zählt auch Herr Kumar Ponnambalam [X] ||| 0.0182166 1 ||| 0-0 ||| 0.047619
+[X][X] Mr [X][X] [X] ||| [X][X] zählt auch Herr [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.047619
+[X][X] Mr Kumar Ponnambalam [X] ||| [X][X] auch Herr Kumar Ponnambalam [X] ||| 0.0182166 1 ||| 0-0 ||| 0.047619
+[X][X] Mr [X][X] [X] ||| [X][X] auch Herr [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.047619
+[X][X] Mr Kumar Ponnambalam [X] ||| [X][X] Herr Kumar Ponnambalam [X] ||| 0.0182166 1 ||| 0-0 ||| 0.047619
+[X][X] Mr [X][X] [X] ||| [X][X] Herr [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.047619
+Lanka [X][X] Kumar Ponnambalam [X] ||| Lanka [X][X] Kumar Ponnambalam [X] ||| 0.00607219 1 ||| 1-1 ||| 0.142857
+Lanka [X][X] Kumar Ponnambalam [X] ||| Lanka zu [X][X] Kumar Ponnambalam [X] ||| 0.00607219 1 ||| 1-2 ||| 0.142857
+Lanka [X][X] Kumar Ponnambalam [X] ||| Lanka zu beklagen [X][X] Kumar Ponnambalam [X] ||| 0.00607219 1 ||| 1-3 ||| 0.142857
+Lanka was [X][X] [X] ||| Lanka zu beklagen gab [X][X] [X] ||| 0.00455414 1 ||| 2-4 ||| 0.190476
+Lanka was [X][X] [X] ||| Lanka zu beklagen gab , [X][X] [X] ||| 0.00455414 1 ||| 2-5 ||| 0.190476
+Lanka was [X][X] [X] ||| Lanka zu beklagen gab , zählt [X][X] [X] ||| 0.00455414 1 ||| 2-6 ||| 0.190476
+Lanka was [X][X] [X] ||| Lanka zu beklagen gab , zählt auch [X][X] [X] ||| 0.00455414 1 ||| 2-7 ||| 0.190476
+Lanka was Mr [X][X] [X] ||| Lanka zu beklagen gab , zählt auch Herr [X][X] [X] ||| 0.0182166 1 ||| 3-8 ||| 0.047619
+[X][X] Kumar Ponnambalam , who [X] ||| beklagen [X][X] Kumar Ponnambalam , der [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0588235
+[X][X] Kumar Ponnambalam [X][X] [X] ||| beklagen [X][X] Kumar Ponnambalam [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0588235
+[X][X] , who [X] ||| beklagen [X][X] , der [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0588235
+was [X][X] , who [X] ||| beklagen gab [X][X] , der [X] ||| 0.00455414 1 ||| 1-2 ||| 0.235294
+was [X][X] , who [X] ||| beklagen gab , [X][X] , der [X] ||| 0.00455414 1 ||| 1-3 ||| 0.235294
+was [X][X] , who [X] ||| beklagen gab , zählt [X][X] , der [X] ||| 0.00455414 1 ||| 1-4 ||| 0.235294
+was [X][X] , who [X] ||| beklagen gab , zählt auch [X][X] , der [X] ||| 0.00455414 1 ||| 1-5 ||| 0.235294
+was Mr [X][X] , who [X] ||| beklagen gab , zählt auch Herr [X][X] , der [X] ||| 0.0182166 1 ||| 2-6 ||| 0.0588235
+was Mr Kumar Ponnambalam [X][X] [X] ||| beklagen gab , zählt auch Herr Kumar Ponnambalam [X][X] [X] ||| 0.0182166 1 ||| 4-8 ||| 0.0588235
+visited [X][X] Parliament [X][X] [X] ||| [X][X] Parlament [X][X] einen Besuch abgestattet [X] ||| 0.00910828 1 ||| 1-0 3-2 ||| 0.0714286
+visited [X][X] Parliament [X][X] [X] ||| [X][X] Parlament [X][X] Besuch abgestattet [X] ||| 0.00910828 1 ||| 1-0 3-2 ||| 0.0714286
+visited [X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst [X][X] einen Besuch abgestattet [X] ||| 0.00455414 1 ||| 1-0 4-3 ||| 0.142857
+visited [X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst [X][X] Besuch abgestattet [X] ||| 0.00455414 1 ||| 1-0 4-3 ||| 0.142857
+visited [X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst vor [X][X] einen Besuch abgestattet [X] ||| 0.00455414 1 ||| 1-0 4-4 ||| 0.142857
+visited [X][X] Parliament just [X][X] [X] ||| [X][X] Parlament erst vor [X][X] Besuch abgestattet [X] ||| 0.00455414 1 ||| 1-0 4-4 ||| 0.142857
+visited [X][X] just [X][X] [X] ||| [X][X] erst [X][X] einen Besuch abgestattet [X] ||| 0.00455414 1 ||| 1-0 3-2 ||| 0.142857
+visited [X][X] just [X][X] [X] ||| [X][X] erst [X][X] Besuch abgestattet [X] ||| 0.00455414 1 ||| 1-0 3-2 ||| 0.142857
+visited [X][X] just [X][X] [X] ||| [X][X] erst vor [X][X] einen Besuch abgestattet [X] ||| 0.00455414 1 ||| 1-0 3-3 ||| 0.142857
+visited [X][X] just [X][X] [X] ||| [X][X] erst vor [X][X] Besuch abgestattet [X] ||| 0.00455414 1 ||| 1-0 3-3 ||| 0.142857
+visited [X][X] a few [X][X] [X] ||| [X][X] vor wenigen [X][X] einen Besuch abgestattet [X] ||| 0.00455414 1 ||| 1-0 4-3 ||| 0.142857
+visited [X][X] a few [X][X] [X] ||| [X][X] vor wenigen [X][X] Besuch abgestattet [X] ||| 0.00455414 1 ||| 1-0 4-3 ||| 0.142857
+visited [X][X] a few [X][X] [X] ||| [X][X] wenigen [X][X] einen Besuch abgestattet [X] ||| 0.00455414 1 ||| 1-0 4-2 ||| 0.142857
+visited [X][X] a few [X][X] [X] ||| [X][X] wenigen [X][X] Besuch abgestattet [X] ||| 0.00455414 1 ||| 1-0 4-2 ||| 0.142857
+visited [X][X] months ago [X] ||| [X][X] Monaten einen Besuch abgestattet [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0357143
+visited [X][X] [X] ||| [X][X] einen Besuch abgestattet [X] ||| 0.00910828 1 ||| 1-0 ||| 0.0714286
+visited [X][X] [X] ||| [X][X] Besuch abgestattet [X] ||| 0.00910828 1 ||| 1-0 ||| 0.0714286
+visited the [X][X] just [X][X] [X] ||| dem [X][X] erst [X][X] einen Besuch abgestattet [X] ||| 0.00455414 1 ||| 2-1 4-3 ||| 0.142857
+visited the [X][X] just [X][X] [X] ||| dem [X][X] erst [X][X] Besuch abgestattet [X] ||| 0.00455414 1 ||| 2-1 4-3 ||| 0.142857
+visited the [X][X] just [X][X] [X] ||| dem [X][X] erst vor [X][X] einen Besuch abgestattet [X] ||| 0.00455414 1 ||| 2-1 4-4 ||| 0.142857
+visited the [X][X] just [X][X] [X] ||| dem [X][X] erst vor [X][X] Besuch abgestattet [X] ||| 0.00455414 1 ||| 2-1 4-4 ||| 0.142857
+visited the [X][X] months ago [X] ||| dem [X][X] Monaten einen Besuch abgestattet [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0357143
+visited the [X][X] [X] ||| dem [X][X] einen Besuch abgestattet [X] ||| 0.00910828 1 ||| 2-1 ||| 0.0714286
+visited the [X][X] [X] ||| dem [X][X] Besuch abgestattet [X] ||| 0.00910828 1 ||| 2-1 ||| 0.0714286
+visited the European [X][X] [X] ||| dem Europäischen [X][X] einen Besuch abgestattet [X] ||| 0.00910828 1 ||| 3-2 ||| 0.0714286
+visited the European [X][X] [X] ||| dem Europäischen [X][X] Besuch abgestattet [X] ||| 0.00910828 1 ||| 3-2 ||| 0.0714286
+visited the European Parliament [X][X] [X] ||| dem Europäischen Parlament [X][X] einen Besuch abgestattet [X] ||| 0.00910828 1 ||| 4-3 ||| 0.0714286
+visited the European Parliament [X][X] [X] ||| dem Europäischen Parlament [X][X] Besuch abgestattet [X] ||| 0.00910828 1 ||| 4-3 ||| 0.0714286
+it [X] ||| es [X] ||| 0.0182166 1 ||| ||| 1
+appropriate [X] ||| angemessen [X] ||| 0.0182166 1 ||| ||| 1
+for [X] ||| wenn [X] ||| 0.0182166 1 ||| ||| 1
+you [X] ||| Sie [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| , [X] ||| 0.218091 1 ||| ||| 2
+Madam [X] ||| Frau [X] ||| 0.0182166 1 ||| ||| 1
+President [X] ||| Präsidentin [X] ||| 0.218091 1 ||| ||| 2
+Sri [X] ||| Sri [X] ||| 0.218091 1 ||| ||| 2
+Lankan [X] ||| Lanka [X] ||| 0.0182166 1 ||| ||| 1
+to [X] ||| in [X] ||| 0.0182166 1 ||| ||| 1
+a [X] ||| einem [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| das [X] ||| 0.0182166 1 ||| ||| 1
+to the [X] ||| das [X] ||| 0.0182166 1 ||| ||| 1
+regret [X] ||| Bedauern [X] ||| 0.0182166 1 ||| ||| 1
+expressing [X] ||| zum [X] ||| 0.0182166 1 ||| ||| 1
+violent [X] ||| gewaltsamen [X] ||| 0.0182166 1 ||| ||| 1
+and [X] ||| und [X] ||| 0.218091 1 ||| ||| 2
+and the [X] ||| und [X] ||| 0.0182166 1 ||| ||| 1
+other [X] ||| anderen [X] ||| 0.0182166 1 ||| ||| 1
+the other [X] ||| anderen [X] ||| 0.0182166 1 ||| ||| 1
+in [X] ||| von [X] ||| 0.0182166 1 ||| ||| 1
+everything [X] ||| alles [X] ||| 0.0182166 1 ||| ||| 1
+everything she [X] ||| alles [X] ||| 0.0182166 1 ||| ||| 1
+her [X] ||| ihrem [X] ||| 0.0182166 1 ||| ||| 1
+possibly [X] ||| Kräften [X] ||| 0.0182166 1 ||| ||| 1
+possibly can [X] ||| Kräften [X] ||| 0.0182166 1 ||| ||| 1
+she possibly [X] ||| Kräften [X] ||| 0.0182166 1 ||| ||| 1
+she possibly can [X] ||| Kräften [X] ||| 0.0182166 1 ||| ||| 1
+do [X] ||| tun [X] ||| 0.0182166 1 ||| ||| 1
+a [X] ||| einer [X] ||| 0.0182166 1 ||| ||| 1
+peaceful [X] ||| friedlichen [X] ||| 0.0182166 1 ||| ||| 1
+reconciliation to [X] ||| Lösung [X] ||| 0.0182166 1 ||| ||| 1
+a [X] ||| dieser [X] ||| 0.0182166 1 ||| ||| 1
+very [X] ||| sehr [X] ||| 0.0182166 1 ||| ||| 1
+difficult [X] ||| schwierigen [X] ||| 0.0182166 1 ||| ||| 1
+situation [X] ||| Situation [X] ||| 0.0182166 1 ||| ||| 1
+? [X] ||| ? [X] ||| 0.0182166 1 ||| ||| 1
+would it be [X] ||| wäre es [X] ||| 0.0182166 1 ||| ||| 1
+appropriate [X] ||| angemessen , [X] ||| 0.0182166 1 ||| ||| 1
+for [X] ||| , wenn [X] ||| 0.0182166 1 ||| ||| 1
+for you [X] ||| wenn Sie [X] ||| 0.0182166 1 ||| ||| 1
+you , [X] ||| Sie , [X] ||| 0.0182166 1 ||| ||| 1
+, Madam [X] ||| , Frau [X] ||| 0.0182166 1 ||| ||| 1
+Madam President [X] ||| Frau Präsidentin [X] ||| 0.0182166 1 ||| ||| 1
+President , [X] ||| Präsidentin , [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| , der [X] ||| 0.0182166 1 ||| ||| 1
+President [X] ||| der Präsidentin [X] ||| 0.00910828 1 ||| ||| 2
+President [X] ||| Präsidentin von [X] ||| 0.00910828 1 ||| ||| 2
+Sri [X] ||| von Sri [X] ||| 0.0182166 1 ||| ||| 1
+Sri Lankan [X] ||| Sri Lanka [X] ||| 0.0182166 1 ||| ||| 1
+write a letter [X] ||| einem Schreiben [X] ||| 0.0182166 1 ||| ||| 1
+write a letter to [X] ||| einem Schreiben [X] ||| 0.0182166 1 ||| ||| 1
+Parliament 's [X] ||| des Parlaments [X] ||| 0.0182166 1 ||| ||| 1
+and the other [X] ||| und anderen [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] other [X] ||| [X][X] anderen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.458333
+and [X][X] [X] ||| und [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+in Sri [X] ||| von Sri [X] ||| 0.0182166 1 ||| ||| 1
+Lanka [X] ||| Lanka übermitteln [X] ||| 0.0182166 1 ||| ||| 1
+urging [X] ||| sie auffordern [X] ||| 0.0182166 1 ||| ||| 1
+everything [X] ||| , alles [X] ||| 0.0182166 1 ||| ||| 1
+everything she [X] ||| , alles [X] ||| 0.0182166 1 ||| ||| 1
+possibly [X] ||| Kräften stehende [X] ||| 0.0182166 1 ||| ||| 1
+possibly can [X] ||| Kräften stehende [X] ||| 0.0182166 1 ||| ||| 1
+she possibly [X] ||| Kräften stehende [X] ||| 0.0182166 1 ||| ||| 1
+she possibly can [X] ||| Kräften stehende [X] ||| 0.0182166 1 ||| ||| 1
+a peaceful [X] ||| einer friedlichen [X] ||| 0.0182166 1 ||| ||| 1
+peaceful reconciliation to [X] ||| friedlichen Lösung [X] ||| 0.0182166 1 ||| ||| 0.5
+peaceful [X][X] [X] ||| friedlichen [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.02882
+reconciliation to a [X] ||| Lösung dieser [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] a [X] ||| [X][X] dieser [X] ||| 0.0182166 1 ||| 0-0 ||| 0.892857
+a very [X] ||| dieser sehr [X] ||| 0.0182166 1 ||| ||| 1
+very difficult [X] ||| sehr schwierigen [X] ||| 0.0182166 1 ||| ||| 1
+difficult situation [X] ||| schwierigen Situation [X] ||| 0.0182166 1 ||| ||| 1
+would it be appropriate [X] ||| wäre es angemessen [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] appropriate [X] ||| [X][X] angemessen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+appropriate for [X] ||| angemessen , wenn [X] ||| 0.0182166 1 ||| ||| 1
+for you [X] ||| , wenn Sie [X] ||| 0.0182166 1 ||| ||| 1
+for you , [X] ||| wenn Sie , [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] , [X] ||| [X][X] , [X] ||| 0.218091 1 ||| 0-0 ||| 1.50408
+for [X][X] [X] ||| wenn [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.680578
+you , Madam [X] ||| Sie , Frau [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] Madam [X] ||| [X][X] Frau [X] ||| 0.0182166 1 ||| 0-0 ||| 0.736429
+you [X][X] [X] ||| Sie [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.657576
+, Madam President [X] ||| , Frau Präsidentin [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] President [X] ||| [X][X] Präsidentin [X] ||| 0.0182166 1 ||| 0-0 ||| 0.729545
+, [X][X] [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.701923
+Madam President , [X] ||| Frau Präsidentin , [X] ||| 0.0182166 1 ||| ||| 0.333333
+Madam [X][X] [X] ||| Frau [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.583333
+President , [X] ||| Präsidentin , der [X] ||| 0.0182166 1 ||| ||| 1
+President [X] ||| der Präsidentin von [X] ||| 0.0182166 1 ||| ||| 1
+Sri Lankan [X] ||| von Sri Lanka [X] ||| 0.0182166 1 ||| ||| 1
+to write a letter [X] ||| in einem Schreiben [X] ||| 0.0182166 1 ||| ||| 0.5
+to [X][X] [X] ||| in [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 1
+to write a letter to [X] ||| in einem Schreiben [X] ||| 0.0182166 1 ||| ||| 0.333333
+to [X][X] to [X] ||| in [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+write a letter to the [X] ||| einem Schreiben das [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] to the [X] ||| [X][X] das [X] ||| 0.0182166 1 ||| 0-0 ||| 0.416667
+[X][X] the [X] ||| [X][X] das [X] ||| 0.0182166 1 ||| 0-0 ||| 0.416667
+write a letter [X][X] [X] ||| einem Schreiben [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.25
+Parliament 's regret [X] ||| Bedauern des Parlaments [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] regret [X] ||| Bedauern [X][X] [X] ||| 0.0182166 1 ||| 0-1 ||| 0.75
+expressing Parliament 's [X] ||| des Parlaments zum [X] ||| 0.0182166 1 ||| ||| 0.5
+expressing [X][X] [X] ||| [X][X] zum [X] ||| 0.0182166 1 ||| 1-0 ||| 0.75
+at his [X] ||| von Herrn Ponnambalam [X] ||| 0.0182166 1 ||| ||| 1
+Sri Lanka [X] ||| Sri Lanka übermitteln [X] ||| 0.0182166 1 ||| ||| 1
+Lanka and [X] ||| Lanka übermitteln und [X] ||| 0.0182166 1 ||| ||| 1
+and urging [X] ||| und sie auffordern [X] ||| 0.0182166 1 ||| ||| 1
+urging [X] ||| sie auffordern würden [X] ||| 0.0182166 1 ||| ||| 1
+everything [X] ||| würden , alles [X] ||| 0.0182166 1 ||| ||| 1
+everything she [X] ||| würden , alles [X] ||| 0.0182166 1 ||| ||| 1
+a peaceful reconciliation to [X] ||| einer friedlichen Lösung [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] reconciliation to [X] ||| [X][X] Lösung [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25
+a [X][X] [X] ||| einer [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.58259
+a peaceful [X][X] [X] ||| einer friedlichen [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.58259
+peaceful reconciliation to a [X] ||| friedlichen Lösung dieser [X] ||| 0.0182166 1 ||| ||| 0.25
+peaceful [X][X] a [X] ||| friedlichen [X][X] dieser [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+reconciliation to a very [X] ||| Lösung dieser sehr [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] a very [X] ||| [X][X] dieser sehr [X] ||| 0.0182166 1 ||| 0-0 ||| 0.483766
+[X][X] very [X] ||| [X][X] sehr [X] ||| 0.0182166 1 ||| 0-0 ||| 0.483766
+reconciliation to [X][X] [X] ||| Lösung [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.446429
+a very difficult [X] ||| dieser sehr schwierigen [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] difficult [X] ||| [X][X] schwierigen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.60049
+a [X][X] [X] ||| dieser [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.5
+very difficult situation [X] ||| sehr schwierigen Situation [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] situation [X] ||| [X][X] Situation [X] ||| 0.0182166 1 ||| 0-0 ||| 0.66406
+very [X][X] [X] ||| sehr [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+would it be appropriate [X] ||| wäre es angemessen , [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] appropriate [X] ||| [X][X] angemessen , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+appropriate for you [X] ||| angemessen , wenn Sie [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] you [X] ||| [X][X] Sie [X] ||| 0.0182166 1 ||| 0-0 ||| 0.35
+appropriate [X][X] [X] ||| angemessen [X][X] [X] ||| 0.00910828 1 ||| 1-1 ||| 1.06661
+appropriate [X][X] [X] ||| angemessen , [X][X] [X] ||| 0.00910828 1 ||| 1-2 ||| 1.06661
+for you , [X] ||| , wenn Sie , [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] , [X] ||| , [X][X] , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.287037
+for [X][X] [X] ||| , wenn [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.505019
+for you , Madam [X] ||| wenn Sie , Frau [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] , Madam [X] ||| [X][X] , Frau [X] ||| 0.0182166 1 ||| 0-0 ||| 0.403095
+for [X][X] Madam [X] ||| wenn [X][X] Frau [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+for you [X][X] [X] ||| wenn Sie [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.347244
+you , Madam President [X] ||| Sie , Frau Präsidentin [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] Madam President [X] ||| [X][X] Frau Präsidentin [X] ||| 0.0182166 1 ||| 0-0 ||| 0.396212
+you [X][X] President [X] ||| Sie [X][X] Präsidentin [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+you , [X][X] [X] ||| Sie , [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.324242
+, Madam President , [X] ||| , Frau Präsidentin , [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] President , [X] ||| [X][X] Präsidentin , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.399912
+, [X][X] , [X] ||| , [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+, Madam [X][X] [X] ||| , Frau [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.291667
+Madam President , [X] ||| Frau Präsidentin , der [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] , [X] ||| [X][X] , der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.523201
+Madam [X][X] [X] ||| Frau [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+Sri Lankan President [X] ||| Präsidentin von Sri Lanka [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] President [X] ||| Präsidentin [X][X] [X] ||| 0.00910828 1 ||| 0-1 ||| 0.8
+[X][X] President [X] ||| Präsidentin von [X][X] [X] ||| 0.00910828 1 ||| 0-2 ||| 0.8
+to [X][X] to the [X] ||| in [X][X] das [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+to [X][X] the [X] ||| in [X][X] das [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+to write a letter [X][X] [X] ||| in einem Schreiben [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.166667
+expressing Parliament 's regret [X] ||| Bedauern des Parlaments zum [X] ||| 0.0182166 1 ||| ||| 0.25
+expressing [X][X] regret [X] ||| Bedauern [X][X] zum [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+at his and [X] ||| von Herrn Ponnambalam und [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] and [X] ||| [X][X] und [X] ||| 0.0182166 1 ||| 0-0 ||| 1
+at his and the [X] ||| von Herrn Ponnambalam und [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] and the [X] ||| [X][X] und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.333333
+at his [X][X] [X] ||| von Herrn Ponnambalam [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.458333
+in Sri Lanka [X] ||| von Sri Lanka übermitteln [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] Lanka [X] ||| [X][X] Lanka übermitteln [X] ||| 0.0182166 1 ||| 0-0 ||| 0.333333
+in [X][X] [X] ||| von [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.710207
+Sri Lanka and [X] ||| Sri Lanka übermitteln und [X] ||| 0.0182166 1 ||| ||| 0.333333
+Sri [X][X] [X] ||| Sri [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.725
+and urging [X] ||| und sie auffordern würden [X] ||| 0.0182166 1 ||| ||| 1
+urging [X] ||| sie auffordern würden , [X] ||| 0.0182166 1 ||| ||| 1
+a peaceful reconciliation to a [X] ||| einer friedlichen Lösung dieser [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] reconciliation to a [X] ||| [X][X] Lösung dieser [X] ||| 0.0182166 1 ||| 0-0 ||| 0.142857
+a [X][X] a [X] ||| einer [X][X] dieser [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+a peaceful [X][X] a [X] ||| einer friedlichen [X][X] dieser [X] ||| 0.0182166 1 ||| 2-2 ||| 0.142857
+peaceful reconciliation to a very [X] ||| friedlichen Lösung dieser sehr [X] ||| 0.0182166 1 ||| ||| 0.142857
+peaceful [X][X] a very [X] ||| friedlichen [X][X] dieser sehr [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+peaceful [X][X] very [X] ||| friedlichen [X][X] sehr [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+peaceful reconciliation to [X][X] [X] ||| friedlichen Lösung [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.278822
+reconciliation to a very difficult [X] ||| Lösung dieser sehr schwierigen [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] a very difficult [X] ||| [X][X] dieser sehr schwierigen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.267157
+[X][X] a [X][X] [X] ||| [X][X] dieser [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.431217
+[X][X] very difficult [X] ||| [X][X] sehr schwierigen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.267157
+reconciliation to [X][X] difficult [X] ||| Lösung [X][X] schwierigen [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+reconciliation to a [X][X] [X] ||| Lösung dieser [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.196429
+a very difficult situation [X] ||| dieser sehr schwierigen Situation [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] difficult situation [X] ||| [X][X] schwierigen Situation [X] ||| 0.0182166 1 ||| 0-0 ||| 0.330727
+a [X][X] situation [X] ||| dieser [X][X] Situation [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+a very [X][X] [X] ||| dieser sehr [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.166667
+would it be appropriate for [X] ||| wäre es angemessen , wenn [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] appropriate for [X] ||| [X][X] angemessen , wenn [X] ||| 0.0182166 1 ||| 0-0 ||| 0.2
+[X][X] for [X] ||| [X][X] , wenn [X] ||| 0.00910828 1 ||| 0-0 ||| 0.4
+[X][X] for [X] ||| [X][X] wenn [X] ||| 0.00910828 1 ||| 0-0 ||| 0.4
+would it be [X][X] [X] ||| wäre es [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.458444
+appropriate for you , [X] ||| angemessen , wenn Sie , [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] you , [X] ||| [X][X] Sie , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.1875
+appropriate [X][X] , [X] ||| angemessen [X][X] , [X] ||| 0.00910828 1 ||| 1-1 ||| 0.304054
+appropriate [X][X] , [X] ||| angemessen , [X][X] , [X] ||| 0.00910828 1 ||| 1-2 ||| 0.304054
+appropriate for [X][X] [X] ||| angemessen , wenn [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.283304
+for you , Madam [X] ||| , wenn Sie , Frau [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] , Madam [X] ||| , [X][X] , Frau [X] ||| 0.0182166 1 ||| 0-1 ||| 0.125
+[X][X] Madam [X] ||| , [X][X] Frau [X] ||| 0.0182166 1 ||| 0-1 ||| 0.125
+for [X][X] Madam [X] ||| , wenn [X][X] Frau [X] ||| 0.0182166 1 ||| 1-2 ||| 0.125
+for you [X][X] [X] ||| , wenn Sie [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.255019
+for you , Madam President [X] ||| wenn Sie , Frau Präsidentin [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] , Madam President [X] ||| [X][X] , Frau Präsidentin [X] ||| 0.0182166 1 ||| 0-0 ||| 0.229545
+[X][X] , [X][X] [X] ||| [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.453417
+for [X][X] Madam President [X] ||| wenn [X][X] Frau Präsidentin [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+for [X][X] President [X] ||| wenn [X][X] Präsidentin [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+for you [X][X] President [X] ||| wenn Sie [X][X] Präsidentin [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+for you , [X][X] [X] ||| wenn Sie , [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.180578
+you , Madam President , [X] ||| Sie , Frau Präsidentin , [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] Madam President , [X] ||| [X][X] Frau Präsidentin , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.233246
+[X][X] Madam [X][X] [X] ||| [X][X] Frau [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.381447
+you [X][X] President , [X] ||| Sie [X][X] Präsidentin , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+you [X][X] , [X] ||| Sie [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+you , [X][X] , [X] ||| Sie , [X][X] , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+you , Madam [X][X] [X] ||| Sie , Frau [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.157576
+, Madam President , [X] ||| , Frau Präsidentin , der [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] President , [X] ||| [X][X] Präsidentin , der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.273201
+, [X][X] , [X] ||| , [X][X] , der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+, [X][X] [X] ||| , [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+, Madam [X][X] [X] ||| , Frau [X][X] der [X] ||| 0.0182166 1 ||| 2-2 ||| 0.125
+Sri Lankan President [X] ||| der Präsidentin von Sri Lanka [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] President [X] ||| der Präsidentin [X][X] [X] ||| 0.00910828 1 ||| 0-2 ||| 0.77193
+[X][X] President [X] ||| der Präsidentin von [X][X] [X] ||| 0.00910828 1 ||| 0-3 ||| 0.77193
+at his and the other [X] ||| von Herrn Ponnambalam und anderen [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] and the other [X] ||| [X][X] und anderen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.125
+[X][X] and [X][X] [X] ||| [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.125
+[X][X] the other [X] ||| [X][X] anderen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.125
+at his [X][X] other [X] ||| von Herrn Ponnambalam [X][X] anderen [X] ||| 0.0182166 1 ||| 2-3 ||| 0.125
+at his and [X][X] [X] ||| von Herrn Ponnambalam und [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.125
+in Sri Lanka and [X] ||| von Sri Lanka übermitteln und [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] Lanka and [X] ||| [X][X] Lanka übermitteln und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.166667
+in [X][X] and [X] ||| von [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+in Sri [X][X] [X] ||| von Sri [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.376874
+Lanka and urging [X] ||| Lanka übermitteln und sie auffordern [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] urging [X] ||| [X][X] sie auffordern [X] ||| 0.0182166 1 ||| 0-0 ||| 0.590909
+Lanka [X][X] [X] ||| Lanka übermitteln [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.783333
+and urging [X] ||| und sie auffordern würden , [X] ||| 0.0182166 1 ||| ||| 1
+[X][X] reconciliation to a very [X] ||| [X][X] Lösung dieser sehr [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0909091
+[X][X] reconciliation to [X][X] [X] ||| [X][X] Lösung [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.189733
+a [X][X] a very [X] ||| einer [X][X] dieser sehr [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+a [X][X] very [X] ||| einer [X][X] sehr [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+a peaceful [X][X] a very [X] ||| einer friedlichen [X][X] dieser sehr [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+a peaceful [X][X] very [X] ||| einer friedlichen [X][X] sehr [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+a peaceful reconciliation to [X][X] [X] ||| einer friedlichen Lösung [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.189733
+peaceful [X][X] a very difficult [X] ||| friedlichen [X][X] dieser sehr schwierigen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+peaceful [X][X] a [X][X] [X] ||| friedlichen [X][X] dieser [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.135965
+peaceful [X][X] very difficult [X] ||| friedlichen [X][X] sehr schwierigen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+peaceful [X][X] difficult [X] ||| friedlichen [X][X] schwierigen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+peaceful reconciliation to [X][X] difficult [X] ||| friedlichen Lösung [X][X] schwierigen [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0833333
+peaceful reconciliation to a [X][X] [X] ||| friedlichen Lösung dieser [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.135965
+[X][X] a very difficult situation [X] ||| [X][X] dieser sehr schwierigen Situation [X] ||| 0.0182166 1 ||| 0-0 ||| 0.16406
+[X][X] a [X][X] situation [X] ||| [X][X] dieser [X][X] Situation [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.16406
+[X][X] a very [X][X] [X] ||| [X][X] dieser sehr [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.16406
+[X][X] very difficult situation [X] ||| [X][X] sehr schwierigen Situation [X] ||| 0.0182166 1 ||| 0-0 ||| 0.16406
+[X][X] very [X][X] [X] ||| [X][X] sehr [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.16406
+reconciliation to [X][X] difficult situation [X] ||| Lösung [X][X] schwierigen Situation [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0714286
+reconciliation to [X][X] situation [X] ||| Lösung [X][X] Situation [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0714286
+reconciliation to a [X][X] situation [X] ||| Lösung dieser [X][X] Situation [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0714286
+reconciliation to a very [X][X] [X] ||| Lösung dieser sehr [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.0714286
+[X][X] appropriate for you [X] ||| [X][X] angemessen , wenn Sie [X] ||| 0.0182166 1 ||| 0-0 ||| 0.1
+[X][X] appropriate [X][X] [X] ||| [X][X] angemessen [X][X] [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.516888
+[X][X] appropriate [X][X] [X] ||| [X][X] angemessen , [X][X] [X] ||| 0.00910828 1 ||| 0-0 2-3 ||| 0.516888
+[X][X] for you [X] ||| [X][X] , wenn Sie [X] ||| 0.00910828 1 ||| 0-0 ||| 0.2
+[X][X] for you [X] ||| [X][X] wenn Sie [X] ||| 0.00910828 1 ||| 0-0 ||| 0.2
+would it be [X][X] you [X] ||| wäre es [X][X] Sie [X] ||| 0.0182166 1 ||| 3-2 ||| 0.1
+would it be appropriate [X][X] [X] ||| wäre es angemessen [X][X] [X] ||| 0.00910828 1 ||| 4-3 ||| 0.516888
+would it be appropriate [X][X] [X] ||| wäre es angemessen , [X][X] [X] ||| 0.00910828 1 ||| 4-4 ||| 0.516888
+appropriate for you , Madam [X] ||| angemessen , wenn Sie , Frau [X] ||| 0.0182166 1 ||| ||| 0.0714286
+[X][X] you , Madam [X] ||| [X][X] Sie , Frau [X] ||| 0.0182166 1 ||| 0-0 ||| 0.111429
+[X][X] you [X][X] [X] ||| [X][X] Sie [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.254248
+appropriate [X][X] , Madam [X] ||| angemessen [X][X] , Frau [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+appropriate [X][X] Madam [X] ||| angemessen [X][X] Frau [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+appropriate [X][X] , Madam [X] ||| angemessen , [X][X] , Frau [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0714286
+appropriate [X][X] Madam [X] ||| angemessen , [X][X] Frau [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0714286
+appropriate for [X][X] Madam [X] ||| angemessen , wenn [X][X] Frau [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0714286
+appropriate for you [X][X] [X] ||| angemessen , wenn Sie [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.158304
+for you , Madam President [X] ||| , wenn Sie , Frau Präsidentin [X] ||| 0.0182166 1 ||| ||| 0.0666667
+[X][X] , Madam President [X] ||| , [X][X] , Frau Präsidentin [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0666667
+[X][X] , [X][X] [X] ||| , [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.13002
+[X][X] Madam President [X] ||| , [X][X] Frau Präsidentin [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0666667
+[X][X] President [X] ||| , [X][X] Präsidentin [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0666667
+for [X][X] Madam President [X] ||| , wenn [X][X] Frau Präsidentin [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0666667
+for [X][X] President [X] ||| , wenn [X][X] Präsidentin [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0666667
+for you [X][X] President [X] ||| , wenn Sie [X][X] Präsidentin [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0666667
+for you , [X][X] [X] ||| , wenn Sie , [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.13002
+[X][X] , Madam President , [X] ||| [X][X] , Frau Präsidentin , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.142337
+[X][X] , [X][X] , [X] ||| [X][X] , [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.142337
+[X][X] , Madam [X][X] [X] ||| [X][X] , Frau [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.223871
+for [X][X] Madam President , [X] ||| wenn [X][X] Frau Präsidentin , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+for [X][X] Madam [X][X] [X] ||| wenn [X][X] Frau [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0896686
+for [X][X] President , [X] ||| wenn [X][X] Präsidentin , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+for [X][X] , [X] ||| wenn [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+for you [X][X] President , [X] ||| wenn Sie [X][X] Präsidentin , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+for you [X][X] , [X] ||| wenn Sie [X][X] , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+for you , [X][X] , [X] ||| wenn Sie , [X][X] , [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0526316
+for you , Madam [X][X] [X] ||| wenn Sie , Frau [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.0896686
+you , Madam President , [X] ||| Sie , Frau Präsidentin , der [X] ||| 0.0182166 1 ||| ||| 0.0666667
+[X][X] Madam President , [X] ||| [X][X] Frau Präsidentin , der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.148201
+[X][X] Madam [X][X] [X] ||| [X][X] Frau [X][X] der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.148201
+you [X][X] President , [X] ||| Sie [X][X] Präsidentin , der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+you [X][X] , [X] ||| Sie [X][X] , der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+you [X][X] [X] ||| Sie [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+you , [X][X] , [X] ||| Sie , [X][X] , der [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0666667
+you , [X][X] [X] ||| Sie , [X][X] der [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0666667
+you , Madam [X][X] [X] ||| Sie , Frau [X][X] der [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0666667
+[X][X] to the [X][X] [X] ||| [X][X] [X][X] das [X] ||| 0.0182166 1 ||| 3-0 0-1 ||| 0.307332
+[X][X] the [X][X] [X] ||| [X][X] [X][X] das [X] ||| 0.0182166 1 ||| 2-0 0-1 ||| 0.307332
+to [X][X] to the [X][X] [X] ||| [X][X] in [X][X] das [X] ||| 0.0182166 1 ||| 4-0 1-2 ||| 0.307332
+to [X][X] the [X][X] [X] ||| [X][X] in [X][X] das [X] ||| 0.0182166 1 ||| 3-0 1-2 ||| 0.307332
+[X][X] to the Sri Lankan [X] ||| Sri Lanka [X][X] das [X] ||| 0.0182166 1 ||| 0-2 ||| 0.111111
+[X][X] the Sri Lankan [X] ||| Sri Lanka [X][X] das [X] ||| 0.0182166 1 ||| 0-2 ||| 0.111111
+[X][X] Sri Lankan [X] ||| Sri Lanka [X][X] [X] ||| 0.0182166 1 ||| 0-2 ||| 0.111111
+to [X][X] the Sri Lankan [X] ||| Sri Lanka in [X][X] das [X] ||| 0.0182166 1 ||| 1-3 ||| 0.111111
+to [X][X] Sri Lankan [X] ||| Sri Lanka in [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.111111
+Sri Lanka and urging [X] ||| Sri Lanka übermitteln und sie auffordern [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] and urging [X] ||| [X][X] und sie auffordern [X] ||| 0.0182166 1 ||| 0-0 ||| 0.257576
+Sri [X][X] urging [X] ||| Sri [X][X] sie auffordern [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+Sri Lanka [X][X] [X] ||| Sri Lanka übermitteln [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.391667
+Lanka and urging [X] ||| Lanka übermitteln und sie auffordern würden [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] urging [X] ||| [X][X] sie auffordern würden [X] ||| 0.0182166 1 ||| 0-0 ||| 0.441667
+Lanka [X][X] [X] ||| Lanka übermitteln [X][X] würden [X] ||| 0.0182166 1 ||| 1-2 ||| 0.25
+[X][X] reconciliation to [X][X] difficult [X] ||| [X][X] Lösung [X][X] schwierigen [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0588235
+[X][X] reconciliation to a [X][X] [X] ||| [X][X] Lösung dieser [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.0988235
+a [X][X] a very difficult [X] ||| einer [X][X] dieser sehr schwierigen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0588235
+a [X][X] a [X][X] [X] ||| einer [X][X] dieser [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0988235
+a [X][X] very difficult [X] ||| einer [X][X] sehr schwierigen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0588235
+a [X][X] difficult [X] ||| einer [X][X] schwierigen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0588235
+a peaceful [X][X] a [X][X] [X] ||| einer friedlichen [X][X] dieser [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0988235
+a peaceful [X][X] very difficult [X] ||| einer friedlichen [X][X] sehr schwierigen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0588235
+a peaceful [X][X] difficult [X] ||| einer friedlichen [X][X] schwierigen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0588235
+peaceful [X][X] a [X][X] situation [X] ||| friedlichen [X][X] dieser [X][X] Situation [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0526316
+peaceful [X][X] a very [X][X] [X] ||| friedlichen [X][X] dieser sehr [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0526316
+peaceful [X][X] very difficult situation [X] ||| friedlichen [X][X] sehr schwierigen Situation [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+peaceful [X][X] very [X][X] [X] ||| friedlichen [X][X] sehr [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0526316
+peaceful [X][X] difficult situation [X] ||| friedlichen [X][X] schwierigen Situation [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+peaceful [X][X] situation [X] ||| friedlichen [X][X] Situation [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+peaceful reconciliation to [X][X] situation [X] ||| friedlichen Lösung [X][X] Situation [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0526316
+[X][X] appropriate for you , [X] ||| [X][X] angemessen , wenn Sie , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0625
+[X][X] appropriate [X][X] , [X] ||| [X][X] angemessen [X][X] , [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.176282
+[X][X] appropriate [X][X] , [X] ||| [X][X] angemessen , [X][X] , [X] ||| 0.00910828 1 ||| 0-0 2-3 ||| 0.176282
+[X][X] appropriate for [X][X] [X] ||| [X][X] angemessen , wenn [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.158444
+[X][X] for you , [X] ||| [X][X] , wenn Sie , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0625
+[X][X] for [X][X] [X] ||| [X][X] , wenn [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.158444
+[X][X] for you , [X] ||| [X][X] wenn Sie , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0625
+[X][X] for [X][X] [X] ||| [X][X] wenn [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.158444
+would it be [X][X] , [X] ||| wäre es [X][X] , [X] ||| 0.0182166 1 ||| 3-2 ||| 0.088141
+[X][X] you , Madam President [X] ||| [X][X] Sie , Frau Präsidentin [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0719697
+[X][X] you [X][X] President [X] ||| [X][X] Sie [X][X] Präsidentin [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0719697
+[X][X] you , [X][X] [X] ||| [X][X] Sie , [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.14282
+appropriate [X][X] , Madam President [X] ||| angemessen [X][X] , Frau Präsidentin [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0416667
+appropriate [X][X] , [X][X] [X] ||| angemessen [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0868755
+appropriate [X][X] Madam President [X] ||| angemessen [X][X] Frau Präsidentin [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0416667
+appropriate [X][X] President [X] ||| angemessen [X][X] Präsidentin [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0416667
+appropriate [X][X] , Madam President [X] ||| angemessen , [X][X] , Frau Präsidentin [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0416667
+appropriate [X][X] , [X][X] [X] ||| angemessen , [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0868755
+appropriate [X][X] Madam President [X] ||| angemessen , [X][X] Frau Präsidentin [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0416667
+appropriate [X][X] President [X] ||| angemessen , [X][X] Präsidentin [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0416667
+appropriate for [X][X] Madam President [X] ||| angemessen , wenn [X][X] Frau Präsidentin [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0416667
+appropriate for [X][X] President [X] ||| angemessen , wenn [X][X] Präsidentin [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0416667
+appropriate for you [X][X] President [X] ||| angemessen , wenn Sie [X][X] Präsidentin [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0416667
+appropriate for you , [X][X] [X] ||| angemessen , wenn Sie , [X][X] [X] ||| 0.0182166 1 ||| 4-5 ||| 0.0868755
+[X][X] , Madam President , [X] ||| , [X][X] , Frau Präsidentin , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.037037
+[X][X] , [X][X] , [X] ||| , [X][X] , [X][X] , [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.037037
+[X][X] , Madam [X][X] [X] ||| , [X][X] , Frau [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0633528
+[X][X] Madam President , [X] ||| , [X][X] Frau Präsidentin , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.037037
+[X][X] Madam [X][X] [X] ||| , [X][X] Frau [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0633528
+[X][X] President , [X] ||| , [X][X] Präsidentin , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.037037
+for [X][X] Madam President , [X] ||| , wenn [X][X] Frau Präsidentin , [X] ||| 0.0182166 1 ||| 1-2 ||| 0.037037
+for [X][X] Madam [X][X] [X] ||| , wenn [X][X] Frau [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0633528
+for [X][X] President , [X] ||| , wenn [X][X] Präsidentin , [X] ||| 0.0182166 1 ||| 1-2 ||| 0.037037
+for [X][X] , [X] ||| , wenn [X][X] , [X] ||| 0.0182166 1 ||| 1-2 ||| 0.037037
+for you [X][X] President , [X] ||| , wenn Sie [X][X] Präsidentin , [X] ||| 0.0182166 1 ||| 2-3 ||| 0.037037
+for you [X][X] , [X] ||| , wenn Sie [X][X] , [X] ||| 0.0182166 1 ||| 2-3 ||| 0.037037
+for you , [X][X] , [X] ||| , wenn Sie , [X][X] , [X] ||| 0.0182166 1 ||| 3-4 ||| 0.037037
+for you , Madam [X][X] [X] ||| , wenn Sie , Frau [X][X] [X] ||| 0.0182166 1 ||| 4-5 ||| 0.0633528
+[X][X] , Madam President , [X] ||| [X][X] , Frau Präsidentin , der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0815346
+[X][X] , [X][X] , [X] ||| [X][X] , [X][X] , der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0815346
+[X][X] , [X][X] [X] ||| [X][X] , [X][X] der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0815346
+[X][X] , Madam [X][X] [X] ||| [X][X] , Frau [X][X] der [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0815346
+for [X][X] Madam President , [X] ||| wenn [X][X] Frau Präsidentin , der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.037037
+for [X][X] Madam [X][X] [X] ||| wenn [X][X] Frau [X][X] der [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.037037
+for [X][X] President , [X] ||| wenn [X][X] Präsidentin , der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.037037
+for [X][X] , [X] ||| wenn [X][X] , der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.037037
+for [X][X] [X] ||| wenn [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.037037
+for you [X][X] President , [X] ||| wenn Sie [X][X] Präsidentin , der [X] ||| 0.0182166 1 ||| 2-2 ||| 0.037037
+for you [X][X] , [X] ||| wenn Sie [X][X] , der [X] ||| 0.0182166 1 ||| 2-2 ||| 0.037037
+for you [X][X] [X] ||| wenn Sie [X][X] der [X] ||| 0.0182166 1 ||| 2-2 ||| 0.037037
+for you , [X][X] , [X] ||| wenn Sie , [X][X] , der [X] ||| 0.0182166 1 ||| 3-3 ||| 0.037037
+for you , [X][X] [X] ||| wenn Sie , [X][X] der [X] ||| 0.0182166 1 ||| 3-3 ||| 0.037037
+for you , Madam [X][X] [X] ||| wenn Sie , Frau [X][X] der [X] ||| 0.0182166 1 ||| 4-4 ||| 0.037037
+[X][X] to the [X][X] [X] ||| von [X][X] [X][X] das [X] ||| 0.0182166 1 ||| 3-1 0-2 ||| 0.0769231
+[X][X] the [X][X] [X] ||| von [X][X] [X][X] das [X] ||| 0.0182166 1 ||| 2-1 0-2 ||| 0.0769231
+to [X][X] to the [X][X] [X] ||| von [X][X] in [X][X] das [X] ||| 0.0182166 1 ||| 4-1 1-3 ||| 0.0769231
+to [X][X] the [X][X] [X] ||| von [X][X] in [X][X] das [X] ||| 0.0182166 1 ||| 3-1 1-3 ||| 0.0769231
+[X][X] to the Sri Lankan [X] ||| von Sri Lanka [X][X] das [X] ||| 0.0182166 1 ||| 0-3 ||| 0.0769231
+[X][X] the Sri Lankan [X] ||| von Sri Lanka [X][X] das [X] ||| 0.0182166 1 ||| 0-3 ||| 0.0769231
+[X][X] Sri Lankan [X] ||| von Sri Lanka [X][X] [X] ||| 0.0182166 1 ||| 0-3 ||| 0.0769231
+to [X][X] the Sri Lankan [X] ||| von Sri Lanka in [X][X] das [X] ||| 0.0182166 1 ||| 1-4 ||| 0.0769231
+to [X][X] Sri Lankan [X] ||| von Sri Lanka in [X][X] [X] ||| 0.0182166 1 ||| 1-4 ||| 0.0769231
+in Sri Lanka and urging [X] ||| von Sri Lanka übermitteln und sie auffordern [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] Lanka and urging [X] ||| [X][X] Lanka übermitteln und sie auffordern [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0909091
+[X][X] Lanka [X][X] [X] ||| [X][X] Lanka übermitteln [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.210207
+in [X][X] and urging [X] ||| von [X][X] und sie auffordern [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+in [X][X] urging [X] ||| von [X][X] sie auffordern [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+in Sri [X][X] urging [X] ||| von Sri [X][X] sie auffordern [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+in Sri Lanka [X][X] [X] ||| von Sri Lanka übermitteln [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.210207
+Sri Lanka and urging [X] ||| Sri Lanka übermitteln und sie auffordern würden [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] and urging [X] ||| [X][X] und sie auffordern würden [X] ||| 0.0182166 1 ||| 0-0 ||| 0.191667
+Sri [X][X] urging [X] ||| Sri [X][X] sie auffordern würden [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+Sri [X][X] [X] ||| Sri [X][X] würden [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+Sri Lanka [X][X] [X] ||| Sri Lanka übermitteln [X][X] würden [X] ||| 0.0182166 1 ||| 2-3 ||| 0.125
+Lanka and urging [X] ||| Lanka übermitteln und sie auffordern würden , [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] urging [X] ||| [X][X] sie auffordern würden , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.352632
+Lanka [X][X] [X] ||| Lanka übermitteln [X][X] würden , [X] ||| 0.00910828 1 ||| 1-2 ||| 0.4
+Lanka [X][X] [X] ||| Lanka übermitteln [X][X] , [X] ||| 0.00910828 1 ||| 1-2 ||| 0.4
+her to do [X][X] possibly [X] ||| [X][X] in ihrem Kräften stehende zu tun [X] ||| 0.0182166 1 ||| 3-0 ||| 0.783333
+her to do everything [X][X] [X] ||| alles in ihrem [X][X] stehende zu tun [X] ||| 0.00910828 1 ||| 4-3 ||| 1.66667
+her to do everything [X][X] [X] ||| alles in ihrem [X][X] zu tun [X] ||| 0.00910828 1 ||| 4-3 ||| 1.66667
+[X][X] reconciliation to [X][X] situation [X] ||| [X][X] Lösung [X][X] Situation [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.04
+a [X][X] a [X][X] situation [X] ||| einer [X][X] dieser [X][X] Situation [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.04
+a [X][X] a very [X][X] [X] ||| einer [X][X] dieser sehr [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.04
+a [X][X] very difficult situation [X] ||| einer [X][X] sehr schwierigen Situation [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+a [X][X] very [X][X] [X] ||| einer [X][X] sehr [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.04
+a [X][X] difficult situation [X] ||| einer [X][X] schwierigen Situation [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+a [X][X] situation [X] ||| einer [X][X] Situation [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+a peaceful [X][X] very [X][X] [X] ||| einer friedlichen [X][X] sehr [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.04
+a peaceful [X][X] difficult situation [X] ||| einer friedlichen [X][X] schwierigen Situation [X] ||| 0.0182166 1 ||| 2-2 ||| 0.04
+a peaceful [X][X] situation [X] ||| einer friedlichen [X][X] Situation [X] ||| 0.0182166 1 ||| 2-2 ||| 0.04
+[X][X] appropriate [X][X] , Madam [X] ||| [X][X] angemessen [X][X] , Frau [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.04
+[X][X] appropriate [X][X] Madam [X] ||| [X][X] angemessen [X][X] Frau [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.04
+[X][X] appropriate [X][X] , Madam [X] ||| [X][X] angemessen , [X][X] , Frau [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.04
+[X][X] appropriate [X][X] Madam [X] ||| [X][X] angemessen , [X][X] Frau [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.04
+[X][X] appropriate for [X][X] Madam [X] ||| [X][X] angemessen , wenn [X][X] Frau [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.04
+[X][X] appropriate for you [X][X] [X] ||| [X][X] angemessen , wenn Sie [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-5 ||| 0.0959441
+[X][X] for you , Madam [X] ||| [X][X] , wenn Sie , Frau [X] ||| 0.0182166 1 ||| 0-0 ||| 0.04
+[X][X] for [X][X] Madam [X] ||| [X][X] , wenn [X][X] Frau [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.04
+[X][X] for you [X][X] [X] ||| [X][X] , wenn Sie [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.0959441
+[X][X] for you , Madam [X] ||| [X][X] wenn Sie , Frau [X] ||| 0.0182166 1 ||| 0-0 ||| 0.04
+[X][X] for [X][X] Madam [X] ||| [X][X] wenn [X][X] Frau [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.04
+[X][X] for you [X][X] [X] ||| [X][X] wenn Sie [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0959441
+would it be [X][X] Madam [X] ||| wäre es [X][X] Frau [X] ||| 0.0182166 1 ||| 3-2 ||| 0.04
+[X][X] you [X][X] President , [X] ||| [X][X] Sie [X][X] Präsidentin , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0526681
+[X][X] you [X][X] , [X] ||| [X][X] Sie [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0526681
+[X][X] you , [X][X] , [X] ||| [X][X] Sie , [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0526681
+[X][X] you , Madam [X][X] [X] ||| [X][X] Sie , Frau [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.0708499
+appropriate [X][X] , [X][X] , [X] ||| angemessen [X][X] , [X][X] , [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.027027
+appropriate [X][X] , Madam [X][X] [X] ||| angemessen [X][X] , Frau [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0452088
+appropriate [X][X] Madam President , [X] ||| angemessen [X][X] Frau Präsidentin , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.027027
+appropriate [X][X] Madam [X][X] [X] ||| angemessen [X][X] Frau [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0452088
+appropriate [X][X] President , [X] ||| angemessen [X][X] Präsidentin , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.027027
+appropriate [X][X] , [X][X] , [X] ||| angemessen , [X][X] , [X][X] , [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.027027
+appropriate [X][X] , Madam [X][X] [X] ||| angemessen , [X][X] , Frau [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-5 ||| 0.0452088
+appropriate [X][X] Madam President , [X] ||| angemessen , [X][X] Frau Präsidentin , [X] ||| 0.0182166 1 ||| 1-2 ||| 0.027027
+appropriate [X][X] Madam [X][X] [X] ||| angemessen , [X][X] Frau [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0452088
+appropriate [X][X] President , [X] ||| angemessen , [X][X] Präsidentin , [X] ||| 0.0182166 1 ||| 1-2 ||| 0.027027
+appropriate for [X][X] Madam [X][X] [X] ||| angemessen , wenn [X][X] Frau [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.0452088
+appropriate for [X][X] President , [X] ||| angemessen , wenn [X][X] Präsidentin , [X] ||| 0.0182166 1 ||| 2-3 ||| 0.027027
+appropriate for [X][X] , [X] ||| angemessen , wenn [X][X] , [X] ||| 0.0182166 1 ||| 2-3 ||| 0.027027
+appropriate for you [X][X] , [X] ||| angemessen , wenn Sie [X][X] , [X] ||| 0.0182166 1 ||| 3-4 ||| 0.027027
+[X][X] , Madam President , [X] ||| , [X][X] , Frau Präsidentin , der [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0263158
+[X][X] , [X][X] , [X] ||| , [X][X] , [X][X] , der [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0263158
+[X][X] , [X][X] [X] ||| , [X][X] , [X][X] der [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0263158
+[X][X] , Madam [X][X] [X] ||| , [X][X] , Frau [X][X] der [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0263158
+[X][X] Madam President , [X] ||| , [X][X] Frau Präsidentin , der [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0263158
+[X][X] Madam [X][X] [X] ||| , [X][X] Frau [X][X] der [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0263158
+[X][X] President , [X] ||| , [X][X] Präsidentin , der [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0263158
+[X][X] , [X] ||| , [X][X] , der [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0263158
+for [X][X] Madam President , [X] ||| , wenn [X][X] Frau Präsidentin , der [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0263158
+for [X][X] Madam [X][X] [X] ||| , wenn [X][X] Frau [X][X] der [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0263158
+for [X][X] President , [X] ||| , wenn [X][X] Präsidentin , der [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0263158
+for [X][X] , [X] ||| , wenn [X][X] , der [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0263158
+for [X][X] [X] ||| , wenn [X][X] der [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0263158
+for you [X][X] President , [X] ||| , wenn Sie [X][X] Präsidentin , der [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0263158
+for you [X][X] , [X] ||| , wenn Sie [X][X] , der [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0263158
+for you [X][X] [X] ||| , wenn Sie [X][X] der [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0263158
+for you , [X][X] , [X] ||| , wenn Sie , [X][X] , der [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0263158
+for you , [X][X] [X] ||| , wenn Sie , [X][X] der [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0263158
+for you , Madam [X][X] [X] ||| , wenn Sie , Frau [X][X] der [X] ||| 0.0182166 1 ||| 4-5 ||| 0.0263158
+[X][X] to the [X][X] President [X] ||| Präsidentin [X][X] [X][X] das [X] ||| 0.0182166 1 ||| 3-1 0-2 ||| 0.0666667
+[X][X] the [X][X] President [X] ||| Präsidentin [X][X] [X][X] das [X] ||| 0.0182166 1 ||| 2-1 0-2 ||| 0.0666667
+to [X][X] the [X][X] President [X] ||| Präsidentin [X][X] in [X][X] das [X] ||| 0.0182166 1 ||| 3-1 1-3 ||| 0.0666667
+[X][X] to the [X][X] President [X] ||| Präsidentin von [X][X] [X][X] das [X] ||| 0.0182166 1 ||| 3-2 0-3 ||| 0.0666667
+[X][X] the [X][X] President [X] ||| Präsidentin von [X][X] [X][X] das [X] ||| 0.0182166 1 ||| 2-2 0-3 ||| 0.0666667
+to [X][X] the [X][X] President [X] ||| Präsidentin von [X][X] in [X][X] das [X] ||| 0.0182166 1 ||| 3-2 1-4 ||| 0.0666667
+[X][X] the Sri Lankan President [X] ||| Präsidentin von Sri Lanka [X][X] das [X] ||| 0.0182166 1 ||| 0-4 ||| 0.0666667
+[X][X] Sri Lankan President [X] ||| Präsidentin von Sri Lanka [X][X] [X] ||| 0.0182166 1 ||| 0-4 ||| 0.0666667
+to [X][X] Sri Lankan President [X] ||| Präsidentin von Sri Lanka in [X][X] [X] ||| 0.0182166 1 ||| 1-5 ||| 0.0666667
+[X][X] and [X][X] violent deaths [X] ||| gewaltsamen Tod [X][X] und [X][X] Bürgern [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.2
+[X][X] the other violent deaths [X] ||| gewaltsamen Tod [X][X] anderen Bürgern [X] ||| 0.0182166 1 ||| 0-2 ||| 0.2
+[X][X] other violent deaths [X] ||| gewaltsamen Tod [X][X] anderen Bürgern [X] ||| 0.0182166 1 ||| 0-2 ||| 0.2
+[X][X] violent deaths [X] ||| gewaltsamen Tod [X][X] Bürgern [X] ||| 0.0182166 1 ||| 0-2 ||| 0.2
+at his [X][X] violent deaths [X] ||| gewaltsamen Tod von Herrn Ponnambalam [X][X] Bürgern [X] ||| 0.0182166 1 ||| 2-5 ||| 0.2
+in Sri Lanka and urging [X] ||| von Sri Lanka übermitteln und sie auffordern würden [X] ||| 0.0182166 1 ||| ||| 0.0666667
+[X][X] Lanka and urging [X] ||| [X][X] Lanka übermitteln und sie auffordern würden [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0666667
+[X][X] Lanka [X][X] [X] ||| [X][X] Lanka übermitteln [X][X] würden [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0666667
+in [X][X] and urging [X] ||| von [X][X] und sie auffordern würden [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+in [X][X] urging [X] ||| von [X][X] sie auffordern würden [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+in [X][X] [X] ||| von [X][X] würden [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+in Sri [X][X] urging [X] ||| von Sri [X][X] sie auffordern würden [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0666667
+in Sri [X][X] [X] ||| von Sri [X][X] würden [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0666667
+in Sri Lanka [X][X] [X] ||| von Sri Lanka übermitteln [X][X] würden [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0666667
+Sri Lanka and urging [X] ||| Sri Lanka übermitteln und sie auffordern würden , [X] ||| 0.0182166 1 ||| ||| 0.1
+[X][X] and urging [X] ||| [X][X] und sie auffordern würden , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.152632
+Sri [X][X] urging [X] ||| Sri [X][X] sie auffordern würden , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+Sri [X][X] [X] ||| Sri [X][X] würden , [X] ||| 0.00910828 1 ||| 1-1 ||| 0.2
+Sri [X][X] [X] ||| Sri [X][X] , [X] ||| 0.00910828 1 ||| 1-1 ||| 0.2
+Sri Lanka [X][X] [X] ||| Sri Lanka übermitteln [X][X] würden , [X] ||| 0.00910828 1 ||| 2-3 ||| 0.2
+Sri Lanka [X][X] [X] ||| Sri Lanka übermitteln [X][X] , [X] ||| 0.00910828 1 ||| 2-3 ||| 0.2
+her to do [X][X] possibly [X] ||| , [X][X] in ihrem Kräften stehende zu tun [X] ||| 0.0182166 1 ||| 3-1 ||| 0.25
+her to do everything [X][X] [X] ||| , alles in ihrem [X][X] stehende zu tun [X] ||| 0.00910828 1 ||| 4-4 ||| 1.5
+her to do everything [X][X] [X] ||| , alles in ihrem [X][X] zu tun [X] ||| 0.00910828 1 ||| 4-4 ||| 1.5
+[X][X] appropriate [X][X] Madam President [X] ||| [X][X] angemessen [X][X] Frau Präsidentin [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.030303
+[X][X] appropriate [X][X] President [X] ||| [X][X] angemessen [X][X] Präsidentin [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.030303
+[X][X] appropriate [X][X] Madam President [X] ||| [X][X] angemessen , [X][X] Frau Präsidentin [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.030303
+[X][X] appropriate [X][X] President [X] ||| [X][X] angemessen , [X][X] Präsidentin [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.030303
+[X][X] appropriate for [X][X] President [X] ||| [X][X] angemessen , wenn [X][X] Präsidentin [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.030303
+[X][X] for [X][X] Madam President [X] ||| [X][X] , wenn [X][X] Frau Präsidentin [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.030303
+[X][X] for [X][X] President [X] ||| [X][X] , wenn [X][X] Präsidentin [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.030303
+[X][X] for you [X][X] President [X] ||| [X][X] , wenn Sie [X][X] Präsidentin [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.030303
+[X][X] for you , [X][X] [X] ||| [X][X] , wenn Sie , [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-5 ||| 0.0559441
+[X][X] for [X][X] Madam President [X] ||| [X][X] wenn [X][X] Frau Präsidentin [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.030303
+[X][X] for [X][X] President [X] ||| [X][X] wenn [X][X] Präsidentin [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.030303
+[X][X] for you [X][X] President [X] ||| [X][X] wenn Sie [X][X] Präsidentin [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.030303
+[X][X] for you , [X][X] [X] ||| [X][X] wenn Sie , [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.0559441
+would it be [X][X] President [X] ||| wäre es [X][X] Präsidentin [X] ||| 0.0182166 1 ||| 3-2 ||| 0.030303
+[X][X] you [X][X] President , [X] ||| [X][X] Sie [X][X] Präsidentin , der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0181818
+[X][X] you [X][X] , [X] ||| [X][X] Sie [X][X] , der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0181818
+[X][X] you [X][X] [X] ||| [X][X] Sie [X][X] der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0181818
+[X][X] you , [X][X] , [X] ||| [X][X] Sie , [X][X] , der [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0181818
+[X][X] you , [X][X] [X] ||| [X][X] Sie , [X][X] der [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0181818
+[X][X] you , Madam [X][X] [X] ||| [X][X] Sie , Frau [X][X] der [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.0181818
+appropriate [X][X] , [X][X] , [X] ||| angemessen [X][X] , [X][X] , der [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0181818
+appropriate [X][X] , [X][X] [X] ||| angemessen [X][X] , [X][X] der [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0181818
+appropriate [X][X] , Madam [X][X] [X] ||| angemessen [X][X] , Frau [X][X] der [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0181818
+appropriate [X][X] Madam President , [X] ||| angemessen [X][X] Frau Präsidentin , der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0181818
+appropriate [X][X] Madam [X][X] [X] ||| angemessen [X][X] Frau [X][X] der [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0181818
+appropriate [X][X] President , [X] ||| angemessen [X][X] Präsidentin , der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0181818
+appropriate [X][X] , [X] ||| angemessen [X][X] , der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0181818
+appropriate [X][X] [X] ||| angemessen [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0181818
+appropriate [X][X] , [X][X] , [X] ||| angemessen , [X][X] , [X][X] , der [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0181818
+appropriate [X][X] , [X][X] [X] ||| angemessen , [X][X] , [X][X] der [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0181818
+appropriate [X][X] , Madam [X][X] [X] ||| angemessen , [X][X] , Frau [X][X] der [X] ||| 0.0182166 1 ||| 1-2 4-5 ||| 0.0181818
+appropriate [X][X] Madam President , [X] ||| angemessen , [X][X] Frau Präsidentin , der [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0181818
+appropriate [X][X] Madam [X][X] [X] ||| angemessen , [X][X] Frau [X][X] der [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0181818
+appropriate [X][X] President , [X] ||| angemessen , [X][X] Präsidentin , der [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0181818
+appropriate [X][X] , [X] ||| angemessen , [X][X] , der [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0181818
+appropriate [X][X] [X] ||| angemessen , [X][X] der [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0181818
+appropriate for [X][X] Madam [X][X] [X] ||| angemessen , wenn [X][X] Frau [X][X] der [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.0181818
+appropriate for [X][X] President , [X] ||| angemessen , wenn [X][X] Präsidentin , der [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0181818
+appropriate for [X][X] , [X] ||| angemessen , wenn [X][X] , der [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0181818
+appropriate for [X][X] [X] ||| angemessen , wenn [X][X] der [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0181818
+appropriate for you [X][X] , [X] ||| angemessen , wenn Sie [X][X] , der [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0181818
+appropriate for you [X][X] [X] ||| angemessen , wenn Sie [X][X] der [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0181818
+appropriate for you , [X][X] [X] ||| angemessen , wenn Sie , [X][X] der [X] ||| 0.0182166 1 ||| 4-5 ||| 0.0181818
+[X][X] to the [X][X] [X] ||| der [X][X] [X][X] das [X] ||| 0.0182166 1 ||| 3-1 0-2 ||| 0.0526316
+[X][X] the [X][X] [X] ||| der [X][X] [X][X] das [X] ||| 0.0182166 1 ||| 2-1 0-2 ||| 0.0526316
+to [X][X] to the [X][X] [X] ||| der [X][X] in [X][X] das [X] ||| 0.0182166 1 ||| 4-1 1-3 ||| 0.0526316
+to [X][X] the [X][X] [X] ||| der [X][X] in [X][X] das [X] ||| 0.0182166 1 ||| 3-1 1-3 ||| 0.0526316
+[X][X] to the [X][X] President [X] ||| der Präsidentin [X][X] [X][X] das [X] ||| 0.0182166 1 ||| 3-2 0-3 ||| 0.0526316
+[X][X] the [X][X] President [X] ||| der Präsidentin [X][X] [X][X] das [X] ||| 0.0182166 1 ||| 2-2 0-3 ||| 0.0526316
+to [X][X] the [X][X] President [X] ||| der Präsidentin [X][X] in [X][X] das [X] ||| 0.0182166 1 ||| 3-2 1-4 ||| 0.0526316
+[X][X] to the [X][X] President [X] ||| der Präsidentin von [X][X] [X][X] das [X] ||| 0.0182166 1 ||| 3-3 0-4 ||| 0.0526316
+[X][X] the [X][X] President [X] ||| der Präsidentin von [X][X] [X][X] das [X] ||| 0.0182166 1 ||| 2-3 0-4 ||| 0.0526316
+to [X][X] the [X][X] President [X] ||| der Präsidentin von [X][X] in [X][X] das [X] ||| 0.0182166 1 ||| 3-3 1-5 ||| 0.0526316
+[X][X] the Sri Lankan President [X] ||| der Präsidentin von Sri Lanka [X][X] das [X] ||| 0.0182166 1 ||| 0-5 ||| 0.0526316
+[X][X] Sri Lankan President [X] ||| der Präsidentin von Sri Lanka [X][X] [X] ||| 0.0182166 1 ||| 0-5 ||| 0.0526316
+to [X][X] Sri Lankan President [X] ||| der Präsidentin von Sri Lanka in [X][X] [X] ||| 0.0182166 1 ||| 1-6 ||| 0.0526316
+[X][X] in [X] ||| [X][X] von [X] ||| 0.0182166 1 ||| 0-0 ||| 0.333333
+[X][X] other violent deaths in [X] ||| gewaltsamen Tod [X][X] anderen Bürgern von [X] ||| 0.0182166 1 ||| 0-2 ||| 0.333333
+[X][X] violent deaths in [X] ||| gewaltsamen Tod [X][X] Bürgern von [X] ||| 0.0182166 1 ||| 0-2 ||| 0.333333
+in Sri Lanka and urging [X] ||| von Sri Lanka übermitteln und sie auffordern würden , [X] ||| 0.0182166 1 ||| ||| 0.0526316
+[X][X] Lanka and urging [X] ||| [X][X] Lanka übermitteln und sie auffordern würden , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0526316
+[X][X] Lanka [X][X] [X] ||| [X][X] Lanka übermitteln [X][X] würden , [X] ||| 0.00910828 1 ||| 0-0 2-3 ||| 0.105263
+[X][X] Lanka [X][X] [X] ||| [X][X] Lanka übermitteln [X][X] , [X] ||| 0.00910828 1 ||| 0-0 2-3 ||| 0.105263
+in [X][X] and urging [X] ||| von [X][X] und sie auffordern würden , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+in [X][X] urging [X] ||| von [X][X] sie auffordern würden , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+in [X][X] [X] ||| von [X][X] würden , [X] ||| 0.00910828 1 ||| 1-1 ||| 0.105263
+in [X][X] [X] ||| von [X][X] , [X] ||| 0.00910828 1 ||| 1-1 ||| 0.105263
+in Sri [X][X] urging [X] ||| von Sri [X][X] sie auffordern würden , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+in Sri [X][X] [X] ||| von Sri [X][X] würden , [X] ||| 0.00910828 1 ||| 2-2 ||| 0.105263
+in Sri [X][X] [X] ||| von Sri [X][X] , [X] ||| 0.00910828 1 ||| 2-2 ||| 0.105263
+in Sri Lanka [X][X] [X] ||| von Sri Lanka übermitteln [X][X] würden , [X] ||| 0.00910828 1 ||| 3-4 ||| 0.105263
+in Sri Lanka [X][X] [X] ||| von Sri Lanka übermitteln [X][X] , [X] ||| 0.00910828 1 ||| 3-4 ||| 0.105263
+her to do [X][X] possibly [X] ||| würden [X][X] in ihrem Kräften stehende zu tun [X] ||| 0.00910828 1 ||| 3-1 ||| 0.4
+her to do [X][X] possibly [X] ||| würden , [X][X] in ihrem Kräften stehende zu tun [X] ||| 0.00910828 1 ||| 3-2 ||| 0.4
+her to do everything [X][X] [X] ||| würden , alles in ihrem [X][X] stehende zu tun [X] ||| 0.00910828 1 ||| 4-5 ||| 1.4
+her to do everything [X][X] [X] ||| würden , alles in ihrem [X][X] zu tun [X] ||| 0.00910828 1 ||| 4-5 ||| 1.4
+[X][X] appropriate [X][X] President , [X] ||| [X][X] angemessen [X][X] Präsidentin , [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.051282
+[X][X] appropriate [X][X] President , [X] ||| [X][X] angemessen , [X][X] Präsidentin , [X] ||| 0.00910828 1 ||| 0-0 2-3 ||| 0.051282
+[X][X] appropriate for [X][X] , [X] ||| [X][X] angemessen , wenn [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.025641
+[X][X] for [X][X] President , [X] ||| [X][X] , wenn [X][X] Präsidentin , [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.025641
+[X][X] for [X][X] , [X] ||| [X][X] , wenn [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.025641
+[X][X] for you [X][X] , [X] ||| [X][X] , wenn Sie [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.025641
+[X][X] for [X][X] President , [X] ||| [X][X] wenn [X][X] Präsidentin , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.025641
+[X][X] for [X][X] , [X] ||| [X][X] wenn [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.025641
+[X][X] for you [X][X] , [X] ||| [X][X] wenn Sie [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.025641
+, [X][X] to the [X][X] [X] ||| , [X][X] [X][X] das [X] ||| 0.0182166 1 ||| 4-1 1-2 ||| 0.0769231
+, [X][X] the [X][X] [X] ||| , [X][X] [X][X] das [X] ||| 0.0182166 1 ||| 3-1 1-2 ||| 0.0769231
+, to [X][X] the [X][X] [X] ||| , [X][X] in [X][X] das [X] ||| 0.0182166 1 ||| 4-1 2-3 ||| 0.0769231
+, [X][X] to the [X][X] [X] ||| , der [X][X] [X][X] das [X] ||| 0.0182166 1 ||| 4-2 1-3 ||| 0.0769231
+, [X][X] the [X][X] [X] ||| , der [X][X] [X][X] das [X] ||| 0.0182166 1 ||| 3-2 1-3 ||| 0.0769231
+, to [X][X] the [X][X] [X] ||| , der [X][X] in [X][X] das [X] ||| 0.0182166 1 ||| 4-2 2-4 ||| 0.0769231
+, [X][X] [X] ||| , der [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0769231
+, [X][X] the [X][X] President [X] ||| , der Präsidentin [X][X] [X][X] das [X] ||| 0.0182166 1 ||| 3-3 1-4 ||| 0.0769231
+, [X][X] President [X] ||| , der Präsidentin [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0769231
+, [X][X] the [X][X] President [X] ||| , der Präsidentin von [X][X] [X][X] das [X] ||| 0.0182166 1 ||| 3-4 1-5 ||| 0.0769231
+, [X][X] President [X] ||| , der Präsidentin von [X][X] [X] ||| 0.0182166 1 ||| 1-4 ||| 0.0769231
+, [X][X] Sri Lankan President [X] ||| , der Präsidentin von Sri Lanka [X][X] [X] ||| 0.0182166 1 ||| 1-6 ||| 0.0769231
+[X][X] in Sri [X] ||| [X][X] von Sri [X] ||| 0.0182166 1 ||| 0-0 ||| 0.2
+[X][X] Sri [X] ||| [X][X] Sri [X] ||| 0.0182166 1 ||| 0-0 ||| 0.2
+[X][X] other violent deaths [X][X] [X] ||| gewaltsamen Tod [X][X] anderen Bürgern [X][X] [X] ||| 0.0182166 1 ||| 0-2 4-5 ||| 0.2
+[X][X] violent deaths in Sri [X] ||| gewaltsamen Tod [X][X] Bürgern von Sri [X] ||| 0.0182166 1 ||| 0-2 ||| 0.2
+[X][X] violent deaths [X][X] [X] ||| gewaltsamen Tod [X][X] Bürgern [X][X] [X] ||| 0.0182166 1 ||| 0-2 3-4 ||| 0.2
+yes [X] ||| ja [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| , [X] ||| 0.218091 1 ||| ||| 2
+Mr [X] ||| Herr [X] ||| 0.0182166 1 ||| ||| 1
+Evans [X] ||| Evans [X] ||| 0.0182166 1 ||| ||| 1
+I [X] ||| ich [X] ||| 0.0182166 1 ||| ||| 1
+an [X] ||| eine [X] ||| 0.0182166 1 ||| ||| 1
+the type [X] ||| derartige [X] ||| 0.0182166 1 ||| ||| 1
+the type you [X] ||| derartige [X] ||| 0.0182166 1 ||| ||| 1
+the type you have [X] ||| derartige [X] ||| 0.0182166 1 ||| ||| 1
+the type you have just [X] ||| derartige [X] ||| 0.0182166 1 ||| ||| 1
+of the type [X] ||| derartige [X] ||| 0.0182166 1 ||| ||| 1
+of the type you [X] ||| derartige [X] ||| 0.0182166 1 ||| ||| 1
+of the type you have [X] ||| derartige [X] ||| 0.0182166 1 ||| ||| 1
+initiative [X] ||| Initiative [X] ||| 0.0182166 1 ||| ||| 1
+initiative of [X] ||| Initiative [X] ||| 0.0182166 1 ||| ||| 1
+entirely [X] ||| durchaus [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+yes , [X] ||| ja , [X] ||| 0.0182166 1 ||| ||| 1
+, Mr [X] ||| , Herr [X] ||| 0.0182166 1 ||| ||| 1
+Mr Evans [X] ||| Herr Evans [X] ||| 0.0182166 1 ||| ||| 1
+Evans , [X] ||| Evans , [X] ||| 0.0182166 1 ||| ||| 1
+, I [X] ||| , ich [X] ||| 0.0182166 1 ||| ||| 1
+initiative of the type [X] ||| derartige Initiative [X] ||| 0.0182166 1 ||| ||| 0.25
+initiative of [X][X] [X] ||| [X][X] Initiative [X] ||| 0.0182166 1 ||| 2-0 ||| 0.845238
+initiative [X][X] [X] ||| [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-0 ||| 0.845238
+[X][X] the type [X] ||| derartige [X][X] [X] ||| 0.0182166 1 ||| 0-1 ||| 0.25
+initiative of the type you [X] ||| derartige Initiative [X] ||| 0.0182166 1 ||| ||| 0.166667
+initiative of [X][X] you [X] ||| [X][X] Initiative [X] ||| 0.0182166 1 ||| 2-0 ||| 0.166667
+initiative [X][X] you [X] ||| [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-0 ||| 0.166667
+[X][X] the type you [X] ||| derartige [X][X] [X] ||| 0.0182166 1 ||| 0-1 ||| 0.166667
+initiative of [X][X] you have [X] ||| [X][X] Initiative [X] ||| 0.0182166 1 ||| 2-0 ||| 0.142857
+initiative of [X][X] have [X] ||| [X][X] Initiative [X] ||| 0.0182166 1 ||| 2-0 ||| 0.142857
+initiative [X][X] you have [X] ||| [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-0 ||| 0.142857
+initiative [X][X] have [X] ||| [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-0 ||| 0.142857
+[X][X] the type you have [X] ||| derartige [X][X] [X] ||| 0.0182166 1 ||| 0-1 ||| 0.142857
+initiative of [X][X] have just [X] ||| [X][X] Initiative [X] ||| 0.0182166 1 ||| 2-0 ||| 0.142857
+initiative of [X][X] just [X] ||| [X][X] Initiative [X] ||| 0.0182166 1 ||| 2-0 ||| 0.142857
+initiative [X][X] you have just [X] ||| [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-0 ||| 0.142857
+initiative [X][X] have just [X] ||| [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-0 ||| 0.142857
+initiative [X][X] just [X] ||| [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-0 ||| 0.142857
+initiative of [X][X] just suggested [X] ||| [X][X] Initiative [X] ||| 0.0182166 1 ||| 2-0 ||| 0.142857
+initiative of [X][X] suggested [X] ||| [X][X] Initiative [X] ||| 0.0182166 1 ||| 2-0 ||| 0.142857
+initiative [X][X] have just suggested [X] ||| [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-0 ||| 0.142857
+initiative [X][X] just suggested [X] ||| [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-0 ||| 0.142857
+initiative [X][X] suggested [X] ||| [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-0 ||| 0.142857
+yes , Mr [X] ||| ja , Herr [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] Mr [X] ||| [X][X] Herr [X] ||| 0.0182166 1 ||| 0-0 ||| 0.333333
+yes [X][X] [X] ||| ja [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.703664
+, Mr Evans [X] ||| , Herr Evans [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] Evans [X] ||| [X][X] Evans [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+, [X][X] [X] ||| , [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.29667
+Mr Evans , [X] ||| Herr Evans , [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] , [X] ||| [X][X] , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.590909
+Mr [X][X] [X] ||| Herr [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.675799
+Evans , I [X] ||| Evans , ich [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] I [X] ||| [X][X] ich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.643541
+Evans [X][X] [X] ||| Evans [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.657936
+feel [X] ||| denke , daß [X] ||| 0.0182166 1 ||| ||| 1
+an initiative of the type [X] ||| eine derartige Initiative [X] ||| 0.0182166 1 ||| ||| 0.2
+an initiative of [X][X] [X] ||| eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 3-1 ||| 0.690079
+an initiative [X][X] [X] ||| eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 2-1 ||| 0.690079
+an [X][X] [X] ||| eine [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.690079
+an [X][X] the type [X] ||| eine derartige [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.2
+an initiative of [X][X] you [X] ||| eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 3-1 ||| 0.142857
+an initiative [X][X] you [X] ||| eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 2-1 ||| 0.142857
+an [X][X] you [X] ||| eine [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+an [X][X] the type you [X] ||| eine derartige [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.142857
+an initiative of [X][X] have [X] ||| eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 3-1 ||| 0.125
+an initiative [X][X] you have [X] ||| eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+an initiative [X][X] have [X] ||| eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+an [X][X] you have [X] ||| eine [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+an [X][X] have [X] ||| eine [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+an initiative of [X][X] just [X] ||| eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 3-1 ||| 0.111111
+an initiative [X][X] have just [X] ||| eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 2-1 ||| 0.111111
+an initiative [X][X] just [X] ||| eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 2-1 ||| 0.111111
+an [X][X] you have just [X] ||| eine [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+an [X][X] have just [X] ||| eine [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+an [X][X] just [X] ||| eine [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+an initiative of [X][X] suggested [X] ||| eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 3-1 ||| 0.111111
+an initiative [X][X] just suggested [X] ||| eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 2-1 ||| 0.111111
+an initiative [X][X] suggested [X] ||| eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 2-1 ||| 0.111111
+an [X][X] have just suggested [X] ||| eine [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+an [X][X] just suggested [X] ||| eine [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+an [X][X] suggested [X] ||| eine [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+would be entirely appropriate [X] ||| durchaus angebracht ist [X] ||| 0.0182166 1 ||| ||| 1
+suggested would be entirely appropriate [X] ||| durchaus angebracht ist [X] ||| 0.0182166 1 ||| ||| 1
+yes , Mr Evans [X] ||| ja , Herr Evans [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] Mr Evans [X] ||| [X][X] Herr Evans [X] ||| 0.0182166 1 ||| 0-0 ||| 0.166667
+yes [X][X] Evans [X] ||| ja [X][X] Evans [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+yes , [X][X] [X] ||| ja , [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.370331
+, Mr Evans , [X] ||| , Herr Evans , [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] Evans , [X] ||| [X][X] Evans , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.257576
+, [X][X] , [X] ||| , [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+, Mr [X][X] [X] ||| , Herr [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.34469
+Mr Evans , I [X] ||| Herr Evans , ich [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] , I [X] ||| [X][X] , ich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.310207
+Mr [X][X] I [X] ||| Herr [X][X] ich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+Mr Evans [X][X] [X] ||| Herr Evans [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.342465
+I feel [X] ||| ich denke , daß [X] ||| 0.0182166 1 ||| ||| 1
+feel an [X] ||| denke , daß eine [X] ||| 0.0182166 1 ||| ||| 1
+would be entirely appropriate . [X] ||| durchaus angebracht ist . [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] . [X] ||| [X][X] . [X] ||| 0.218091 1 ||| 0-0 ||| 1.83333
+suggested [X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 1-0 ||| 0.5
+just suggested [X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 2-0 ||| 0.333333
+just [X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 1-0 ||| 0.333333
+have just suggested [X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 3-0 ||| 0.25
+have just [X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 2-0 ||| 0.25
+have [X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+you have just [X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 3-0 ||| 0.25
+you have [X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 2-0 ||| 0.25
+you [X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+yes , Mr Evans , [X] ||| ja , Herr Evans , [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] Mr Evans , [X] ||| [X][X] Herr Evans , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0909091
+[X][X] Mr [X][X] [X] ||| [X][X] Herr [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.203664
+yes [X][X] Evans , [X] ||| ja [X][X] Evans , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+yes [X][X] , [X] ||| ja [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+yes , [X][X] , [X] ||| ja , [X][X] , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+yes , Mr [X][X] [X] ||| ja , Herr [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.203664
+, Mr Evans , I [X] ||| , Herr Evans , ich [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] Evans , I [X] ||| [X][X] Evans , ich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.143541
+[X][X] Evans [X][X] [X] ||| [X][X] Evans [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.290779
+, [X][X] , I [X] ||| , [X][X] , ich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+, [X][X] I [X] ||| , [X][X] ich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+, Mr [X][X] I [X] ||| , Herr [X][X] ich [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+, Mr Evans [X][X] [X] ||| , Herr Evans [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.178023
+, I feel [X] ||| , ich denke , daß [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] feel [X] ||| [X][X] denke , daß [X] ||| 0.0182166 1 ||| 0-0 ||| 0.678023
+I feel an [X] ||| ich denke , daß eine [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] an [X] ||| [X][X] eine [X] ||| 0.0182166 1 ||| 0-0 ||| 0.703664
+I [X][X] [X] ||| ich [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.548033
+[X][X] Mr Evans , I [X] ||| [X][X] Herr Evans , ich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0526316
+[X][X] Mr [X][X] I [X] ||| [X][X] Herr [X][X] ich [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0526316
+[X][X] Mr Evans [X][X] [X] ||| [X][X] Herr Evans [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.112755
+yes [X][X] Evans , I [X] ||| ja [X][X] Evans , ich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+yes [X][X] Evans [X][X] [X] ||| ja [X][X] Evans [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.112755
+yes [X][X] , I [X] ||| ja [X][X] , ich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+yes [X][X] I [X] ||| ja [X][X] ich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+yes , [X][X] , I [X] ||| ja , [X][X] , ich [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+yes , [X][X] I [X] ||| ja , [X][X] ich [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+yes , Mr [X][X] I [X] ||| ja , Herr [X][X] ich [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0526316
+yes , Mr Evans [X][X] [X] ||| ja , Herr Evans [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.112755
+Evans , I feel [X] ||| Evans , ich denke , daß [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] I feel [X] ||| [X][X] ich denke , daß [X] ||| 0.0182166 1 ||| 0-0 ||| 0.34469
+Evans [X][X] feel [X] ||| Evans [X][X] denke , daß [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+Evans , [X][X] [X] ||| Evans , [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.324603
+, I feel an [X] ||| , ich denke , daß eine [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] feel an [X] ||| [X][X] denke , daß eine [X] ||| 0.0182166 1 ||| 0-0 ||| 0.370331
+, [X][X] an [X] ||| , [X][X] eine [X] ||| 0.0182166 1 ||| 1-1 ||| 0.201149
+, I [X][X] [X] ||| , ich [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.285316
+[X][X] initiative of the type [X] ||| [X][X] derartige Initiative [X] ||| 0.0182166 1 ||| 0-0 ||| 0.326813
+[X][X] initiative of [X][X] [X] ||| [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 0-0 3-1 ||| 0.853305
+[X][X] initiative [X][X] [X] ||| [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.853305
+feel [X][X] [X] ||| denke , daß [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.420671
+feel an initiative of [X][X] [X] ||| denke , daß eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 4-4 ||| 0.420671
+feel an initiative [X][X] [X] ||| denke , daß eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 3-4 ||| 0.420671
+feel an [X][X] [X] ||| denke , daß eine [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.420671
+feel an [X][X] the type [X] ||| denke , daß eine derartige [X][X] [X] ||| 0.0182166 1 ||| 2-5 ||| 0.125
+[X][X] initiative of [X][X] you [X] ||| [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 0-0 3-1 ||| 0.206282
+[X][X] initiative [X][X] you [X] ||| [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.206282
+feel [X][X] you [X] ||| denke , daß [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0909091
+feel an initiative [X][X] you [X] ||| denke , daß eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0909091
+feel an [X][X] you [X] ||| denke , daß eine [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0909091
+[X][X] initiative of [X][X] have [X] ||| [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 0-0 3-1 ||| 0.14521
+[X][X] initiative [X][X] you have [X] ||| [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.14521
+[X][X] initiative [X][X] have [X] ||| [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.14521
+feel [X][X] you have [X] ||| denke , daß [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0714286
+feel [X][X] have [X] ||| denke , daß [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0714286
+feel an initiative [X][X] have [X] ||| denke , daß eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0714286
+feel an [X][X] you have [X] ||| denke , daß eine [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0714286
+feel an [X][X] have [X] ||| denke , daß eine [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0714286
+[X][X] initiative of [X][X] just [X] ||| [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 0-0 3-1 ||| 0.108333
+[X][X] initiative [X][X] have just [X] ||| [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.108333
+[X][X] initiative [X][X] just [X] ||| [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.108333
+feel [X][X] you have just [X] ||| denke , daß [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0666667
+feel [X][X] have just [X] ||| denke , daß [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0666667
+feel [X][X] just [X] ||| denke , daß [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0666667
+feel an initiative [X][X] just [X] ||| denke , daß eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0666667
+feel an [X][X] have just [X] ||| denke , daß eine [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0666667
+feel an [X][X] just [X] ||| denke , daß eine [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0666667
+[X][X] initiative of [X][X] suggested [X] ||| [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 0-0 3-1 ||| 0.0666667
+[X][X] initiative [X][X] just suggested [X] ||| [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.0666667
+[X][X] initiative [X][X] suggested [X] ||| [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.0666667
+feel [X][X] have just suggested [X] ||| denke , daß [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0666667
+feel [X][X] just suggested [X] ||| denke , daß [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0666667
+feel [X][X] suggested [X] ||| denke , daß [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0666667
+feel an initiative [X][X] suggested [X] ||| denke , daß eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0666667
+feel an [X][X] just suggested [X] ||| denke , daß eine [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0666667
+feel an [X][X] suggested [X] ||| denke , daß eine [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0666667
+Mr Evans , I feel [X] ||| Herr Evans , ich denke , daß [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] , I feel [X] ||| [X][X] , ich denke , daß [X] ||| 0.0182166 1 ||| 0-0 ||| 0.178023
+[X][X] , [X][X] [X] ||| [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.323037
+Mr [X][X] I feel [X] ||| Herr [X][X] ich denke , daß [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+Mr [X][X] feel [X] ||| Herr [X][X] denke , daß [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+Mr Evans [X][X] feel [X] ||| Herr Evans [X][X] denke , daß [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+Mr Evans , [X][X] [X] ||| Herr Evans , [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.175799
+Evans , I feel an [X] ||| Evans , ich denke , daß eine [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] I feel an [X] ||| [X][X] ich denke , daß eine [X] ||| 0.0182166 1 ||| 0-0 ||| 0.203664
+[X][X] I [X][X] [X] ||| [X][X] ich [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.30295
+Evans [X][X] feel an [X] ||| Evans [X][X] denke , daß eine [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+Evans [X][X] an [X] ||| Evans [X][X] eine [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+Evans , [X][X] an [X] ||| Evans , [X][X] eine [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+Evans , I [X][X] [X] ||| Evans , ich [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.157936
+[X][X] an initiative of [X][X] [X] ||| [X][X] eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 0-0 4-2 ||| 0.432634
+[X][X] an initiative [X][X] [X] ||| [X][X] eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.432634
+[X][X] an [X][X] [X] ||| [X][X] eine [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.432634
+[X][X] an [X][X] the type [X] ||| [X][X] eine derartige [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.201813
+I [X][X] initiative of [X][X] [X] ||| ich [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-1 4-2 ||| 0.2147
+I [X][X] initiative [X][X] [X] ||| ich [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.2147
+I feel [X][X] [X] ||| ich denke , daß [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.2147
+I feel an initiative [X][X] [X] ||| ich denke , daß eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 4-5 ||| 0.2147
+I feel an [X][X] [X] ||| ich denke , daß eine [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.2147
+[X][X] an initiative [X][X] you [X] ||| [X][X] eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.115373
+[X][X] an [X][X] you [X] ||| [X][X] eine [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.115373
+I [X][X] initiative [X][X] you [X] ||| ich [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0526316
+I [X][X] you [X] ||| ich [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+I feel [X][X] you [X] ||| ich denke , daß [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0526316
+I feel an [X][X] you [X] ||| ich denke , daß eine [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0526316
+[X][X] an initiative [X][X] have [X] ||| [X][X] eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0737813
+[X][X] an [X][X] you have [X] ||| [X][X] eine [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0737813
+[X][X] an [X][X] have [X] ||| [X][X] eine [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0737813
+I [X][X] initiative [X][X] have [X] ||| ich [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0434783
+I [X][X] you have [X] ||| ich [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0434783
+I [X][X] have [X] ||| ich [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0434783
+I feel [X][X] you have [X] ||| ich denke , daß [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0434783
+I feel [X][X] have [X] ||| ich denke , daß [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0434783
+I feel an [X][X] have [X] ||| ich denke , daß eine [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0434783
+[X][X] an initiative [X][X] just [X] ||| [X][X] eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0416667
+[X][X] an [X][X] have just [X] ||| [X][X] eine [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0416667
+[X][X] an [X][X] just [X] ||| [X][X] eine [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0416667
+I [X][X] initiative [X][X] just [X] ||| ich [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0416667
+I [X][X] you have just [X] ||| ich [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0416667
+I [X][X] have just [X] ||| ich [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0416667
+I [X][X] just [X] ||| ich [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0416667
+I feel [X][X] have just [X] ||| ich denke , daß [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0416667
+I feel [X][X] just [X] ||| ich denke , daß [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0416667
+I feel an [X][X] just [X] ||| ich denke , daß eine [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0416667
+[X][X] Evans , I feel [X] ||| [X][X] Evans , ich denke , daß [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0871143
+[X][X] Evans [X][X] feel [X] ||| [X][X] Evans [X][X] denke , daß [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0871143
+[X][X] Evans , [X][X] [X] ||| [X][X] Evans , [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.147238
+, [X][X] , I feel [X] ||| , [X][X] , ich denke , daß [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+, [X][X] , [X][X] [X] ||| , [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0871143
+, [X][X] I feel [X] ||| , [X][X] ich denke , daß [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+, [X][X] feel [X] ||| , [X][X] denke , daß [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+, Mr [X][X] I feel [X] ||| , Herr [X][X] ich denke , daß [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+, Mr [X][X] feel [X] ||| , Herr [X][X] denke , daß [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+, Mr Evans [X][X] feel [X] ||| , Herr Evans [X][X] denke , daß [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0526316
+, Mr Evans , [X][X] [X] ||| , Herr Evans , [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.0871143
+[X][X] , I feel an [X] ||| [X][X] , ich denke , daß eine [X] ||| 0.0182166 1 ||| 0-0 ||| 0.112755
+[X][X] , [X][X] an [X] ||| [X][X] , [X][X] eine [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.112755
+[X][X] , I [X][X] [X] ||| [X][X] , ich [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.145013
+Mr [X][X] I feel an [X] ||| Herr [X][X] ich denke , daß eine [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+Mr [X][X] I [X][X] [X] ||| Herr [X][X] ich [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0848896
+Mr [X][X] feel an [X] ||| Herr [X][X] denke , daß eine [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+Mr [X][X] an [X] ||| Herr [X][X] eine [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+Mr Evans [X][X] feel an [X] ||| Herr Evans [X][X] denke , daß eine [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+Mr Evans [X][X] an [X] ||| Herr Evans [X][X] eine [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+Mr Evans , [X][X] an [X] ||| Herr Evans , [X][X] eine [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0526316
+Mr Evans , I [X][X] [X] ||| Herr Evans , ich [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.0848896
+[X][X] feel [X][X] [X] ||| [X][X] denke , daß [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.217934
+[X][X] feel an initiative [X][X] [X] ||| [X][X] denke , daß eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 0-0 4-5 ||| 0.217934
+[X][X] feel an [X][X] [X] ||| [X][X] denke , daß eine [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.217934
+, [X][X] an initiative [X][X] [X] ||| , [X][X] eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.118649
+, [X][X] an [X][X] [X] ||| , [X][X] eine [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.118649
+, [X][X] initiative of [X][X] [X] ||| , [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-1 4-2 ||| 0.118649
+, [X][X] initiative [X][X] [X] ||| , [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.118649
+, I [X][X] initiative [X][X] [X] ||| , ich [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.118649
+, I feel [X][X] [X] ||| , ich denke , daß [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.118649
+, I feel an [X][X] [X] ||| , ich denke , daß eine [X][X] [X] ||| 0.0182166 1 ||| 4-6 ||| 0.118649
+[X][X] feel [X][X] you [X] ||| [X][X] denke , daß [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.0627413
+[X][X] feel an [X][X] you [X] ||| [X][X] denke , daß eine [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.0627413
+, [X][X] an [X][X] you [X] ||| , [X][X] eine [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0357143
+, [X][X] initiative [X][X] you [X] ||| , [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0357143
+, [X][X] you [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+, I [X][X] you [X] ||| , ich [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0357143
+, I feel [X][X] you [X] ||| , ich denke , daß [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0357143
+[X][X] feel [X][X] you have [X] ||| [X][X] denke , daß [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.030303
+[X][X] feel [X][X] have [X] ||| [X][X] denke , daß [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.030303
+[X][X] feel an [X][X] have [X] ||| [X][X] denke , daß eine [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.030303
+, [X][X] an [X][X] have [X] ||| , [X][X] eine [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.030303
+, [X][X] initiative [X][X] have [X] ||| , [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.030303
+, [X][X] you have [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.030303
+, [X][X] have [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.030303
+, I [X][X] you have [X] ||| , ich [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.030303
+, I [X][X] have [X] ||| , ich [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.030303
+, I feel [X][X] have [X] ||| , ich denke , daß [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.030303
+[X][X] Mr [X][X] I feel [X] ||| [X][X] Herr [X][X] ich denke , daß [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0344828
+[X][X] Mr [X][X] feel [X] ||| [X][X] Herr [X][X] denke , daß [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0344828
+[X][X] Mr Evans [X][X] feel [X] ||| [X][X] Herr Evans [X][X] denke , daß [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0344828
+[X][X] Mr Evans , [X][X] [X] ||| [X][X] Herr Evans , [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.0601238
+yes [X][X] Evans [X][X] feel [X] ||| ja [X][X] Evans [X][X] denke , daß [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0344828
+yes [X][X] Evans , [X][X] [X] ||| ja [X][X] Evans , [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0601238
+yes [X][X] , I feel [X] ||| ja [X][X] , ich denke , daß [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+yes [X][X] , [X][X] [X] ||| ja [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0601238
+yes [X][X] I feel [X] ||| ja [X][X] ich denke , daß [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+yes [X][X] feel [X] ||| ja [X][X] denke , daß [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+yes , [X][X] , [X][X] [X] ||| ja , [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0601238
+yes , [X][X] I feel [X] ||| ja , [X][X] ich denke , daß [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0344828
+yes , [X][X] feel [X] ||| ja , [X][X] denke , daß [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0344828
+yes , Mr [X][X] feel [X] ||| ja , Herr [X][X] denke , daß [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0344828
+[X][X] Evans [X][X] feel an [X] ||| [X][X] Evans [X][X] denke , daß eine [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0601238
+[X][X] Evans [X][X] an [X] ||| [X][X] Evans [X][X] eine [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0601238
+[X][X] Evans , [X][X] an [X] ||| [X][X] Evans , [X][X] eine [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0601238
+[X][X] Evans , I [X][X] [X] ||| [X][X] Evans , ich [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.0601238
+, [X][X] , [X][X] an [X] ||| , [X][X] , [X][X] eine [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0344828
+, [X][X] , I [X][X] [X] ||| , [X][X] , ich [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0344828
+, [X][X] I feel an [X] ||| , [X][X] ich denke , daß eine [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+, [X][X] I [X][X] [X] ||| , [X][X] ich [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0344828
+, [X][X] feel an [X] ||| , [X][X] denke , daß eine [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+, Mr [X][X] I [X][X] [X] ||| , Herr [X][X] ich [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0344828
+, Mr [X][X] feel an [X] ||| , Herr [X][X] denke , daß eine [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0344828
+, Mr [X][X] an [X] ||| , Herr [X][X] eine [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0344828
+, Mr Evans [X][X] an [X] ||| , Herr Evans [X][X] eine [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0344828
+[X][X] I feel [X][X] [X] ||| [X][X] ich denke , daß [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.0992851
+[X][X] I feel an [X][X] [X] ||| [X][X] ich denke , daß eine [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-6 ||| 0.0992851
+Evans [X][X] feel [X][X] [X] ||| Evans [X][X] denke , daß [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-5 ||| 0.067027
+Evans [X][X] feel an [X][X] [X] ||| Evans [X][X] denke , daß eine [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-6 ||| 0.067027
+Evans [X][X] an initiative [X][X] [X] ||| Evans [X][X] eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.067027
+Evans [X][X] an [X][X] [X] ||| Evans [X][X] eine [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.067027
+Evans [X][X] initiative of [X][X] [X] ||| Evans [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-1 4-2 ||| 0.067027
+Evans [X][X] initiative [X][X] [X] ||| Evans [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.067027
+Evans , [X][X] an [X][X] [X] ||| Evans , [X][X] eine [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.067027
+Evans , [X][X] initiative [X][X] [X] ||| Evans , [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.067027
+Evans , I feel [X][X] [X] ||| Evans , ich denke , daß [X][X] [X] ||| 0.0182166 1 ||| 4-6 ||| 0.067027
+[X][X] I [X][X] you [X] ||| [X][X] ich [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.027027
+[X][X] I feel [X][X] you [X] ||| [X][X] ich denke , daß [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.027027
+Evans [X][X] feel [X][X] you [X] ||| Evans [X][X] denke , daß [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-5 ||| 0.027027
+Evans [X][X] an [X][X] you [X] ||| Evans [X][X] eine [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.027027
+Evans [X][X] initiative [X][X] you [X] ||| Evans [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.027027
+Evans [X][X] you [X] ||| Evans [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.027027
+Evans , [X][X] you [X] ||| Evans , [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.027027
+Evans , I [X][X] you [X] ||| Evans , ich [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.027027
+[X][X] Mr [X][X] feel an [X] ||| [X][X] Herr [X][X] denke , daß eine [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.025641
+[X][X] Mr [X][X] an [X] ||| [X][X] Herr [X][X] eine [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.025641
+[X][X] Mr Evans [X][X] an [X] ||| [X][X] Herr Evans [X][X] eine [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.025641
+yes [X][X] Evans [X][X] an [X] ||| ja [X][X] Evans [X][X] eine [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.025641
+yes [X][X] , [X][X] an [X] ||| ja [X][X] , [X][X] eine [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.025641
+yes [X][X] , I [X][X] [X] ||| ja [X][X] , ich [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.025641
+yes [X][X] I feel an [X] ||| ja [X][X] ich denke , daß eine [X] ||| 0.0182166 1 ||| 1-1 ||| 0.025641
+yes [X][X] I [X][X] [X] ||| ja [X][X] ich [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.025641
+yes [X][X] feel an [X] ||| ja [X][X] denke , daß eine [X] ||| 0.0182166 1 ||| 1-1 ||| 0.025641
+yes [X][X] an [X] ||| ja [X][X] eine [X] ||| 0.0182166 1 ||| 1-1 ||| 0.025641
+yes , [X][X] I [X][X] [X] ||| ja , [X][X] ich [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.025641
+yes , [X][X] feel an [X] ||| ja , [X][X] denke , daß eine [X] ||| 0.0182166 1 ||| 2-2 ||| 0.025641
+yes , [X][X] an [X] ||| ja , [X][X] eine [X] ||| 0.0182166 1 ||| 2-2 ||| 0.025641
+yes , Mr [X][X] an [X] ||| ja , Herr [X][X] eine [X] ||| 0.0182166 1 ||| 3-3 ||| 0.025641
+[X][X] , I feel [X][X] [X] ||| [X][X] , ich denke , daß [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-6 ||| 0.0322581
+Mr [X][X] I feel [X][X] [X] ||| Herr [X][X] ich denke , daß [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-6 ||| 0.0322581
+Mr [X][X] feel [X][X] [X] ||| Herr [X][X] denke , daß [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-5 ||| 0.0322581
+Mr [X][X] feel an [X][X] [X] ||| Herr [X][X] denke , daß eine [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-6 ||| 0.0322581
+Mr [X][X] an initiative [X][X] [X] ||| Herr [X][X] eine [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0322581
+Mr [X][X] an [X][X] [X] ||| Herr [X][X] eine [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0322581
+Mr [X][X] initiative of [X][X] [X] ||| Herr [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-1 4-2 ||| 0.0322581
+Mr [X][X] initiative [X][X] [X] ||| Herr [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0322581
+Mr Evans [X][X] feel [X][X] [X] ||| Herr Evans [X][X] denke , daß [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-6 ||| 0.0322581
+Mr Evans [X][X] an [X][X] [X] ||| Herr Evans [X][X] eine [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0322581
+Mr Evans [X][X] initiative [X][X] [X] ||| Herr Evans [X][X] [X][X] Initiative [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0322581
+if [X] ||| wenn [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| das [X] ||| 0.0182166 1 ||| ||| 1
+House [X] ||| Haus [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| , [X] ||| 0.0182166 1 ||| ||| 1
+shall [X] ||| werde [X] ||| 0.0182166 1 ||| ||| 1
+shall do [X] ||| werde [X] ||| 0.0182166 1 ||| ||| 1
+I [X] ||| ich [X] ||| 0.0182166 1 ||| ||| 1
+as [X] ||| von [X] ||| 0.0182166 1 ||| ||| 1
+do as [X] ||| von [X] ||| 0.0182166 1 ||| ||| 1
+Mr [X] ||| Herrn [X] ||| 0.0182166 1 ||| ||| 1
+Evans [X] ||| Evans [X] ||| 0.0182166 1 ||| ||| 1
+Evans has [X] ||| Evans [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+if the [X] ||| wenn das [X] ||| 0.0182166 1 ||| ||| 1
+the House [X] ||| das Haus [X] ||| 0.0182166 1 ||| ||| 1
+I shall [X] ||| werde ich [X] ||| 0.0182166 1 ||| ||| 1
+I shall do [X] ||| werde ich [X] ||| 0.0182166 1 ||| ||| 0.5
+I [X][X] [X] ||| [X][X] ich [X] ||| 0.0182166 1 ||| 1-0 ||| 0.5
+I [X] ||| ich dem [X] ||| 0.0182166 1 ||| ||| 1
+as Mr [X] ||| von Herrn [X] ||| 0.0182166 1 ||| ||| 1
+do as Mr [X] ||| von Herrn [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] Mr [X] ||| [X][X] Herrn [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+Mr Evans [X] ||| Herrn Evans [X] ||| 0.0182166 1 ||| ||| 1
+Mr Evans has [X] ||| Herrn Evans [X] ||| 0.0182166 1 ||| ||| 0.5
+Mr [X][X] [X] ||| Herrn [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.5
+if the House [X] ||| wenn das Haus [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] House [X] ||| [X][X] Haus [X] ||| 0.0182166 1 ||| 0-0 ||| 0.333333
+if [X][X] [X] ||| wenn [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.714947
+agrees [X] ||| damit einverstanden ist [X] ||| 0.0182166 1 ||| ||| 1
+, I shall [X] ||| , werde ich [X] ||| 0.0182166 1 ||| ||| 0.5
+, [X][X] [X] ||| , [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.33545
+, I shall do [X] ||| , werde ich [X] ||| 0.0182166 1 ||| ||| 0.25
+, I [X][X] [X] ||| , [X][X] ich [X] ||| 0.0182166 1 ||| 2-1 ||| 0.25
+, [X][X] do [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.416667
+I shall [X] ||| werde ich dem [X] ||| 0.0182166 1 ||| ||| 1
+I shall do [X] ||| werde ich dem [X] ||| 0.0182166 1 ||| ||| 0.5
+I [X][X] [X] ||| [X][X] ich dem [X] ||| 0.0182166 1 ||| 1-0 ||| 0.5
+as Mr Evans [X] ||| von Herrn Evans [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] Evans [X] ||| [X][X] Evans [X] ||| 0.0182166 1 ||| 0-0 ||| 0.533333
+as [X][X] [X] ||| von [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.533333
+as Mr Evans has [X] ||| von Herrn Evans [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] Evans has [X] ||| [X][X] Evans [X] ||| 0.0182166 1 ||| 0-0 ||| 0.325
+as [X][X] has [X] ||| von [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.2
+as Mr [X][X] [X] ||| von Herrn [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.2
+do as Mr Evans [X] ||| von Herrn Evans [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] Mr Evans [X] ||| [X][X] Herrn Evans [X] ||| 0.0182166 1 ||| 0-0 ||| 0.2
+do [X][X] Evans [X] ||| [X][X] Evans [X] ||| 0.0182166 1 ||| 1-0 ||| 0.2
+do as [X][X] [X] ||| von [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.325
+do as Mr Evans has [X] ||| von Herrn Evans [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] Mr Evans has [X] ||| [X][X] Herrn Evans [X] ||| 0.0182166 1 ||| 0-0 ||| 0.125
+[X][X] Mr [X][X] [X] ||| [X][X] Herrn [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.125
+do [X][X] Evans has [X] ||| [X][X] Evans [X] ||| 0.0182166 1 ||| 1-0 ||| 0.125
+do as [X][X] has [X] ||| von [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+do as Mr [X][X] [X] ||| von Herrn [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.125
+House agrees [X] ||| Haus damit einverstanden ist [X] ||| 0.0182166 1 ||| ||| 1
+agrees , [X] ||| damit einverstanden ist , [X] ||| 0.0182166 1 ||| ||| 1
+, I shall [X] ||| , werde ich dem [X] ||| 0.0182166 1 ||| ||| 0.333333
+, [X][X] [X] ||| , [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.5
+, I shall do [X] ||| , werde ich dem [X] ||| 0.0182166 1 ||| ||| 0.166667
+, I [X][X] [X] ||| , [X][X] ich dem [X] ||| 0.0182166 1 ||| 2-1 ||| 0.166667
+, [X][X] do [X] ||| , [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+the House agrees [X] ||| das Haus damit einverstanden ist [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] agrees [X] ||| [X][X] damit einverstanden ist [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+the [X][X] [X] ||| das [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.684191
+House agrees , [X] ||| Haus damit einverstanden ist , [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] , [X] ||| [X][X] , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.590909
+House [X][X] [X] ||| Haus [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.651812
+as Mr Evans has suggested [X] ||| Vorschlag von Herrn Evans folgen [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] Evans has suggested [X] ||| Vorschlag [X][X] Evans folgen [X] ||| 0.0182166 1 ||| 0-1 ||| 0.233766
+[X][X] has suggested [X] ||| Vorschlag [X][X] folgen [X] ||| 0.0182166 1 ||| 0-1 ||| 0.233766
+[X][X] suggested [X] ||| Vorschlag [X][X] folgen [X] ||| 0.0182166 1 ||| 0-1 ||| 0.233766
+as [X][X] has suggested [X] ||| Vorschlag von [X][X] folgen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.142857
+as [X][X] suggested [X] ||| Vorschlag von [X][X] folgen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.142857
+as Mr [X][X] suggested [X] ||| Vorschlag von Herrn [X][X] folgen [X] ||| 0.0182166 1 ||| 2-3 ||| 0.142857
+[X][X] Mr Evans has suggested [X] ||| Vorschlag [X][X] Herrn Evans folgen [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0909091
+[X][X] Mr [X][X] suggested [X] ||| Vorschlag [X][X] Herrn [X][X] folgen [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0909091
+do [X][X] Evans has suggested [X] ||| Vorschlag [X][X] Evans folgen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+do [X][X] has suggested [X] ||| Vorschlag [X][X] folgen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+do [X][X] suggested [X] ||| Vorschlag [X][X] folgen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+do as [X][X] has suggested [X] ||| Vorschlag von [X][X] folgen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+do as [X][X] suggested [X] ||| Vorschlag von [X][X] folgen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+do as Mr [X][X] suggested [X] ||| Vorschlag von Herrn [X][X] folgen [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0909091
+if the House agrees [X] ||| wenn das Haus damit einverstanden ist [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] House agrees [X] ||| [X][X] Haus damit einverstanden ist [X] ||| 0.0182166 1 ||| 0-0 ||| 0.166667
+if [X][X] agrees [X] ||| wenn [X][X] damit einverstanden ist [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+if the [X][X] [X] ||| wenn das [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.381613
+the House agrees , [X] ||| das Haus damit einverstanden ist , [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] agrees , [X] ||| [X][X] damit einverstanden ist , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.257576
+the [X][X] , [X] ||| das [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+the House [X][X] [X] ||| das Haus [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.350857
+agrees , I shall [X] ||| damit einverstanden ist , werde ich [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] I shall [X] ||| [X][X] werde ich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.494048
+agrees [X][X] [X] ||| damit einverstanden ist [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.625
+agrees , [X][X] [X] ||| damit einverstanden ist , [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.625
+agrees , I shall do [X] ||| damit einverstanden ist , werde ich [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] I shall do [X] ||| [X][X] werde ich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.263636
+[X][X] I [X][X] [X] ||| [X][X] [X][X] ich [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.263636
+agrees [X][X] do [X] ||| damit einverstanden ist [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.208333
+agrees , I [X][X] [X] ||| damit einverstanden ist , [X][X] ich [X] ||| 0.0182166 1 ||| 3-4 ||| 0.125
+agrees , [X][X] do [X] ||| damit einverstanden ist , [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.208333
+as Mr Evans has suggested [X] ||| dem Vorschlag von Herrn Evans folgen [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] Evans has suggested [X] ||| dem Vorschlag [X][X] Evans folgen [X] ||| 0.0182166 1 ||| 0-2 ||| 0.233766
+[X][X] has suggested [X] ||| dem Vorschlag [X][X] folgen [X] ||| 0.0182166 1 ||| 0-2 ||| 0.233766
+[X][X] suggested [X] ||| dem Vorschlag [X][X] folgen [X] ||| 0.0182166 1 ||| 0-2 ||| 0.233766
+as [X][X] has suggested [X] ||| dem Vorschlag von [X][X] folgen [X] ||| 0.0182166 1 ||| 1-3 ||| 0.142857
+as [X][X] suggested [X] ||| dem Vorschlag von [X][X] folgen [X] ||| 0.0182166 1 ||| 1-3 ||| 0.142857
+as Mr [X][X] suggested [X] ||| dem Vorschlag von Herrn [X][X] folgen [X] ||| 0.0182166 1 ||| 2-4 ||| 0.142857
+[X][X] Mr Evans has suggested [X] ||| dem Vorschlag [X][X] Herrn Evans folgen [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0909091
+[X][X] Mr [X][X] suggested [X] ||| dem Vorschlag [X][X] Herrn [X][X] folgen [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.0909091
+do [X][X] Evans has suggested [X] ||| dem Vorschlag [X][X] Evans folgen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0909091
+do [X][X] has suggested [X] ||| dem Vorschlag [X][X] folgen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0909091
+do [X][X] suggested [X] ||| dem Vorschlag [X][X] folgen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0909091
+do as [X][X] has suggested [X] ||| dem Vorschlag von [X][X] folgen [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0909091
+do as [X][X] suggested [X] ||| dem Vorschlag von [X][X] folgen [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0909091
+do as Mr [X][X] suggested [X] ||| dem Vorschlag von Herrn [X][X] folgen [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0909091
+[X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.574155
+[X][X] Evans has suggested . [X] ||| Vorschlag [X][X] Evans folgen . [X] ||| 0.0182166 1 ||| 0-1 ||| 0.253968
+[X][X] has suggested . [X] ||| Vorschlag [X][X] folgen . [X] ||| 0.0182166 1 ||| 0-1 ||| 0.253968
+[X][X] suggested . [X] ||| Vorschlag [X][X] folgen . [X] ||| 0.0182166 1 ||| 0-1 ||| 0.253968
+as [X][X] has suggested . [X] ||| Vorschlag von [X][X] folgen . [X] ||| 0.0182166 1 ||| 1-2 ||| 0.142857
+as [X][X] suggested . [X] ||| Vorschlag von [X][X] folgen . [X] ||| 0.0182166 1 ||| 1-2 ||| 0.142857
+as Mr [X][X] suggested . [X] ||| Vorschlag von Herrn [X][X] folgen . [X] ||| 0.0182166 1 ||| 2-3 ||| 0.142857
+do [X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 1-0 ||| 0.20202
+[X][X] Mr [X][X] suggested . [X] ||| Vorschlag [X][X] Herrn [X][X] folgen . [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.111111
+do [X][X] has suggested . [X] ||| Vorschlag [X][X] folgen . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+do [X][X] suggested . [X] ||| Vorschlag [X][X] folgen . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+do as [X][X] suggested . [X] ||| Vorschlag von [X][X] folgen . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.111111
+if the House agrees , [X] ||| wenn das Haus damit einverstanden ist , [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] House agrees , [X] ||| [X][X] Haus damit einverstanden ist , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0909091
+[X][X] House [X][X] [X] ||| [X][X] Haus [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.214946
+if [X][X] agrees , [X] ||| wenn [X][X] damit einverstanden ist , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+if [X][X] , [X] ||| wenn [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+if the [X][X] , [X] ||| wenn das [X][X] , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+if the House [X][X] [X] ||| wenn das Haus [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.214946
+House agrees , I shall [X] ||| Haus damit einverstanden ist , werde ich [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] , I shall [X] ||| [X][X] , werde ich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.244048
+[X][X] , [X][X] [X] ||| [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.626706
+House [X][X] I shall [X] ||| Haus [X][X] werde ich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+House agrees [X][X] [X] ||| Haus damit einverstanden ist [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.318478
+House agrees , [X][X] [X] ||| Haus damit einverstanden ist , [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.318478
+[X][X] , I shall do [X] ||| [X][X] , werde ich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.138636
+[X][X] , I [X][X] [X] ||| [X][X] , [X][X] ich [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.138636
+[X][X] , [X][X] do [X] ||| [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.2253
+House [X][X] I shall do [X] ||| Haus [X][X] werde ich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+House [X][X] I [X][X] [X] ||| Haus [X][X] [X][X] ich [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0666667
+House [X][X] do [X] ||| Haus [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.110145
+House agrees [X][X] do [X] ||| Haus damit einverstanden ist [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.110145
+House agrees , I [X][X] [X] ||| Haus damit einverstanden ist , [X][X] ich [X] ||| 0.0182166 1 ||| 4-5 ||| 0.0666667
+House agrees , [X][X] do [X] ||| Haus damit einverstanden ist , [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.110145
+agrees , I shall [X] ||| damit einverstanden ist , werde ich dem [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] I shall [X] ||| [X][X] werde ich dem [X] ||| 0.0182166 1 ||| 0-0 ||| 0.324026
+agrees [X][X] [X] ||| damit einverstanden ist [X][X] dem [X] ||| 0.0182166 1 ||| 1-3 ||| 0.25
+agrees , [X][X] [X] ||| damit einverstanden ist , [X][X] dem [X] ||| 0.0182166 1 ||| 2-4 ||| 0.25
+agrees , I shall do [X] ||| damit einverstanden ist , werde ich dem [X] ||| 0.0182166 1 ||| ||| 0.0833333
+[X][X] I shall do [X] ||| [X][X] werde ich dem [X] ||| 0.0182166 1 ||| 0-0 ||| 0.169996
+[X][X] I [X][X] [X] ||| [X][X] [X][X] ich dem [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.169996
+agrees [X][X] do [X] ||| damit einverstanden ist [X][X] dem [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0833333
+agrees , I [X][X] [X] ||| damit einverstanden ist , [X][X] ich dem [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0833333
+agrees , [X][X] do [X] ||| damit einverstanden ist , [X][X] dem [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0833333
+[X][X] . [X] ||| dem [X][X] . [X] ||| 0.0182166 1 ||| 0-1 ||| 0.215909
+[X][X] Evans has suggested . [X] ||| dem Vorschlag [X][X] Evans folgen . [X] ||| 0.0182166 1 ||| 0-2 ||| 0.215909
+[X][X] has suggested . [X] ||| dem Vorschlag [X][X] folgen . [X] ||| 0.0182166 1 ||| 0-2 ||| 0.215909
+[X][X] suggested . [X] ||| dem Vorschlag [X][X] folgen . [X] ||| 0.0182166 1 ||| 0-2 ||| 0.215909
+as [X][X] has suggested . [X] ||| dem Vorschlag von [X][X] folgen . [X] ||| 0.0182166 1 ||| 1-3 ||| 0.125
+as [X][X] suggested . [X] ||| dem Vorschlag von [X][X] folgen . [X] ||| 0.0182166 1 ||| 1-3 ||| 0.125
+as Mr [X][X] suggested . [X] ||| dem Vorschlag von Herrn [X][X] folgen . [X] ||| 0.0182166 1 ||| 2-4 ||| 0.125
+do [X][X] . [X] ||| dem [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+[X][X] Mr [X][X] suggested . [X] ||| dem Vorschlag [X][X] Herrn [X][X] folgen . [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.0909091
+do [X][X] has suggested . [X] ||| dem Vorschlag [X][X] folgen . [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0909091
+do [X][X] suggested . [X] ||| dem Vorschlag [X][X] folgen . [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0909091
+do as [X][X] suggested . [X] ||| dem Vorschlag von [X][X] folgen . [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0909091
+[X][X] agrees , I shall [X] ||| [X][X] damit einverstanden ist , werde ich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.119048
+[X][X] agrees [X][X] [X] ||| [X][X] damit einverstanden ist [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.308228
+[X][X] agrees , [X][X] [X] ||| [X][X] damit einverstanden ist , [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.308228
+the [X][X] , I shall [X] ||| das [X][X] , werde ich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+the [X][X] , [X][X] [X] ||| das [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.184191
+the [X][X] I shall [X] ||| das [X][X] werde ich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+the House [X][X] I shall [X] ||| das Haus [X][X] werde ich [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0714286
+the House agrees [X][X] [X] ||| das Haus damit einverstanden ist [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.184191
+the House agrees , [X][X] [X] ||| das Haus damit einverstanden ist , [X][X] [X] ||| 0.0182166 1 ||| 4-6 ||| 0.184191
+[X][X] agrees [X][X] do [X] ||| [X][X] damit einverstanden ist [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.115155
+[X][X] agrees , I [X][X] [X] ||| [X][X] damit einverstanden ist , [X][X] ich [X] ||| 0.0182166 1 ||| 0-0 4-5 ||| 0.0719697
+[X][X] agrees , [X][X] do [X] ||| [X][X] damit einverstanden ist , [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.115155
+the [X][X] , I [X][X] [X] ||| das [X][X] , [X][X] ich [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0416667
+the [X][X] , [X][X] do [X] ||| das [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0673077
+the [X][X] I shall do [X] ||| das [X][X] werde ich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0416667
+the [X][X] I [X][X] [X] ||| das [X][X] [X][X] ich [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0416667
+the [X][X] do [X] ||| das [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0673077
+the House [X][X] I [X][X] [X] ||| das Haus [X][X] [X][X] ich [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0416667
+the House [X][X] do [X] ||| das Haus [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0673077
+the House agrees [X][X] do [X] ||| das Haus damit einverstanden ist [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0673077
+House agrees , I shall [X] ||| Haus damit einverstanden ist , werde ich dem [X] ||| 0.0182166 1 ||| ||| 0.0833333
+[X][X] , I shall [X] ||| [X][X] , werde ich dem [X] ||| 0.0182166 1 ||| 0-0 ||| 0.157359
+[X][X] , [X][X] [X] ||| [X][X] , [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.244022
+House [X][X] I shall [X] ||| Haus [X][X] werde ich dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+House [X][X] [X] ||| Haus [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.126812
+House agrees [X][X] [X] ||| Haus damit einverstanden ist [X][X] dem [X] ||| 0.0182166 1 ||| 2-4 ||| 0.126812
+House agrees , [X][X] [X] ||| Haus damit einverstanden ist , [X][X] dem [X] ||| 0.0182166 1 ||| 3-5 ||| 0.126812
+[X][X] , I shall do [X] ||| [X][X] , werde ich dem [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0866631
+[X][X] , I [X][X] [X] ||| [X][X] , [X][X] ich dem [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0866631
+[X][X] , [X][X] do [X] ||| [X][X] , [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0866631
+House [X][X] I shall do [X] ||| Haus [X][X] werde ich dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0434783
+House [X][X] I [X][X] [X] ||| Haus [X][X] [X][X] ich dem [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0434783
+House [X][X] do [X] ||| Haus [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0434783
+House agrees [X][X] do [X] ||| Haus damit einverstanden ist [X][X] dem [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0434783
+House agrees , I [X][X] [X] ||| Haus damit einverstanden ist , [X][X] ich dem [X] ||| 0.0182166 1 ||| 4-5 ||| 0.0434783
+House agrees , [X][X] do [X] ||| Haus damit einverstanden ist , [X][X] dem [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0434783
+I [X][X] as [X][X] suggested [X] ||| [X][X] ich dem Vorschlag von [X][X] folgen [X] ||| 0.0182166 1 ||| 1-0 3-5 ||| 0.05
+[X][X] do [X][X] has suggested [X] ||| [X][X] dem Vorschlag [X][X] folgen [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.09
+[X][X] do [X][X] suggested [X] ||| [X][X] dem Vorschlag [X][X] folgen [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.09
+[X][X] do as [X][X] suggested [X] ||| [X][X] dem Vorschlag von [X][X] folgen [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.09
+[X][X] as [X][X] has suggested [X] ||| [X][X] dem Vorschlag von [X][X] folgen [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.09
+[X][X] as [X][X] suggested [X] ||| [X][X] dem Vorschlag von [X][X] folgen [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.09
+[X][X] as Mr [X][X] suggested [X] ||| [X][X] dem Vorschlag von Herrn [X][X] folgen [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.09
+[X][X] do [X][X] has suggested [X] ||| [X][X] Vorschlag [X][X] folgen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.09
+[X][X] do [X][X] suggested [X] ||| [X][X] Vorschlag [X][X] folgen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.09
+[X][X] do as [X][X] suggested [X] ||| [X][X] Vorschlag von [X][X] folgen [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.09
+[X][X] as [X][X] has suggested [X] ||| [X][X] Vorschlag von [X][X] folgen [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.09
+[X][X] as [X][X] suggested [X] ||| [X][X] Vorschlag von [X][X] folgen [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.09
+[X][X] as Mr [X][X] suggested [X] ||| [X][X] Vorschlag von Herrn [X][X] folgen [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.09
+I shall do [X][X] [X] ||| werde ich [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.108824
+I shall [X][X] [X] ||| werde ich [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.108824
+I shall do [X][X] [X] ||| werde ich dem [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.108824
+I shall [X][X] [X] ||| werde ich dem [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.108824
+I shall do [X][X] suggested [X] ||| werde ich dem Vorschlag [X][X] folgen [X] ||| 0.0182166 1 ||| 3-4 ||| 0.05
+I shall [X][X] has suggested [X] ||| werde ich dem Vorschlag [X][X] folgen [X] ||| 0.0182166 1 ||| 2-4 ||| 0.05
+I shall [X][X] suggested [X] ||| werde ich dem Vorschlag [X][X] folgen [X] ||| 0.0182166 1 ||| 2-4 ||| 0.05
+[X][X] House [X][X] I shall [X] ||| [X][X] Haus [X][X] werde ich [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.047619
+[X][X] House agrees [X][X] [X] ||| [X][X] Haus damit einverstanden ist [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.124037
+[X][X] House agrees , [X][X] [X] ||| [X][X] Haus damit einverstanden ist , [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-6 ||| 0.124037
+if [X][X] agrees [X][X] [X] ||| wenn [X][X] damit einverstanden ist [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-5 ||| 0.124037
+if [X][X] agrees , [X][X] [X] ||| wenn [X][X] damit einverstanden ist , [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-6 ||| 0.124037
+if [X][X] , I shall [X] ||| wenn [X][X] , werde ich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.047619
+if [X][X] , [X][X] [X] ||| wenn [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.124037
+if [X][X] I shall [X] ||| wenn [X][X] werde ich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.047619
+if the [X][X] , [X][X] [X] ||| wenn das [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.124037
+if the [X][X] I shall [X] ||| wenn das [X][X] werde ich [X] ||| 0.0182166 1 ||| 2-2 ||| 0.047619
+if the House agrees [X][X] [X] ||| wenn das Haus damit einverstanden ist [X][X] [X] ||| 0.0182166 1 ||| 4-6 ||| 0.124037
+[X][X] House [X][X] do [X] ||| [X][X] Haus [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0478469
+[X][X] House agrees [X][X] do [X] ||| [X][X] Haus damit einverstanden ist [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.0478469
+if [X][X] agrees [X][X] do [X] ||| wenn [X][X] damit einverstanden ist [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-5 ||| 0.0478469
+if [X][X] , I [X][X] [X] ||| wenn [X][X] , [X][X] ich [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.030303
+if [X][X] , [X][X] do [X] ||| wenn [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0478469
+if [X][X] I shall do [X] ||| wenn [X][X] werde ich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.030303
+if [X][X] I [X][X] [X] ||| wenn [X][X] [X][X] ich [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.030303
+if [X][X] do [X] ||| wenn [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0478469
+if the [X][X] I [X][X] [X] ||| wenn das [X][X] [X][X] ich [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.030303
+if the [X][X] do [X] ||| wenn das [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0478469
+if the House [X][X] do [X] ||| wenn das Haus [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0478469
+[X][X] agrees , I shall [X] ||| [X][X] damit einverstanden ist , werde ich dem [X] ||| 0.0182166 1 ||| 0-0 ||| 0.074026
+[X][X] agrees [X][X] [X] ||| [X][X] damit einverstanden ist [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.117211
+[X][X] agrees , [X][X] [X] ||| [X][X] damit einverstanden ist , [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.117211
+the [X][X] , I shall [X] ||| das [X][X] , werde ich dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0454545
+the [X][X] , [X][X] [X] ||| das [X][X] , [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0710956
+the [X][X] I shall [X] ||| das [X][X] werde ich dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0454545
+the [X][X] [X] ||| das [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0710956
+the House [X][X] I shall [X] ||| das Haus [X][X] werde ich dem [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0454545
+the House [X][X] [X] ||| das Haus [X][X] dem [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0710956
+the House agrees [X][X] [X] ||| das Haus damit einverstanden ist [X][X] dem [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0710956
+the House agrees , [X][X] [X] ||| das Haus damit einverstanden ist , [X][X] dem [X] ||| 0.0182166 1 ||| 4-6 ||| 0.0710956
+[X][X] agrees [X][X] do [X] ||| [X][X] damit einverstanden ist [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.0431849
+[X][X] agrees , I [X][X] [X] ||| [X][X] damit einverstanden ist , [X][X] ich dem [X] ||| 0.0182166 1 ||| 0-0 4-5 ||| 0.0431849
+[X][X] agrees , [X][X] do [X] ||| [X][X] damit einverstanden ist , [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.0431849
+the [X][X] , I [X][X] [X] ||| das [X][X] , [X][X] ich dem [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.025641
+the [X][X] , [X][X] do [X] ||| das [X][X] , [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.025641
+the [X][X] I shall do [X] ||| das [X][X] werde ich dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.025641
+the [X][X] I [X][X] [X] ||| das [X][X] [X][X] ich dem [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.025641
+the [X][X] do [X] ||| das [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.025641
+the House [X][X] I [X][X] [X] ||| das Haus [X][X] [X][X] ich dem [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.025641
+the House [X][X] do [X] ||| das Haus [X][X] dem [X] ||| 0.0182166 1 ||| 2-2 ||| 0.025641
+the House agrees [X][X] do [X] ||| das Haus damit einverstanden ist [X][X] dem [X] ||| 0.0182166 1 ||| 3-5 ||| 0.025641
+, [X][X] do [X][X] [X] ||| , [X][X] [X][X] [X] ||| 0.0121444 1 ||| 1-1 3-2 ||| 0.256364
+, [X][X] do [X][X] [X] ||| , [X][X] dem [X][X] [X] ||| 0.00607219 1 ||| 1-1 3-3 ||| 0.256364
+, [X][X] do [X][X] suggested [X] ||| , [X][X] dem Vorschlag [X][X] folgen [X] ||| 0.0182166 1 ||| 1-1 3-4 ||| 0.04
+, [X][X] as [X][X] suggested [X] ||| , [X][X] dem Vorschlag von [X][X] folgen [X] ||| 0.0182166 1 ||| 1-1 3-5 ||| 0.04
+, [X][X] do [X][X] suggested [X] ||| , [X][X] Vorschlag [X][X] folgen [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.04
+, [X][X] as [X][X] suggested [X] ||| , [X][X] Vorschlag von [X][X] folgen [X] ||| 0.0182166 1 ||| 1-1 3-4 ||| 0.04
+, I shall do [X][X] [X] ||| , werde ich [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.0854545
+, I shall [X][X] [X] ||| , werde ich [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0854545
+, I shall do [X][X] [X] ||| , werde ich dem [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.0854545
+, I shall [X][X] [X] ||| , werde ich dem [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0854545
+, I shall [X][X] suggested [X] ||| , werde ich dem Vorschlag [X][X] folgen [X] ||| 0.0182166 1 ||| 3-5 ||| 0.04
+[X][X] do [X][X] . [X] ||| [X][X] [X][X] . [X] ||| 0.0121444 1 ||| 0-0 2-1 ||| 0.312834
+[X][X] do [X][X] . [X] ||| [X][X] dem [X][X] . [X] ||| 0.00607219 1 ||| 0-0 2-2 ||| 0.312834
+[X][X] do [X][X] suggested . [X] ||| [X][X] dem Vorschlag [X][X] folgen . [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.104278
+[X][X] as [X][X] suggested . [X] ||| [X][X] dem Vorschlag von [X][X] folgen . [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.104278
+[X][X] do [X][X] suggested . [X] ||| [X][X] Vorschlag [X][X] folgen . [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.104278
+[X][X] as [X][X] suggested . [X] ||| [X][X] Vorschlag von [X][X] folgen . [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.104278
+I shall do [X][X] . [X] ||| werde ich [X][X] . [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0588235
+I shall [X][X] . [X] ||| werde ich [X][X] . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0588235
+I shall do [X][X] . [X] ||| werde ich dem [X][X] . [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0588235
+I shall [X][X] . [X] ||| werde ich dem [X][X] . [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0588235
+I shall [X][X] suggested . [X] ||| werde ich dem Vorschlag [X][X] folgen . [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0588235
+[X][X] House [X][X] I shall [X] ||| [X][X] Haus [X][X] werde ich dem [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0285714
+[X][X] House [X][X] [X] ||| [X][X] Haus [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0461153
+[X][X] House agrees [X][X] [X] ||| [X][X] Haus damit einverstanden ist [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.0461153
+[X][X] House agrees , [X][X] [X] ||| [X][X] Haus damit einverstanden ist , [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 4-6 ||| 0.0461153
+if [X][X] agrees [X][X] [X] ||| wenn [X][X] damit einverstanden ist [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 3-5 ||| 0.0461153
+if [X][X] agrees , [X][X] [X] ||| wenn [X][X] damit einverstanden ist , [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 4-6 ||| 0.0461153
+if [X][X] , I shall [X] ||| wenn [X][X] , werde ich dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0285714
+if [X][X] , [X][X] [X] ||| wenn [X][X] , [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0461153
+if [X][X] I shall [X] ||| wenn [X][X] werde ich dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0285714
+if [X][X] [X] ||| wenn [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0461153
+if the [X][X] , [X][X] [X] ||| wenn das [X][X] , [X][X] dem [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0461153
+if the [X][X] I shall [X] ||| wenn das [X][X] werde ich dem [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0285714
+if the [X][X] [X] ||| wenn das [X][X] dem [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0461153
+if the House [X][X] [X] ||| wenn das Haus [X][X] dem [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0461153
+if the House agrees [X][X] [X] ||| wenn das Haus damit einverstanden ist [X][X] dem [X] ||| 0.0182166 1 ||| 4-6 ||| 0.0461153
+[X][X] House [X][X] do [X] ||| [X][X] Haus [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0175439
+[X][X] House agrees [X][X] do [X] ||| [X][X] Haus damit einverstanden ist [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.0175439
+if [X][X] agrees [X][X] do [X] ||| wenn [X][X] damit einverstanden ist [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 3-5 ||| 0.0175439
+if [X][X] , I [X][X] [X] ||| wenn [X][X] , [X][X] ich dem [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0175439
+if [X][X] , [X][X] do [X] ||| wenn [X][X] , [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0175439
+if [X][X] I shall do [X] ||| wenn [X][X] werde ich dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0175439
+if [X][X] I [X][X] [X] ||| wenn [X][X] [X][X] ich dem [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0175439
+if [X][X] do [X] ||| wenn [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0175439
+if the [X][X] I [X][X] [X] ||| wenn das [X][X] [X][X] ich dem [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0175439
+if the [X][X] do [X] ||| wenn das [X][X] dem [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0175439
+if the House [X][X] do [X] ||| wenn das Haus [X][X] dem [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0175439
+, [X][X] do [X][X] . [X] ||| , [X][X] [X][X] . [X] ||| 0.0121444 1 ||| 1-1 3-2 ||| 0.136364
+, [X][X] do [X][X] . [X] ||| , [X][X] dem [X][X] . [X] ||| 0.00607218 1 ||| 1-1 3-3 ||| 0.136364
+, [X][X] . [X] ||| , [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0454545
+, I shall [X][X] . [X] ||| , werde ich [X][X] . [X] ||| 0.00910828 1 ||| 3-3 ||| 0.090909
+, I shall [X][X] . [X] ||| , werde ich dem [X][X] . [X] ||| 0.00910828 1 ||| 3-4 ||| 0.090909
+Madam [X] ||| Frau [X] ||| 0.0182166 1 ||| ||| 1
+President [X] ||| Präsidentin [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| , [X] ||| 0.0182166 1 ||| ||| 1
+on [X] ||| zur [X] ||| 0.0182166 1 ||| ||| 1
+a point of order [X] ||| Geschäftsordnung [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+Madam President [X] ||| Frau Präsidentin [X] ||| 0.0182166 1 ||| ||| 1
+President , [X] ||| Präsidentin , [X] ||| 0.0182166 1 ||| ||| 1
+, on [X] ||| , zur [X] ||| 0.0182166 1 ||| ||| 1
+on a point of order [X] ||| zur Geschäftsordnung [X] ||| 0.0182166 1 ||| ||| 0.5
+on [X][X] [X] ||| zur [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.833333
+a point of order . [X] ||| Geschäftsordnung . [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] . [X] ||| [X][X] . [X] ||| 0.218091 1 ||| 0-0 ||| 1.20694
+Madam President , [X] ||| Frau Präsidentin , [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] , [X] ||| [X][X] , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.333333
+Madam [X][X] [X] ||| Frau [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.673611
+President , on [X] ||| Präsidentin , zur [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] on [X] ||| [X][X] zur [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+President [X][X] [X] ||| Präsidentin [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.644444
+[X][X] a point of order [X] ||| [X][X] Geschäftsordnung [X] ||| 0.0182166 1 ||| 0-0 ||| 0.644444
+, [X][X] [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.533333
+, on [X][X] [X] ||| , zur [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.533333
+on [X][X] . [X] ||| zur [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+Madam President , on [X] ||| Frau Präsidentin , zur [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] , on [X] ||| [X][X] , zur [X] ||| 0.0182166 1 ||| 0-0 ||| 0.166667
+Madam [X][X] on [X] ||| Frau [X][X] zur [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+Madam President [X][X] [X] ||| Frau Präsidentin [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.340278
+[X][X] on [X][X] [X] ||| [X][X] zur [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.484722
+President , [X][X] [X] ||| Präsidentin , [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.311111
+President , on [X][X] [X] ||| Präsidentin , zur [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.311111
+, [X][X] . [X] ||| , [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.2
+, on [X][X] . [X] ||| , zur [X][X] . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.2
+[X][X] , [X][X] [X] ||| [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.173611
+[X][X] , on [X][X] [X] ||| [X][X] , zur [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.173611
+Madam [X][X] on [X][X] [X] ||| Frau [X][X] zur [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.173611
+Madam President , [X][X] [X] ||| Frau Präsidentin , [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.173611
+Madam President , on [X][X] [X] ||| Frau Präsidentin , zur [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.173611
+[X][X] on [X][X] . [X] ||| [X][X] zur [X][X] . [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.173611
+President [X][X] . [X] ||| Präsidentin [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+President , [X][X] . [X] ||| Präsidentin , [X][X] . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.111111
+President , on [X][X] . [X] ||| Präsidentin , zur [X][X] . [X] ||| 0.0182166 1 ||| 3-3 ||| 0.111111
+[X][X] , [X][X] . [X] ||| [X][X] , [X][X] . [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0625
+[X][X] , on [X][X] . [X] ||| [X][X] , zur [X][X] . [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0625
+Madam [X][X] on [X][X] . [X] ||| Frau [X][X] zur [X][X] . [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0625
+Madam [X][X] . [X] ||| Frau [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0625
+Madam President [X][X] . [X] ||| Frau Präsidentin [X][X] . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0625
+Madam President , [X][X] . [X] ||| Frau Präsidentin , [X][X] . [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0625
+would [X] ||| könnten [X] ||| 0.0182166 1 ||| ||| 1
+your [X] ||| Sie [X] ||| 0.0182166 1 ||| ||| 1
+advice [X] ||| Auskunft [X] ||| 0.0182166 1 ||| ||| 1
+about [X] ||| zu [X] ||| 0.0182166 1 ||| ||| 1
+Rule [X] ||| Artikel [X] ||| 0.0182166 1 ||| ||| 1
+143 [X] ||| 143 [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| ? [X] ||| 0.0182166 1 ||| ||| 1
+advice [X] ||| eine Auskunft [X] ||| 0.0182166 1 ||| ||| 1
+advice about [X] ||| Auskunft zu [X] ||| 0.0182166 1 ||| ||| 1
+about Rule [X] ||| zu Artikel [X] ||| 0.0182166 1 ||| ||| 1
+Rule 143 [X] ||| Artikel 143 [X] ||| 0.0182166 1 ||| ||| 1
+inadmissibility [X] ||| Unzulässigkeit geben [X] ||| 0.0182166 1 ||| ||| 1
+I would like your [X] ||| könnten Sie mir [X] ||| 0.0182166 1 ||| ||| 1
+advice about [X] ||| eine Auskunft zu [X] ||| 0.0182166 1 ||| ||| 1
+advice about Rule [X] ||| Auskunft zu Artikel [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] Rule [X] ||| [X][X] Artikel [X] ||| 0.0182166 1 ||| 0-0 ||| 0.708333
+advice [X][X] [X] ||| Auskunft [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.643541
+about Rule 143 [X] ||| zu Artikel 143 [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] 143 [X] ||| [X][X] 143 [X] ||| 0.0182166 1 ||| 0-0 ||| 0.696429
+about [X][X] [X] ||| zu [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.643541
+inadmissibility . [X] ||| Unzulässigkeit geben ? [X] ||| 0.0182166 1 ||| ||| 1
+I would like your [X] ||| könnten Sie mir eine [X] ||| 0.0182166 1 ||| ||| 1
+advice about Rule [X] ||| eine Auskunft zu Artikel [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] Rule [X] ||| eine [X][X] Artikel [X] ||| 0.0182166 1 ||| 0-1 ||| 0.25
+advice [X][X] [X] ||| eine Auskunft [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.441667
+advice about Rule 143 [X] ||| Auskunft zu Artikel 143 [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] Rule 143 [X] ||| [X][X] Artikel 143 [X] ||| 0.0182166 1 ||| 0-0 ||| 0.363095
+advice [X][X] 143 [X] ||| Auskunft [X][X] 143 [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+advice about [X][X] [X] ||| Auskunft zu [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.310207
+concerning [X] ||| im Zusammenhang mit der [X] ||| 0.0182166 1 ||| ||| 1
+I would like your advice [X] ||| könnten Sie mir eine Auskunft [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] advice [X] ||| [X][X] eine Auskunft [X] ||| 0.00910828 1 ||| 0-0 ||| 0.666666
+[X][X] advice [X] ||| [X][X] Auskunft [X] ||| 0.00910828 1 ||| 0-0 ||| 0.666666
+advice about Rule 143 [X] ||| eine Auskunft zu Artikel 143 [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] Rule 143 [X] ||| eine [X][X] Artikel 143 [X] ||| 0.0182166 1 ||| 0-1 ||| 0.125
+[X][X] 143 [X] ||| eine [X][X] 143 [X] ||| 0.0182166 1 ||| 0-1 ||| 0.125
+advice [X][X] 143 [X] ||| eine Auskunft [X][X] 143 [X] ||| 0.0182166 1 ||| 1-2 ||| 0.125
+advice about [X][X] [X] ||| eine Auskunft zu [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.191667
+143 concerning [X] ||| 143 im Zusammenhang mit der [X] ||| 0.0182166 1 ||| ||| 1
+[X][X] advice about [X] ||| [X][X] eine Auskunft zu [X] ||| 0.00910828 1 ||| 0-0 ||| 0.4
+[X][X] advice about [X] ||| [X][X] Auskunft zu [X] ||| 0.00910828 1 ||| 0-0 ||| 0.4
+[X][X] about [X] ||| [X][X] zu [X] ||| 0.0182166 1 ||| 0-0 ||| 0.2
+I would like your [X][X] [X] ||| könnten Sie mir [X][X] [X] ||| 0.00910828 1 ||| 4-3 ||| 0.792858
+I would like your [X][X] [X] ||| könnten Sie mir eine [X][X] [X] ||| 0.00910828 1 ||| 4-4 ||| 0.792858
+Rule 143 concerning [X] ||| Artikel 143 im Zusammenhang mit der [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] concerning [X] ||| [X][X] im Zusammenhang mit der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.657576
+Rule [X][X] [X] ||| Artikel [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.590909
+concerning inadmissibility [X] ||| im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0182166 1 ||| ||| 1
+[X][X] advice about Rule [X] ||| [X][X] eine Auskunft zu Artikel [X] ||| 0.0182166 1 ||| 0-0 ||| 0.125
+[X][X] advice [X][X] [X] ||| [X][X] eine Auskunft [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.196429
+[X][X] advice about Rule [X] ||| [X][X] Auskunft zu Artikel [X] ||| 0.0182166 1 ||| 0-0 ||| 0.125
+[X][X] advice [X][X] [X] ||| [X][X] Auskunft [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.196429
+[X][X] about Rule [X] ||| [X][X] zu Artikel [X] ||| 0.0182166 1 ||| 0-0 ||| 0.125
+about Rule 143 concerning [X] ||| zu Artikel 143 im Zusammenhang mit der [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] 143 concerning [X] ||| [X][X] 143 im Zusammenhang mit der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.324242
+about [X][X] concerning [X] ||| zu [X][X] im Zusammenhang mit der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+about Rule [X][X] [X] ||| zu Artikel [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.310207
+143 concerning inadmissibility [X] ||| 143 im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] inadmissibility [X] ||| [X][X] Unzulässigkeit geben [X] ||| 0.0182166 1 ||| 0-0 ||| 0.643541
+143 [X][X] [X] ||| 143 [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.5
+concerning inadmissibility . [X] ||| im Zusammenhang mit der Unzulässigkeit geben ? [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] . [X] ||| [X][X] ? [X] ||| 0.0182166 1 ||| 0-0 ||| 0.643541
+concerning [X][X] [X] ||| im Zusammenhang mit der [X][X] [X] ||| 0.0182166 1 ||| 1-4 ||| 0.333333
+[X][X] advice about Rule 143 [X] ||| [X][X] eine Auskunft zu Artikel 143 [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0714286
+[X][X] advice [X][X] 143 [X] ||| [X][X] eine Auskunft [X][X] 143 [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0714286
+[X][X] advice about [X][X] [X] ||| [X][X] eine Auskunft zu [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.0714286
+[X][X] advice about Rule 143 [X] ||| [X][X] Auskunft zu Artikel 143 [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0714286
+[X][X] advice [X][X] 143 [X] ||| [X][X] Auskunft [X][X] 143 [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0714286
+[X][X] advice about [X][X] [X] ||| [X][X] Auskunft zu [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0714286
+[X][X] about Rule 143 [X] ||| [X][X] zu Artikel 143 [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0714286
+[X][X] about [X][X] [X] ||| [X][X] zu [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0714286
+advice about Rule 143 concerning [X] ||| Auskunft zu Artikel 143 im Zusammenhang mit der [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] Rule 143 concerning [X] ||| [X][X] Artikel 143 im Zusammenhang mit der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.157576
+[X][X] Rule [X][X] [X] ||| [X][X] Artikel [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.210207
+advice [X][X] 143 concerning [X] ||| Auskunft [X][X] 143 im Zusammenhang mit der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+advice [X][X] concerning [X] ||| Auskunft [X][X] im Zusammenhang mit der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+advice about [X][X] concerning [X] ||| Auskunft zu [X][X] im Zusammenhang mit der [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+advice about Rule [X][X] [X] ||| Auskunft zu Artikel [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.143541
+Rule 143 concerning inadmissibility [X] ||| Artikel 143 im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] concerning inadmissibility [X] ||| [X][X] im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0182166 1 ||| 0-0 ||| 0.310207
+Rule [X][X] inadmissibility [X] ||| Artikel [X][X] Unzulässigkeit geben [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+Rule 143 [X][X] [X] ||| Artikel 143 [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.257576
+143 concerning inadmissibility . [X] ||| 143 im Zusammenhang mit der Unzulässigkeit geben ? [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] inadmissibility . [X] ||| [X][X] Unzulässigkeit geben ? [X] ||| 0.0182166 1 ||| 0-0 ||| 0.310207
+143 [X][X] . [X] ||| 143 [X][X] ? [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+143 concerning [X][X] [X] ||| 143 im Zusammenhang mit der [X][X] [X] ||| 0.0182166 1 ||| 2-5 ||| 0.166667
+advice about Rule 143 concerning [X] ||| eine Auskunft zu Artikel 143 im Zusammenhang mit der [X] ||| 0.0182166 1 ||| ||| 0.0666667
+[X][X] Rule 143 concerning [X] ||| eine [X][X] Artikel 143 im Zusammenhang mit der [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0666667
+[X][X] Rule [X][X] [X] ||| eine [X][X] Artikel [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0666667
+[X][X] 143 concerning [X] ||| eine [X][X] 143 im Zusammenhang mit der [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0666667
+[X][X] concerning [X] ||| eine [X][X] im Zusammenhang mit der [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0666667
+advice [X][X] 143 concerning [X] ||| eine Auskunft [X][X] 143 im Zusammenhang mit der [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0666667
+advice [X][X] concerning [X] ||| eine Auskunft [X][X] im Zusammenhang mit der [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0666667
+advice about [X][X] concerning [X] ||| eine Auskunft zu [X][X] im Zusammenhang mit der [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0666667
+advice about Rule [X][X] [X] ||| eine Auskunft zu Artikel [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0666667
+about Rule 143 concerning inadmissibility [X] ||| zu Artikel 143 im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] 143 concerning inadmissibility [X] ||| [X][X] 143 im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0182166 1 ||| 0-0 ||| 0.143541
+[X][X] 143 [X][X] [X] ||| [X][X] 143 [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.196172
+about [X][X] concerning inadmissibility [X] ||| zu [X][X] im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+about [X][X] inadmissibility [X] ||| zu [X][X] Unzulässigkeit geben [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+about Rule [X][X] inadmissibility [X] ||| zu Artikel [X][X] Unzulässigkeit geben [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+about Rule 143 [X][X] [X] ||| zu Artikel 143 [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.143541
+Rule 143 concerning inadmissibility . [X] ||| Artikel 143 im Zusammenhang mit der Unzulässigkeit geben ? [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] concerning inadmissibility . [X] ||| [X][X] im Zusammenhang mit der Unzulässigkeit geben ? [X] ||| 0.0182166 1 ||| 0-0 ||| 0.143541
+[X][X] concerning [X][X] [X] ||| [X][X] im Zusammenhang mit der [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-5 ||| 0.143541
+Rule [X][X] inadmissibility . [X] ||| Artikel [X][X] Unzulässigkeit geben ? [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+Rule [X][X] . [X] ||| Artikel [X][X] ? [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+Rule 143 [X][X] . [X] ||| Artikel 143 [X][X] ? [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+Rule 143 concerning [X][X] [X] ||| Artikel 143 im Zusammenhang mit der [X][X] [X] ||| 0.0182166 1 ||| 3-6 ||| 0.0909091
+[X][X] Rule 143 concerning inadmissibility [X] ||| [X][X] Artikel 143 im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0526316
+[X][X] Rule [X][X] inadmissibility [X] ||| [X][X] Artikel [X][X] Unzulässigkeit geben [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0526316
+[X][X] Rule 143 [X][X] [X] ||| [X][X] Artikel 143 [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0526316
+advice [X][X] 143 concerning inadmissibility [X] ||| Auskunft [X][X] 143 im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+advice [X][X] 143 [X][X] [X] ||| Auskunft [X][X] 143 [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0526316
+advice [X][X] concerning inadmissibility [X] ||| Auskunft [X][X] im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+advice [X][X] inadmissibility [X] ||| Auskunft [X][X] Unzulässigkeit geben [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+advice about [X][X] concerning inadmissibility [X] ||| Auskunft zu [X][X] im Zusammenhang mit der Unzulässigkeit geben [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+advice about [X][X] inadmissibility [X] ||| Auskunft zu [X][X] Unzulässigkeit geben [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+advice about Rule [X][X] inadmissibility [X] ||| Auskunft zu Artikel [X][X] Unzulässigkeit geben [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0526316
+advice about Rule 143 [X][X] [X] ||| Auskunft zu Artikel 143 [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.0526316
+[X][X] 143 concerning inadmissibility . [X] ||| [X][X] 143 im Zusammenhang mit der Unzulässigkeit geben ? [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0526316
+[X][X] 143 [X][X] . [X] ||| [X][X] 143 [X][X] ? [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0526316
+[X][X] 143 concerning [X][X] [X] ||| [X][X] 143 im Zusammenhang mit der [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-6 ||| 0.0526316
+about [X][X] concerning inadmissibility . [X] ||| zu [X][X] im Zusammenhang mit der Unzulässigkeit geben ? [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+about [X][X] concerning [X][X] [X] ||| zu [X][X] im Zusammenhang mit der [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-6 ||| 0.0526316
+about [X][X] inadmissibility . [X] ||| zu [X][X] Unzulässigkeit geben ? [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+about [X][X] . [X] ||| zu [X][X] ? [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+about Rule [X][X] inadmissibility . [X] ||| zu Artikel [X][X] Unzulässigkeit geben ? [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+about Rule [X][X] . [X] ||| zu Artikel [X][X] ? [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+about Rule 143 [X][X] . [X] ||| zu Artikel 143 [X][X] ? [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0526316
+about Rule 143 concerning [X][X] [X] ||| zu Artikel 143 im Zusammenhang mit der [X][X] [X] ||| 0.0182166 1 ||| 4-7 ||| 0.0526316
+my [X] ||| meine [X] ||| 0.0182166 1 ||| ||| 1
+question [X] ||| Frage [X] ||| 0.0182166 1 ||| ||| 1
+relates [X] ||| betrifft [X] ||| 0.0182166 1 ||| ||| 1
+relates to [X] ||| betrifft [X] ||| 0.0182166 1 ||| ||| 1
+come up [X] ||| kommen [X] ||| 0.0182166 1 ||| ||| 1
+will [X] ||| wird [X] ||| 0.0182166 1 ||| ||| 1
+and [X] ||| und [X] ||| 0.0182166 1 ||| ||| 1
+which [X] ||| die [X] ||| 0.0182166 1 ||| ||| 1
+I [X] ||| ich [X] ||| 0.0182166 1 ||| ||| 1
+then [X] ||| dann [X] ||| 0.0182166 1 ||| ||| 1
+again [X] ||| erneut [X] ||| 0.0182166 1 ||| ||| 1
+will [X] ||| werde [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+my question [X] ||| meine Frage [X] ||| 0.0182166 1 ||| ||| 1
+question relates [X] ||| Frage betrifft [X] ||| 0.0182166 1 ||| ||| 1
+question relates to [X] ||| Frage betrifft [X] ||| 0.0182166 1 ||| ||| 0.5
+question [X][X] [X] ||| Frage [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.766667
+something [X] ||| eine Angelegenheit [X] ||| 0.0182166 1 ||| ||| 1
+to something [X] ||| eine Angelegenheit [X] ||| 0.0182166 1 ||| ||| 1
+that [X] ||| , die [X] ||| 0.0182166 1 ||| ||| 1
+on Thursday [X] ||| am Donnerstag [X] ||| 0.0182166 1 ||| ||| 1
+will come up [X] ||| kommen wird [X] ||| 0.0182166 1 ||| ||| 0.5
+will [X][X] [X] ||| [X][X] wird [X] ||| 0.0182166 1 ||| 1-0 ||| 0.5
+and [X] ||| und auf [X] ||| 0.0182166 1 ||| ||| 1
+which [X] ||| auf die [X] ||| 0.0182166 1 ||| ||| 1
+which I [X] ||| die ich [X] ||| 0.0182166 1 ||| ||| 1
+my question relates [X] ||| meine Frage betrifft [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] relates [X] ||| [X][X] betrifft [X] ||| 0.0182166 1 ||| 0-0 ||| 0.333333
+my [X][X] [X] ||| meine [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.679798
+my question relates to [X] ||| meine Frage betrifft [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] relates to [X] ||| [X][X] betrifft [X] ||| 0.0182166 1 ||| 0-0 ||| 0.2
+my [X][X] to [X] ||| meine [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.2
+my question [X][X] [X] ||| meine Frage [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.346465
+relates to something [X] ||| betrifft eine Angelegenheit [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] something [X] ||| [X][X] eine Angelegenheit [X] ||| 0.0182166 1 ||| 0-0 ||| 0.590909
+relates [X][X] [X] ||| betrifft [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.5
+and which [X] ||| und auf die [X] ||| 0.0182166 1 ||| ||| 1
+which I [X] ||| auf die ich [X] ||| 0.0182166 1 ||| ||| 1
+question relates to something [X] ||| Frage betrifft eine Angelegenheit [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] to something [X] ||| [X][X] eine Angelegenheit [X] ||| 0.0182166 1 ||| 0-0 ||| 0.257576
+question [X][X] something [X] ||| Frage [X][X] eine Angelegenheit [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+question relates [X][X] [X] ||| Frage betrifft [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.266667
+something that [X] ||| eine Angelegenheit , die [X] ||| 0.0182166 1 ||| ||| 1
+to something that [X] ||| eine Angelegenheit , die [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] that [X] ||| [X][X] , die [X] ||| 0.0182166 1 ||| 0-0 ||| 0.822222
+and which I [X] ||| und auf die ich [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] I [X] ||| [X][X] ich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25
+and [X][X] [X] ||| und [X][X] [X] ||| 0.00910828 1 ||| 1-1 ||| 0.5
+and [X][X] [X] ||| und auf [X][X] [X] ||| 0.00910828 1 ||| 1-2 ||| 0.5
+my question relates to something [X] ||| meine Frage betrifft eine Angelegenheit [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] relates to something [X] ||| [X][X] betrifft eine Angelegenheit [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0909091
+[X][X] relates [X][X] [X] ||| [X][X] betrifft [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.146465
+my [X][X] to something [X] ||| meine [X][X] eine Angelegenheit [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+my [X][X] something [X] ||| meine [X][X] eine Angelegenheit [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+my question [X][X] something [X] ||| meine Frage [X][X] eine Angelegenheit [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+my question relates [X][X] [X] ||| meine Frage betrifft [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.146465
+relates to something that [X] ||| betrifft eine Angelegenheit , die [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] something that [X] ||| [X][X] eine Angelegenheit , die [X] ||| 0.0182166 1 ||| 0-0 ||| 0.322222
+relates [X][X] that [X] ||| betrifft [X][X] , die [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+relates to [X][X] [X] ||| betrifft [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.166667
+question relates to something that [X] ||| Frage betrifft eine Angelegenheit , die [X] ||| 0.0182166 1 ||| ||| 0.1
+[X][X] to something that [X] ||| [X][X] eine Angelegenheit , die [X] ||| 0.0182166 1 ||| 0-0 ||| 0.155556
+question [X][X] something that [X] ||| Frage [X][X] eine Angelegenheit , die [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+question [X][X] that [X] ||| Frage [X][X] , die [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+question relates [X][X] that [X] ||| Frage betrifft [X][X] , die [X] ||| 0.0182166 1 ||| 2-2 ||| 0.1
+question relates to [X][X] [X] ||| Frage betrifft [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.1
+[X][X] relates to something that [X] ||| [X][X] betrifft eine Angelegenheit , die [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0555556
+[X][X] relates [X][X] that [X] ||| [X][X] betrifft [X][X] , die [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0555556
+[X][X] relates to [X][X] [X] ||| [X][X] betrifft [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0555556
+my [X][X] to something that [X] ||| meine [X][X] eine Angelegenheit , die [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+my [X][X] to [X][X] [X] ||| meine [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0555556
+my [X][X] something that [X] ||| meine [X][X] eine Angelegenheit , die [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+my [X][X] that [X] ||| meine [X][X] , die [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+my question [X][X] something that [X] ||| meine Frage [X][X] eine Angelegenheit , die [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0555556
+my question [X][X] that [X] ||| meine Frage [X][X] , die [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0555556
+my question relates [X][X] that [X] ||| meine Frage betrifft [X][X] , die [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0555556
+my question relates to [X][X] [X] ||| meine Frage betrifft [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.0555556
+and contains [X] ||| mit [X] ||| 0.0182166 1 ||| ||| 1
+Cunha report [X] ||| Cunha-Bericht [X] ||| 0.0182166 1 ||| ||| 1
+on [X] ||| über [X] ||| 0.0182166 1 ||| ||| 1
+multiannual [X] ||| mehrjährige [X] ||| 0.0182166 1 ||| ||| 1
+guidance programmes [X] ||| Ausrichtungsprogramme [X] ||| 0.0182166 1 ||| ||| 1
+guidance programmes comes [X] ||| Ausrichtungsprogramme [X] ||| 0.0182166 1 ||| ||| 1
+before [X] ||| befassen [X] ||| 0.0182166 1 ||| ||| 1
+comes before [X] ||| befassen [X] ||| 0.0182166 1 ||| ||| 1
+in [X] ||| in [X] ||| 0.0182166 1 ||| ||| 1
+paragraph [X] ||| Absatz [X] ||| 0.0182166 1 ||| ||| 1
+6 [X] ||| 6 [X] ||| 0.0182166 1 ||| ||| 1
+proposal [X] ||| vorschlägt [X] ||| 0.0182166 1 ||| ||| 1
+that [X] ||| , [X] ||| 0.0182166 1 ||| ||| 1
+for [X] ||| daß [X] ||| 0.0182166 1 ||| ||| 1
+countries [X] ||| Länder [X] ||| 0.0182166 1 ||| ||| 1
+which [X] ||| die [X] ||| 0.0182166 1 ||| ||| 1
+their [X] ||| ihr [X] ||| 0.0182166 1 ||| ||| 1
+fleet [X] ||| Soll [X] ||| 0.0182166 1 ||| ||| 1
+fail [X] ||| nicht [X] ||| 0.0182166 1 ||| ||| 1
+meet [X] ||| erfüllen [X] ||| 0.0182166 1 ||| ||| 1
+to [X] ||| , [X] ||| 0.0182166 1 ||| ||| 1
+annually [X] ||| jährlich [X] ||| 0.0182166 1 ||| ||| 1
+introduced [X] ||| mit [X] ||| 0.0182166 1 ||| ||| 1
+a [X] ||| einer [X] ||| 0.0182166 1 ||| ||| 1
+form [X] ||| Art [X] ||| 0.0182166 1 ||| ||| 1
+form of [X] ||| Art [X] ||| 0.0182166 1 ||| ||| 1
+be [X] ||| werden [X] ||| 0.0182166 1 ||| ||| 1
+should [X] ||| sollen [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+Parliament [X] ||| das Parlament [X] ||| 0.0182166 1 ||| ||| 1
+on Thursday [X] ||| am Donnerstag [X] ||| 0.0182166 1 ||| ||| 1
+Cunha report on [X] ||| Cunha-Bericht über [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] on [X] ||| [X][X] über [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+on multiannual [X] ||| über mehrjährige [X] ||| 0.0182166 1 ||| ||| 1
+multiannual guidance programmes [X] ||| mehrjährige Ausrichtungsprogramme [X] ||| 0.0182166 1 ||| ||| 0.5
+multiannual [X][X] [X] ||| mehrjährige [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.17821
+multiannual guidance programmes comes [X] ||| mehrjährige Ausrichtungsprogramme [X] ||| 0.0182166 1 ||| ||| 0.333333
+multiannual [X][X] comes [X] ||| mehrjährige [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+guidance programmes comes before [X] ||| Ausrichtungsprogramme befassen [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] comes before [X] ||| [X][X] befassen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.536398
+[X][X] before [X] ||| [X][X] befassen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.536398
+guidance programmes [X][X] [X] ||| Ausrichtungsprogramme [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.616667
+before [X] ||| befassen , [X] ||| 0.0182166 1 ||| ||| 1
+comes before [X] ||| befassen , [X] ||| 0.0182166 1 ||| ||| 1
+in [X] ||| der in [X] ||| 0.0182166 1 ||| ||| 1
+in paragraph [X] ||| in Absatz [X] ||| 0.0182166 1 ||| ||| 1
+paragraph 6 [X] ||| Absatz 6 [X] ||| 0.0182166 1 ||| ||| 1
+for countries [X] ||| daß Länder [X] ||| 0.0182166 1 ||| ||| 1
+countries [X] ||| Länder , [X] ||| 0.0182166 1 ||| ||| 1
+which [X] ||| , die [X] ||| 0.0182166 1 ||| ||| 1
+their fleet [X] ||| ihr Soll [X] ||| 0.0182166 1 ||| ||| 1
+reduction targets [X] ||| zur Flottenverkleinerung [X] ||| 0.0182166 1 ||| ||| 1
+to meet [X] ||| erfüllen , [X] ||| 0.0182166 1 ||| ||| 1
+a form [X] ||| einer Art [X] ||| 0.0182166 1 ||| ||| 1
+a form of [X] ||| einer Art [X] ||| 0.0182166 1 ||| ||| 0.5
+a [X][X] [X] ||| einer [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.733766
+quota penalties [X] ||| Quotenstrafe belegt [X] ||| 0.0182166 1 ||| ||| 1
+of quota penalties [X] ||| Quotenstrafe belegt [X] ||| 0.0182166 1 ||| ||| 1
+should be [X] ||| werden sollen [X] ||| 0.0182166 1 ||| ||| 1
+Parliament [X] ||| das Parlament wird [X] ||| 0.0182166 1 ||| ||| 1
+on Thursday [X] ||| sich am Donnerstag [X] ||| 0.0182166 1 ||| ||| 1
+on Thursday and contains [X] ||| am Donnerstag mit [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] and contains [X] ||| [X][X] mit [X] ||| 0.0182166 1 ||| 0-0 ||| 0.894444
+on Thursday [X][X] [X] ||| am Donnerstag [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.333333
+Cunha report on multiannual [X] ||| Cunha-Bericht über mehrjährige [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] on multiannual [X] ||| [X][X] über mehrjährige [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25
+[X][X] multiannual [X] ||| [X][X] mehrjährige [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25
+Cunha report [X][X] [X] ||| Cunha-Bericht [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.545163
+on multiannual guidance programmes [X] ||| über mehrjährige Ausrichtungsprogramme [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] guidance programmes [X] ||| [X][X] Ausrichtungsprogramme [X] ||| 0.0182166 1 ||| 0-0 ||| 0.35
+on [X][X] [X] ||| über [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.626874
+on multiannual [X][X] [X] ||| über mehrjährige [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.626874
+on multiannual guidance programmes comes [X] ||| über mehrjährige Ausrichtungsprogramme [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] guidance programmes comes [X] ||| [X][X] Ausrichtungsprogramme [X] ||| 0.0182166 1 ||| 0-0 ||| 0.24359
+on [X][X] comes [X] ||| über [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+on multiannual [X][X] comes [X] ||| über mehrjährige [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.166667
+multiannual guidance programmes comes before [X] ||| mehrjährige Ausrichtungsprogramme befassen [X] ||| 0.0182166 1 ||| ||| 0.142857
+multiannual [X][X] comes before [X] ||| mehrjährige [X][X] befassen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+multiannual [X][X] before [X] ||| mehrjährige [X][X] befassen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+multiannual guidance programmes [X][X] [X] ||| mehrjährige Ausrichtungsprogramme [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.344877
+guidance programmes comes before [X] ||| Ausrichtungsprogramme befassen , [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] comes before [X] ||| [X][X] befassen , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.414815
+[X][X] before [X] ||| [X][X] befassen , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.414815
+guidance programmes [X][X] [X] ||| Ausrichtungsprogramme [X][X] , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.2
+before [X] ||| befassen , der [X] ||| 0.0182166 1 ||| ||| 1
+comes before [X] ||| befassen , der [X] ||| 0.0182166 1 ||| ||| 1
+in [X] ||| , der in [X] ||| 0.0182166 1 ||| ||| 1
+in paragraph [X] ||| der in Absatz [X] ||| 0.0182166 1 ||| ||| 1
+in paragraph 6 [X] ||| in Absatz 6 [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] 6 [X] ||| [X][X] 6 [X] ||| 0.0182166 1 ||| 0-0 ||| 0.783333
+in [X][X] [X] ||| in [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+for countries [X] ||| daß Länder , [X] ||| 0.0182166 1 ||| ||| 1
+countries which [X] ||| Länder , die [X] ||| 0.0182166 1 ||| ||| 1
+fleet reduction targets [X] ||| Soll zur Flottenverkleinerung [X] ||| 0.0182166 1 ||| ||| 0.5
+fleet [X][X] [X] ||| Soll [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.5
+fail to meet [X] ||| nicht erfüllen , [X] ||| 0.0182166 1 ||| ||| 0.5
+fail [X][X] [X] ||| nicht [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.5
+form of quota penalties [X] ||| Art Quotenstrafe belegt [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] quota penalties [X] ||| [X][X] Quotenstrafe belegt [X] ||| 0.0182166 1 ||| 0-0 ||| 0.392857
+form of [X][X] [X] ||| Art [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.375
+form [X][X] [X] ||| Art [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.375
+Parliament [X] ||| das Parlament wird sich [X] ||| 0.0182166 1 ||| ||| 1
+on Thursday [X] ||| wird sich am Donnerstag [X] ||| 0.0182166 1 ||| ||| 1
+on Thursday and contains [X] ||| sich am Donnerstag mit [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] and contains [X] ||| sich [X][X] mit [X] ||| 0.0182166 1 ||| 0-1 ||| 0.25
+on Thursday [X][X] [X] ||| sich am Donnerstag [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.25
+[X][X] on multiannual guidance programmes [X] ||| [X][X] über mehrjährige Ausrichtungsprogramme [X] ||| 0.0182166 1 ||| 0-0 ||| 0.1
+[X][X] on [X][X] [X] ||| [X][X] über [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.295163
+[X][X] on multiannual [X][X] [X] ||| [X][X] über mehrjährige [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.295163
+[X][X] multiannual guidance programmes [X] ||| [X][X] mehrjährige Ausrichtungsprogramme [X] ||| 0.0182166 1 ||| 0-0 ||| 0.1
+[X][X] multiannual [X][X] [X] ||| [X][X] mehrjährige [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.295163
+Cunha report [X][X] guidance programmes [X] ||| Cunha-Bericht [X][X] Ausrichtungsprogramme [X] ||| 0.0182166 1 ||| 2-1 ||| 0.1
+Cunha report on [X][X] [X] ||| Cunha-Bericht über [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.295163
+Cunha report on multiannual [X][X] [X] ||| Cunha-Bericht über mehrjährige [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.295163
+[X][X] on [X][X] comes [X] ||| [X][X] über [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0769231
+[X][X] on multiannual [X][X] comes [X] ||| [X][X] über mehrjährige [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0769231
+[X][X] multiannual guidance programmes comes [X] ||| [X][X] mehrjährige Ausrichtungsprogramme [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0769231
+[X][X] multiannual [X][X] comes [X] ||| [X][X] mehrjährige [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0769231
+Cunha report [X][X] comes [X] ||| Cunha-Bericht [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0769231
+Cunha report on [X][X] comes [X] ||| Cunha-Bericht über [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0769231
+[X][X] guidance programmes comes before [X] ||| [X][X] Ausrichtungsprogramme befassen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.143541
+[X][X] guidance programmes [X][X] [X] ||| [X][X] Ausrichtungsprogramme [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.328447
+on [X][X] comes before [X] ||| über [X][X] befassen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+on [X][X] before [X] ||| über [X][X] befassen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+on multiannual [X][X] comes before [X] ||| über mehrjährige [X][X] befassen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+on multiannual [X][X] before [X] ||| über mehrjährige [X][X] befassen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+on multiannual guidance programmes [X][X] [X] ||| über mehrjährige Ausrichtungsprogramme [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.210207
+multiannual guidance programmes comes before [X] ||| mehrjährige Ausrichtungsprogramme befassen , [X] ||| 0.0182166 1 ||| ||| 0.111111
+multiannual [X][X] comes before [X] ||| mehrjährige [X][X] befassen , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+multiannual [X][X] before [X] ||| mehrjährige [X][X] befassen , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+multiannual [X][X] [X] ||| mehrjährige [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+multiannual guidance programmes [X][X] [X] ||| mehrjährige Ausrichtungsprogramme [X][X] , [X] ||| 0.0182166 1 ||| 3-2 ||| 0.111111
+guidance programmes comes before [X] ||| Ausrichtungsprogramme befassen , der [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] comes before [X] ||| [X][X] befassen , der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.338779
+[X][X] before [X] ||| [X][X] befassen , der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.338779
+guidance programmes [X][X] [X] ||| Ausrichtungsprogramme [X][X] , der [X] ||| 0.00910828 1 ||| 2-1 ||| 0.333334
+guidance programmes [X][X] [X] ||| Ausrichtungsprogramme [X][X] der [X] ||| 0.00910828 1 ||| 2-1 ||| 0.333334
+in paragraph [X] ||| , der in Absatz [X] ||| 0.0182166 1 ||| ||| 1
+in paragraph 6 [X] ||| der in Absatz 6 [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] 6 [X] ||| der [X][X] 6 [X] ||| 0.0182166 1 ||| 0-1 ||| 0.25
+in [X][X] [X] ||| der in [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.25
+proposal in paragraph 6 [X] ||| in Absatz 6 vorschlägt [X] ||| 0.0182166 1 ||| ||| 0.25
+proposal [X][X] 6 [X] ||| [X][X] 6 vorschlägt [X] ||| 0.0182166 1 ||| 1-0 ||| 0.541667
+proposal [X][X] [X] ||| [X][X] vorschlägt [X] ||| 0.0182166 1 ||| 1-0 ||| 0.541667
+proposal in [X][X] [X] ||| in [X][X] vorschlägt [X] ||| 0.0182166 1 ||| 2-1 ||| 0.25
+for countries which [X] ||| daß Länder , die [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] which [X] ||| [X][X] , die [X] ||| 0.00910828 1 ||| 0-0 ||| 0.5
+[X][X] which [X] ||| [X][X] die [X] ||| 0.00910828 1 ||| 0-0 ||| 0.5
+for [X][X] [X] ||| daß [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+their fleet reduction targets [X] ||| ihr Soll zur Flottenverkleinerung [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] reduction targets [X] ||| [X][X] zur Flottenverkleinerung [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25
+their [X][X] [X] ||| ihr [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+their fleet [X][X] [X] ||| ihr Soll [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.25
+a form of quota penalties [X] ||| einer Art Quotenstrafe belegt [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] of quota penalties [X] ||| [X][X] Quotenstrafe belegt [X] ||| 0.0182166 1 ||| 0-0 ||| 0.142857
+a [X][X] quota penalties [X] ||| einer [X][X] Quotenstrafe belegt [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+a form of [X][X] [X] ||| einer Art [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.233766
+a form [X][X] [X] ||| einer Art [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.233766
+quota penalties should be [X] ||| Quotenstrafe belegt werden sollen [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] should be [X] ||| [X][X] werden sollen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.799242
+quota penalties [X][X] [X] ||| Quotenstrafe belegt [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.333333
+of quota penalties should be [X] ||| Quotenstrafe belegt werden sollen [X] ||| 0.0182166 1 ||| ||| 0.25
+of [X][X] should be [X] ||| [X][X] werden sollen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+of quota penalties [X][X] [X] ||| Quotenstrafe belegt [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.25
+on Thursday and contains [X] ||| wird sich am Donnerstag mit [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] and contains [X] ||| wird [X][X] mit [X] ||| 0.00910828 1 ||| 0-1 ||| 0.4
+[X][X] and contains [X] ||| wird sich [X][X] mit [X] ||| 0.00910828 1 ||| 0-2 ||| 0.4
+on Thursday [X][X] [X] ||| wird sich am Donnerstag [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.2
+[X][X] on [X][X] comes before [X] ||| [X][X] über [X][X] befassen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0526316
+[X][X] on [X][X] before [X] ||| [X][X] über [X][X] befassen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0526316
+[X][X] on multiannual [X][X] before [X] ||| [X][X] über mehrjährige [X][X] befassen [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0526316
+[X][X] multiannual [X][X] comes before [X] ||| [X][X] mehrjährige [X][X] befassen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0526316
+[X][X] multiannual [X][X] before [X] ||| [X][X] mehrjährige [X][X] befassen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0526316
+[X][X] multiannual guidance programmes [X][X] [X] ||| [X][X] mehrjährige Ausrichtungsprogramme [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.11824
+Cunha report [X][X] comes before [X] ||| Cunha-Bericht [X][X] befassen [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0526316
+Cunha report [X][X] before [X] ||| Cunha-Bericht [X][X] befassen [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0526316
+Cunha report on [X][X] before [X] ||| Cunha-Bericht über [X][X] befassen [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0526316
+[X][X] guidance programmes comes before [X] ||| [X][X] Ausrichtungsprogramme befassen , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.103704
+[X][X] guidance programmes [X][X] [X] ||| [X][X] Ausrichtungsprogramme [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.103704
+on [X][X] comes before [X] ||| über [X][X] befassen , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+on [X][X] before [X] ||| über [X][X] befassen , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+on [X][X] [X] ||| über [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+on multiannual [X][X] comes before [X] ||| über mehrjährige [X][X] befassen , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0666667
+on multiannual [X][X] before [X] ||| über mehrjährige [X][X] befassen , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0666667
+on multiannual [X][X] [X] ||| über mehrjährige [X][X] , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0666667
+on multiannual guidance programmes [X][X] [X] ||| über mehrjährige Ausrichtungsprogramme [X][X] , [X] ||| 0.0182166 1 ||| 4-3 ||| 0.0666667
+multiannual guidance programmes comes before [X] ||| mehrjährige Ausrichtungsprogramme befassen , der [X] ||| 0.0182166 1 ||| ||| 0.0909091
+multiannual [X][X] comes before [X] ||| mehrjährige [X][X] befassen , der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+multiannual [X][X] before [X] ||| mehrjährige [X][X] befassen , der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+multiannual [X][X] [X] ||| mehrjährige [X][X] , der [X] ||| 0.00910828 1 ||| 1-1 ||| 0.181818
+multiannual [X][X] [X] ||| mehrjährige [X][X] der [X] ||| 0.00910828 1 ||| 1-1 ||| 0.181818
+multiannual guidance programmes [X][X] [X] ||| mehrjährige Ausrichtungsprogramme [X][X] , der [X] ||| 0.00910828 1 ||| 3-2 ||| 0.181818
+multiannual guidance programmes [X][X] [X] ||| mehrjährige Ausrichtungsprogramme [X][X] der [X] ||| 0.00910828 1 ||| 3-2 ||| 0.181818
+in paragraph 6 [X] ||| , der in Absatz 6 [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] 6 [X] ||| , [X][X] 6 [X] ||| 0.00910828 1 ||| 0-1 ||| 0.4
+[X][X] 6 [X] ||| , der [X][X] 6 [X] ||| 0.00910828 1 ||| 0-2 ||| 0.4
+in [X][X] [X] ||| , der in [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.2
+proposal in paragraph 6 [X] ||| der in Absatz 6 vorschlägt [X] ||| 0.0182166 1 ||| ||| 0.166667
+proposal [X][X] 6 [X] ||| der [X][X] 6 vorschlägt [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+proposal [X][X] [X] ||| der [X][X] vorschlägt [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+proposal in [X][X] [X] ||| der in [X][X] vorschlägt [X] ||| 0.0182166 1 ||| 2-2 ||| 0.166667
+proposal in paragraph 6 that [X] ||| in Absatz 6 vorschlägt , [X] ||| 0.0182166 1 ||| ||| 0.2
+proposal [X][X] 6 that [X] ||| [X][X] 6 vorschlägt , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.415909
+proposal [X][X] that [X] ||| [X][X] vorschlägt , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.415909
+[X][X] that [X] ||| [X][X] , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.415909
+proposal in [X][X] that [X] ||| in [X][X] vorschlägt , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.2
+[X][X] quota penalties should be [X] ||| [X][X] Quotenstrafe belegt werden sollen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.215909
+[X][X] quota penalties [X][X] [X] ||| [X][X] Quotenstrafe belegt [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.215909
+form of [X][X] should be [X] ||| Art [X][X] werden sollen [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+form [X][X] should be [X] ||| Art [X][X] werden sollen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+form of quota penalties [X][X] [X] ||| Art Quotenstrafe belegt [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.125
+Parliament on Thursday [X] ||| das Parlament wird sich am Donnerstag [X] ||| 0.0182166 1 ||| ||| 0.25
+Parliament [X][X] [X] ||| das Parlament [X][X] [X] ||| 0.00607219 1 ||| 1-2 ||| 1.08333
+Parliament [X][X] [X] ||| das Parlament wird [X][X] [X] ||| 0.00607219 1 ||| 1-3 ||| 1.08333
+Parliament [X][X] [X] ||| das Parlament wird sich [X][X] [X] ||| 0.00607219 1 ||| 1-4 ||| 1.08333
+[X][X] on [X][X] comes before [X] ||| [X][X] über [X][X] befassen , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.037037
+[X][X] on [X][X] before [X] ||| [X][X] über [X][X] befassen , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.037037
+[X][X] on [X][X] [X] ||| [X][X] über [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.037037
+[X][X] on multiannual [X][X] before [X] ||| [X][X] über mehrjährige [X][X] befassen , [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.037037
+[X][X] on multiannual [X][X] [X] ||| [X][X] über mehrjährige [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.037037
+[X][X] multiannual [X][X] comes before [X] ||| [X][X] mehrjährige [X][X] befassen , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.037037
+[X][X] multiannual [X][X] before [X] ||| [X][X] mehrjährige [X][X] befassen , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.037037
+[X][X] multiannual [X][X] [X] ||| [X][X] mehrjährige [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.037037
+[X][X] multiannual guidance programmes [X][X] [X] ||| [X][X] mehrjährige Ausrichtungsprogramme [X][X] , [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.037037
+Cunha report [X][X] comes before [X] ||| Cunha-Bericht [X][X] befassen , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.037037
+Cunha report [X][X] before [X] ||| Cunha-Bericht [X][X] befassen , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.037037
+Cunha report [X][X] [X] ||| Cunha-Bericht [X][X] , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.037037
+Cunha report on [X][X] before [X] ||| Cunha-Bericht über [X][X] befassen , [X] ||| 0.0182166 1 ||| 3-2 ||| 0.037037
+Cunha report on [X][X] [X] ||| Cunha-Bericht über [X][X] , [X] ||| 0.0182166 1 ||| 3-2 ||| 0.037037
+Cunha report on multiannual [X][X] [X] ||| Cunha-Bericht über mehrjährige [X][X] , [X] ||| 0.0182166 1 ||| 4-3 ||| 0.037037
+[X][X] guidance programmes comes before [X] ||| [X][X] Ausrichtungsprogramme befassen , der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.081203
+[X][X] guidance programmes [X][X] [X] ||| [X][X] Ausrichtungsprogramme [X][X] , der [X] ||| 0.00910828 1 ||| 0-0 3-2 ||| 0.162406
+[X][X] guidance programmes [X][X] [X] ||| [X][X] Ausrichtungsprogramme [X][X] der [X] ||| 0.00910828 1 ||| 0-0 3-2 ||| 0.162406
+on [X][X] comes before [X] ||| über [X][X] befassen , der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+on [X][X] before [X] ||| über [X][X] befassen , der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+on [X][X] [X] ||| über [X][X] , der [X] ||| 0.00910828 1 ||| 1-1 ||| 0.105263
+on [X][X] [X] ||| über [X][X] der [X] ||| 0.00910828 1 ||| 1-1 ||| 0.105263
+on multiannual [X][X] comes before [X] ||| über mehrjährige [X][X] befassen , der [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+on multiannual [X][X] before [X] ||| über mehrjährige [X][X] befassen , der [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+on multiannual [X][X] [X] ||| über mehrjährige [X][X] , der [X] ||| 0.00910828 1 ||| 2-2 ||| 0.105263
+on multiannual [X][X] [X] ||| über mehrjährige [X][X] der [X] ||| 0.00910828 1 ||| 2-2 ||| 0.105263
+on multiannual guidance programmes [X][X] [X] ||| über mehrjährige Ausrichtungsprogramme [X][X] , der [X] ||| 0.00910828 1 ||| 4-3 ||| 0.105263
+on multiannual guidance programmes [X][X] [X] ||| über mehrjährige Ausrichtungsprogramme [X][X] der [X] ||| 0.00910828 1 ||| 4-3 ||| 0.105263
+proposal in paragraph 6 [X] ||| , der in Absatz 6 vorschlägt [X] ||| 0.0182166 1 ||| ||| 0.125
+proposal [X][X] 6 [X] ||| , [X][X] 6 vorschlägt [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+proposal [X][X] [X] ||| , [X][X] vorschlägt [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+proposal [X][X] 6 [X] ||| , der [X][X] 6 vorschlägt [X] ||| 0.0182166 1 ||| 1-2 ||| 0.125
+proposal [X][X] [X] ||| , der [X][X] vorschlägt [X] ||| 0.0182166 1 ||| 1-2 ||| 0.125
+proposal in [X][X] [X] ||| , der in [X][X] vorschlägt [X] ||| 0.0182166 1 ||| 2-3 ||| 0.125
+proposal in paragraph 6 that [X] ||| der in Absatz 6 vorschlägt , [X] ||| 0.0182166 1 ||| ||| 0.125
+proposal [X][X] 6 that [X] ||| der [X][X] 6 vorschlägt , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+proposal [X][X] that [X] ||| der [X][X] vorschlägt , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+[X][X] that [X] ||| der [X][X] , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.125
+proposal in [X][X] that [X] ||| der in [X][X] vorschlägt , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.125
+[X][X] of [X][X] should be [X] ||| [X][X] [X][X] werden sollen [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.0909091
+[X][X] of quota penalties [X][X] [X] ||| [X][X] Quotenstrafe belegt [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.0909091
+a [X][X] quota penalties [X][X] [X] ||| einer [X][X] Quotenstrafe belegt [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0909091
+a [X][X] should be [X] ||| einer [X][X] werden sollen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+a form [X][X] should be [X] ||| einer Art [X][X] werden sollen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+Parliament on Thursday and contains [X] ||| das Parlament wird sich am Donnerstag mit [X] ||| 0.0182166 1 ||| ||| 0.111111
+Parliament [X][X] and contains [X] ||| das Parlament [X][X] mit [X] ||| 0.00607218 1 ||| 1-2 ||| 0.333333
+Parliament [X][X] and contains [X] ||| das Parlament wird [X][X] mit [X] ||| 0.00607218 1 ||| 1-3 ||| 0.333333
+Parliament [X][X] and contains [X] ||| das Parlament wird sich [X][X] mit [X] ||| 0.00607218 1 ||| 1-4 ||| 0.333333
+Parliament on Thursday [X][X] [X] ||| das Parlament wird sich am Donnerstag [X][X] [X] ||| 0.0182166 1 ||| 3-6 ||| 0.111111
+[X][X] on [X][X] comes before [X] ||| [X][X] über [X][X] befassen , der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0285714
+[X][X] on [X][X] before [X] ||| [X][X] über [X][X] befassen , der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0285714
+[X][X] on [X][X] [X] ||| [X][X] über [X][X] , der [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.0571428
+[X][X] on [X][X] [X] ||| [X][X] über [X][X] der [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.0571428
+[X][X] on multiannual [X][X] before [X] ||| [X][X] über mehrjährige [X][X] befassen , der [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0285714
+[X][X] on multiannual [X][X] [X] ||| [X][X] über mehrjährige [X][X] , der [X] ||| 0.00910828 1 ||| 0-0 3-3 ||| 0.0571428
+[X][X] on multiannual [X][X] [X] ||| [X][X] über mehrjährige [X][X] der [X] ||| 0.00910828 1 ||| 0-0 3-3 ||| 0.0571428
+[X][X] multiannual [X][X] comes before [X] ||| [X][X] mehrjährige [X][X] befassen , der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0285714
+[X][X] multiannual [X][X] before [X] ||| [X][X] mehrjährige [X][X] befassen , der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0285714
+[X][X] multiannual [X][X] [X] ||| [X][X] mehrjährige [X][X] , der [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.0571428
+[X][X] multiannual [X][X] [X] ||| [X][X] mehrjährige [X][X] der [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.0571428
+[X][X] multiannual guidance programmes [X][X] [X] ||| [X][X] mehrjährige Ausrichtungsprogramme [X][X] , der [X] ||| 0.00910828 1 ||| 0-0 4-3 ||| 0.0571428
+[X][X] multiannual guidance programmes [X][X] [X] ||| [X][X] mehrjährige Ausrichtungsprogramme [X][X] der [X] ||| 0.00910828 1 ||| 0-0 4-3 ||| 0.0571428
+Cunha report [X][X] comes before [X] ||| Cunha-Bericht [X][X] befassen , der [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0285714
+Cunha report [X][X] before [X] ||| Cunha-Bericht [X][X] befassen , der [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0285714
+Cunha report [X][X] [X] ||| Cunha-Bericht [X][X] , der [X] ||| 0.00910828 1 ||| 2-1 ||| 0.0571428
+Cunha report [X][X] [X] ||| Cunha-Bericht [X][X] der [X] ||| 0.00910828 1 ||| 2-1 ||| 0.0571428
+Cunha report on [X][X] before [X] ||| Cunha-Bericht über [X][X] befassen , der [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0285714
+Cunha report on [X][X] [X] ||| Cunha-Bericht über [X][X] , der [X] ||| 0.00910828 1 ||| 3-2 ||| 0.0571428
+Cunha report on [X][X] [X] ||| Cunha-Bericht über [X][X] der [X] ||| 0.00910828 1 ||| 3-2 ||| 0.0571428
+Cunha report on multiannual [X][X] [X] ||| Cunha-Bericht über mehrjährige [X][X] , der [X] ||| 0.00910828 1 ||| 4-3 ||| 0.0571428
+Cunha report on multiannual [X][X] [X] ||| Cunha-Bericht über mehrjährige [X][X] der [X] ||| 0.00910828 1 ||| 4-3 ||| 0.0571428
+proposal in paragraph 6 that [X] ||| , der in Absatz 6 vorschlägt , [X] ||| 0.0182166 1 ||| ||| 0.0909091
+proposal [X][X] 6 that [X] ||| , [X][X] 6 vorschlägt , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+proposal [X][X] that [X] ||| , [X][X] vorschlägt , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+[X][X] that [X] ||| , [X][X] , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0909091
+proposal [X][X] 6 that [X] ||| , der [X][X] 6 vorschlägt , [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0909091
+proposal [X][X] that [X] ||| , der [X][X] vorschlägt , [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0909091
+[X][X] that [X] ||| , der [X][X] , [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0909091
+proposal in [X][X] that [X] ||| , der in [X][X] vorschlägt , [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0909091
+fail to meet [X][X] [X] ||| [X][X] nicht erfüllen , [X] ||| 0.0182166 1 ||| 3-0 ||| 0.142857
+fail to meet their [X][X] [X] ||| ihr [X][X] nicht erfüllen , [X] ||| 0.0182166 1 ||| 4-1 ||| 0.142857
+[X][X] their [X][X] [X] ||| ihr [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-1 0-2 ||| 0.142857
+fail [X][X] their [X][X] [X] ||| ihr [X][X] nicht [X][X] [X] ||| 0.0182166 1 ||| 3-1 1-3 ||| 0.142857
+[X][X] their fleet [X][X] [X] ||| ihr Soll [X][X] [X][X] [X] ||| 0.0182166 1 ||| 3-2 0-3 ||| 0.142857
+fail [X][X] their fleet [X][X] [X] ||| ihr Soll [X][X] nicht [X][X] [X] ||| 0.0182166 1 ||| 4-2 1-4 ||| 0.142857
+[X][X] their fleet reduction targets [X] ||| ihr Soll zur Flottenverkleinerung [X][X] [X] ||| 0.0182166 1 ||| 0-4 ||| 0.142857
+[X][X] of [X][X] introduced [X] ||| mit [X][X] [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.125
+[X][X] quota penalties [X][X] introduced [X] ||| mit [X][X] Quotenstrafe belegt [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.125
+[X][X] should be introduced [X] ||| mit [X][X] werden sollen [X] ||| 0.0182166 1 ||| 0-1 ||| 0.125
+[X][X] introduced [X] ||| mit [X][X] [X] ||| 0.0182166 1 ||| 0-1 ||| 0.125
+a [X][X] should be introduced [X] ||| mit einer [X][X] werden sollen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.125
+a [X][X] introduced [X] ||| mit einer [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.125
+a form of [X][X] introduced [X] ||| mit einer Art [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.125
+a form [X][X] introduced [X] ||| mit einer Art [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.125
+which fail to meet [X][X] [X] ||| die [X][X] nicht erfüllen , [X] ||| 0.0182166 1 ||| 4-1 ||| 0.2
+which [X][X] [X] ||| die [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.45
+which [X][X] their [X][X] [X] ||| die ihr [X][X] [X][X] [X] ||| 0.0182166 1 ||| 3-2 1-3 ||| 0.2
+which fail [X][X] their [X][X] [X] ||| die ihr [X][X] nicht [X][X] [X] ||| 0.0182166 1 ||| 4-2 2-4 ||| 0.2
+which [X][X] their fleet [X][X] [X] ||| die ihr Soll [X][X] [X][X] [X] ||| 0.0182166 1 ||| 4-3 1-4 ||| 0.2
+fail to meet [X][X] annually [X] ||| [X][X] nicht erfüllen , jährlich [X] ||| 0.0182166 1 ||| 3-0 ||| 0.2
+[X][X] annually [X] ||| [X][X] jährlich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.65
+[X][X] their [X][X] annually [X] ||| ihr [X][X] [X][X] jährlich [X] ||| 0.0182166 1 ||| 2-1 0-2 ||| 0.2
+fail [X][X] their [X][X] annually [X] ||| ihr [X][X] nicht [X][X] jährlich [X] ||| 0.0182166 1 ||| 3-1 1-3 ||| 0.2
+[X][X] their fleet [X][X] annually [X] ||| ihr Soll [X][X] [X][X] jährlich [X] ||| 0.0182166 1 ||| 3-2 0-3 ||| 0.2
+which fail to meet [X][X] [X] ||| , die [X][X] nicht erfüllen , [X] ||| 0.0182166 1 ||| 4-2 ||| 0.2
+which [X][X] [X] ||| , die [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.4
+which [X][X] their [X][X] [X] ||| , die ihr [X][X] [X][X] [X] ||| 0.0182166 1 ||| 3-3 1-4 ||| 0.2
+which fail [X][X] their [X][X] [X] ||| , die ihr [X][X] nicht [X][X] [X] ||| 0.0182166 1 ||| 4-3 2-5 ||| 0.2
+which [X][X] their fleet [X][X] [X] ||| , die ihr Soll [X][X] [X][X] [X] ||| 0.0182166 1 ||| 4-4 1-5 ||| 0.2
+which [X][X] annually [X] ||| die [X][X] jährlich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+which [X][X] their [X][X] annually [X] ||| die ihr [X][X] [X][X] jährlich [X] ||| 0.0182166 1 ||| 3-2 1-3 ||| 0.25
+[X][X] fail to meet [X][X] [X] ||| [X][X] [X][X] nicht erfüllen , [X] ||| 0.0182166 1 ||| 0-0 4-1 ||| 0.2
+countries [X][X] [X] ||| Länder [X][X] [X] ||| 0.00910828 1 ||| 1-1 ||| 0.4
+countries [X][X] [X] ||| Länder , [X][X] [X] ||| 0.00910828 1 ||| 1-2 ||| 0.4
+countries which [X][X] [X] ||| Länder , die [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.2
+countries which [X][X] their [X][X] [X] ||| Länder , die ihr [X][X] [X][X] [X] ||| 0.0182166 1 ||| 4-4 2-5 ||| 0.2
+[X][X] annually [X] ||| , [X][X] jährlich [X] ||| 0.0182166 1 ||| 0-1 ||| 0.2
+which [X][X] annually [X] ||| , die [X][X] jährlich [X] ||| 0.0182166 1 ||| 1-2 ||| 0.2
+which [X][X] their [X][X] annually [X] ||| , die ihr [X][X] [X][X] jährlich [X] ||| 0.0182166 1 ||| 3-3 1-4 ||| 0.2
+it [X] ||| zwar [X] ||| 0.0182166 1 ||| ||| 1
+should [X] ||| sollen [X] ||| 0.0182166 1 ||| ||| 1
+that this [X] ||| derartige [X] ||| 0.0182166 1 ||| ||| 1
+says [X] ||| Strafen [X] ||| 0.0182166 1 ||| ||| 1
+despite [X] ||| trotz [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| des [X] ||| 0.0182166 1 ||| ||| 1
+principle [X] ||| Grundsatzes [X] ||| 0.0182166 1 ||| ||| 1
+of [X] ||| der [X] ||| 0.0182166 1 ||| ||| 1
+relative [X] ||| relativen [X] ||| 0.0182166 1 ||| ||| 1
+stability [X] ||| Stabilität [X] ||| 0.0182166 1 ||| ||| 1
+done [X] ||| verhängt [X] ||| 0.0182166 1 ||| ||| 1
+be [X] ||| werden [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+it [X] ||| und zwar [X] ||| 0.0182166 1 ||| ||| 1
+that this should [X] ||| sollen derartige [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] should [X] ||| sollen [X][X] [X] ||| 0.0182166 1 ||| 0-1 ||| 0.75
+says that this [X] ||| derartige Strafen [X] ||| 0.0182166 1 ||| ||| 0.5
+says [X][X] [X] ||| [X][X] Strafen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.75
+despite the [X] ||| trotz des [X] ||| 0.0182166 1 ||| ||| 1
+the principle [X] ||| des Grundsatzes [X] ||| 0.0182166 1 ||| ||| 1
+principle of [X] ||| Grundsatzes der [X] ||| 0.0182166 1 ||| ||| 1
+of relative [X] ||| der relativen [X] ||| 0.0182166 1 ||| ||| 1
+relative stability [X] ||| relativen Stabilität [X] ||| 0.0182166 1 ||| ||| 1
+be done [X] ||| verhängt werden [X] ||| 0.0182166 1 ||| ||| 1
+says that this should [X] ||| sollen derartige Strafen [X] ||| 0.0182166 1 ||| ||| 0.25
+says [X][X] should [X] ||| sollen [X][X] Strafen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+despite the principle [X] ||| trotz des Grundsatzes [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] principle [X] ||| [X][X] Grundsatzes [X] ||| 0.0182166 1 ||| 0-0 ||| 0.333333
+despite [X][X] [X] ||| trotz [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.643541
+the principle of [X] ||| des Grundsatzes der [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] of [X] ||| [X][X] der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+the [X][X] [X] ||| des [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.590909
+principle of relative [X] ||| Grundsatzes der relativen [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] relative [X] ||| [X][X] relativen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.590909
+principle [X][X] [X] ||| Grundsatzes [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.5
+of relative stability [X] ||| der relativen Stabilität [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] stability [X] ||| [X][X] Stabilität [X] ||| 0.0182166 1 ||| 0-0 ||| 0.643541
+of [X][X] [X] ||| der [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+it says that this should [X] ||| zwar sollen derartige Strafen [X] ||| 0.0182166 1 ||| ||| 0.2
+it says [X][X] [X] ||| zwar [X][X] Strafen [X] ||| 0.0182166 1 ||| 2-1 ||| 0.2
+it [X][X] [X] ||| zwar [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.2
+it says [X][X] should [X] ||| zwar sollen [X][X] Strafen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.2
+it [X][X] should [X] ||| zwar sollen [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.2
+despite the principle of [X] ||| trotz des Grundsatzes der [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] principle of [X] ||| [X][X] Grundsatzes der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.166667
+despite [X][X] of [X] ||| trotz [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+despite the [X][X] [X] ||| trotz des [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.310207
+the principle of relative [X] ||| des Grundsatzes der relativen [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] of relative [X] ||| [X][X] der relativen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.257576
+the [X][X] relative [X] ||| des [X][X] relativen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+the principle [X][X] [X] ||| des Grundsatzes [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.257576
+principle of relative stability [X] ||| Grundsatzes der relativen Stabilität [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] relative stability [X] ||| [X][X] relativen Stabilität [X] ||| 0.0182166 1 ||| 0-0 ||| 0.310207
+principle [X][X] stability [X] ||| Grundsatzes [X][X] Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+principle of [X][X] [X] ||| Grundsatzes der [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.166667
+it says that this should [X] ||| und zwar sollen derartige Strafen [X] ||| 0.0182166 1 ||| ||| 0.2
+it says [X][X] [X] ||| und zwar [X][X] Strafen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.2
+it [X][X] [X] ||| und zwar [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.2
+it says [X][X] should [X] ||| und zwar sollen [X][X] Strafen [X] ||| 0.0182166 1 ||| 2-3 ||| 0.2
+it [X][X] should [X] ||| und zwar sollen [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.2
+despite the principle of relative [X] ||| trotz des Grundsatzes der relativen [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] principle of relative [X] ||| [X][X] Grundsatzes der relativen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0909091
+[X][X] principle [X][X] [X] ||| [X][X] Grundsatzes [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.143541
+despite [X][X] of relative [X] ||| trotz [X][X] der relativen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+despite [X][X] relative [X] ||| trotz [X][X] relativen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+despite the [X][X] relative [X] ||| trotz des [X][X] relativen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+despite the principle [X][X] [X] ||| trotz des Grundsatzes [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.143541
+the principle of relative stability [X] ||| des Grundsatzes der relativen Stabilität [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] of relative stability [X] ||| [X][X] der relativen Stabilität [X] ||| 0.0182166 1 ||| 0-0 ||| 0.143541
+[X][X] of [X][X] [X] ||| [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.143541
+the [X][X] relative stability [X] ||| des [X][X] relativen Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+the [X][X] stability [X] ||| des [X][X] Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+the principle [X][X] stability [X] ||| des Grundsatzes [X][X] Stabilität [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+the principle of [X][X] [X] ||| des Grundsatzes der [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0909091
+[X][X] principle of relative stability [X] ||| [X][X] Grundsatzes der relativen Stabilität [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0526316
+[X][X] principle [X][X] stability [X] ||| [X][X] Grundsatzes [X][X] Stabilität [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0526316
+[X][X] principle of [X][X] [X] ||| [X][X] Grundsatzes der [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0526316
+despite [X][X] of relative stability [X] ||| trotz [X][X] der relativen Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+despite [X][X] of [X][X] [X] ||| trotz [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0526316
+despite [X][X] relative stability [X] ||| trotz [X][X] relativen Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+despite [X][X] stability [X] ||| trotz [X][X] Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+despite the [X][X] relative stability [X] ||| trotz des [X][X] relativen Stabilität [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+despite the [X][X] stability [X] ||| trotz des [X][X] Stabilität [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+despite the principle [X][X] stability [X] ||| trotz des Grundsatzes [X][X] Stabilität [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0526316
+despite the principle of [X][X] [X] ||| trotz des Grundsatzes der [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.0526316
+done [X][X] principle [X][X] stability [X] ||| [X][X] Grundsatzes [X][X] Stabilität verhängt [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0666667
+done [X][X] principle [X][X] [X] ||| [X][X] Grundsatzes [X][X] verhängt [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0666667
+done [X][X] principle of [X][X] [X] ||| [X][X] Grundsatzes der [X][X] verhängt [X] ||| 0.0182166 1 ||| 1-0 4-3 ||| 0.0666667
+done [X][X] of relative stability [X] ||| [X][X] der relativen Stabilität verhängt [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0666667
+done [X][X] of [X][X] [X] ||| [X][X] der [X][X] verhängt [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0666667
+done [X][X] relative stability [X] ||| [X][X] relativen Stabilität verhängt [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0666667
+done [X][X] stability [X] ||| [X][X] Stabilität verhängt [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0666667
+done [X][X] [X] ||| [X][X] verhängt [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0666667
+done despite [X][X] of [X][X] [X] ||| trotz [X][X] der [X][X] verhängt [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0666667
+done despite [X][X] relative stability [X] ||| trotz [X][X] relativen Stabilität verhängt [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0666667
+done despite [X][X] stability [X] ||| trotz [X][X] Stabilität verhängt [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0666667
+done despite [X][X] [X] ||| trotz [X][X] verhängt [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0666667
+done despite the [X][X] stability [X] ||| trotz des [X][X] Stabilität verhängt [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0666667
+done despite the [X][X] [X] ||| trotz des [X][X] verhängt [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0666667
+done despite the principle [X][X] [X] ||| trotz des Grundsatzes [X][X] verhängt [X] ||| 0.0182166 1 ||| 4-3 ||| 0.0666667
+be done [X][X] principle [X][X] [X] ||| [X][X] Grundsatzes [X][X] verhängt werden [X] ||| 0.0182166 1 ||| 2-0 4-2 ||| 0.0666667
+be done [X][X] of [X][X] [X] ||| [X][X] der [X][X] verhängt werden [X] ||| 0.0182166 1 ||| 2-0 4-2 ||| 0.0666667
+be done [X][X] relative stability [X] ||| [X][X] relativen Stabilität verhängt werden [X] ||| 0.0182166 1 ||| 2-0 ||| 0.0666667
+be done [X][X] stability [X] ||| [X][X] Stabilität verhängt werden [X] ||| 0.0182166 1 ||| 2-0 ||| 0.0666667
+be done [X][X] [X] ||| [X][X] verhängt werden [X] ||| 0.0182166 1 ||| 2-0 ||| 0.0666667
+be [X][X] [X] ||| [X][X] werden [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0666667
+[X][X] despite [X][X] relative stability [X] ||| trotz [X][X] relativen Stabilität [X][X] [X] ||| 0.0182166 1 ||| 2-1 0-4 ||| 0.0666667
+be done despite [X][X] stability [X] ||| trotz [X][X] Stabilität verhängt werden [X] ||| 0.0182166 1 ||| 3-1 ||| 0.0666667
+[X][X] despite [X][X] stability [X] ||| trotz [X][X] Stabilität [X][X] [X] ||| 0.0182166 1 ||| 2-1 0-3 ||| 0.0666667
+be done despite [X][X] [X] ||| trotz [X][X] verhängt werden [X] ||| 0.0182166 1 ||| 3-1 ||| 0.0666667
+[X][X] despite [X][X] [X] ||| trotz [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-1 0-2 ||| 0.0666667
+[X][X] despite the [X][X] stability [X] ||| trotz des [X][X] Stabilität [X][X] [X] ||| 0.0182166 1 ||| 3-2 0-4 ||| 0.0666667
+be done despite the [X][X] [X] ||| trotz des [X][X] verhängt werden [X] ||| 0.0182166 1 ||| 4-2 ||| 0.0666667
+[X][X] despite the [X][X] [X] ||| trotz des [X][X] [X][X] [X] ||| 0.0182166 1 ||| 3-2 0-3 ||| 0.0666667
+[X][X] despite the principle [X][X] [X] ||| trotz des Grundsatzes [X][X] [X][X] [X] ||| 0.0182166 1 ||| 4-3 0-4 ||| 0.0666667
+be done [X][X] stability . [X] ||| [X][X] Stabilität verhängt werden . [X] ||| 0.0182166 1 ||| 2-0 ||| 0.125
+be done [X][X] . [X] ||| [X][X] verhängt werden . [X] ||| 0.0182166 1 ||| 2-0 ||| 0.125
+be [X][X] . [X] ||| [X][X] werden . [X] ||| 0.0182166 1 ||| 1-0 ||| 0.125
+[X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.125
+[X][X] despite [X][X] stability . [X] ||| trotz [X][X] Stabilität [X][X] . [X] ||| 0.0182166 1 ||| 2-1 0-3 ||| 0.125
+be done despite [X][X] . [X] ||| trotz [X][X] verhängt werden . [X] ||| 0.0182166 1 ||| 3-1 ||| 0.125
+[X][X] despite [X][X] . [X] ||| trotz [X][X] [X][X] . [X] ||| 0.0182166 1 ||| 2-1 0-2 ||| 0.125
+[X][X] despite the [X][X] . [X] ||| trotz des [X][X] [X][X] . [X] ||| 0.0182166 1 ||| 3-2 0-3 ||| 0.125
+I [X] ||| ich [X] ||| 0.0182166 1 ||| ||| 1
+believe [X] ||| meine [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| der [X] ||| 0.0182166 1 ||| ||| 1
+principle [X] ||| Grundsatz [X] ||| 0.0182166 1 ||| ||| 1
+of [X] ||| der [X] ||| 0.0182166 1 ||| ||| 1
+relative [X] ||| relativen [X] ||| 0.0182166 1 ||| ||| 1
+stability [X] ||| Stabilität [X] ||| 0.0182166 1 ||| ||| 1
+stability is [X] ||| Stabilität [X] ||| 0.0182166 1 ||| ||| 1
+a [X] ||| einen [X] ||| 0.0182166 1 ||| ||| 1
+is a [X] ||| einen [X] ||| 0.0182166 1 ||| ||| 1
+fundamental [X] ||| elementaren [X] ||| 0.0182166 1 ||| ||| 1
+legal principle [X] ||| Rechtsgrundsatz [X] ||| 0.0182166 1 ||| ||| 1
+of the [X] ||| der [X] ||| 0.0182166 1 ||| ||| 1
+common [X] ||| gemeinsamen [X] ||| 0.0182166 1 ||| ||| 1
+and [X] ||| und [X] ||| 0.0182166 1 ||| ||| 1
+a [X] ||| ein [X] ||| 0.0182166 1 ||| ||| 1
+proposal [X] ||| Vorschlag [X] ||| 0.0182166 1 ||| ||| 1
+legally [X] ||| rechtlich [X] ||| 0.0182166 1 ||| ||| 1
+inadmissible [X] ||| unzulässig [X] ||| 0.0182166 1 ||| ||| 1
+would be [X] ||| wäre [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+I believe [X] ||| ich meine [X] ||| 0.0182166 1 ||| ||| 1
+that [X] ||| , daß [X] ||| 0.0182166 1 ||| ||| 1
+the principle [X] ||| der Grundsatz [X] ||| 0.0182166 1 ||| ||| 1
+principle of [X] ||| Grundsatz der [X] ||| 0.0182166 1 ||| ||| 1
+of relative [X] ||| der relativen [X] ||| 0.0182166 1 ||| ||| 1
+relative stability [X] ||| relativen Stabilität [X] ||| 0.0182166 1 ||| ||| 1
+relative stability is [X] ||| relativen Stabilität [X] ||| 0.0182166 1 ||| ||| 0.5
+relative [X][X] [X] ||| relativen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.893478
+stability is a [X] ||| Stabilität einen [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] a [X] ||| [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.741022
+stability [X][X] [X] ||| Stabilität [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.675707
+a fundamental [X] ||| einen elementaren [X] ||| 0.0182166 1 ||| ||| 1
+is a fundamental [X] ||| einen elementaren [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] fundamental [X] ||| [X][X] elementaren [X] ||| 0.0182166 1 ||| 0-0 ||| 0.922327
+fundamental legal principle [X] ||| elementaren Rechtsgrundsatz [X] ||| 0.0182166 1 ||| ||| 0.5
+fundamental [X][X] [X] ||| elementaren [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.04627
+legal principle of the [X] ||| Rechtsgrundsatz der [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] of the [X] ||| [X][X] der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.884878
+legal principle [X][X] [X] ||| Rechtsgrundsatz [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.840278
+of the common [X] ||| der gemeinsamen [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] common [X] ||| [X][X] gemeinsamen [X] ||| 0.218091 1 ||| 0-0 ||| 1.09307
+fisheries policy [X] ||| Fischereipolitik darstellt [X] ||| 0.0182166 1 ||| ||| 1
+and a [X] ||| und ein [X] ||| 0.0182166 1 ||| ||| 1
+a proposal [X] ||| ein Vorschlag [X] ||| 0.0182166 1 ||| ||| 1
+legally [X] ||| , rechtlich [X] ||| 0.0182166 1 ||| ||| 1
+legally inadmissible [X] ||| rechtlich unzulässig [X] ||| 0.0182166 1 ||| ||| 1
+believe that [X] ||| meine , daß [X] ||| 0.0182166 1 ||| ||| 1
+that the [X] ||| , daß der [X] ||| 0.0182166 1 ||| ||| 1
+the principle of [X] ||| der Grundsatz der [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] of [X] ||| [X][X] der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.643541
+the [X][X] [X] ||| der [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.731654
+principle of relative [X] ||| Grundsatz der relativen [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] relative [X] ||| [X][X] relativen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.678023
+principle [X][X] [X] ||| Grundsatz [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.717758
+of relative stability [X] ||| der relativen Stabilität [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] stability [X] ||| [X][X] Stabilität [X] ||| 0.0182166 1 ||| 0-0 ||| 0.703664
+of [X][X] [X] ||| der [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.750168
+of relative stability is [X] ||| der relativen Stabilität [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] stability is [X] ||| [X][X] Stabilität [X] ||| 0.0182166 1 ||| 0-0 ||| 0.438419
+of [X][X] is [X] ||| der [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.2
+of relative [X][X] [X] ||| der relativen [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.416835
+relative stability is a [X] ||| relativen Stabilität einen [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] is a [X] ||| [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.407688
+relative [X][X] a [X] ||| relativen [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+relative stability [X][X] [X] ||| relativen Stabilität [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.393478
+stability is a fundamental [X] ||| Stabilität einen elementaren [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] a fundamental [X] ||| [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 0-0 ||| 0.422327
+stability [X][X] fundamental [X] ||| Stabilität [X][X] elementaren [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+stability is [X][X] [X] ||| Stabilität [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.342373
+a fundamental legal principle [X] ||| einen elementaren Rechtsgrundsatz [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] legal principle [X] ||| [X][X] Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 0-0 ||| 0.605125
+a [X][X] [X] ||| einen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.591667
+a fundamental [X][X] [X] ||| einen elementaren [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.591667
+is a fundamental legal principle [X] ||| einen elementaren Rechtsgrundsatz [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] fundamental legal principle [X] ||| [X][X] elementaren Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 0-0 ||| 0.355125
+[X][X] fundamental [X][X] [X] ||| [X][X] elementaren [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.787441
+is [X][X] legal principle [X] ||| [X][X] Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 1-0 ||| 0.142857
+is a [X][X] [X] ||| einen [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.36075
+is a fundamental [X][X] [X] ||| einen elementaren [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.36075
+fundamental legal principle of the [X] ||| elementaren Rechtsgrundsatz der [X] ||| 0.0182166 1 ||| ||| 0.2
+fundamental [X][X] of the [X] ||| elementaren [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.2
+fundamental legal principle [X][X] [X] ||| elementaren Rechtsgrundsatz [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.546266
+legal principle of the common [X] ||| Rechtsgrundsatz der gemeinsamen [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] of the common [X] ||| [X][X] der gemeinsamen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.593074
+legal principle [X][X] common [X] ||| Rechtsgrundsatz [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 2-1 ||| 0.2
+common fisheries policy [X] ||| gemeinsamen Fischereipolitik darstellt [X] ||| 0.0182166 1 ||| ||| 0.5
+common [X][X] [X] ||| gemeinsamen [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.03501
+fisheries policy and [X] ||| Fischereipolitik darstellt und [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] and [X] ||| [X][X] und [X] ||| 0.218091 1 ||| 0-0 ||| 1.05694
+and a proposal [X] ||| und ein Vorschlag [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] proposal [X] ||| [X][X] Vorschlag [X] ||| 0.0182166 1 ||| 0-0 ||| 0.65049
+and [X][X] [X] ||| und [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.5671
+legally inadmissible [X] ||| , rechtlich unzulässig [X] ||| 0.0182166 1 ||| ||| 1
+would be legally inadmissible [X] ||| rechtlich unzulässig wäre [X] ||| 0.0182166 1 ||| ||| 0.333333
+would be [X][X] [X] ||| [X][X] wäre [X] ||| 0.0182166 1 ||| 2-0 ||| 0.583333
+[X][X] legally inadmissible [X] ||| rechtlich unzulässig [X][X] [X] ||| 0.0182166 1 ||| 0-2 ||| 0.333333
+I believe that [X] ||| ich meine , daß [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] that [X] ||| [X][X] , daß [X] ||| 0.0182166 1 ||| 0-0 ||| 0.333333
+I [X][X] [X] ||| ich [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.741447
+believe that the [X] ||| meine , daß der [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] the [X] ||| [X][X] der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+believe [X][X] [X] ||| meine [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.741989
+that the principle [X] ||| , daß der Grundsatz [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] principle [X] ||| [X][X] Grundsatz [X] ||| 0.0182166 1 ||| 0-0 ||| 0.590909
+that [X][X] [X] ||| , daß [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.725729
+the principle of relative [X] ||| der Grundsatz der relativen [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] of relative [X] ||| [X][X] der relativen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.34469
+the [X][X] relative [X] ||| der [X][X] relativen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+the principle [X][X] [X] ||| der Grundsatz [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.39832
+principle of relative stability [X] ||| Grundsatz der relativen Stabilität [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] relative stability [X] ||| [X][X] relativen Stabilität [X] ||| 0.0182166 1 ||| 0-0 ||| 0.370331
+principle [X][X] stability [X] ||| Grundsatz [X][X] Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+principle of [X][X] [X] ||| Grundsatz der [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.384424
+principle of relative stability is [X] ||| Grundsatz der relativen Stabilität [X] ||| 0.0182166 1 ||| ||| 0.1
+[X][X] relative stability is [X] ||| [X][X] relativen Stabilität [X] ||| 0.0182166 1 ||| 0-0 ||| 0.238419
+[X][X] relative [X][X] [X] ||| [X][X] relativen [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.542438
+principle [X][X] stability is [X] ||| Grundsatz [X][X] Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+principle [X][X] is [X] ||| Grundsatz [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+principle of [X][X] is [X] ||| Grundsatz der [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.1
+principle of relative [X][X] [X] ||| Grundsatz der relativen [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.217758
+of relative stability is a [X] ||| der relativen Stabilität einen [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] stability is a [X] ||| [X][X] Stabilität einen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.241022
+[X][X] stability [X][X] [X] ||| [X][X] Stabilität [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.520854
+of [X][X] is a [X] ||| der [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+of [X][X] a [X] ||| der [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+of relative [X][X] a [X] ||| der relativen [X][X] einen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+of relative stability [X][X] [X] ||| der relativen Stabilität [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.216835
+relative stability is a fundamental [X] ||| relativen Stabilität einen elementaren [X] ||| 0.0182166 1 ||| ||| 0.1
+[X][X] is a fundamental [X] ||| [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25566
+relative [X][X] a fundamental [X] ||| relativen [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+relative [X][X] fundamental [X] ||| relativen [X][X] elementaren [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+relative stability [X][X] fundamental [X] ||| relativen Stabilität [X][X] elementaren [X] ||| 0.0182166 1 ||| 2-2 ||| 0.1
+relative stability is [X][X] [X] ||| relativen Stabilität [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.226812
+[X][X] a fundamental legal principle [X] ||| [X][X] einen elementaren Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 0-0 ||| 0.212268
+[X][X] a [X][X] [X] ||| [X][X] einen [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.426691
+[X][X] a fundamental [X][X] [X] ||| [X][X] einen elementaren [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.426691
+stability [X][X] fundamental legal principle [X] ||| Stabilität [X][X] elementaren Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+stability [X][X] fundamental [X][X] [X] ||| Stabilität [X][X] elementaren [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.175707
+stability is [X][X] legal principle [X] ||| Stabilität [X][X] Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0714286
+stability [X][X] legal principle [X] ||| Stabilität [X][X] Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+stability is a [X][X] [X] ||| Stabilität einen [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.175707
+stability is a fundamental [X][X] [X] ||| Stabilität einen elementaren [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.175707
+[X][X] legal principle of the [X] ||| [X][X] Rechtsgrundsatz der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.351544
+[X][X] legal principle [X][X] [X] ||| [X][X] Rechtsgrundsatz [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.773983
+a [X][X] of the [X] ||| einen [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+a fundamental [X][X] of the [X] ||| einen elementaren [X][X] der [X] ||| 0.0182166 1 ||| 2-2 ||| 0.125
+a fundamental legal principle [X][X] [X] ||| einen elementaren Rechtsgrundsatz [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.341667
+[X][X] fundamental [X][X] of the [X] ||| [X][X] elementaren [X][X] der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.226544
+[X][X] fundamental legal principle [X][X] [X] ||| [X][X] elementaren Rechtsgrundsatz [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.432316
+is [X][X] legal principle [X][X] [X] ||| [X][X] Rechtsgrundsatz [X][X] [X] ||| 0.0182166 1 ||| 1-0 4-2 ||| 0.217893
+is [X][X] of the [X] ||| [X][X] der [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0909091
+is a [X][X] of the [X] ||| einen [X][X] der [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0909091
+fundamental [X][X] of the common [X] ||| elementaren [X][X] der gemeinsamen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+fundamental [X][X] common [X] ||| elementaren [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+fundamental legal principle [X][X] common [X] ||| elementaren Rechtsgrundsatz [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 3-2 ||| 0.142857
+of the common fisheries policy [X] ||| der gemeinsamen Fischereipolitik darstellt [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] common fisheries policy [X] ||| [X][X] gemeinsamen Fischereipolitik darstellt [X] ||| 0.0182166 1 ||| 0-0 ||| 0.490909
+[X][X] common [X][X] [X] ||| [X][X] gemeinsamen [X][X] [X] ||| 0.218091 1 ||| 0-0 2-2 ||| 1.0961
+[X][X] fisheries policy [X] ||| [X][X] Fischereipolitik darstellt [X] ||| 0.0182166 1 ||| 0-0 ||| 0.490909
+of the [X][X] [X] ||| der [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.413524
+of the common [X][X] [X] ||| der gemeinsamen [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.413524
+common fisheries policy and [X] ||| gemeinsamen Fischereipolitik darstellt und [X] ||| 0.0182166 1 ||| ||| 0.25
+common [X][X] and [X] ||| gemeinsamen [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+fisheries policy and a [X] ||| Fischereipolitik darstellt und ein [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] and a [X] ||| [X][X] und ein [X] ||| 0.0182166 1 ||| 0-0 ||| 0.58228
+[X][X] a [X] ||| [X][X] ein [X] ||| 0.0182166 1 ||| 0-0 ||| 0.58228
+fisheries policy [X][X] [X] ||| Fischereipolitik darstellt [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.503788
+to subvert it [X] ||| , diesen zu unterlaufen [X] ||| 0.0182166 1 ||| ||| 1
+would be legally inadmissible [X] ||| , rechtlich unzulässig wäre [X] ||| 0.0182166 1 ||| ||| 0.25
+would be [X][X] [X] ||| , [X][X] wäre [X] ||| 0.0182166 1 ||| 2-1 ||| 0.25
+[X][X] legally inadmissible [X] ||| , rechtlich unzulässig [X][X] [X] ||| 0.0182166 1 ||| 0-3 ||| 0.25
+would be legally inadmissible . [X] ||| rechtlich unzulässig wäre . [X] ||| 0.0182166 1 ||| ||| 0.25
+would be [X][X] . [X] ||| [X][X] wäre . [X] ||| 0.0182166 1 ||| 2-0 ||| 0.416667
+[X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.666667
+[X][X] legally inadmissible . [X] ||| rechtlich unzulässig [X][X] . [X] ||| 0.0182166 1 ||| 0-2 ||| 0.25
+I believe that the [X] ||| ich meine , daß der [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] that the [X] ||| [X][X] , daß der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.166667
+I [X][X] the [X] ||| ich [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+I believe [X][X] [X] ||| ich meine [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.408114
+believe that the principle [X] ||| meine , daß der Grundsatz [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] the principle [X] ||| [X][X] der Grundsatz [X] ||| 0.0182166 1 ||| 0-0 ||| 0.257576
+believe [X][X] principle [X] ||| meine [X][X] Grundsatz [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+believe that [X][X] [X] ||| meine , daß [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.408655
+that the principle of [X] ||| , daß der Grundsatz der [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] principle of [X] ||| [X][X] Grundsatz der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.310207
+that [X][X] of [X] ||| , daß [X][X] der [X] ||| 0.0182166 1 ||| 1-2 ||| 0.166667
+that the [X][X] [X] ||| , daß der [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.392396
+the principle of relative stability [X] ||| der Grundsatz der relativen Stabilität [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] of relative stability [X] ||| [X][X] der relativen Stabilität [X] ||| 0.0182166 1 ||| 0-0 ||| 0.203664
+[X][X] of [X][X] [X] ||| [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.528345
+the [X][X] relative stability [X] ||| der [X][X] relativen Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+the [X][X] stability [X] ||| der [X][X] Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+the principle [X][X] stability [X] ||| der Grundsatz [X][X] Stabilität [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+the principle of [X][X] [X] ||| der Grundsatz der [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.231653
+[X][X] of relative stability is [X] ||| [X][X] der relativen Stabilität [X] ||| 0.0182166 1 ||| 0-0 ||| 0.138419
+[X][X] of [X][X] is [X] ||| [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.138419
+[X][X] of relative [X][X] [X] ||| [X][X] der relativen [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.324681
+the [X][X] relative stability is [X] ||| der [X][X] relativen Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+the [X][X] relative [X][X] [X] ||| der [X][X] relativen [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.140744
+the [X][X] stability is [X] ||| der [X][X] Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+the [X][X] is [X] ||| der [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+the principle [X][X] stability is [X] ||| der Grundsatz [X][X] Stabilität [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0555556
+the principle [X][X] is [X] ||| der Grundsatz [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0555556
+the principle of [X][X] is [X] ||| der Grundsatz der [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0555556
+the principle of relative [X][X] [X] ||| der Grundsatz der relativen [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.140744
+[X][X] relative stability is a [X] ||| [X][X] relativen Stabilität einen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.150113
+[X][X] relative [X][X] a [X] ||| [X][X] relativen [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.150113
+[X][X] relative stability [X][X] [X] ||| [X][X] relativen Stabilität [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.304019
+principle [X][X] stability is a [X] ||| Grundsatz [X][X] Stabilität einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+principle [X][X] stability [X][X] [X] ||| Grundsatz [X][X] Stabilität [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.117758
+principle [X][X] is a [X] ||| Grundsatz [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+principle [X][X] a [X] ||| Grundsatz [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+principle of [X][X] is a [X] ||| Grundsatz der [X][X] einen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+principle of [X][X] a [X] ||| Grundsatz der [X][X] einen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+principle of relative [X][X] a [X] ||| Grundsatz der relativen [X][X] einen [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0526316
+principle of relative stability [X][X] [X] ||| Grundsatz der relativen Stabilität [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.117758
+[X][X] stability is a fundamental [X] ||| [X][X] Stabilität einen elementaren [X] ||| 0.0182166 1 ||| 0-0 ||| 0.15566
+[X][X] stability [X][X] fundamental [X] ||| [X][X] Stabilität [X][X] elementaren [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.15566
+[X][X] stability is [X][X] [X] ||| [X][X] Stabilität [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.279833
+of [X][X] is a fundamental [X] ||| der [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+of [X][X] is [X][X] [X] ||| der [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.125926
+of [X][X] a fundamental [X] ||| der [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+of [X][X] fundamental [X] ||| der [X][X] elementaren [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+of relative [X][X] a fundamental [X] ||| der relativen [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0555556
+of relative [X][X] fundamental [X] ||| der relativen [X][X] elementaren [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0555556
+of relative stability [X][X] fundamental [X] ||| der relativen Stabilität [X][X] elementaren [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0555556
+of relative stability is [X][X] [X] ||| der relativen Stabilität [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.125926
+[X][X] is [X][X] legal principle [X] ||| [X][X] [X][X] Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.140839
+[X][X] is a [X][X] [X] ||| [X][X] einen [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.250984
+[X][X] is a fundamental [X][X] [X] ||| [X][X] einen elementaren [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.250984
+relative [X][X] a [X][X] [X] ||| relativen [X][X] einen [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.126812
+relative [X][X] a fundamental [X][X] [X] ||| relativen [X][X] einen elementaren [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.126812
+relative [X][X] fundamental legal principle [X] ||| relativen [X][X] elementaren Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 1-1 ||| 0.05
+relative [X][X] fundamental [X][X] [X] ||| relativen [X][X] elementaren [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.126812
+relative [X][X] legal principle [X] ||| relativen [X][X] Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 1-1 ||| 0.05
+relative stability [X][X] fundamental [X][X] [X] ||| relativen Stabilität [X][X] elementaren [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.126812
+relative stability [X][X] legal principle [X] ||| relativen Stabilität [X][X] Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 2-2 ||| 0.05
+relative stability is a [X][X] [X] ||| relativen Stabilität einen [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.126812
+[X][X] a [X][X] of the [X] ||| [X][X] einen [X][X] der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.135635
+stability [X][X] legal principle [X][X] [X] ||| Stabilität [X][X] Rechtsgrundsatz [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.104278
+stability is [X][X] of the [X] ||| Stabilität [X][X] der [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0588235
+stability [X][X] of the [X] ||| Stabilität [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0588235
+[X][X] legal principle [X][X] common [X] ||| [X][X] Rechtsgrundsatz [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.250216
+a [X][X] of the common [X] ||| einen [X][X] der gemeinsamen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+a [X][X] common [X] ||| einen [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+a fundamental [X][X] common [X] ||| einen elementaren [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.1
+[X][X] fundamental [X][X] common [X] ||| [X][X] elementaren [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.150216
+is [X][X] of the common [X] ||| [X][X] der gemeinsamen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0714286
+is [X][X] common [X] ||| [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0714286
+is a [X][X] common [X] ||| einen [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0714286
+is a fundamental [X][X] common [X] ||| einen elementaren [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0714286
+[X][X] of the [X][X] [X] ||| [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.682576
+[X][X] of the common [X][X] [X] ||| [X][X] der gemeinsamen [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.682576
+legal principle [X][X] common [X][X] [X] ||| Rechtsgrundsatz [X][X] gemeinsamen [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.306944
+legal principle [X][X] fisheries policy [X] ||| Rechtsgrundsatz [X][X] Fischereipolitik darstellt [X] ||| 0.0182166 1 ||| 2-1 ||| 0.111111
+legal principle of the [X][X] [X] ||| Rechtsgrundsatz der [X][X] [X] ||| 0.0182166 1 ||| 4-2 ||| 0.306944
+[X][X] common fisheries policy and [X] ||| [X][X] gemeinsamen Fischereipolitik darstellt und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.306944
+[X][X] common [X][X] and [X] ||| [X][X] gemeinsamen [X][X] und [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.306944
+[X][X] fisheries policy and [X] ||| [X][X] Fischereipolitik darstellt und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.306944
+of the [X][X] and [X] ||| der [X][X] und [X] ||| 0.0182166 1 ||| 2-1 ||| 0.111111
+of the common [X][X] and [X] ||| der gemeinsamen [X][X] und [X] ||| 0.0182166 1 ||| 3-2 ||| 0.111111
+common fisheries policy and a [X] ||| gemeinsamen Fischereipolitik darstellt und ein [X] ||| 0.0182166 1 ||| ||| 0.142857
+common [X][X] and a [X] ||| gemeinsamen [X][X] und ein [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+common [X][X] a [X] ||| gemeinsamen [X][X] ein [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+common fisheries policy [X][X] [X] ||| gemeinsamen Fischereipolitik darstellt [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.285014
+fisheries policy and a proposal [X] ||| Fischereipolitik darstellt und ein Vorschlag [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] and a proposal [X] ||| [X][X] und ein Vorschlag [X] ||| 0.0182166 1 ||| 0-0 ||| 0.317157
+[X][X] and [X][X] [X] ||| [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.504768
+[X][X] a proposal [X] ||| [X][X] ein Vorschlag [X] ||| 0.0182166 1 ||| 0-0 ||| 0.317157
+fisheries policy [X][X] proposal [X] ||| Fischereipolitik darstellt [X][X] Vorschlag [X] ||| 0.0182166 1 ||| 2-2 ||| 0.125
+fisheries policy and [X][X] [X] ||| Fischereipolitik darstellt und [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.253788
+proposal to subvert it [X] ||| Vorschlag , diesen zu unterlaufen [X] ||| 0.0182166 1 ||| ||| 0.5
+proposal [X][X] [X] ||| Vorschlag [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.04924
+to subvert it [X] ||| , diesen zu unterlaufen , [X] ||| 0.0182166 1 ||| ||| 1
+would be legally inadmissible . [X] ||| , rechtlich unzulässig wäre . [X] ||| 0.0182166 1 ||| ||| 0.166667
+would be [X][X] . [X] ||| , [X][X] wäre . [X] ||| 0.0182166 1 ||| 2-1 ||| 0.166667
+[X][X] . [X] ||| , [X][X] . [X] ||| 0.0182166 1 ||| 0-1 ||| 0.166667
+[X][X] legally inadmissible . [X] ||| , rechtlich unzulässig [X][X] . [X] ||| 0.0182166 1 ||| 0-3 ||| 0.166667
+I believe that the principle [X] ||| ich meine , daß der Grundsatz [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] that the principle [X] ||| [X][X] , daß der Grundsatz [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0909091
+[X][X] that [X][X] [X] ||| [X][X] , daß [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.241447
+I [X][X] the principle [X] ||| ich [X][X] der Grundsatz [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+I [X][X] principle [X] ||| ich [X][X] Grundsatz [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+I believe [X][X] principle [X] ||| ich meine [X][X] Grundsatz [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+I believe that [X][X] [X] ||| ich meine , daß [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.241447
+believe that the principle of [X] ||| meine , daß der Grundsatz der [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] the principle of [X] ||| [X][X] der Grundsatz der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.143541
+[X][X] the [X][X] [X] ||| [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.392527
+believe [X][X] principle of [X] ||| meine [X][X] Grundsatz der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+believe [X][X] of [X] ||| meine [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+believe that [X][X] of [X] ||| meine , daß [X][X] der [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0909091
+believe that the [X][X] [X] ||| meine , daß der [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.241989
+that the principle of relative [X] ||| , daß der Grundsatz der relativen [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] principle of relative [X] ||| [X][X] Grundsatz der relativen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.178023
+[X][X] principle [X][X] [X] ||| [X][X] Grundsatz [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.474715
+that [X][X] of relative [X] ||| , daß [X][X] der relativen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0909091
+that [X][X] relative [X] ||| , daß [X][X] relativen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0909091
+that the [X][X] relative [X] ||| , daß der [X][X] relativen [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0909091
+that the principle [X][X] [X] ||| , daß der Grundsatz [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.225729
+[X][X] of [X][X] is a [X] ||| [X][X] der [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0974811
+[X][X] of [X][X] a [X] ||| [X][X] der [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0974811
+[X][X] of relative [X][X] a [X] ||| [X][X] der relativen [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0974811
+[X][X] of relative stability [X][X] [X] ||| [X][X] der relativen Stabilität [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.186262
+the [X][X] relative [X][X] a [X] ||| der [X][X] relativen [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0344828
+the [X][X] relative stability [X][X] [X] ||| der [X][X] relativen Stabilität [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0851888
+the [X][X] stability is a [X] ||| der [X][X] Stabilität einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+the [X][X] stability [X][X] [X] ||| der [X][X] Stabilität [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0851888
+the [X][X] is a [X] ||| der [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+the [X][X] a [X] ||| der [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+the principle [X][X] stability [X][X] [X] ||| der Grundsatz [X][X] Stabilität [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0851888
+the principle [X][X] is a [X] ||| der Grundsatz [X][X] einen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0344828
+the principle [X][X] a [X] ||| der Grundsatz [X][X] einen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0344828
+the principle of [X][X] a [X] ||| der Grundsatz der [X][X] einen [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0344828
+[X][X] relative [X][X] a fundamental [X] ||| [X][X] relativen [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.100105
+[X][X] relative [X][X] fundamental [X] ||| [X][X] relativen [X][X] elementaren [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.100105
+[X][X] relative stability [X][X] fundamental [X] ||| [X][X] relativen Stabilität [X][X] elementaren [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.100105
+[X][X] relative stability is [X][X] [X] ||| [X][X] relativen Stabilität [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.153907
+principle [X][X] stability [X][X] fundamental [X] ||| Grundsatz [X][X] Stabilität [X][X] elementaren [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0357143
+principle [X][X] stability is [X][X] [X] ||| Grundsatz [X][X] Stabilität [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0651261
+principle [X][X] is a fundamental [X] ||| Grundsatz [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+principle [X][X] is [X][X] [X] ||| Grundsatz [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0651261
+principle [X][X] a fundamental [X] ||| Grundsatz [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+principle [X][X] fundamental [X] ||| Grundsatz [X][X] elementaren [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+principle of [X][X] is [X][X] [X] ||| Grundsatz der [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0651261
+principle of [X][X] a fundamental [X] ||| Grundsatz der [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0357143
+principle of [X][X] fundamental [X] ||| Grundsatz der [X][X] elementaren [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0357143
+principle of relative [X][X] fundamental [X] ||| Grundsatz der relativen [X][X] elementaren [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0357143
+[X][X] stability [X][X] legal principle [X] ||| [X][X] Stabilität [X][X] Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.090839
+[X][X] stability is a [X][X] [X] ||| [X][X] Stabilität einen [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.124172
+of [X][X] is a [X][X] [X] ||| der [X][X] einen [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0703704
+of [X][X] a [X][X] [X] ||| der [X][X] einen [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0703704
+of [X][X] a fundamental [X][X] [X] ||| der [X][X] einen elementaren [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0703704
+of [X][X] fundamental legal principle [X] ||| der [X][X] elementaren Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 1-1 ||| 0.037037
+of [X][X] fundamental [X][X] [X] ||| der [X][X] elementaren [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0703704
+of [X][X] legal principle [X] ||| der [X][X] Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 1-1 ||| 0.037037
+of relative [X][X] a [X][X] [X] ||| der relativen [X][X] einen [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0703704
+of relative [X][X] fundamental [X][X] [X] ||| der relativen [X][X] elementaren [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0703704
+of relative [X][X] legal principle [X] ||| der relativen [X][X] Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 2-2 ||| 0.037037
+[X][X] is [X][X] of the [X] ||| [X][X] [X][X] der [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.0768116
+relative [X][X] legal principle [X][X] [X] ||| relativen [X][X] Rechtsgrundsatz [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0768116
+relative [X][X] of the [X] ||| relativen [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0434783
+relative stability [X][X] of the [X] ||| relativen Stabilität [X][X] der [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0434783
+[X][X] a [X][X] common [X] ||| [X][X] einen [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0787879
+[X][X] a fundamental [X][X] common [X] ||| [X][X] einen elementaren [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0787879
+stability [X][X] fundamental [X][X] common [X] ||| Stabilität [X][X] elementaren [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0454545
+stability [X][X] of the common [X] ||| Stabilität [X][X] der gemeinsamen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0454545
+stability is [X][X] common [X] ||| Stabilität [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0454545
+stability [X][X] common [X] ||| Stabilität [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0454545
+stability is a [X][X] common [X] ||| Stabilität einen [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0454545
+fundamental [X][X] of the [X][X] [X] ||| elementaren [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.203409
+fundamental [X][X] common fisheries policy [X] ||| elementaren [X][X] gemeinsamen Fischereipolitik darstellt [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+fundamental [X][X] common [X][X] [X] ||| elementaren [X][X] gemeinsamen [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.203409
+fundamental [X][X] fisheries policy [X] ||| elementaren [X][X] Fischereipolitik darstellt [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+[X][X] of the [X][X] and [X] ||| [X][X] der [X][X] und [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.195833
+legal principle [X][X] and [X] ||| Rechtsgrundsatz [X][X] und [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0833333
+[X][X] common [X][X] and a [X] ||| [X][X] gemeinsamen [X][X] und ein [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.189423
+[X][X] common [X][X] a [X] ||| [X][X] gemeinsamen [X][X] ein [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.189423
+[X][X] common fisheries policy [X][X] [X] ||| [X][X] gemeinsamen Fischereipolitik darstellt [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.298247
+[X][X] fisheries policy and a [X] ||| [X][X] Fischereipolitik darstellt und ein [X] ||| 0.0182166 1 ||| 0-0 ||| 0.189423
+[X][X] fisheries policy [X][X] [X] ||| [X][X] Fischereipolitik darstellt [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.298247
+of the [X][X] and a [X] ||| der [X][X] und ein [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0769231
+of the [X][X] a [X] ||| der [X][X] ein [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0769231
+of the common [X][X] a [X] ||| der gemeinsamen [X][X] ein [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0769231
+common [X][X] and a proposal [X] ||| gemeinsamen [X][X] und ein Vorschlag [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+common [X][X] and [X][X] [X] ||| gemeinsamen [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.142157
+common [X][X] a proposal [X] ||| gemeinsamen [X][X] ein Vorschlag [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+common [X][X] proposal [X] ||| gemeinsamen [X][X] Vorschlag [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+common fisheries policy [X][X] proposal [X] ||| gemeinsamen Fischereipolitik darstellt [X][X] Vorschlag [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0833333
+common fisheries policy and [X][X] [X] ||| gemeinsamen Fischereipolitik darstellt und [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.142157
+a proposal to subvert it [X] ||| ein Vorschlag , diesen zu unterlaufen [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] to subvert it [X] ||| [X][X] , diesen zu unterlaufen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.535014
+a [X][X] [X] ||| ein [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.5
+a proposal [X][X] [X] ||| ein Vorschlag [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.5
+proposal to subvert it [X] ||| Vorschlag , diesen zu unterlaufen , [X] ||| 0.0182166 1 ||| ||| 0.333333
+proposal [X][X] [X] ||| Vorschlag [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+[X][X] that the principle of [X] ||| [X][X] , daß der Grundsatz der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0526316
+[X][X] that [X][X] of [X] ||| [X][X] , daß [X][X] der [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0526316
+[X][X] that the [X][X] [X] ||| [X][X] , daß der [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.150538
+I [X][X] the principle of [X] ||| ich [X][X] der Grundsatz der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+I [X][X] the [X][X] [X] ||| ich [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.150538
+I [X][X] principle of [X] ||| ich [X][X] Grundsatz der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+I [X][X] of [X] ||| ich [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+I believe [X][X] principle of [X] ||| ich meine [X][X] Grundsatz der [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+I believe [X][X] of [X] ||| ich meine [X][X] der [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+I believe that [X][X] of [X] ||| ich meine , daß [X][X] der [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0526316
+I believe that the [X][X] [X] ||| ich meine , daß der [X][X] [X] ||| 0.0182166 1 ||| 4-5 ||| 0.150538
+[X][X] the principle of relative [X] ||| [X][X] der Grundsatz der relativen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0871143
+[X][X] the [X][X] relative [X] ||| [X][X] der [X][X] relativen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0871143
+[X][X] the principle [X][X] [X] ||| [X][X] der Grundsatz [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.248986
+believe [X][X] principle of relative [X] ||| meine [X][X] Grundsatz der relativen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+believe [X][X] principle [X][X] [X] ||| meine [X][X] Grundsatz [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.15108
+believe [X][X] of relative [X] ||| meine [X][X] der relativen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+believe [X][X] relative [X] ||| meine [X][X] relativen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+believe that [X][X] of relative [X] ||| meine , daß [X][X] der relativen [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0526316
+believe that [X][X] relative [X] ||| meine , daß [X][X] relativen [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0526316
+believe that the [X][X] relative [X] ||| meine , daß der [X][X] relativen [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0526316
+believe that the principle [X][X] [X] ||| meine , daß der Grundsatz [X][X] [X] ||| 0.0182166 1 ||| 4-5 ||| 0.15108
+[X][X] principle of relative stability [X] ||| [X][X] Grundsatz der relativen Stabilität [X] ||| 0.0182166 1 ||| 0-0 ||| 0.112755
+[X][X] principle [X][X] stability [X] ||| [X][X] Grundsatz [X][X] Stabilität [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.112755
+[X][X] principle of [X][X] [X] ||| [X][X] Grundsatz der [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.296692
+that [X][X] of relative stability [X] ||| , daß [X][X] der relativen Stabilität [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0526316
+that [X][X] of [X][X] [X] ||| , daß [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.13482
+that [X][X] relative stability [X] ||| , daß [X][X] relativen Stabilität [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0526316
+that [X][X] stability [X] ||| , daß [X][X] Stabilität [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0526316
+that the [X][X] relative stability [X] ||| , daß der [X][X] relativen Stabilität [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0526316
+that the [X][X] stability [X] ||| , daß der [X][X] Stabilität [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0526316
+that the principle [X][X] stability [X] ||| , daß der Grundsatz [X][X] Stabilität [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0526316
+that the principle of [X][X] [X] ||| , daß der Grundsatz der [X][X] [X] ||| 0.0182166 1 ||| 4-5 ||| 0.13482
+[X][X] principle [X][X] stability is [X] ||| [X][X] Grundsatz [X][X] Stabilität [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0828634
+[X][X] principle [X][X] is [X] ||| [X][X] Grundsatz [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0828634
+[X][X] principle of [X][X] is [X] ||| [X][X] Grundsatz der [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0828634
+[X][X] principle of relative [X][X] [X] ||| [X][X] Grundsatz der relativen [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.183936
+that [X][X] of [X][X] is [X] ||| , daß [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0357143
+that [X][X] of relative [X][X] [X] ||| , daß [X][X] der relativen [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-5 ||| 0.0821887
+that [X][X] relative stability is [X] ||| , daß [X][X] relativen Stabilität [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0357143
+that [X][X] relative [X][X] [X] ||| , daß [X][X] relativen [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0821887
+that [X][X] stability is [X] ||| , daß [X][X] Stabilität [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0357143
+that [X][X] is [X] ||| , daß [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0357143
+that the [X][X] relative [X][X] [X] ||| , daß der [X][X] relativen [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.0821887
+that the [X][X] stability is [X] ||| , daß der [X][X] Stabilität [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0357143
+that the [X][X] is [X] ||| , daß der [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0357143
+that the principle [X][X] is [X] ||| , daß der Grundsatz [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0357143
+[X][X] of [X][X] a fundamental [X] ||| [X][X] der [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0643905
+[X][X] of [X][X] fundamental [X] ||| [X][X] der [X][X] elementaren [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0643905
+[X][X] of relative [X][X] fundamental [X] ||| [X][X] der relativen [X][X] elementaren [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0643905
+the [X][X] relative [X][X] fundamental [X] ||| der [X][X] relativen [X][X] elementaren [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0263158
+the [X][X] stability [X][X] fundamental [X] ||| der [X][X] Stabilität [X][X] elementaren [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0263158
+the [X][X] stability is [X][X] [X] ||| der [X][X] Stabilität [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.050706
+the [X][X] is a fundamental [X] ||| der [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0263158
+the [X][X] is [X][X] [X] ||| der [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.050706
+the [X][X] a fundamental [X] ||| der [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0263158
+the [X][X] fundamental [X] ||| der [X][X] elementaren [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0263158
+the principle [X][X] is [X][X] [X] ||| der Grundsatz [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.050706
+the principle [X][X] a fundamental [X] ||| der Grundsatz [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0263158
+the principle [X][X] fundamental [X] ||| der Grundsatz [X][X] elementaren [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0263158
+the principle of [X][X] fundamental [X] ||| der Grundsatz der [X][X] elementaren [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0263158
+[X][X] relative [X][X] legal principle [X] ||| [X][X] relativen [X][X] Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.053802
+principle [X][X] is a [X][X] [X] ||| Grundsatz [X][X] einen [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0294118
+principle [X][X] a [X][X] [X] ||| Grundsatz [X][X] einen [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0294118
+principle [X][X] a fundamental [X][X] [X] ||| Grundsatz [X][X] einen elementaren [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0294118
+principle [X][X] fundamental legal principle [X] ||| Grundsatz [X][X] elementaren Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0294118
+principle [X][X] fundamental [X][X] [X] ||| Grundsatz [X][X] elementaren [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0294118
+principle [X][X] legal principle [X] ||| Grundsatz [X][X] Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0294118
+principle of [X][X] a [X][X] [X] ||| Grundsatz der [X][X] einen [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0294118
+principle of [X][X] fundamental [X][X] [X] ||| Grundsatz der [X][X] elementaren [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0294118
+principle of [X][X] legal principle [X] ||| Grundsatz der [X][X] Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0294118
+[X][X] stability [X][X] of the [X] ||| [X][X] Stabilität [X][X] der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0333333
+of [X][X] legal principle [X][X] [X] ||| der [X][X] Rechtsgrundsatz [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0333333
+of [X][X] of the [X] ||| der [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0333333
+of relative [X][X] of the [X] ||| der relativen [X][X] der [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0333333
+[X][X] is [X][X] common [X] ||| [X][X] [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.0333333
+[X][X] is a [X][X] common [X] ||| [X][X] einen [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0333333
+relative [X][X] a [X][X] common [X] ||| relativen [X][X] einen [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0333333
+relative [X][X] fundamental [X][X] common [X] ||| relativen [X][X] elementaren [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0333333
+relative [X][X] of the common [X] ||| relativen [X][X] der gemeinsamen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0333333
+relative [X][X] common [X] ||| relativen [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0333333
+relative stability is [X][X] common [X] ||| relativen Stabilität [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0333333
+relative stability [X][X] common [X] ||| relativen Stabilität [X][X] gemeinsamen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0333333
+a [X][X] of the [X][X] [X] ||| einen [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.116667
+a [X][X] common fisheries policy [X] ||| einen [X][X] gemeinsamen Fischereipolitik darstellt [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+a [X][X] common [X][X] [X] ||| einen [X][X] gemeinsamen [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.116667
+a [X][X] fisheries policy [X] ||| einen [X][X] Fischereipolitik darstellt [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+a fundamental [X][X] common [X][X] [X] ||| einen elementaren [X][X] gemeinsamen [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.116667
+a fundamental [X][X] fisheries policy [X] ||| einen elementaren [X][X] Fischereipolitik darstellt [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0666667
+[X][X] fundamental [X][X] fisheries policy [X] ||| [X][X] elementaren [X][X] Fischereipolitik darstellt [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0555556
+is [X][X] of the [X][X] [X] ||| [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 1-0 4-2 ||| 0.0555556
+is [X][X] common fisheries policy [X] ||| [X][X] gemeinsamen Fischereipolitik darstellt [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0555556
+is [X][X] common [X][X] [X] ||| [X][X] gemeinsamen [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0555556
+is [X][X] fisheries policy [X] ||| [X][X] Fischereipolitik darstellt [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0555556
+is a [X][X] common [X][X] [X] ||| einen [X][X] gemeinsamen [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0555556
+is a [X][X] fisheries policy [X] ||| einen [X][X] Fischereipolitik darstellt [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0555556
+fundamental [X][X] common [X][X] and [X] ||| elementaren [X][X] gemeinsamen [X][X] und [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0625
+fundamental [X][X] fisheries policy and [X] ||| elementaren [X][X] Fischereipolitik darstellt und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0625
+fundamental [X][X] and [X] ||| elementaren [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0625
+fundamental legal principle [X][X] and [X] ||| elementaren Rechtsgrundsatz [X][X] und [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0625
+[X][X] of the [X][X] a [X] ||| [X][X] der [X][X] ein [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.1125
+legal principle [X][X] and a [X] ||| Rechtsgrundsatz [X][X] und ein [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0625
+legal principle [X][X] a [X] ||| Rechtsgrundsatz [X][X] ein [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0625
+[X][X] common [X][X] a proposal [X] ||| [X][X] gemeinsamen [X][X] ein Vorschlag [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.108824
+[X][X] common [X][X] proposal [X] ||| [X][X] gemeinsamen [X][X] Vorschlag [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.108824
+[X][X] fisheries policy [X][X] proposal [X] ||| [X][X] Fischereipolitik darstellt [X][X] Vorschlag [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.108824
+[X][X] fisheries policy and [X][X] [X] ||| [X][X] Fischereipolitik darstellt und [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.108824
+of the [X][X] and [X][X] [X] ||| der [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0588235
+of the [X][X] a proposal [X] ||| der [X][X] ein Vorschlag [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0588235
+of the [X][X] proposal [X] ||| der [X][X] Vorschlag [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0588235
+of the common [X][X] proposal [X] ||| der gemeinsamen [X][X] Vorschlag [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0588235
+[X][X] proposal to subvert it [X] ||| [X][X] Vorschlag , diesen zu unterlaufen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.285014
+[X][X] proposal [X][X] [X] ||| [X][X] Vorschlag [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.421378
+and [X][X] to subvert it [X] ||| und [X][X] , diesen zu unterlaufen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+and a [X][X] [X] ||| und ein [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.233766
+and a proposal [X][X] [X] ||| und ein Vorschlag [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.233766
+a proposal to subvert it [X] ||| ein Vorschlag , diesen zu unterlaufen , [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] to subvert it [X] ||| [X][X] , diesen zu unterlaufen , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.30303
+a [X][X] [X] ||| ein [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+a proposal [X][X] [X] ||| ein Vorschlag [X][X] , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.166667
+[X][X] that [X][X] of relative [X] ||| [X][X] , daß [X][X] der relativen [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0344828
+[X][X] that [X][X] relative [X] ||| [X][X] , daß [X][X] relativen [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0344828
+[X][X] that the [X][X] relative [X] ||| [X][X] , daß der [X][X] relativen [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.0344828
+[X][X] that the principle [X][X] [X] ||| [X][X] , daß der Grundsatz [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-5 ||| 0.0979063
+I [X][X] the [X][X] relative [X] ||| ich [X][X] der [X][X] relativen [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0344828
+I [X][X] the principle [X][X] [X] ||| ich [X][X] der Grundsatz [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0979063
+I [X][X] principle of relative [X] ||| ich [X][X] Grundsatz der relativen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+I [X][X] principle [X][X] [X] ||| ich [X][X] Grundsatz [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0979063
+I [X][X] of relative [X] ||| ich [X][X] der relativen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+I [X][X] relative [X] ||| ich [X][X] relativen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+I believe [X][X] principle [X][X] [X] ||| ich meine [X][X] Grundsatz [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0979063
+I believe [X][X] of relative [X] ||| ich meine [X][X] der relativen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0344828
+I believe [X][X] relative [X] ||| ich meine [X][X] relativen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0344828
+I believe that [X][X] relative [X] ||| ich meine , daß [X][X] relativen [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0344828
+[X][X] the [X][X] relative stability [X] ||| [X][X] der [X][X] relativen Stabilität [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0601238
+[X][X] the [X][X] stability [X] ||| [X][X] der [X][X] Stabilität [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0601238
+[X][X] the principle [X][X] stability [X] ||| [X][X] der Grundsatz [X][X] Stabilität [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0601238
+[X][X] the principle of [X][X] [X] ||| [X][X] der Grundsatz der [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.161872
+believe [X][X] principle [X][X] stability [X] ||| meine [X][X] Grundsatz [X][X] Stabilität [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0344828
+believe [X][X] principle of [X][X] [X] ||| meine [X][X] Grundsatz der [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0984481
+believe [X][X] of relative stability [X] ||| meine [X][X] der relativen Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+believe [X][X] of [X][X] [X] ||| meine [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0984481
+believe [X][X] relative stability [X] ||| meine [X][X] relativen Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+believe [X][X] stability [X] ||| meine [X][X] Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+believe that [X][X] of [X][X] [X] ||| meine , daß [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.0984481
+believe that [X][X] relative stability [X] ||| meine , daß [X][X] relativen Stabilität [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0344828
+believe that [X][X] stability [X] ||| meine , daß [X][X] Stabilität [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0344828
+believe that the [X][X] stability [X] ||| meine , daß der [X][X] Stabilität [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0344828
+[X][X] the [X][X] stability is [X] ||| [X][X] der [X][X] Stabilität [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0471491
+[X][X] the [X][X] is [X] ||| [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0471491
+[X][X] the principle [X][X] is [X] ||| [X][X] der Grundsatz [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0471491
+believe [X][X] principle [X][X] is [X] ||| meine [X][X] Grundsatz [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0263158
+believe [X][X] of [X][X] is [X] ||| meine [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0263158
+believe [X][X] of relative [X][X] [X] ||| meine [X][X] der relativen [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0639653
+believe [X][X] relative stability is [X] ||| meine [X][X] relativen Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0263158
+believe [X][X] relative [X][X] [X] ||| meine [X][X] relativen [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0639653
+believe [X][X] stability is [X] ||| meine [X][X] Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0263158
+believe [X][X] is [X] ||| meine [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0263158
+believe that [X][X] relative [X][X] [X] ||| meine , daß [X][X] relativen [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.0639653
+believe that [X][X] stability is [X] ||| meine , daß [X][X] Stabilität [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0263158
+believe that [X][X] is [X] ||| meine , daß [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0263158
+believe that the [X][X] is [X] ||| meine , daß der [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0263158
+[X][X] principle [X][X] is a [X] ||| [X][X] Grundsatz [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0629983
+[X][X] principle [X][X] a [X] ||| [X][X] Grundsatz [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0629983
+[X][X] principle of [X][X] a [X] ||| [X][X] Grundsatz der [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0629983
+that [X][X] of [X][X] a [X] ||| , daß [X][X] der [X][X] einen [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.025641
+that [X][X] relative [X][X] a [X] ||| , daß [X][X] relativen [X][X] einen [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.025641
+that [X][X] relative stability [X][X] [X] ||| , daß [X][X] relativen Stabilität [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-5 ||| 0.0464744
+that [X][X] stability is a [X] ||| , daß [X][X] Stabilität einen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.025641
+that [X][X] stability [X][X] [X] ||| , daß [X][X] Stabilität [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0464744
+that [X][X] is a [X] ||| , daß [X][X] einen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.025641
+that [X][X] a [X] ||| , daß [X][X] einen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.025641
+that the [X][X] stability [X][X] [X] ||| , daß der [X][X] Stabilität [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.0464744
+that the [X][X] is a [X] ||| , daß der [X][X] einen [X] ||| 0.0182166 1 ||| 2-3 ||| 0.025641
+that the [X][X] a [X] ||| , daß der [X][X] einen [X] ||| 0.0182166 1 ||| 2-3 ||| 0.025641
+that the principle [X][X] a [X] ||| , daß der Grundsatz [X][X] einen [X] ||| 0.0182166 1 ||| 3-4 ||| 0.025641
+[X][X] of [X][X] legal principle [X] ||| [X][X] der [X][X] Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0243902
+the [X][X] is a [X][X] [X] ||| der [X][X] einen [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0243902
+the [X][X] a [X][X] [X] ||| der [X][X] einen [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0243902
+the [X][X] a fundamental [X][X] [X] ||| der [X][X] einen elementaren [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0243902
+the [X][X] fundamental legal principle [X] ||| der [X][X] elementaren Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0243902
+the [X][X] fundamental [X][X] [X] ||| der [X][X] elementaren [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0243902
+the [X][X] legal principle [X] ||| der [X][X] Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0243902
+the principle [X][X] a [X][X] [X] ||| der Grundsatz [X][X] einen [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0243902
+the principle [X][X] fundamental [X][X] [X] ||| der Grundsatz [X][X] elementaren [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0243902
+the principle [X][X] legal principle [X] ||| der Grundsatz [X][X] Rechtsgrundsatz [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0243902
+[X][X] legal principle [X][X] and [X] ||| [X][X] Rechtsgrundsatz [X][X] und [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.05
+a [X][X] common [X][X] and [X] ||| einen [X][X] gemeinsamen [X][X] und [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.05
+a [X][X] fisheries policy and [X] ||| einen [X][X] Fischereipolitik darstellt und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.05
+a [X][X] and [X] ||| einen [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.05
+a fundamental [X][X] and [X] ||| einen elementaren [X][X] und [X] ||| 0.0182166 1 ||| 2-2 ||| 0.05
+fundamental [X][X] common [X][X] a [X] ||| elementaren [X][X] gemeinsamen [X][X] ein [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.05
+fundamental [X][X] fisheries policy [X][X] [X] ||| elementaren [X][X] Fischereipolitik darstellt [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.05
+fundamental [X][X] and a [X] ||| elementaren [X][X] und ein [X] ||| 0.0182166 1 ||| 1-1 ||| 0.05
+fundamental [X][X] a [X] ||| elementaren [X][X] ein [X] ||| 0.0182166 1 ||| 1-1 ||| 0.05
+fundamental legal principle [X][X] a [X] ||| elementaren Rechtsgrundsatz [X][X] ein [X] ||| 0.0182166 1 ||| 3-2 ||| 0.05
+[X][X] of the [X][X] proposal [X] ||| [X][X] der [X][X] Vorschlag [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.05
+legal principle [X][X] and [X][X] [X] ||| Rechtsgrundsatz [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.05
+legal principle [X][X] a proposal [X] ||| Rechtsgrundsatz [X][X] ein Vorschlag [X] ||| 0.0182166 1 ||| 2-1 ||| 0.05
+legal principle [X][X] proposal [X] ||| Rechtsgrundsatz [X][X] Vorschlag [X] ||| 0.0182166 1 ||| 2-1 ||| 0.05
+[X][X] proposal to subvert it [X] ||| [X][X] Vorschlag , diesen zu unterlaufen , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.136364
+[X][X] proposal [X][X] [X] ||| [X][X] Vorschlag [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.136364
+and [X][X] to subvert it [X] ||| und [X][X] , diesen zu unterlaufen , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+and [X][X] [X] ||| und [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+and a [X][X] [X] ||| und ein [X][X] , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+and a proposal [X][X] [X] ||| und ein Vorschlag [X][X] , [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0909091
+[X][X] would be legally inadmissible [X] ||| [X][X] , rechtlich unzulässig wäre [X] ||| 0.0182166 1 ||| 0-0 ||| 0.3171
+[X][X] would be [X][X] [X] ||| [X][X] [X][X] wäre [X] ||| 0.0121444 1 ||| 0-0 3-1 ||| 0.951299
+[X][X] would be [X][X] [X] ||| [X][X] , [X][X] wäre [X] ||| 0.00607219 1 ||| 0-0 3-2 ||| 0.951299
+[X][X] would be legally inadmissible [X] ||| [X][X] rechtlich unzulässig wäre [X] ||| 0.0182166 1 ||| 0-0 ||| 0.3171
+to subvert it [X][X] [X] ||| , diesen zu unterlaufen [X][X] [X] ||| 0.00910828 1 ||| 3-4 ||| 0.535714
+to subvert it [X][X] [X] ||| , diesen zu unterlaufen , [X][X] [X] ||| 0.00910828 1 ||| 3-5 ||| 0.535714
+[X][X] that [X][X] relative stability [X] ||| [X][X] , daß [X][X] relativen Stabilität [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.025641
+[X][X] that [X][X] stability [X] ||| [X][X] , daß [X][X] Stabilität [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.025641
+[X][X] that the [X][X] stability [X] ||| [X][X] , daß der [X][X] Stabilität [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.025641
+I [X][X] the [X][X] stability [X] ||| ich [X][X] der [X][X] Stabilität [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.025641
+I [X][X] principle [X][X] stability [X] ||| ich [X][X] Grundsatz [X][X] Stabilität [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.025641
+I [X][X] principle of [X][X] [X] ||| ich [X][X] Grundsatz der [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0634235
+I [X][X] of relative stability [X] ||| ich [X][X] der relativen Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.025641
+I [X][X] of [X][X] [X] ||| ich [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0634235
+I [X][X] relative stability [X] ||| ich [X][X] relativen Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.025641
+I [X][X] stability [X] ||| ich [X][X] Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.025641
+I believe [X][X] of [X][X] [X] ||| ich meine [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0634235
+I believe [X][X] relative stability [X] ||| ich meine [X][X] relativen Stabilität [X] ||| 0.0182166 1 ||| 2-2 ||| 0.025641
+I believe [X][X] stability [X] ||| ich meine [X][X] Stabilität [X] ||| 0.0182166 1 ||| 2-2 ||| 0.025641
+I believe that [X][X] stability [X] ||| ich meine , daß [X][X] Stabilität [X] ||| 0.0182166 1 ||| 3-4 ||| 0.025641
+[X][X] that [X][X] stability is [X] ||| [X][X] , daß [X][X] Stabilität [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0208333
+[X][X] that [X][X] is [X] ||| [X][X] , daß [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0208333
+[X][X] that the [X][X] is [X] ||| [X][X] , daß der [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.0208333
+I [X][X] the [X][X] is [X] ||| ich [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0208333
+I [X][X] principle [X][X] is [X] ||| ich [X][X] Grundsatz [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0208333
+I [X][X] of [X][X] is [X] ||| ich [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0208333
+I [X][X] of relative [X][X] [X] ||| ich [X][X] der relativen [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0377825
+I [X][X] relative stability is [X] ||| ich [X][X] relativen Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0208333
+I [X][X] relative [X][X] [X] ||| ich [X][X] relativen [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0377825
+I [X][X] stability is [X] ||| ich [X][X] Stabilität [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0208333
+I [X][X] is [X] ||| ich [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0208333
+I believe [X][X] relative [X][X] [X] ||| ich meine [X][X] relativen [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0377825
+I believe [X][X] stability is [X] ||| ich meine [X][X] Stabilität [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0208333
+I believe [X][X] is [X] ||| ich meine [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0208333
+I believe that [X][X] is [X] ||| ich meine , daß [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0208333
+[X][X] the [X][X] is a [X] ||| [X][X] der [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0373573
+[X][X] the [X][X] a [X] ||| [X][X] der [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0373573
+[X][X] the principle [X][X] a [X] ||| [X][X] der Grundsatz [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0373573
+believe [X][X] principle [X][X] a [X] ||| meine [X][X] Grundsatz [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0204082
+believe [X][X] of [X][X] a [X] ||| meine [X][X] der [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0204082
+believe [X][X] relative [X][X] a [X] ||| meine [X][X] relativen [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0204082
+believe [X][X] relative stability [X][X] [X] ||| meine [X][X] relativen Stabilität [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0376495
+believe [X][X] stability is a [X] ||| meine [X][X] Stabilität einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0204082
+believe [X][X] stability [X][X] [X] ||| meine [X][X] Stabilität [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0376495
+believe [X][X] is a [X] ||| meine [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0204082
+believe [X][X] a [X] ||| meine [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0204082
+believe that [X][X] stability [X][X] [X] ||| meine , daß [X][X] Stabilität [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.0376495
+believe that [X][X] is a [X] ||| meine , daß [X][X] einen [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0204082
+believe that [X][X] a [X] ||| meine , daß [X][X] einen [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0204082
+believe that the [X][X] a [X] ||| meine , daß der [X][X] einen [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0204082
+[X][X] principle [X][X] a fundamental [X] ||| [X][X] Grundsatz [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0380747
+[X][X] principle [X][X] fundamental [X] ||| [X][X] Grundsatz [X][X] elementaren [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0380747
+[X][X] principle of [X][X] fundamental [X] ||| [X][X] Grundsatz der [X][X] elementaren [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0380747
+that [X][X] of [X][X] fundamental [X] ||| , daß [X][X] der [X][X] elementaren [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0208333
+that [X][X] relative [X][X] fundamental [X] ||| , daß [X][X] relativen [X][X] elementaren [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0208333
+that [X][X] stability [X][X] fundamental [X] ||| , daß [X][X] Stabilität [X][X] elementaren [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0208333
+that [X][X] stability is [X][X] [X] ||| , daß [X][X] Stabilität [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-4 ||| 0.0208333
+that [X][X] is a fundamental [X] ||| , daß [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0208333
+that [X][X] is [X][X] [X] ||| , daß [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.0208333
+that [X][X] a fundamental [X] ||| , daß [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0208333
+that [X][X] fundamental [X] ||| , daß [X][X] elementaren [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0208333
+that the [X][X] is [X][X] [X] ||| , daß der [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-4 ||| 0.0208333
+that the [X][X] a fundamental [X] ||| , daß der [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0208333
+that the [X][X] fundamental [X] ||| , daß der [X][X] elementaren [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0208333
+that the principle [X][X] fundamental [X] ||| , daß der Grundsatz [X][X] elementaren [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0208333
+[X][X] and a [X][X] [X] ||| [X][X] und ein [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.187611
+[X][X] and a proposal [X][X] [X] ||| [X][X] und ein Vorschlag [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.187611
+[X][X] a [X][X] [X] ||| [X][X] ein [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.187611
+[X][X] a proposal [X][X] [X] ||| [X][X] ein Vorschlag [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.187611
+fisheries policy [X][X] proposal [X][X] [X] ||| Fischereipolitik darstellt [X][X] Vorschlag [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.128788
+fisheries policy and a [X][X] [X] ||| Fischereipolitik darstellt und ein [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.128788
+proposal [X][X] would be [X][X] [X] ||| Vorschlag [X][X] [X][X] wäre [X] ||| 0.0121444 1 ||| 1-1 4-2 ||| 0.272727
+proposal [X][X] would be [X][X] [X] ||| Vorschlag [X][X] , [X][X] wäre [X] ||| 0.00607219 1 ||| 1-1 4-3 ||| 0.272727
+proposal to subvert it [X][X] [X] ||| Vorschlag , diesen zu unterlaufen [X][X] [X] ||| 0.00910828 1 ||| 4-5 ||| 0.431818
+proposal to subvert it [X][X] [X] ||| Vorschlag , diesen zu unterlaufen , [X][X] [X] ||| 0.00910828 1 ||| 4-6 ||| 0.431818
+[X][X] would be [X][X] . [X] ||| [X][X] [X][X] wäre . [X] ||| 0.0121444 1 ||| 0-0 3-1 ||| 0.75
+[X][X] would be [X][X] . [X] ||| [X][X] , [X][X] wäre . [X] ||| 0.00607219 1 ||| 0-0 3-2 ||| 0.75
+to subvert it [X][X] . [X] ||| , diesen zu unterlaufen [X][X] . [X] ||| 0.00910828 1 ||| 3-4 ||| 0.25
+to subvert it [X][X] . [X] ||| , diesen zu unterlaufen , [X][X] . [X] ||| 0.00910828 1 ||| 3-5 ||| 0.25
+[X][X] that [X][X] is a [X] ||| [X][X] , daß [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0169492
+[X][X] that [X][X] a [X] ||| [X][X] , daß [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0169492
+[X][X] that the [X][X] a [X] ||| [X][X] , daß der [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.0169492
+I [X][X] the [X][X] a [X] ||| ich [X][X] der [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0169492
+I [X][X] principle [X][X] a [X] ||| ich [X][X] Grundsatz [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0169492
+I [X][X] of [X][X] a [X] ||| ich [X][X] der [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0169492
+I [X][X] relative [X][X] a [X] ||| ich [X][X] relativen [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0169492
+I [X][X] relative stability [X][X] [X] ||| ich [X][X] relativen Stabilität [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0169492
+I [X][X] stability is a [X] ||| ich [X][X] Stabilität einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0169492
+I [X][X] stability [X][X] [X] ||| ich [X][X] Stabilität [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0169492
+I [X][X] is a [X] ||| ich [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0169492
+I [X][X] a [X] ||| ich [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0169492
+I believe [X][X] stability [X][X] [X] ||| ich meine [X][X] Stabilität [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0169492
+I believe [X][X] is a [X] ||| ich meine [X][X] einen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0169492
+I believe [X][X] a [X] ||| ich meine [X][X] einen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0169492
+I believe that [X][X] a [X] ||| ich meine , daß [X][X] einen [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0169492
+[X][X] the [X][X] a fundamental [X] ||| [X][X] der [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0172414
+[X][X] the [X][X] fundamental [X] ||| [X][X] der [X][X] elementaren [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0172414
+[X][X] the principle [X][X] fundamental [X] ||| [X][X] der Grundsatz [X][X] elementaren [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0172414
+believe [X][X] principle [X][X] fundamental [X] ||| meine [X][X] Grundsatz [X][X] elementaren [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0172414
+believe [X][X] of [X][X] fundamental [X] ||| meine [X][X] der [X][X] elementaren [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0172414
+believe [X][X] relative [X][X] fundamental [X] ||| meine [X][X] relativen [X][X] elementaren [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0172414
+believe [X][X] stability [X][X] fundamental [X] ||| meine [X][X] Stabilität [X][X] elementaren [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0172414
+believe [X][X] stability is [X][X] [X] ||| meine [X][X] Stabilität [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0172414
+believe [X][X] is a fundamental [X] ||| meine [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0172414
+believe [X][X] is [X][X] [X] ||| meine [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0172414
+believe [X][X] a fundamental [X] ||| meine [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0172414
+believe [X][X] fundamental [X] ||| meine [X][X] elementaren [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0172414
+believe that [X][X] is [X][X] [X] ||| meine , daß [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-4 ||| 0.0172414
+believe that [X][X] a fundamental [X] ||| meine , daß [X][X] einen elementaren [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0172414
+believe that [X][X] fundamental [X] ||| meine , daß [X][X] elementaren [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0172414
+believe that the [X][X] fundamental [X] ||| meine , daß der [X][X] elementaren [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0172414
+common [X][X] and a [X][X] [X] ||| gemeinsamen [X][X] und ein [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0588235
+common [X][X] a [X][X] [X] ||| gemeinsamen [X][X] ein [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0588235
+common [X][X] a proposal [X][X] [X] ||| gemeinsamen [X][X] ein Vorschlag [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0588235
+common [X][X] proposal [X][X] [X] ||| gemeinsamen [X][X] Vorschlag [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0588235
+common [X][X] to subvert it [X] ||| gemeinsamen [X][X] , diesen zu unterlaufen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0588235
+[X][X] and [X][X] [X] ||| [X][X] und [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0454545
+[X][X] and a [X][X] [X] ||| [X][X] und ein [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0454545
+[X][X] and a proposal [X][X] [X] ||| [X][X] und ein Vorschlag [X][X] , [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.0454545
+[X][X] a [X][X] [X] ||| [X][X] ein [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0454545
+[X][X] a proposal [X][X] [X] ||| [X][X] ein Vorschlag [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0454545
+fisheries policy [X][X] proposal [X][X] [X] ||| Fischereipolitik darstellt [X][X] Vorschlag [X][X] , [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0454545
+fisheries policy [X][X] [X] ||| Fischereipolitik darstellt [X][X] , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0454545
+fisheries policy and [X][X] [X] ||| Fischereipolitik darstellt und [X][X] , [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0454545
+fisheries policy and a [X][X] [X] ||| Fischereipolitik darstellt und ein [X][X] , [X] ||| 0.0182166 1 ||| 4-4 ||| 0.0454545
+[X][X] to subvert it [X][X] [X] ||| [X][X] , diesen zu unterlaufen [X][X] [X] ||| 0.00910828 1 ||| 0-0 4-5 ||| 0.166667
+[X][X] to subvert it [X][X] [X] ||| [X][X] , diesen zu unterlaufen , [X][X] [X] ||| 0.00910828 1 ||| 0-0 4-6 ||| 0.166667
+a [X][X] would be [X][X] [X] ||| ein [X][X] [X][X] wäre [X] ||| 0.0121444 1 ||| 1-1 4-2 ||| 0.25
+a [X][X] would be [X][X] [X] ||| ein [X][X] , [X][X] wäre [X] ||| 0.00607218 1 ||| 1-1 4-3 ||| 0.25
+proposal [X][X] . [X] ||| Vorschlag [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+I [X] ||| ich [X] ||| 0.218091 1 ||| ||| 2
+know [X] ||| wissen [X] ||| 0.0182166 1 ||| ||| 1
+whether [X] ||| ob [X] ||| 0.218091 1 ||| ||| 2
+one [X] ||| es [X] ||| 0.0182166 1 ||| ||| 1
+can [X] ||| möglich [X] ||| 0.0182166 1 ||| ||| 1
+can raise [X] ||| möglich [X] ||| 0.0182166 1 ||| ||| 1
+an [X] ||| einen [X] ||| 0.0182166 1 ||| ||| 1
+raise an [X] ||| einen [X] ||| 0.0182166 1 ||| ||| 1
+something [X] ||| ein [X] ||| 0.0182166 1 ||| ||| 1
+of [X] ||| zu [X] ||| 0.0182166 1 ||| ||| 1
+kind [X] ||| erheben [X] ||| 0.0182166 1 ||| ||| 1
+that [X] ||| , [X] ||| 0.0182166 1 ||| ||| 1
+to [X] ||| bei [X] ||| 0.0182166 1 ||| ||| 1
+is [X] ||| sich [X] ||| 0.0182166 1 ||| ||| 1
+a [X] ||| einen [X] ||| 0.0182166 1 ||| ||| 1
+report [X] ||| Bericht [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| und [X] ||| 0.0182166 1 ||| ||| 1
+not a [X] ||| keinen [X] ||| 0.0182166 1 ||| ||| 1
+legislative proposal [X] ||| Legislativvorschlag [X] ||| 0.0182166 1 ||| ||| 1
+is [X] ||| handelt [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| , [X] ||| 0.0182166 1 ||| ||| 1
+and [X] ||| und [X] ||| 0.0182166 1 ||| ||| 1
+on [X] ||| zu [X] ||| 0.0182166 1 ||| ||| 1
+do [X] ||| tun [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+whether one [X] ||| ob es [X] ||| 0.0182166 1 ||| ||| 1
+one can [X] ||| es möglich [X] ||| 0.0182166 1 ||| ||| 1
+one can raise [X] ||| es möglich [X] ||| 0.0182166 1 ||| ||| 0.5
+one [X][X] [X] ||| es [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.20022
+can [X] ||| möglich ist [X] ||| 0.0182166 1 ||| ||| 1
+can raise [X] ||| möglich ist [X] ||| 0.0182166 1 ||| ||| 1
+an [X] ||| , einen [X] ||| 0.0182166 1 ||| ||| 1
+raise an [X] ||| , einen [X] ||| 0.0182166 1 ||| ||| 1
+objection [X] ||| Einwand gegen [X] ||| 0.0182166 1 ||| ||| 1
+something [X] ||| ein Dokument [X] ||| 0.0182166 1 ||| ||| 1
+of [X] ||| Dokument zu [X] ||| 0.0182166 1 ||| ||| 1
+that kind [X] ||| erheben , [X] ||| 0.0182166 1 ||| ||| 1
+what [X] ||| dem es [X] ||| 0.0182166 1 ||| ||| 1
+merely [X] ||| lediglich um [X] ||| 0.0182166 1 ||| ||| 1
+a report [X] ||| einen Bericht [X] ||| 0.0182166 1 ||| ||| 1
+report , [X] ||| Bericht und [X] ||| 0.0182166 1 ||| ||| 1
+, not a [X] ||| und keinen [X] ||| 0.0182166 1 ||| ||| 0.5
+, [X][X] [X] ||| und [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.7
+not a legislative proposal [X] ||| keinen Legislativvorschlag [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] legislative proposal [X] ||| [X][X] Legislativvorschlag [X] ||| 0.0182166 1 ||| 0-0 ||| 0.874415
+not a [X][X] [X] ||| keinen [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.333333
+, and [X] ||| , und [X] ||| 0.0182166 1 ||| ||| 1
+and whether [X] ||| und ob [X] ||| 0.0182166 1 ||| ||| 1
+can competently [X] ||| befugt bin [X] ||| 0.0182166 1 ||| ||| 1
+that [X] ||| , dies [X] ||| 0.0182166 1 ||| ||| 1
+Thursday [X] ||| am Donnerstag [X] ||| 0.0182166 1 ||| ||| 1
+do on [X] ||| zu tun [X] ||| 0.0182166 1 ||| ||| 1
+want to know [X] ||| möchte wissen , [X] ||| 0.0182166 1 ||| ||| 1
+whether one can [X] ||| ob es möglich [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] can [X] ||| [X][X] möglich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.576191
+whether [X][X] [X] ||| ob [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.26146
+whether one can raise [X] ||| ob es möglich [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] can raise [X] ||| [X][X] möglich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.3625
+whether [X][X] raise [X] ||| ob [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.415909
+whether one [X][X] [X] ||| ob es [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.478131
+one can [X] ||| es möglich ist [X] ||| 0.0182166 1 ||| ||| 1
+one can raise [X] ||| es möglich ist [X] ||| 0.0182166 1 ||| ||| 0.333333
+one [X][X] [X] ||| es [X][X] ist [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+can [X] ||| möglich ist , [X] ||| 0.0182166 1 ||| ||| 1
+can raise [X] ||| möglich ist , [X] ||| 0.0182166 1 ||| ||| 1
+an [X] ||| ist , einen [X] ||| 0.0182166 1 ||| ||| 1
+raise an [X] ||| ist , einen [X] ||| 0.0182166 1 ||| ||| 1
+an objection [X] ||| einen Einwand gegen [X] ||| 0.0182166 1 ||| ||| 1
+raise an objection [X] ||| einen Einwand gegen [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] objection [X] ||| [X][X] Einwand gegen [X] ||| 0.218091 1 ||| 0-0 ||| 1.22244
+of that kind [X] ||| zu erheben , [X] ||| 0.0182166 1 ||| ||| 0.5
+of [X][X] [X] ||| zu [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.06454
+that kind to [X] ||| erheben , bei [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] to [X] ||| [X][X] bei [X] ||| 0.0182166 1 ||| 0-0 ||| 0.95
+to what [X] ||| bei dem es [X] ||| 0.0182166 1 ||| ||| 1
+what is [X] ||| dem es sich [X] ||| 0.0182166 1 ||| ||| 1
+is merely [X] ||| sich lediglich um [X] ||| 0.0182166 1 ||| ||| 1
+merely a [X] ||| lediglich um einen [X] ||| 0.0182166 1 ||| ||| 1
+a report , [X] ||| einen Bericht und [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] , [X] ||| [X][X] und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.678023
+a [X][X] [X] ||| einen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.541667
+report , not a [X] ||| Bericht und keinen [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] not a [X] ||| [X][X] keinen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.558333
+report [X][X] [X] ||| Bericht [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.375
+report , [X][X] [X] ||| Bericht und [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.375
+, not a legislative proposal [X] ||| und keinen Legislativvorschlag [X] ||| 0.0182166 1 ||| ||| 0.2
+, [X][X] legislative proposal [X] ||| und [X][X] Legislativvorschlag [X] ||| 0.0182166 1 ||| 1-1 ||| 0.2
+, not a [X][X] [X] ||| und keinen [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.2
+, and whether [X] ||| , und ob [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] whether [X] ||| [X][X] ob [X] ||| 0.218091 1 ||| 0-0 ||| 1.08333
+, [X][X] [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+I can competently [X] ||| ich befugt bin [X] ||| 0.0182166 1 ||| ||| 0.5
+I [X][X] [X] ||| ich [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.78736
+on Thursday [X] ||| am Donnerstag zu [X] ||| 0.0182166 1 ||| ||| 1
+I want to know [X] ||| ich möchte wissen , [X] ||| 0.0182166 1 ||| ||| 0.5
+want to know whether [X] ||| möchte wissen , ob [X] ||| 0.0182166 1 ||| ||| 0.5
+whether one can [X] ||| ob es möglich ist [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] can [X] ||| [X][X] möglich ist [X] ||| 0.0182166 1 ||| 0-0 ||| 0.421429
+whether [X][X] [X] ||| ob [X][X] ist [X] ||| 0.0182166 1 ||| 1-1 ||| 0.375
+whether one can raise [X] ||| ob es möglich ist [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] can raise [X] ||| [X][X] möglich ist [X] ||| 0.0182166 1 ||| 0-0 ||| 0.220861
+whether [X][X] raise [X] ||| ob [X][X] ist [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+whether one [X][X] [X] ||| ob es [X][X] ist [X] ||| 0.0182166 1 ||| 2-2 ||| 0.125
+one can [X] ||| es möglich ist , [X] ||| 0.0182166 1 ||| ||| 1
+one can raise [X] ||| es möglich ist , [X] ||| 0.0182166 1 ||| ||| 0.25
+one [X][X] [X] ||| es [X][X] ist , [X] ||| 0.00910828 1 ||| 1-1 ||| 0.5
+one [X][X] [X] ||| es [X][X] , [X] ||| 0.00910828 1 ||| 1-1 ||| 0.5
+can raise an [X] ||| möglich ist , einen [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] an [X] ||| [X][X] ist , einen [X] ||| 0.00607219 1 ||| 0-0 ||| 0.89751
+[X][X] an [X] ||| [X][X] , einen [X] ||| 0.00607219 1 ||| 0-0 ||| 0.89751
+[X][X] an [X] ||| [X][X] einen [X] ||| 0.00607219 1 ||| 0-0 ||| 0.89751
+can [X][X] [X] ||| möglich [X][X] [X] ||| 0.00607219 1 ||| 1-1 ||| 0.642858
+can [X][X] [X] ||| möglich ist [X][X] [X] ||| 0.00607219 1 ||| 1-2 ||| 0.642858
+can [X][X] [X] ||| möglich ist , [X][X] [X] ||| 0.00607219 1 ||| 1-3 ||| 0.642858
+an objection [X] ||| , einen Einwand gegen [X] ||| 0.0182166 1 ||| ||| 1
+raise an objection [X] ||| , einen Einwand gegen [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] objection [X] ||| , [X][X] Einwand gegen [X] ||| 0.0182166 1 ||| 0-1 ||| 0.333333
+of that kind [X] ||| Dokument zu erheben , [X] ||| 0.0182166 1 ||| ||| 0.5
+of [X][X] [X] ||| Dokument zu [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.910648
+of that kind to [X] ||| zu erheben , bei [X] ||| 0.0182166 1 ||| ||| 0.25
+of [X][X] to [X] ||| zu [X][X] bei [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+to what is [X] ||| bei dem es sich [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] is [X] ||| [X][X] sich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.604167
+to [X][X] [X] ||| bei [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.706595
+is merely a [X] ||| sich lediglich um einen [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] a [X] ||| [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.674242
+is [X][X] [X] ||| sich [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.680195
+merely a report [X] ||| lediglich um einen Bericht [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] report [X] ||| [X][X] Bericht [X] ||| 0.0182166 1 ||| 0-0 ||| 0.679255
+merely [X][X] [X] ||| lediglich um [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.630252
+a report , not a [X] ||| einen Bericht und keinen [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] , not a [X] ||| [X][X] und keinen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.308333
+[X][X] , [X][X] [X] ||| [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.524415
+a [X][X] not a [X] ||| einen [X][X] keinen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+a report [X][X] [X] ||| einen Bericht [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.208333
+a report , [X][X] [X] ||| einen Bericht und [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.208333
+[X][X] not a legislative proposal [X] ||| [X][X] keinen Legislativvorschlag [X] ||| 0.0182166 1 ||| 0-0 ||| 0.341082
+[X][X] not a [X][X] [X] ||| [X][X] keinen [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.341082
+report [X][X] legislative proposal [X] ||| Bericht [X][X] Legislativvorschlag [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+report , [X][X] legislative proposal [X] ||| Bericht und [X][X] Legislativvorschlag [X] ||| 0.0182166 1 ||| 2-2 ||| 0.125
+report , not a [X][X] [X] ||| Bericht und keinen [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.125
+do on Thursday [X] ||| am Donnerstag zu tun [X] ||| 0.0182166 1 ||| ||| 0.333333
+do [X][X] [X] ||| [X][X] tun [X] ||| 0.0182166 1 ||| 1-0 ||| 0.333333
+[X][X] Thursday [X] ||| am Donnerstag [X][X] [X] ||| 0.0182166 1 ||| 0-2 ||| 0.333333
+I want to know whether [X] ||| ich möchte wissen , ob [X] ||| 0.0182166 1 ||| ||| 0.25
+I [X][X] whether [X] ||| ich [X][X] ob [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+want to know whether one [X] ||| möchte wissen , ob es [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] whether one [X] ||| [X][X] ob es [X] ||| 0.0182166 1 ||| 0-0 ||| 0.416667
+[X][X] one [X] ||| [X][X] es [X] ||| 0.0182166 1 ||| 0-0 ||| 0.416667
+want to know [X][X] [X] ||| möchte wissen , [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.797297
+whether one can [X] ||| ob es möglich ist , [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] can [X] ||| [X][X] möglich ist , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.332479
+whether [X][X] [X] ||| ob [X][X] ist , [X] ||| 0.00910828 1 ||| 1-1 ||| 0.581818
+whether [X][X] [X] ||| ob [X][X] , [X] ||| 0.00910828 1 ||| 1-1 ||| 0.581818
+whether one can raise [X] ||| ob es möglich ist , [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] can raise [X] ||| [X][X] möglich ist , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.158892
+whether [X][X] raise [X] ||| ob [X][X] ist , [X] ||| 0.00910828 1 ||| 1-1 ||| 0.181818
+whether [X][X] raise [X] ||| ob [X][X] , [X] ||| 0.00910828 1 ||| 1-1 ||| 0.181818
+whether one [X][X] [X] ||| ob es [X][X] ist , [X] ||| 0.00910828 1 ||| 2-2 ||| 0.181818
+whether one [X][X] [X] ||| ob es [X][X] , [X] ||| 0.00910828 1 ||| 2-2 ||| 0.181818
+one can raise an [X] ||| es möglich ist , einen [X] ||| 0.0182166 1 ||| ||| 0.0714286
+[X][X] raise an [X] ||| [X][X] ist , einen [X] ||| 0.00607219 1 ||| 0-0 ||| 0.468939
+[X][X] raise an [X] ||| [X][X] , einen [X] ||| 0.00607219 1 ||| 0-0 ||| 0.468939
+[X][X] raise an [X] ||| [X][X] einen [X] ||| 0.00607219 1 ||| 0-0 ||| 0.468939
+one [X][X] an [X] ||| es [X][X] ist , einen [X] ||| 0.00607219 1 ||| 1-1 ||| 0.214286
+one [X][X] an [X] ||| es [X][X] , einen [X] ||| 0.00607219 1 ||| 1-1 ||| 0.214286
+one [X][X] an [X] ||| es [X][X] einen [X] ||| 0.00607219 1 ||| 1-1 ||| 0.214286
+one can [X][X] [X] ||| es möglich [X][X] [X] ||| 0.00607219 1 ||| 2-2 ||| 0.350649
+one can [X][X] [X] ||| es möglich ist [X][X] [X] ||| 0.00607219 1 ||| 2-3 ||| 0.350649
+one can [X][X] [X] ||| es möglich ist , [X][X] [X] ||| 0.00607219 1 ||| 2-4 ||| 0.350649
+an objection [X] ||| ist , einen Einwand gegen [X] ||| 0.0182166 1 ||| ||| 1
+raise an objection [X] ||| ist , einen Einwand gegen [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] objection [X] ||| ist [X][X] Einwand gegen [X] ||| 0.00910828 1 ||| 0-1 ||| 0.5
+[X][X] objection [X] ||| ist , [X][X] Einwand gegen [X] ||| 0.00910828 1 ||| 0-2 ||| 0.5
+of that kind to [X] ||| Dokument zu erheben , bei [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] to [X] ||| Dokument [X][X] bei [X] ||| 0.0182166 1 ||| 0-1 ||| 0.2
+of [X][X] to [X] ||| Dokument zu [X][X] bei [X] ||| 0.0182166 1 ||| 1-2 ||| 0.2
+that kind to what [X] ||| erheben , bei dem es [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] to what [X] ||| [X][X] bei dem es [X] ||| 0.0182166 1 ||| 0-0 ||| 0.503968
+[X][X] what [X] ||| [X][X] dem es [X] ||| 0.0182166 1 ||| 0-0 ||| 0.503968
+that kind [X][X] [X] ||| erheben , [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.529762
+what is merely [X] ||| dem es sich lediglich um [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] merely [X] ||| [X][X] lediglich um [X] ||| 0.0182166 1 ||| 0-0 ||| 0.661097
+what [X][X] [X] ||| dem es [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.711513
+is merely a report [X] ||| sich lediglich um einen Bericht [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] a report [X] ||| [X][X] einen Bericht [X] ||| 0.0182166 1 ||| 0-0 ||| 0.345922
+is [X][X] report [X] ||| sich [X][X] Bericht [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+is merely [X][X] [X] ||| sich lediglich um [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.346861
+merely a report , [X] ||| lediglich um einen Bericht und [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] report , [X] ||| [X][X] Bericht und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.34469
+merely [X][X] , [X] ||| lediglich um [X][X] und [X] ||| 0.0182166 1 ||| 1-2 ||| 0.166667
+merely a [X][X] [X] ||| lediglich um einen [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.296919
+[X][X] , [X][X] legislative proposal [X] ||| [X][X] und [X][X] Legislativvorschlag [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.216082
+[X][X] , not a [X][X] [X] ||| [X][X] und keinen [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.216082
+a [X][X] not a [X][X] [X] ||| einen [X][X] keinen [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0833333
+a [X][X] legislative proposal [X] ||| einen [X][X] Legislativvorschlag [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+a report [X][X] legislative proposal [X] ||| einen Bericht [X][X] Legislativvorschlag [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0833333
+do on Thursday . [X] ||| am Donnerstag zu tun . [X] ||| 0.0182166 1 ||| ||| 0.25
+do [X][X] . [X] ||| [X][X] tun . [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+[X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25
+[X][X] Thursday . [X] ||| am Donnerstag [X][X] . [X] ||| 0.0182166 1 ||| 0-2 ||| 0.25
+I [X][X] whether one [X] ||| ich [X][X] ob es [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+I [X][X] one [X] ||| ich [X][X] es [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+I want to know [X][X] [X] ||| ich möchte wissen , [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.537361
+[X][X] whether one can [X] ||| [X][X] ob es möglich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.242857
+[X][X] whether [X][X] [X] ||| [X][X] ob [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.917992
+[X][X] one can [X] ||| [X][X] es möglich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.242857
+want to know [X][X] can [X] ||| möchte wissen , [X][X] möglich [X] ||| 0.0182166 1 ||| 3-3 ||| 0.142857
+want to know whether [X][X] [X] ||| möchte wissen , ob [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.547297
+[X][X] whether one can raise [X] ||| [X][X] ob es möglich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.1625
+[X][X] whether [X][X] raise [X] ||| [X][X] ob [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.326343
+[X][X] whether one [X][X] [X] ||| [X][X] ob es [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.371227
+[X][X] one can raise [X] ||| [X][X] es möglich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.1625
+[X][X] one [X][X] [X] ||| [X][X] es [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.371227
+want to know [X][X] raise [X] ||| möchte wissen , [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.20049
+whether one can raise an [X] ||| ob es möglich ist , einen [X] ||| 0.0182166 1 ||| ||| 0.04
+[X][X] can raise an [X] ||| [X][X] möglich ist , einen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0848842
+[X][X] can [X][X] [X] ||| [X][X] möglich [X][X] [X] ||| 0.00607219 1 ||| 0-0 2-2 ||| 0.321318
+[X][X] can [X][X] [X] ||| [X][X] möglich ist [X][X] [X] ||| 0.00607219 1 ||| 0-0 2-3 ||| 0.321318
+[X][X] can [X][X] [X] ||| [X][X] möglich ist , [X][X] [X] ||| 0.00607219 1 ||| 0-0 2-4 ||| 0.321318
+whether [X][X] raise an [X] ||| ob [X][X] ist , einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+whether [X][X] an [X] ||| ob [X][X] ist , einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+whether [X][X] raise an [X] ||| ob [X][X] , einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+whether [X][X] an [X] ||| ob [X][X] , einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+whether [X][X] raise an [X] ||| ob [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+whether [X][X] an [X] ||| ob [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+whether one [X][X] an [X] ||| ob es [X][X] ist , einen [X] ||| 0.00607219 1 ||| 2-2 ||| 0.12
+whether one [X][X] an [X] ||| ob es [X][X] , einen [X] ||| 0.00607219 1 ||| 2-2 ||| 0.12
+whether one [X][X] an [X] ||| ob es [X][X] einen [X] ||| 0.00607219 1 ||| 2-2 ||| 0.12
+whether one can [X][X] [X] ||| ob es möglich [X][X] [X] ||| 0.00607219 1 ||| 3-3 ||| 0.186667
+whether one can [X][X] [X] ||| ob es möglich ist [X][X] [X] ||| 0.00607219 1 ||| 3-4 ||| 0.186667
+whether one can [X][X] [X] ||| ob es möglich ist , [X][X] [X] ||| 0.00607219 1 ||| 3-5 ||| 0.186667
+can raise an objection [X] ||| möglich ist , einen Einwand gegen [X] ||| 0.0182166 1 ||| ||| 0.0714286
+[X][X] an objection [X] ||| [X][X] ist , einen Einwand gegen [X] ||| 0.00607219 1 ||| 0-0 ||| 0.417315
+[X][X] an objection [X] ||| [X][X] , einen Einwand gegen [X] ||| 0.00607219 1 ||| 0-0 ||| 0.417315
+[X][X] an objection [X] ||| [X][X] einen Einwand gegen [X] ||| 0.00607219 1 ||| 0-0 ||| 0.417315
+can [X][X] objection [X] ||| möglich [X][X] Einwand gegen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+can raise [X][X] [X] ||| möglich [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0714286
+can [X][X] objection [X] ||| möglich ist [X][X] Einwand gegen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0714286
+can raise [X][X] [X] ||| möglich ist [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0714286
+can [X][X] objection [X] ||| möglich ist , [X][X] Einwand gegen [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0714286
+can raise [X][X] [X] ||| möglich ist , [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0714286
+of that kind to what [X] ||| zu erheben , bei dem es [X] ||| 0.0182166 1 ||| ||| 0.142857
+of [X][X] to what [X] ||| zu [X][X] bei dem es [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+of [X][X] what [X] ||| zu [X][X] dem es [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+of that kind [X][X] [X] ||| zu erheben , [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.314536
+that kind to what is [X] ||| erheben , bei dem es sich [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] to what is [X] ||| [X][X] bei dem es sich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.270833
+[X][X] to [X][X] [X] ||| [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.550978
+[X][X] what is [X] ||| [X][X] dem es sich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.270833
+that kind [X][X] is [X] ||| erheben , [X][X] sich [X] ||| 0.0182166 1 ||| 2-2 ||| 0.125
+that kind to [X][X] [X] ||| erheben , bei [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.279762
+to what is merely [X] ||| bei dem es sich lediglich um [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] is merely [X] ||| [X][X] sich lediglich um [X] ||| 0.0182166 1 ||| 0-0 ||| 0.327764
+to [X][X] merely [X] ||| bei [X][X] lediglich um [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+to what [X][X] [X] ||| bei dem es [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.373262
+what is merely a [X] ||| dem es sich lediglich um einen [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] merely a [X] ||| [X][X] lediglich um einen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.340909
+what [X][X] a [X] ||| dem es [X][X] einen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.166667
+what is [X][X] [X] ||| dem es sich [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.37818
+is merely a report , [X] ||| sich lediglich um einen Bericht und [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] a report , [X] ||| [X][X] einen Bericht und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.178023
+[X][X] a [X][X] [X] ||| [X][X] einen [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.363853
+is [X][X] report , [X] ||| sich [X][X] Bericht und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+is [X][X] , [X] ||| sich [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+is merely [X][X] , [X] ||| sich lediglich um [X][X] und [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0909091
+is merely a [X][X] [X] ||| sich lediglich um einen [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.180195
+[X][X] report , not a [X] ||| [X][X] Bericht und keinen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.183333
+[X][X] report [X][X] [X] ||| [X][X] Bericht [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.316082
+[X][X] report , [X][X] [X] ||| [X][X] Bericht und [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.316082
+merely [X][X] , not a [X] ||| lediglich um [X][X] und keinen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0714286
+merely [X][X] , [X][X] [X] ||| lediglich um [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.130252
+merely [X][X] not a [X] ||| lediglich um [X][X] keinen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0714286
+merely a [X][X] not a [X] ||| lediglich um einen [X][X] keinen [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0714286
+merely a report [X][X] [X] ||| lediglich um einen Bericht [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.130252
+merely a report , [X][X] [X] ||| lediglich um einen Bericht und [X][X] [X] ||| 0.0182166 1 ||| 4-5 ||| 0.130252
+I [X][X] whether one can [X] ||| ich [X][X] ob es möglich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+I [X][X] whether [X][X] [X] ||| ich [X][X] ob [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.370694
+I [X][X] one can [X] ||| ich [X][X] es möglich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+I [X][X] can [X] ||| ich [X][X] möglich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+I [X][X] whether [X][X] raise [X] ||| ich [X][X] ob [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.125853
+I [X][X] whether one [X][X] [X] ||| ich [X][X] ob es [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.14371
+I [X][X] one can raise [X] ||| ich [X][X] es möglich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0625
+I [X][X] one [X][X] [X] ||| ich [X][X] es [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.14371
+I [X][X] can raise [X] ||| ich [X][X] möglich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0625
+I [X][X] raise [X] ||| ich [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125853
+[X][X] whether one can [X] ||| [X][X] ob es möglich ist [X] ||| 0.0182166 1 ||| 0-0 ||| 0.171429
+[X][X] whether [X][X] [X] ||| [X][X] ob [X][X] ist [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.267289
+[X][X] one can [X] ||| [X][X] es möglich ist [X] ||| 0.0182166 1 ||| 0-0 ||| 0.171429
+want to know [X][X] can [X] ||| möchte wissen , [X][X] möglich ist [X] ||| 0.0182166 1 ||| 3-3 ||| 0.1
+want to know [X][X] [X] ||| möchte wissen , [X][X] ist [X] ||| 0.0182166 1 ||| 3-3 ||| 0.158824
+want to know whether [X][X] [X] ||| möchte wissen , ob [X][X] ist [X] ||| 0.0182166 1 ||| 4-4 ||| 0.158824
+[X][X] whether one can raise [X] ||| [X][X] ob es möglich ist [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0958606
+[X][X] whether [X][X] raise [X] ||| [X][X] ob [X][X] ist [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0958606
+[X][X] whether one [X][X] [X] ||| [X][X] ob es [X][X] ist [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0958606
+[X][X] one can raise [X] ||| [X][X] es möglich ist [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0958606
+[X][X] one [X][X] [X] ||| [X][X] es [X][X] ist [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0958606
+want to know [X][X] raise [X] ||| möchte wissen , [X][X] ist [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0588235
+one can raise an objection [X] ||| es möglich ist , einen Einwand gegen [X] ||| 0.0182166 1 ||| ||| 0.0454545
+[X][X] raise an objection [X] ||| [X][X] ist , einen Einwand gegen [X] ||| 0.00607219 1 ||| 0-0 ||| 0.20303
+[X][X] raise an objection [X] ||| [X][X] , einen Einwand gegen [X] ||| 0.00607219 1 ||| 0-0 ||| 0.20303
+[X][X] raise an objection [X] ||| [X][X] einen Einwand gegen [X] ||| 0.00607219 1 ||| 0-0 ||| 0.20303
+one [X][X] an objection [X] ||| es [X][X] ist , einen Einwand gegen [X] ||| 0.00607219 1 ||| 1-1 ||| 0.136363
+one [X][X] an objection [X] ||| es [X][X] , einen Einwand gegen [X] ||| 0.00607219 1 ||| 1-1 ||| 0.136363
+one [X][X] an objection [X] ||| es [X][X] einen Einwand gegen [X] ||| 0.00607219 1 ||| 1-1 ||| 0.136363
+one [X][X] objection [X] ||| es [X][X] Einwand gegen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0454545
+one can [X][X] objection [X] ||| es möglich [X][X] Einwand gegen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0454545
+one can raise [X][X] [X] ||| es möglich [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0454545
+one can [X][X] objection [X] ||| es möglich ist [X][X] Einwand gegen [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0454545
+one can raise [X][X] [X] ||| es möglich ist [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0454545
+one can [X][X] objection [X] ||| es möglich ist , [X][X] Einwand gegen [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0454545
+one can raise [X][X] [X] ||| es möglich ist , [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0454545
+of that kind to what [X] ||| Dokument zu erheben , bei dem es [X] ||| 0.0182166 1 ||| ||| 0.111111
+[X][X] to what [X] ||| Dokument [X][X] bei dem es [X] ||| 0.0182166 1 ||| 0-1 ||| 0.111111
+[X][X] what [X] ||| Dokument [X][X] dem es [X] ||| 0.0182166 1 ||| 0-1 ||| 0.111111
+of [X][X] to what [X] ||| Dokument zu [X][X] bei dem es [X] ||| 0.0182166 1 ||| 1-2 ||| 0.111111
+of [X][X] what [X] ||| Dokument zu [X][X] dem es [X] ||| 0.0182166 1 ||| 1-2 ||| 0.111111
+of that kind [X][X] [X] ||| Dokument zu erheben , [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.210648
+of [X][X] to what is [X] ||| zu [X][X] bei dem es sich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+of [X][X] to [X][X] [X] ||| zu [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.171679
+of [X][X] what is [X] ||| zu [X][X] dem es sich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+of [X][X] is [X] ||| zu [X][X] sich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+of that kind [X][X] is [X] ||| zu erheben , [X][X] sich [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0833333
+of that kind to [X][X] [X] ||| zu erheben , bei [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.171679
+to what is merely a [X] ||| bei dem es sich lediglich um einen [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] is merely a [X] ||| [X][X] sich lediglich um einen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.174242
+[X][X] is [X][X] [X] ||| [X][X] sich [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.325642
+to [X][X] merely a [X] ||| bei [X][X] lediglich um einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+to [X][X] a [X] ||| bei [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+to what [X][X] a [X] ||| bei dem es [X][X] einen [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0909091
+to what is [X][X] [X] ||| bei dem es sich [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.206595
+what is merely a report [X] ||| dem es sich lediglich um einen Bericht [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] merely a report [X] ||| [X][X] lediglich um einen Bericht [X] ||| 0.0182166 1 ||| 0-0 ||| 0.179255
+[X][X] merely [X][X] [X] ||| [X][X] lediglich um [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.362913
+what [X][X] a report [X] ||| dem es [X][X] einen Bericht [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0909091
+what [X][X] report [X] ||| dem es [X][X] Bericht [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0909091
+what is [X][X] report [X] ||| dem es sich [X][X] Bericht [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0909091
+what is merely [X][X] [X] ||| dem es sich lediglich um [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.211513
+[X][X] a [X][X] not a [X] ||| [X][X] einen [X][X] keinen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.111905
+[X][X] a report [X][X] [X] ||| [X][X] einen Bericht [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.185829
+[X][X] a report , [X][X] [X] ||| [X][X] einen Bericht und [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.185829
+is [X][X] report [X][X] [X] ||| sich [X][X] Bericht [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0892857
+is [X][X] report , [X][X] [X] ||| sich [X][X] Bericht und [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0892857
+is [X][X] , not a [X] ||| sich [X][X] und keinen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.047619
+is [X][X] , [X][X] [X] ||| sich [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0892857
+is [X][X] not a [X] ||| sich [X][X] keinen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.047619
+is merely [X][X] , [X][X] [X] ||| sich lediglich um [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.0892857
+is merely [X][X] not a [X] ||| sich lediglich um [X][X] keinen [X] ||| 0.0182166 1 ||| 2-3 ||| 0.047619
+is merely a report [X][X] [X] ||| sich lediglich um einen Bericht [X][X] [X] ||| 0.0182166 1 ||| 4-5 ||| 0.0892857
+[X][X] report [X][X] legislative proposal [X] ||| [X][X] Bericht [X][X] Legislativvorschlag [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.132748
+merely [X][X] not a [X][X] [X] ||| lediglich um [X][X] keinen [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-4 ||| 0.0588235
+merely [X][X] legislative proposal [X] ||| lediglich um [X][X] Legislativvorschlag [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0588235
+merely a [X][X] legislative proposal [X] ||| lediglich um einen [X][X] Legislativvorschlag [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0588235
+I [X][X] whether one can [X] ||| ich [X][X] ob es möglich ist [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+I [X][X] whether [X][X] [X] ||| ich [X][X] ob [X][X] ist [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.108466
+I [X][X] one can [X] ||| ich [X][X] es möglich ist [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+I [X][X] can [X] ||| ich [X][X] möglich ist [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+I [X][X] [X] ||| ich [X][X] ist [X] ||| 0.0182166 1 ||| 1-1 ||| 0.108466
+I want to know [X][X] [X] ||| ich möchte wissen , [X][X] ist [X] ||| 0.0182166 1 ||| 4-4 ||| 0.108466
+I [X][X] whether [X][X] raise [X] ||| ich [X][X] ob [X][X] ist [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.037037
+I [X][X] whether one [X][X] [X] ||| ich [X][X] ob es [X][X] ist [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.037037
+I [X][X] one can raise [X] ||| ich [X][X] es möglich ist [X] ||| 0.0182166 1 ||| 1-1 ||| 0.037037
+I [X][X] one [X][X] [X] ||| ich [X][X] es [X][X] ist [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.037037
+I [X][X] can raise [X] ||| ich [X][X] möglich ist [X] ||| 0.0182166 1 ||| 1-1 ||| 0.037037
+I [X][X] raise [X] ||| ich [X][X] ist [X] ||| 0.0182166 1 ||| 1-1 ||| 0.037037
+[X][X] whether one can [X] ||| [X][X] ob es möglich ist , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.132479
+[X][X] whether [X][X] [X] ||| [X][X] ob [X][X] ist , [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.400922
+[X][X] whether [X][X] [X] ||| [X][X] ob [X][X] , [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.400922
+[X][X] one can [X] ||| [X][X] es möglich ist , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.132479
+want to know [X][X] can [X] ||| möchte wissen , [X][X] möglich ist , [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0769231
+want to know [X][X] [X] ||| möchte wissen , [X][X] ist , [X] ||| 0.00910828 1 ||| 3-3 ||| 0.23718
+want to know [X][X] [X] ||| möchte wissen , [X][X] , [X] ||| 0.00910828 1 ||| 3-3 ||| 0.23718
+want to know whether [X][X] [X] ||| möchte wissen , ob [X][X] ist , [X] ||| 0.00910828 1 ||| 4-4 ||| 0.23718
+want to know whether [X][X] [X] ||| möchte wissen , ob [X][X] , [X] ||| 0.00910828 1 ||| 4-4 ||| 0.23718
+[X][X] whether one can raise [X] ||| [X][X] ob es möglich ist , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0679825
+[X][X] whether [X][X] raise [X] ||| [X][X] ob [X][X] ist , [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.135965
+[X][X] whether [X][X] raise [X] ||| [X][X] ob [X][X] , [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.135965
+[X][X] whether one [X][X] [X] ||| [X][X] ob es [X][X] ist , [X] ||| 0.00910828 1 ||| 0-0 3-3 ||| 0.135965
+[X][X] whether one [X][X] [X] ||| [X][X] ob es [X][X] , [X] ||| 0.00910828 1 ||| 0-0 3-3 ||| 0.135965
+[X][X] one can raise [X] ||| [X][X] es möglich ist , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0679825
+[X][X] one [X][X] [X] ||| [X][X] es [X][X] ist , [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.135965
+[X][X] one [X][X] [X] ||| [X][X] es [X][X] , [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.135965
+want to know [X][X] raise [X] ||| möchte wissen , [X][X] ist , [X] ||| 0.00910828 1 ||| 3-3 ||| 0.0833334
+want to know [X][X] raise [X] ||| möchte wissen , [X][X] , [X] ||| 0.00910828 1 ||| 3-3 ||| 0.0833334
+[X][X] can raise an objection [X] ||| [X][X] möglich ist , einen Einwand gegen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0222222
+[X][X] can [X][X] objection [X] ||| [X][X] möglich [X][X] Einwand gegen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0222222
+[X][X] can raise [X][X] [X] ||| [X][X] möglich [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0222222
+[X][X] can [X][X] objection [X] ||| [X][X] möglich ist [X][X] Einwand gegen [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0222222
+[X][X] can raise [X][X] [X] ||| [X][X] möglich ist [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0222222
+[X][X] can [X][X] objection [X] ||| [X][X] möglich ist , [X][X] Einwand gegen [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.0222222
+[X][X] can raise [X][X] [X] ||| [X][X] möglich ist , [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.0222222
+whether [X][X] raise an objection [X] ||| ob [X][X] ist , einen Einwand gegen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+whether [X][X] raise [X][X] [X] ||| ob [X][X] [X][X] [X] ||| 0.0109299 1 ||| 1-1 3-2 ||| 0.111111
+whether [X][X] raise [X][X] [X] ||| ob [X][X] ist [X][X] [X] ||| 0.00364331 1 ||| 1-1 3-3 ||| 0.111111
+whether [X][X] raise [X][X] [X] ||| ob [X][X] ist , [X][X] [X] ||| 0.00364331 1 ||| 1-1 3-4 ||| 0.111111
+whether [X][X] an objection [X] ||| ob [X][X] ist , einen Einwand gegen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+whether [X][X] raise an objection [X] ||| ob [X][X] , einen Einwand gegen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+whether [X][X] raise [X][X] [X] ||| ob [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0222222
+whether [X][X] an objection [X] ||| ob [X][X] , einen Einwand gegen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+whether [X][X] raise an objection [X] ||| ob [X][X] einen Einwand gegen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+whether [X][X] an objection [X] ||| ob [X][X] einen Einwand gegen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+whether [X][X] objection [X] ||| ob [X][X] Einwand gegen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+whether one [X][X] an objection [X] ||| ob es [X][X] ist , einen Einwand gegen [X] ||| 0.00607219 1 ||| 2-2 ||| 0.0666666
+whether one [X][X] an objection [X] ||| ob es [X][X] , einen Einwand gegen [X] ||| 0.00607219 1 ||| 2-2 ||| 0.0666666
+whether one [X][X] an objection [X] ||| ob es [X][X] einen Einwand gegen [X] ||| 0.00607219 1 ||| 2-2 ||| 0.0666666
+whether one [X][X] objection [X] ||| ob es [X][X] Einwand gegen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0222222
+whether one can [X][X] objection [X] ||| ob es möglich [X][X] Einwand gegen [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0222222
+whether one can raise [X][X] [X] ||| ob es möglich [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.0222222
+whether one can [X][X] objection [X] ||| ob es möglich ist [X][X] Einwand gegen [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0222222
+whether one can raise [X][X] [X] ||| ob es möglich ist [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.0222222
+whether one can [X][X] objection [X] ||| ob es möglich ist , [X][X] Einwand gegen [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0222222
+whether one can raise [X][X] [X] ||| ob es möglich ist , [X][X] [X] ||| 0.0182166 1 ||| 4-5 ||| 0.0222222
+[X][X] to what is [X] ||| Dokument [X][X] bei dem es sich [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0625
+[X][X] to [X][X] [X] ||| Dokument [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.099537
+[X][X] what is [X] ||| Dokument [X][X] dem es sich [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0625
+[X][X] is [X] ||| Dokument [X][X] sich [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0625
+of [X][X] to what is [X] ||| Dokument zu [X][X] bei dem es sich [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0625
+of [X][X] to [X][X] [X] ||| Dokument zu [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.099537
+of [X][X] what is [X] ||| Dokument zu [X][X] dem es sich [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0625
+of [X][X] is [X] ||| Dokument zu [X][X] sich [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0625
+of that kind [X][X] is [X] ||| Dokument zu erheben , [X][X] sich [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0625
+of that kind to [X][X] [X] ||| Dokument zu erheben , bei [X][X] [X] ||| 0.0182166 1 ||| 4-5 ||| 0.099537
+[X][X] to what is merely [X] ||| [X][X] bei dem es sich lediglich um [X] ||| 0.0182166 1 ||| 0-0 ||| 0.161097
+[X][X] to [X][X] merely [X] ||| [X][X] bei [X][X] lediglich um [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.161097
+[X][X] to what [X][X] [X] ||| [X][X] bei dem es [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.280145
+[X][X] what is merely [X] ||| [X][X] dem es sich lediglich um [X] ||| 0.0182166 1 ||| 0-0 ||| 0.161097
+[X][X] what [X][X] [X] ||| [X][X] dem es [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.280145
+that kind [X][X] is merely [X] ||| erheben , [X][X] sich lediglich um [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0714286
+that kind [X][X] merely [X] ||| erheben , [X][X] lediglich um [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0714286
+that kind to [X][X] merely [X] ||| erheben , bei [X][X] lediglich um [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0714286
+that kind to what [X][X] [X] ||| erheben , bei dem es [X][X] [X] ||| 0.0182166 1 ||| 4-5 ||| 0.154762
+[X][X] is merely a report [X] ||| [X][X] sich lediglich um einen Bericht [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0883459
+[X][X] is [X][X] report [X] ||| [X][X] sich [X][X] Bericht [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0883459
+[X][X] is merely [X][X] [X] ||| [X][X] sich lediglich um [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.1514
+to [X][X] merely a report [X] ||| bei [X][X] lediglich um einen Bericht [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+to [X][X] merely [X][X] [X] ||| bei [X][X] lediglich um [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-4 ||| 0.115686
+to [X][X] a report [X] ||| bei [X][X] einen Bericht [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+to [X][X] report [X] ||| bei [X][X] Bericht [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+to what [X][X] a report [X] ||| bei dem es [X][X] einen Bericht [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0526316
+to what [X][X] report [X] ||| bei dem es [X][X] Bericht [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0526316
+to what is [X][X] report [X] ||| bei dem es sich [X][X] Bericht [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0526316
+to what is merely [X][X] [X] ||| bei dem es sich lediglich um [X][X] [X] ||| 0.0182166 1 ||| 4-6 ||| 0.115686
+[X][X] merely a report , [X] ||| [X][X] lediglich um einen Bericht und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0871143
+[X][X] merely [X][X] , [X] ||| [X][X] lediglich um [X][X] und [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0871143
+[X][X] merely a [X][X] [X] ||| [X][X] lediglich um einen [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.183658
+what [X][X] a report , [X] ||| dem es [X][X] einen Bericht und [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0526316
+what [X][X] a [X][X] [X] ||| dem es [X][X] einen [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.120604
+what [X][X] report , [X] ||| dem es [X][X] Bericht und [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0526316
+what [X][X] , [X] ||| dem es [X][X] und [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0526316
+what is [X][X] report , [X] ||| dem es sich [X][X] Bericht und [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0526316
+what is [X][X] , [X] ||| dem es sich [X][X] und [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0526316
+what is merely [X][X] , [X] ||| dem es sich lediglich um [X][X] und [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0526316
+what is merely a [X][X] [X] ||| dem es sich lediglich um einen [X][X] [X] ||| 0.0182166 1 ||| 4-6 ||| 0.120604
+[X][X] a [X][X] legislative proposal [X] ||| [X][X] einen [X][X] Legislativvorschlag [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0739247
+is [X][X] not a [X][X] [X] ||| sich [X][X] keinen [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0416667
+is [X][X] legislative proposal [X] ||| sich [X][X] Legislativvorschlag [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0416667
+is merely [X][X] legislative proposal [X] ||| sich lediglich um [X][X] Legislativvorschlag [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0416667
+I [X][X] whether one can [X] ||| ich [X][X] ob es möglich ist , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+I [X][X] whether [X][X] [X] ||| ich [X][X] ob [X][X] ist , [X] ||| 0.00910828 1 ||| 1-1 3-3 ||| 0.163743
+I [X][X] whether [X][X] [X] ||| ich [X][X] ob [X][X] , [X] ||| 0.00910828 1 ||| 1-1 3-3 ||| 0.163743
+I [X][X] one can [X] ||| ich [X][X] es möglich ist , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+I [X][X] can [X] ||| ich [X][X] möglich ist , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+I [X][X] [X] ||| ich [X][X] ist , [X] ||| 0.00910828 1 ||| 1-1 ||| 0.163743
+I [X][X] [X] ||| ich [X][X] , [X] ||| 0.00910828 1 ||| 1-1 ||| 0.163743
+I want to know [X][X] [X] ||| ich möchte wissen , [X][X] ist , [X] ||| 0.00910828 1 ||| 4-4 ||| 0.163743
+I want to know [X][X] [X] ||| ich möchte wissen , [X][X] , [X] ||| 0.00910828 1 ||| 4-4 ||| 0.163743
+I [X][X] whether [X][X] raise [X] ||| ich [X][X] ob [X][X] ist , [X] ||| 0.00910828 1 ||| 1-1 3-3 ||| 0.0526316
+I [X][X] whether [X][X] raise [X] ||| ich [X][X] ob [X][X] , [X] ||| 0.00910828 1 ||| 1-1 3-3 ||| 0.0526316
+I [X][X] whether one [X][X] [X] ||| ich [X][X] ob es [X][X] ist , [X] ||| 0.00910828 1 ||| 1-1 4-4 ||| 0.0526316
+I [X][X] whether one [X][X] [X] ||| ich [X][X] ob es [X][X] , [X] ||| 0.00910828 1 ||| 1-1 4-4 ||| 0.0526316
+I [X][X] one can raise [X] ||| ich [X][X] es möglich ist , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0263158
+I [X][X] one [X][X] [X] ||| ich [X][X] es [X][X] ist , [X] ||| 0.00910828 1 ||| 1-1 3-3 ||| 0.0526316
+I [X][X] one [X][X] [X] ||| ich [X][X] es [X][X] , [X] ||| 0.00910828 1 ||| 1-1 3-3 ||| 0.0526316
+I [X][X] can raise [X] ||| ich [X][X] möglich ist , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0263158
+I [X][X] raise [X] ||| ich [X][X] ist , [X] ||| 0.00910828 1 ||| 1-1 ||| 0.0526316
+I [X][X] raise [X] ||| ich [X][X] , [X] ||| 0.00910828 1 ||| 1-1 ||| 0.0526316
+[X][X] whether [X][X] raise an [X] ||| [X][X] ob [X][X] ist , einen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0448842
+[X][X] whether [X][X] an [X] ||| [X][X] ob [X][X] ist , einen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0448842
+[X][X] whether [X][X] raise an [X] ||| [X][X] ob [X][X] , einen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0448842
+[X][X] whether [X][X] an [X] ||| [X][X] ob [X][X] , einen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0448842
+[X][X] whether [X][X] raise an [X] ||| [X][X] ob [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0448842
+[X][X] whether [X][X] an [X] ||| [X][X] ob [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0448842
+[X][X] whether one [X][X] an [X] ||| [X][X] ob es [X][X] ist , einen [X] ||| 0.00607219 1 ||| 0-0 3-3 ||| 0.134653
+[X][X] whether one [X][X] an [X] ||| [X][X] ob es [X][X] , einen [X] ||| 0.00607219 1 ||| 0-0 3-3 ||| 0.134653
+[X][X] whether one [X][X] an [X] ||| [X][X] ob es [X][X] einen [X] ||| 0.00607219 1 ||| 0-0 3-3 ||| 0.134653
+[X][X] whether one can [X][X] [X] ||| [X][X] ob es möglich [X][X] [X] ||| 0.00607219 1 ||| 0-0 4-4 ||| 0.134653
+[X][X] whether one can [X][X] [X] ||| [X][X] ob es möglich ist [X][X] [X] ||| 0.00607219 1 ||| 0-0 4-5 ||| 0.134653
+[X][X] whether one can [X][X] [X] ||| [X][X] ob es möglich ist , [X][X] [X] ||| 0.00607219 1 ||| 0-0 4-6 ||| 0.134653
+[X][X] one can raise an [X] ||| [X][X] es möglich ist , einen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0448842
+[X][X] one [X][X] an [X] ||| [X][X] es [X][X] ist , einen [X] ||| 0.00607219 1 ||| 0-0 2-2 ||| 0.134653
+[X][X] one [X][X] an [X] ||| [X][X] es [X][X] , einen [X] ||| 0.00607219 1 ||| 0-0 2-2 ||| 0.134653
+[X][X] one [X][X] an [X] ||| [X][X] es [X][X] einen [X] ||| 0.00607219 1 ||| 0-0 2-2 ||| 0.134653
+[X][X] one can [X][X] [X] ||| [X][X] es möglich [X][X] [X] ||| 0.00607219 1 ||| 0-0 3-3 ||| 0.134653
+[X][X] one can [X][X] [X] ||| [X][X] es möglich ist [X][X] [X] ||| 0.00607219 1 ||| 0-0 3-4 ||| 0.134653
+[X][X] one can [X][X] [X] ||| [X][X] es möglich ist , [X][X] [X] ||| 0.00607219 1 ||| 0-0 3-5 ||| 0.134653
+want to know [X][X] an [X] ||| möchte wissen , [X][X] ist , einen [X] ||| 0.00607219 1 ||| 3-3 ||| 0.081081
+want to know [X][X] an [X] ||| möchte wissen , [X][X] , einen [X] ||| 0.00607219 1 ||| 3-3 ||| 0.081081
+want to know [X][X] an [X] ||| möchte wissen , [X][X] einen [X] ||| 0.00607219 1 ||| 3-3 ||| 0.081081
+of [X][X] to [X][X] merely [X] ||| zu [X][X] bei [X][X] lediglich um [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0526316
+of [X][X] to what [X][X] [X] ||| zu [X][X] bei dem es [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-5 ||| 0.0883459
+of [X][X] what is merely [X] ||| zu [X][X] dem es sich lediglich um [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+of [X][X] what [X][X] [X] ||| zu [X][X] dem es [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-4 ||| 0.0883459
+of [X][X] is merely [X] ||| zu [X][X] sich lediglich um [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+of [X][X] merely [X] ||| zu [X][X] lediglich um [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+of that kind [X][X] merely [X] ||| zu erheben , [X][X] lediglich um [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0526316
+[X][X] to [X][X] merely a [X] ||| [X][X] bei [X][X] lediglich um einen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0833333
+[X][X] to [X][X] a [X] ||| [X][X] bei [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0833333
+[X][X] to what [X][X] a [X] ||| [X][X] bei dem es [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.0833333
+[X][X] to what is [X][X] [X] ||| [X][X] bei dem es sich [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-5 ||| 0.119048
+[X][X] what is merely a [X] ||| [X][X] dem es sich lediglich um einen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0833333
+[X][X] what [X][X] a [X] ||| [X][X] dem es [X][X] einen [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0833333
+[X][X] what is [X][X] [X] ||| [X][X] dem es sich [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.119048
+that kind [X][X] is [X][X] [X] ||| erheben , [X][X] sich [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0833333
+that kind [X][X] merely a [X] ||| erheben , [X][X] lediglich um einen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.047619
+that kind [X][X] a [X] ||| erheben , [X][X] einen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.047619
+that kind to [X][X] a [X] ||| erheben , bei [X][X] einen [X] ||| 0.0182166 1 ||| 3-3 ||| 0.047619
+[X][X] is [X][X] report , [X] ||| [X][X] sich [X][X] Bericht und [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0344828
+[X][X] is [X][X] , [X] ||| [X][X] sich [X][X] und [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0344828
+[X][X] is merely [X][X] , [X] ||| [X][X] sich lediglich um [X][X] und [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.0344828
+[X][X] is merely a [X][X] [X] ||| [X][X] sich lediglich um einen [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-5 ||| 0.0630542
+to [X][X] merely [X][X] , [X] ||| bei [X][X] lediglich um [X][X] und [X] ||| 0.0182166 1 ||| 1-1 3-4 ||| 0.0344828
+to [X][X] merely a [X][X] [X] ||| bei [X][X] lediglich um einen [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-5 ||| 0.0630542
+to [X][X] a report , [X] ||| bei [X][X] einen Bericht und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+to [X][X] a [X][X] [X] ||| bei [X][X] einen [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0630542
+to [X][X] report , [X] ||| bei [X][X] Bericht und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+to [X][X] , [X] ||| bei [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+to what [X][X] a [X][X] [X] ||| bei dem es [X][X] einen [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.0630542
+to what [X][X] report , [X] ||| bei dem es [X][X] Bericht und [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0344828
+to what [X][X] , [X] ||| bei dem es [X][X] und [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0344828
+to what is [X][X] , [X] ||| bei dem es sich [X][X] und [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0344828
+[X][X] merely [X][X] not a [X] ||| [X][X] lediglich um [X][X] keinen [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0642857
+[X][X] merely a report [X][X] [X] ||| [X][X] lediglich um einen Bericht [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-5 ||| 0.0965438
+what [X][X] a report [X][X] [X] ||| dem es [X][X] einen Bericht [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-5 ||| 0.0679723
+what [X][X] report [X][X] [X] ||| dem es [X][X] Bericht [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0679723
+what [X][X] report , [X][X] [X] ||| dem es [X][X] Bericht und [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-5 ||| 0.0679723
+what [X][X] , not a [X] ||| dem es [X][X] und keinen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0357143
+what [X][X] , [X][X] [X] ||| dem es [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0679723
+what [X][X] not a [X] ||| dem es [X][X] keinen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0357143
+what is [X][X] report [X][X] [X] ||| dem es sich [X][X] Bericht [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.0679723
+what is [X][X] , [X][X] [X] ||| dem es sich [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.0679723
+what is [X][X] not a [X] ||| dem es sich [X][X] keinen [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0357143
+I [X][X] whether [X][X] an [X] ||| ich [X][X] ob [X][X] ist , einen [X] ||| 0.00607219 1 ||| 1-1 3-3 ||| 0.0535713
+I [X][X] whether [X][X] an [X] ||| ich [X][X] ob [X][X] , einen [X] ||| 0.00607219 1 ||| 1-1 3-3 ||| 0.0535713
+I [X][X] whether [X][X] an [X] ||| ich [X][X] ob [X][X] einen [X] ||| 0.00607219 1 ||| 1-1 3-3 ||| 0.0535713
+I [X][X] one [X][X] an [X] ||| ich [X][X] es [X][X] ist , einen [X] ||| 0.00607219 1 ||| 1-1 3-3 ||| 0.0535713
+I [X][X] one [X][X] an [X] ||| ich [X][X] es [X][X] , einen [X] ||| 0.00607219 1 ||| 1-1 3-3 ||| 0.0535713
+I [X][X] one [X][X] an [X] ||| ich [X][X] es [X][X] einen [X] ||| 0.00607219 1 ||| 1-1 3-3 ||| 0.0535713
+I [X][X] one can [X][X] [X] ||| ich [X][X] es möglich [X][X] [X] ||| 0.00607219 1 ||| 1-1 4-4 ||| 0.0535713
+I [X][X] one can [X][X] [X] ||| ich [X][X] es möglich ist [X][X] [X] ||| 0.00607219 1 ||| 1-1 4-5 ||| 0.0535713
+I [X][X] one can [X][X] [X] ||| ich [X][X] es möglich ist , [X][X] [X] ||| 0.00607219 1 ||| 1-1 4-6 ||| 0.0535713
+I [X][X] can raise an [X] ||| ich [X][X] möglich ist , einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0178571
+I [X][X] can [X][X] [X] ||| ich [X][X] möglich [X][X] [X] ||| 0.00607219 1 ||| 1-1 3-3 ||| 0.0535713
+I [X][X] can [X][X] [X] ||| ich [X][X] möglich ist [X][X] [X] ||| 0.00607219 1 ||| 1-1 3-4 ||| 0.0535713
+I [X][X] can [X][X] [X] ||| ich [X][X] möglich ist , [X][X] [X] ||| 0.00607219 1 ||| 1-1 3-5 ||| 0.0535713
+I [X][X] raise an [X] ||| ich [X][X] ist , einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0178571
+I [X][X] an [X] ||| ich [X][X] ist , einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0178571
+I [X][X] raise an [X] ||| ich [X][X] , einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0178571
+I [X][X] an [X] ||| ich [X][X] , einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0178571
+I [X][X] raise an [X] ||| ich [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0178571
+I [X][X] an [X] ||| ich [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0178571
+[X][X] to what is merely [X] ||| Dokument [X][X] bei dem es sich lediglich um [X] ||| 0.0182166 1 ||| 0-1 ||| 0.037037
+[X][X] to [X][X] merely [X] ||| Dokument [X][X] bei [X][X] lediglich um [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.037037
+[X][X] to what [X][X] [X] ||| Dokument [X][X] bei dem es [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-5 ||| 0.037037
+[X][X] what is merely [X] ||| Dokument [X][X] dem es sich lediglich um [X] ||| 0.0182166 1 ||| 0-1 ||| 0.037037
+[X][X] what [X][X] [X] ||| Dokument [X][X] dem es [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-4 ||| 0.037037
+[X][X] is merely [X] ||| Dokument [X][X] sich lediglich um [X] ||| 0.0182166 1 ||| 0-1 ||| 0.037037
+[X][X] merely [X] ||| Dokument [X][X] lediglich um [X] ||| 0.0182166 1 ||| 0-1 ||| 0.037037
+of [X][X] to [X][X] merely [X] ||| Dokument zu [X][X] bei [X][X] lediglich um [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.037037
+of [X][X] to what [X][X] [X] ||| Dokument zu [X][X] bei dem es [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-6 ||| 0.037037
+of [X][X] what is merely [X] ||| Dokument zu [X][X] dem es sich lediglich um [X] ||| 0.0182166 1 ||| 1-2 ||| 0.037037
+of [X][X] what [X][X] [X] ||| Dokument zu [X][X] dem es [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-5 ||| 0.037037
+of [X][X] is merely [X] ||| Dokument zu [X][X] sich lediglich um [X] ||| 0.0182166 1 ||| 1-2 ||| 0.037037
+of [X][X] merely [X] ||| Dokument zu [X][X] lediglich um [X] ||| 0.0182166 1 ||| 1-2 ||| 0.037037
+of that kind [X][X] merely [X] ||| Dokument zu erheben , [X][X] lediglich um [X] ||| 0.0182166 1 ||| 3-4 ||| 0.037037
+of [X][X] to [X][X] a [X] ||| zu [X][X] bei [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0357143
+of [X][X] what [X][X] a [X] ||| zu [X][X] dem es [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 3-4 ||| 0.0357143
+of [X][X] what is [X][X] [X] ||| zu [X][X] dem es sich [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-5 ||| 0.0357143
+of [X][X] is merely a [X] ||| zu [X][X] sich lediglich um einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+of [X][X] is [X][X] [X] ||| zu [X][X] sich [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0357143
+of [X][X] merely a [X] ||| zu [X][X] lediglich um einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+of [X][X] a [X] ||| zu [X][X] einen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+of that kind [X][X] a [X] ||| zu erheben , [X][X] einen [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0357143
+[X][X] to [X][X] a report [X] ||| [X][X] bei [X][X] einen Bericht [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0357143
+[X][X] to [X][X] report [X] ||| [X][X] bei [X][X] Bericht [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0357143
+[X][X] to what [X][X] report [X] ||| [X][X] bei dem es [X][X] Bericht [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.0357143
+[X][X] what [X][X] a report [X] ||| [X][X] dem es [X][X] einen Bericht [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0357143
+[X][X] what [X][X] report [X] ||| [X][X] dem es [X][X] Bericht [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0357143
+[X][X] what is [X][X] report [X] ||| [X][X] dem es sich [X][X] Bericht [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.0357143
+[X][X] what is merely [X][X] [X] ||| [X][X] dem es sich lediglich um [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-6 ||| 0.0357143
+that kind [X][X] merely [X][X] [X] ||| erheben , [X][X] lediglich um [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-5 ||| 0.0357143
+that kind [X][X] a report [X] ||| erheben , [X][X] einen Bericht [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0357143
+that kind [X][X] report [X] ||| erheben , [X][X] Bericht [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0357143
+that kind to [X][X] report [X] ||| erheben , bei [X][X] Bericht [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0357143
+[X][X] is [X][X] not a [X] ||| [X][X] sich [X][X] keinen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0285714
+to [X][X] a report [X][X] [X] ||| bei [X][X] einen Bericht [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0285714
+to [X][X] report [X][X] [X] ||| bei [X][X] Bericht [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0285714
+to [X][X] report , [X][X] [X] ||| bei [X][X] Bericht und [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0285714
+to [X][X] , not a [X] ||| bei [X][X] und keinen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0285714
+to [X][X] , [X][X] [X] ||| bei [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0285714
+to [X][X] not a [X] ||| bei [X][X] keinen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0285714
+to what [X][X] report [X][X] [X] ||| bei dem es [X][X] Bericht [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.0285714
+to what [X][X] , [X][X] [X] ||| bei dem es [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.0285714
+to what [X][X] not a [X] ||| bei dem es [X][X] keinen [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0285714
+[X][X] merely [X][X] legislative proposal [X] ||| [X][X] lediglich um [X][X] Legislativvorschlag [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0322581
+what [X][X] not a [X][X] [X] ||| dem es [X][X] keinen [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-4 ||| 0.0322581
+what [X][X] legislative proposal [X] ||| dem es [X][X] Legislativvorschlag [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0322581
+what is [X][X] legislative proposal [X] ||| dem es sich [X][X] Legislativvorschlag [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0322581
+that is precisely [X] ||| genau [X] ||| 0.0182166 1 ||| ||| 1
+that is precisely the [X] ||| genau [X] ||| 0.0182166 1 ||| ||| 1
+time when [X] ||| dann [X] ||| 0.0182166 1 ||| ||| 1
+the time when [X] ||| dann [X] ||| 0.0182166 1 ||| ||| 1
+may [X] ||| können [X] ||| 0.0182166 1 ||| ||| 1
+you [X] ||| Sie [X] ||| 0.218091 1 ||| ||| 2
+, [X] ||| , [X] ||| 0.315522 1 ||| ||| 3
+if [X] ||| wenn [X] ||| 0.0182166 1 ||| ||| 1
+wish [X] ||| wollen [X] ||| 0.0182166 1 ||| ||| 1
+this [X] ||| diese [X] ||| 0.0182166 1 ||| ||| 1
+question [X] ||| Frage [X] ||| 0.0182166 1 ||| ||| 1
+raise [X] ||| ansprechen [X] ||| 0.0182166 1 ||| ||| 1
+on [X] ||| am [X] ||| 0.0182166 1 ||| ||| 1
+Thursday prior [X] ||| Donnerstag [X] ||| 0.0182166 1 ||| ||| 1
+to [X] ||| zu [X] ||| 0.0182166 1 ||| ||| 1
+the start [X] ||| Beginn [X] ||| 0.0182166 1 ||| ||| 1
+of the [X] ||| der [X] ||| 0.0182166 1 ||| ||| 1
+presentation [X] ||| Aussprache [X] ||| 0.0182166 1 ||| ||| 1
+of [X] ||| über [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| den [X] ||| 0.0182166 1 ||| ||| 1
+report [X] ||| Bericht [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+[X][X] the time when [X] ||| [X][X] dann [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25
+[X][X] time when [X] ||| [X][X] dann [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25
+that is precisely the [X][X] [X] ||| genau [X][X] [X] ||| 0.0182166 1 ||| 4-1 ||| 0.587302
+that is precisely [X][X] [X] ||| genau [X][X] [X] ||| 0.0182166 1 ||| 3-1 ||| 0.587302
+you may [X] ||| können Sie [X] ||| 0.0182166 1 ||| ||| 1
+, if [X] ||| , wenn [X] ||| 0.0182166 1 ||| ||| 1
+if you [X] ||| wenn Sie [X] ||| 0.0182166 1 ||| ||| 1
+you wish [X] ||| Sie wollen [X] ||| 0.0182166 1 ||| ||| 1
+wish , [X] ||| wollen , [X] ||| 0.0182166 1 ||| ||| 1
+this question [X] ||| diese Frage [X] ||| 0.0182166 1 ||| ||| 1
+i.e. [X] ||| d. h. [X] ||| 0.0182166 1 ||| ||| 1
+on Thursday prior [X] ||| am Donnerstag [X] ||| 0.0182166 1 ||| ||| 0.5
+on [X][X] [X] ||| am [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.05694
+Thursday prior to [X] ||| Donnerstag zu [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] to [X] ||| [X][X] zu [X] ||| 0.218091 1 ||| 0-0 ||| 1.06323
+to the start [X] ||| zu Beginn [X] ||| 0.0182166 1 ||| ||| 0.5
+to [X][X] [X] ||| zu [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.08724
+the start of the [X] ||| Beginn der [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] of the [X] ||| [X][X] der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.840278
+the start [X][X] [X] ||| Beginn [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.842157
+of the presentation [X] ||| der Aussprache [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] presentation [X] ||| [X][X] Aussprache [X] ||| 0.218091 1 ||| 0-0 ||| 1.04627
+presentation of [X] ||| Aussprache über [X] ||| 0.0182166 1 ||| ||| 1
+of the [X] ||| über den [X] ||| 0.0182166 1 ||| ||| 1
+the report [X] ||| den Bericht [X] ||| 0.0182166 1 ||| ||| 1
+report . [X] ||| Bericht . [X] ||| 0.0182166 1 ||| ||| 1
+time when you may [X] ||| dann können Sie [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] you may [X] ||| [X][X] können Sie [X] ||| 0.0182166 1 ||| 0-0 ||| 0.726191
+time when [X][X] [X] ||| dann [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.842157
+the time when you may [X] ||| dann können Sie [X] ||| 0.0182166 1 ||| ||| 0.25
+the [X][X] you may [X] ||| [X][X] können Sie [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+the time when [X][X] [X] ||| dann [X][X] [X] ||| 0.0182166 1 ||| 3-1 ||| 0.680159
+you may , [X] ||| können Sie , [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] , [X] ||| [X][X] , [X] ||| 0.315522 1 ||| 0-0 ||| 2.51105
+, if you [X] ||| , wenn Sie [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] you [X] ||| [X][X] Sie [X] ||| 0.0182166 1 ||| 0-0 ||| 0.613095
+, [X][X] [X] ||| , [X][X] [X] ||| 0.315522 1 ||| 1-1 ||| 2.1735
+if you wish [X] ||| wenn Sie wollen [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] wish [X] ||| [X][X] wollen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.677871
+if [X][X] [X] ||| wenn [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.652302
+you wish , [X] ||| Sie wollen , [X] ||| 0.0182166 1 ||| ||| 0.333333
+you [X][X] [X] ||| Sie [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.620464
+raise this question [X] ||| diese Frage ansprechen [X] ||| 0.0182166 1 ||| ||| 0.5
+raise [X][X] [X] ||| [X][X] ansprechen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.5
+, i.e. [X] ||| , d. h. [X] ||| 0.0182166 1 ||| ||| 1
+i.e. on [X] ||| d. h. am [X] ||| 0.0182166 1 ||| ||| 1
+on Thursday prior to [X] ||| am Donnerstag zu [X] ||| 0.0182166 1 ||| ||| 0.25
+on [X][X] to [X] ||| am [X][X] zu [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+Thursday prior to the start [X] ||| Donnerstag zu Beginn [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] to the start [X] ||| [X][X] zu Beginn [X] ||| 0.0182166 1 ||| 0-0 ||| 0.413524
+[X][X] to [X][X] [X] ||| [X][X] zu [X][X] [X] ||| 0.218091 1 ||| 0-0 2-2 ||| 1.09318
+[X][X] the start [X] ||| [X][X] Beginn [X] ||| 0.0182166 1 ||| 0-0 ||| 0.413524
+Thursday prior [X][X] [X] ||| Donnerstag [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.487985
+Thursday prior to [X][X] [X] ||| Donnerstag zu [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.487985
+to the start of the [X] ||| zu Beginn der [X] ||| 0.0182166 1 ||| ||| 0.2
+to [X][X] of the [X] ||| zu [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.2
+to the start [X][X] [X] ||| zu Beginn [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.587236
+the start of the presentation [X] ||| Beginn der Aussprache [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] of the presentation [X] ||| [X][X] der Aussprache [X] ||| 0.0182166 1 ||| 0-0 ||| 0.546266
+the start [X][X] presentation [X] ||| Beginn [X][X] Aussprache [X] ||| 0.0182166 1 ||| 2-1 ||| 0.2
+of the presentation of [X] ||| der Aussprache über [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] presentation of [X] ||| [X][X] Aussprache über [X] ||| 0.0182166 1 ||| 0-0 ||| 0.591667
+[X][X] of [X] ||| [X][X] über [X] ||| 0.0182166 1 ||| 0-0 ||| 0.591667
+of the [X][X] [X] ||| der [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.494048
+presentation of the [X] ||| Aussprache über den [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] the [X] ||| [X][X] den [X] ||| 0.0182166 1 ||| 0-0 ||| 0.660965
+presentation [X][X] [X] ||| Aussprache [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.590909
+of the report [X] ||| über den Bericht [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] report [X] ||| [X][X] Bericht [X] ||| 0.0182166 1 ||| 0-0 ||| 0.675707
+of [X][X] [X] ||| über [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.5
+the report . [X] ||| den Bericht . [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.712453
+the [X][X] [X] ||| den [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+[X][X] the [X][X] you may [X] ||| [X][X] [X][X] können Sie [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.142857
+[X][X] the time when [X][X] [X] ||| [X][X] dann [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-2 ||| 0.337302
+[X][X] time when you may [X] ||| [X][X] dann können Sie [X] ||| 0.0182166 1 ||| 0-0 ||| 0.142857
+[X][X] time when [X][X] [X] ||| [X][X] dann [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.337302
+time when you may , [X] ||| dann können Sie , [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] you may , [X] ||| [X][X] können Sie , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.477778
+time when [X][X] , [X] ||| dann [X][X] , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.241667
+the [X][X] you may , [X] ||| [X][X] können Sie , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.166667
+the [X][X] , [X] ||| [X][X] , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.2
+the time when [X][X] , [X] ||| dann [X][X] , [X] ||| 0.0182166 1 ||| 3-1 ||| 0.2
+you may , if [X] ||| können Sie , wenn [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] , if [X] ||| [X][X] , wenn [X] ||| 0.0182166 1 ||| 0-0 ||| 0.569444
+[X][X] if [X] ||| [X][X] wenn [X] ||| 0.0182166 1 ||| 0-0 ||| 0.569444
+you may [X][X] [X] ||| können Sie [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.535714
+, if you wish [X] ||| , wenn Sie wollen [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] you wish [X] ||| [X][X] Sie wollen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.344538
+, [X][X] wish [X] ||| , [X][X] wollen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+, if [X][X] [X] ||| , wenn [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.335537
+if you wish , [X] ||| wenn Sie wollen , [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] wish , [X] ||| [X][X] wollen , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.380195
+if [X][X] , [X] ||| wenn [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.216667
+if you [X][X] [X] ||| wenn Sie [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.318968
+, raise this question [X] ||| , diese Frage ansprechen [X] ||| 0.0182166 1 ||| ||| 0.333333
+, raise [X][X] [X] ||| , [X][X] ansprechen [X] ||| 0.0182166 1 ||| 2-1 ||| 0.333333
+raise this question , [X] ||| diese Frage ansprechen , [X] ||| 0.0182166 1 ||| ||| 0.333333
+raise [X][X] , [X] ||| [X][X] ansprechen , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.333333
+, i.e. on [X] ||| , d. h. am [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] on [X] ||| [X][X] am [X] ||| 0.0182166 1 ||| 0-0 ||| 0.659414
+i.e. on Thursday prior [X] ||| d. h. am Donnerstag [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] Thursday prior [X] ||| [X][X] Donnerstag [X] ||| 0.0182166 1 ||| 0-0 ||| 0.538095
+i.e. [X][X] [X] ||| d. h. [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.58228
+i.e. on [X][X] [X] ||| d. h. am [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.58228
+on [X][X] to the start [X] ||| am [X][X] zu Beginn [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+on [X][X] to [X][X] [X] ||| am [X][X] zu [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.306944
+on [X][X] the start [X] ||| am [X][X] Beginn [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+on Thursday prior [X][X] [X] ||| am Donnerstag [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.306944
+on Thursday prior to [X][X] [X] ||| am Donnerstag zu [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.306944
+[X][X] to [X][X] of the [X] ||| [X][X] zu [X][X] der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.306944
+[X][X] to the start [X][X] [X] ||| [X][X] zu Beginn [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.679652
+[X][X] the start of the [X] ||| [X][X] Beginn der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.306944
+[X][X] the start [X][X] [X] ||| [X][X] Beginn [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.679652
+Thursday prior [X][X] of the [X] ||| Donnerstag [X][X] der [X] ||| 0.0182166 1 ||| 2-1 ||| 0.111111
+to [X][X] of the presentation [X] ||| zu [X][X] der Aussprache [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+to [X][X] presentation [X] ||| zu [X][X] Aussprache [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+to the start [X][X] presentation [X] ||| zu Beginn [X][X] Aussprache [X] ||| 0.0182166 1 ||| 3-2 ||| 0.142857
+[X][X] of the presentation of [X] ||| [X][X] der Aussprache über [X] ||| 0.0182166 1 ||| 0-0 ||| 0.341667
+[X][X] of the [X][X] [X] ||| [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.722501
+the start [X][X] presentation of [X] ||| Beginn [X][X] Aussprache über [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+the start [X][X] of [X] ||| Beginn [X][X] über [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+the start of the [X][X] [X] ||| Beginn der [X][X] [X] ||| 0.0182166 1 ||| 4-2 ||| 0.308824
+of the presentation of the [X] ||| der Aussprache über den [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] presentation of the [X] ||| [X][X] Aussprache über den [X] ||| 0.0182166 1 ||| 0-0 ||| 0.327632
+[X][X] presentation [X][X] [X] ||| [X][X] Aussprache [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.624882
+[X][X] of the [X] ||| [X][X] über den [X] ||| 0.0182166 1 ||| 0-0 ||| 0.327632
+of the [X][X] the [X] ||| der [X][X] den [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+of the presentation [X][X] [X] ||| der Aussprache [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.244048
+presentation of the report [X] ||| Aussprache über den Bericht [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] the report [X] ||| [X][X] den Bericht [X] ||| 0.0182166 1 ||| 0-0 ||| 0.342373
+presentation [X][X] report [X] ||| Aussprache [X][X] Bericht [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+presentation of [X][X] [X] ||| Aussprache über [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.257576
+of the report . [X] ||| über den Bericht . [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] report . [X] ||| [X][X] Bericht . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.37912
+of [X][X] . [X] ||| über [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+of the [X][X] [X] ||| über den [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.166667
+[X][X] the [X][X] , [X] ||| [X][X] [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.111111
+[X][X] time when [X][X] , [X] ||| [X][X] dann [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.111111
+that is precisely [X][X] , [X] ||| genau [X][X] , [X] ||| 0.0182166 1 ||| 3-1 ||| 0.111111
+[X][X] you may , if [X] ||| [X][X] können Sie , wenn [X] ||| 0.0182166 1 ||| 0-0 ||| 0.319444
+[X][X] you may [X][X] [X] ||| [X][X] können Sie [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.655649
+time when [X][X] , if [X] ||| dann [X][X] , wenn [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+time when [X][X] if [X] ||| dann [X][X] wenn [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+time when you may [X][X] [X] ||| dann können Sie [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.308824
+the [X][X] you may [X][X] [X] ||| [X][X] können Sie [X][X] [X] ||| 0.0182166 1 ||| 1-0 4-3 ||| 0.263492
+the [X][X] , if [X] ||| [X][X] , wenn [X] ||| 0.0182166 1 ||| 1-0 ||| 0.111111
+the [X][X] if [X] ||| [X][X] wenn [X] ||| 0.0182166 1 ||| 1-0 ||| 0.111111
+the time when [X][X] if [X] ||| dann [X][X] wenn [X] ||| 0.0182166 1 ||| 3-1 ||| 0.111111
+you may , if you [X] ||| können Sie , wenn Sie [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] , if you [X] ||| [X][X] , wenn Sie [X] ||| 0.0182166 1 ||| 0-0 ||| 0.279762
+[X][X] , [X][X] [X] ||| [X][X] , [X][X] [X] ||| 0.218091 1 ||| 0-0 2-2 ||| 1.75719
+[X][X] if you [X] ||| [X][X] wenn Sie [X] ||| 0.0182166 1 ||| 0-0 ||| 0.279762
+you may [X][X] you [X] ||| können Sie [X][X] Sie [X] ||| 0.0182166 1 ||| 2-2 ||| 0.125
+you may , [X][X] [X] ||| können Sie , [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.285714
+, if you wish , [X] ||| , wenn Sie wollen , [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] you wish , [X] ||| [X][X] Sie wollen , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.213528
+[X][X] you [X][X] [X] ||| [X][X] Sie [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.333156
+, [X][X] wish , [X] ||| , [X][X] wollen , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+, [X][X] , [X] ||| , [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.325392
+, if [X][X] , [X] ||| , wenn [X][X] , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.125392
+, if you [X][X] [X] ||| , wenn Sie [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.16887
+wish , raise this question [X] ||| wollen , diese Frage ansprechen [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] raise this question [X] ||| [X][X] diese Frage ansprechen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.401544
+[X][X] raise [X][X] [X] ||| [X][X] [X][X] ansprechen [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.401544
+wish [X][X] [X] ||| wollen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.504762
+wish , raise [X][X] [X] ||| wollen , [X][X] ansprechen [X] ||| 0.0182166 1 ||| 3-2 ||| 0.166667
+wish , [X][X] [X] ||| wollen , [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.504762
+, raise this question , [X] ||| , diese Frage ansprechen , [X] ||| 0.0182166 1 ||| ||| 0.2
+, raise [X][X] , [X] ||| , [X][X] ansprechen , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.2
+, i.e. on Thursday prior [X] ||| , d. h. am Donnerstag [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] on Thursday prior [X] ||| [X][X] am Donnerstag [X] ||| 0.0182166 1 ||| 0-0 ||| 0.288095
+[X][X] on [X][X] [X] ||| [X][X] am [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.567289
+, [X][X] Thursday prior [X] ||| , [X][X] Donnerstag [X] ||| 0.0182166 1 ||| 1-1 ||| 0.175
+, i.e. [X][X] [X] ||| , d. h. [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.317157
+, i.e. on [X][X] [X] ||| , d. h. am [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.317157
+i.e. on Thursday prior to [X] ||| d. h. am Donnerstag zu [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] Thursday prior to [X] ||| [X][X] Donnerstag zu [X] ||| 0.0182166 1 ||| 0-0 ||| 0.313228
+i.e. [X][X] to [X] ||| d. h. [X][X] zu [X] ||| 0.0182166 1 ||| 1-2 ||| 0.142857
+i.e. on [X][X] to [X] ||| d. h. am [X][X] zu [X] ||| 0.0182166 1 ||| 2-3 ||| 0.142857
+on [X][X] the start [X][X] [X] ||| am [X][X] Beginn [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.195833
+on [X][X] of the [X] ||| am [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+[X][X] to [X][X] presentation [X] ||| [X][X] zu [X][X] Aussprache [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.203409
+[X][X] the start [X][X] presentation [X] ||| [X][X] Beginn [X][X] Aussprache [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.203409
+Thursday prior [X][X] presentation [X] ||| Donnerstag [X][X] Aussprache [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0909091
+Thursday prior to [X][X] presentation [X] ||| Donnerstag zu [X][X] Aussprache [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0909091
+to [X][X] of the [X][X] [X] ||| zu [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.244379
+to [X][X] presentation of [X] ||| zu [X][X] Aussprache über [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+to [X][X] of [X] ||| zu [X][X] über [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+to the start [X][X] of [X] ||| zu Beginn [X][X] über [X] ||| 0.0182166 1 ||| 3-2 ||| 0.1
+[X][X] of the [X][X] the [X] ||| [X][X] der [X][X] den [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.202632
+[X][X] of the presentation [X][X] [X] ||| [X][X] der Aussprache [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.380834
+the start [X][X] presentation [X][X] [X] ||| Beginn [X][X] Aussprache [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.183824
+the start [X][X] of the [X] ||| Beginn [X][X] über den [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0833333
+the start [X][X] the [X] ||| Beginn [X][X] den [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0833333
+[X][X] presentation of the report [X] ||| [X][X] Aussprache über den Bericht [X] ||| 0.0182166 1 ||| 0-0 ||| 0.175707
+[X][X] presentation [X][X] report [X] ||| [X][X] Aussprache [X][X] Bericht [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.175707
+[X][X] presentation of [X][X] [X] ||| [X][X] Aussprache über [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.29725
+[X][X] of the report [X] ||| [X][X] über den Bericht [X] ||| 0.0182166 1 ||| 0-0 ||| 0.175707
+[X][X] of [X][X] [X] ||| [X][X] über [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.29725
+of the [X][X] the report [X] ||| der [X][X] den Bericht [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0714286
+of the [X][X] report [X] ||| der [X][X] Bericht [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0714286
+of the presentation [X][X] report [X] ||| der Aussprache [X][X] Bericht [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0714286
+of the presentation of [X][X] [X] ||| der Aussprache über [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.119048
+presentation of the report . [X] ||| Aussprache über den Bericht . [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] the report . [X] ||| [X][X] den Bericht . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.212453
+[X][X] the [X][X] [X] ||| [X][X] den [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.212453
+presentation [X][X] report . [X] ||| Aussprache [X][X] Bericht . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+presentation [X][X] . [X] ||| Aussprache [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+presentation of [X][X] . [X] ||| Aussprache über [X][X] . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+presentation of the [X][X] [X] ||| Aussprache über den [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0909091
+[X][X] the [X][X] , if [X] ||| [X][X] [X][X] , wenn [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.0833333
+[X][X] the [X][X] if [X] ||| [X][X] [X][X] wenn [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.0833333
+[X][X] time when [X][X] if [X] ||| [X][X] dann [X][X] wenn [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0833333
+that is precisely [X][X] if [X] ||| genau [X][X] wenn [X] ||| 0.0182166 1 ||| 3-1 ||| 0.0833333
+[X][X] you may [X][X] you [X] ||| [X][X] können Sie [X][X] Sie [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.154762
+[X][X] you may , [X][X] [X] ||| [X][X] können Sie , [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.336204
+time when [X][X] , [X][X] [X] ||| dann [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.183824
+time when [X][X] if you [X] ||| dann [X][X] wenn Sie [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0833333
+time when [X][X] you [X] ||| dann [X][X] Sie [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0833333
+the [X][X] , if you [X] ||| [X][X] , wenn Sie [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0714286
+the [X][X] , [X][X] [X] ||| [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.152381
+the [X][X] if you [X] ||| [X][X] wenn Sie [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0714286
+the [X][X] you [X] ||| [X][X] Sie [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0714286
+the time when [X][X] you [X] ||| dann [X][X] Sie [X] ||| 0.0182166 1 ||| 3-1 ||| 0.0714286
+[X][X] , if you wish [X] ||| [X][X] , wenn Sie wollen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.177871
+[X][X] , [X][X] wish [X] ||| [X][X] , [X][X] wollen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.177871
+[X][X] , if [X][X] [X] ||| [X][X] , wenn [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.342157
+[X][X] if you wish [X] ||| [X][X] wenn Sie wollen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.177871
+[X][X] if [X][X] [X] ||| [X][X] wenn [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.342157
+you may [X][X] you wish [X] ||| können Sie [X][X] Sie wollen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0714286
+you may [X][X] wish [X] ||| können Sie [X][X] wollen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0714286
+you may , [X][X] wish [X] ||| können Sie , [X][X] wollen [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0714286
+you may , if [X][X] [X] ||| können Sie , wenn [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.160714
+[X][X] , raise this question [X] ||| [X][X] , diese Frage ansprechen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.234878
+[X][X] , raise [X][X] [X] ||| [X][X] , [X][X] ansprechen [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.234878
+you [X][X] raise this question [X] ||| Sie [X][X] diese Frage ansprechen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+you [X][X] raise [X][X] [X] ||| Sie [X][X] [X][X] ansprechen [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0909091
+you wish [X][X] [X] ||| Sie wollen [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.28713
+you wish , raise [X][X] [X] ||| Sie wollen , [X][X] ansprechen [X] ||| 0.0182166 1 ||| 4-3 ||| 0.0909091
+you wish , [X][X] [X] ||| Sie wollen , [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.28713
+[X][X] raise this question , [X] ||| [X][X] diese Frage ansprechen , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.286406
+[X][X] raise [X][X] , [X] ||| [X][X] [X][X] ansprechen , [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.286406
+wish [X][X] , [X] ||| wollen [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+wish , raise [X][X] , [X] ||| wollen , [X][X] ansprechen , [X] ||| 0.0182166 1 ||| 3-2 ||| 0.125
+wish , [X][X] , [X] ||| wollen , [X][X] , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.125
+raise this question , i.e. [X] ||| diese Frage ansprechen , d. h. [X] ||| 0.0182166 1 ||| ||| 0.2
+raise [X][X] , i.e. [X] ||| [X][X] ansprechen , d. h. [X] ||| 0.0182166 1 ||| 1-0 ||| 0.2
+[X][X] , i.e. [X] ||| [X][X] , d. h. [X] ||| 0.0182166 1 ||| 0-0 ||| 0.553002
+[X][X] i.e. [X] ||| [X][X] d. h. [X] ||| 0.0182166 1 ||| 0-0 ||| 0.553002
+raise this question [X][X] [X] ||| diese Frage ansprechen [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.43254
+[X][X] on Thursday prior to [X] ||| [X][X] am Donnerstag zu [X] ||| 0.0182166 1 ||| 0-0 ||| 0.17037
+[X][X] on [X][X] to [X] ||| [X][X] am [X][X] zu [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.17037
+, [X][X] Thursday prior to [X] ||| , [X][X] Donnerstag zu [X] ||| 0.0182166 1 ||| 1-1 ||| 0.12037
+, [X][X] to [X] ||| , [X][X] zu [X] ||| 0.0182166 1 ||| 1-1 ||| 0.12037
+, i.e. [X][X] to [X] ||| , d. h. [X][X] zu [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0833333
+, i.e. on [X][X] to [X] ||| , d. h. am [X][X] zu [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0833333
+[X][X] Thursday prior [X][X] [X] ||| [X][X] Donnerstag [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.298247
+[X][X] Thursday prior to [X][X] [X] ||| [X][X] Donnerstag zu [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.298247
+i.e. [X][X] to the start [X] ||| d. h. [X][X] zu Beginn [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0769231
+i.e. [X][X] to [X][X] [X] ||| d. h. [X][X] zu [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.189423
+i.e. [X][X] the start [X] ||| d. h. [X][X] Beginn [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0769231
+i.e. on [X][X] to [X][X] [X] ||| d. h. am [X][X] zu [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.189423
+i.e. on [X][X] the start [X] ||| d. h. am [X][X] Beginn [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0769231
+i.e. on Thursday prior [X][X] [X] ||| d. h. am Donnerstag [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.189423
+on [X][X] to [X][X] presentation [X] ||| am [X][X] zu [X][X] Aussprache [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0625
+on [X][X] of the presentation [X] ||| am [X][X] der Aussprache [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0625
+on [X][X] presentation [X] ||| am [X][X] Aussprache [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0625
+on Thursday prior [X][X] presentation [X] ||| am Donnerstag [X][X] Aussprache [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0625
+[X][X] to [X][X] presentation of [X] ||| [X][X] zu [X][X] Aussprache über [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.116667
+[X][X] to [X][X] of [X] ||| [X][X] zu [X][X] über [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.116667
+[X][X] the start [X][X] of [X] ||| [X][X] Beginn [X][X] über [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.116667
+Thursday prior [X][X] presentation of [X] ||| Donnerstag [X][X] Aussprache über [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0666667
+Thursday prior [X][X] of [X] ||| Donnerstag [X][X] über [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0666667
+Thursday prior to [X][X] of [X] ||| Donnerstag zu [X][X] über [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0666667
+to [X][X] presentation of the [X] ||| zu [X][X] Aussprache über den [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+to [X][X] presentation [X][X] [X] ||| zu [X][X] Aussprache [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.144379
+to [X][X] of the [X] ||| zu [X][X] über den [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+to [X][X] the [X] ||| zu [X][X] den [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+to the start [X][X] the [X] ||| zu Beginn [X][X] den [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0666667
+[X][X] of the [X][X] report [X] ||| [X][X] der [X][X] Bericht [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.104278
+the start [X][X] of [X][X] [X] ||| Beginn [X][X] über [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.10049
+the start [X][X] the report [X] ||| Beginn [X][X] den Bericht [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0588235
+the start [X][X] report [X] ||| Beginn [X][X] Bericht [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0588235
+[X][X] presentation [X][X] report . [X] ||| [X][X] Aussprache [X][X] Bericht . [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.121544
+[X][X] presentation [X][X] . [X] ||| [X][X] Aussprache [X][X] . [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.121544
+[X][X] presentation of [X][X] . [X] ||| [X][X] Aussprache über [X][X] . [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.121544
+[X][X] presentation of the [X][X] [X] ||| [X][X] Aussprache über den [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.121544
+[X][X] of the report . [X] ||| [X][X] über den Bericht . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.121544
+[X][X] of [X][X] . [X] ||| [X][X] über [X][X] . [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.121544
+[X][X] of the [X][X] [X] ||| [X][X] über den [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.121544
+of the [X][X] the [X][X] [X] ||| der [X][X] den [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.047619
+of the [X][X] report . [X] ||| der [X][X] Bericht . [X] ||| 0.0182166 1 ||| 2-1 ||| 0.047619
+of the [X][X] . [X] ||| der [X][X] . [X] ||| 0.0182166 1 ||| 2-1 ||| 0.047619
+of the presentation [X][X] . [X] ||| der Aussprache [X][X] . [X] ||| 0.0182166 1 ||| 3-2 ||| 0.047619
+[X][X] you may [X][X] wish [X] ||| [X][X] können Sie [X][X] wollen [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.106443
+time when [X][X] if [X][X] [X] ||| dann [X][X] wenn [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.10049
+time when [X][X] you wish [X] ||| dann [X][X] Sie wollen [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0588235
+time when [X][X] wish [X] ||| dann [X][X] wollen [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0588235
+the [X][X] , [X][X] wish [X] ||| [X][X] , [X][X] wollen [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.047619
+the [X][X] , if [X][X] [X] ||| [X][X] , wenn [X][X] [X] ||| 0.0182166 1 ||| 1-0 4-3 ||| 0.0809524
+the [X][X] if you wish [X] ||| [X][X] wenn Sie wollen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.047619
+the [X][X] if [X][X] [X] ||| [X][X] wenn [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0809524
+the [X][X] you wish [X] ||| [X][X] Sie wollen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.047619
+the [X][X] wish [X] ||| [X][X] wollen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.047619
+the time when [X][X] wish [X] ||| dann [X][X] wollen [X] ||| 0.0182166 1 ||| 3-1 ||| 0.047619
+[X][X] , [X][X] wish , [X] ||| [X][X] , [X][X] wollen , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.122619
+[X][X] , [X][X] , [X] ||| [X][X] , [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.284025
+[X][X] , if [X][X] , [X] ||| [X][X] , wenn [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.122619
+[X][X] , if you [X][X] [X] ||| [X][X] , wenn Sie [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.164286
+[X][X] if you wish , [X] ||| [X][X] wenn Sie wollen , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.122619
+[X][X] if [X][X] , [X] ||| [X][X] wenn [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.122619
+[X][X] if you [X][X] [X] ||| [X][X] wenn Sie [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.164286
+you may [X][X] you [X][X] [X] ||| können Sie [X][X] Sie [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0892857
+you may [X][X] wish , [X] ||| können Sie [X][X] wollen , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.047619
+you may [X][X] , [X] ||| können Sie [X][X] , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.047619
+you may , [X][X] , [X] ||| können Sie , [X][X] , [X] ||| 0.0182166 1 ||| 3-3 ||| 0.047619
+[X][X] wish [X][X] [X] ||| [X][X] wollen [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.271929
+[X][X] wish , raise [X][X] [X] ||| [X][X] wollen , [X][X] ansprechen [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.143968
+[X][X] wish , [X][X] [X] ||| [X][X] wollen , [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.271929
+if [X][X] , raise [X][X] [X] ||| wenn [X][X] , [X][X] ansprechen [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0588235
+if [X][X] , [X][X] [X] ||| wenn [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.152302
+if [X][X] raise this question [X] ||| wenn [X][X] diese Frage ansprechen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0588235
+if [X][X] raise [X][X] [X] ||| wenn [X][X] [X][X] ansprechen [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0588235
+if you [X][X] raise [X][X] [X] ||| wenn Sie [X][X] [X][X] ansprechen [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0588235
+if you wish [X][X] [X] ||| wenn Sie wollen [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.152302
+if you wish , [X][X] [X] ||| wenn Sie wollen , [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.152302
+[X][X] , raise [X][X] , [X] ||| [X][X] , [X][X] ansprechen , [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.161406
+you [X][X] raise [X][X] , [X] ||| Sie [X][X] [X][X] ansprechen , [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0769231
+you [X][X] , [X] ||| Sie [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+you wish [X][X] , [X] ||| Sie wollen [X][X] , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0769231
+you wish , [X][X] , [X] ||| Sie wollen , [X][X] , [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0769231
+, raise [X][X] , i.e. [X] ||| , [X][X] ansprechen , d. h. [X] ||| 0.0182166 1 ||| 2-1 ||| 0.142857
+, [X][X] , i.e. [X] ||| , [X][X] , d. h. [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+, [X][X] i.e. [X] ||| , [X][X] d. h. [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+, raise this question [X][X] [X] ||| , diese Frage ansprechen [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.320803
+raise [X][X] , i.e. on [X] ||| [X][X] ansprechen , d. h. am [X] ||| 0.0182166 1 ||| 1-0 ||| 0.111111
+raise [X][X] , [X][X] [X] ||| [X][X] ansprechen , [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-3 ||| 0.23254
+[X][X] , i.e. on [X] ||| [X][X] , d. h. am [X] ||| 0.0182166 1 ||| 0-0 ||| 0.32608
+[X][X] i.e. on [X] ||| [X][X] d. h. am [X] ||| 0.0182166 1 ||| 0-0 ||| 0.32608
+raise this question [X][X] on [X] ||| diese Frage ansprechen [X][X] am [X] ||| 0.0182166 1 ||| 3-3 ||| 0.111111
+raise this question , [X][X] [X] ||| diese Frage ansprechen , [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.23254
+[X][X] on [X][X] the start [X] ||| [X][X] am [X][X] Beginn [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0588235
+[X][X] on Thursday prior [X][X] [X] ||| [X][X] am Donnerstag [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.108824
+, [X][X] Thursday prior [X][X] [X] ||| , [X][X] Donnerstag [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.108824
+, [X][X] to the start [X] ||| , [X][X] zu Beginn [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0588235
+, [X][X] to [X][X] [X] ||| , [X][X] zu [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.108824
+, [X][X] the start [X] ||| , [X][X] Beginn [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0588235
+, i.e. [X][X] to [X][X] [X] ||| , d. h. [X][X] zu [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.108824
+, i.e. [X][X] the start [X] ||| , d. h. [X][X] Beginn [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0588235
+i.e. [X][X] the start [X][X] [X] ||| d. h. [X][X] Beginn [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-4 ||| 0.1125
+i.e. [X][X] of the [X] ||| d. h. [X][X] der [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0625
+i.e. on [X][X] of the [X] ||| d. h. am [X][X] der [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0625
+on [X][X] to [X][X] of [X] ||| am [X][X] zu [X][X] über [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.05
+on [X][X] of the [X][X] [X] ||| am [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.05
+on [X][X] presentation of [X] ||| am [X][X] Aussprache über [X] ||| 0.0182166 1 ||| 1-1 ||| 0.05
+on [X][X] of [X] ||| am [X][X] über [X] ||| 0.0182166 1 ||| 1-1 ||| 0.05
+on Thursday prior [X][X] of [X] ||| am Donnerstag [X][X] über [X] ||| 0.0182166 1 ||| 3-2 ||| 0.05
+[X][X] to [X][X] of the [X] ||| [X][X] zu [X][X] über den [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0526316
+[X][X] to [X][X] the [X] ||| [X][X] zu [X][X] den [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0526316
+[X][X] the start [X][X] the [X] ||| [X][X] Beginn [X][X] den [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0526316
+Thursday prior [X][X] presentation [X][X] [X] ||| Donnerstag [X][X] Aussprache [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0526316
+Thursday prior [X][X] of the [X] ||| Donnerstag [X][X] über den [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0526316
+Thursday prior [X][X] the [X] ||| Donnerstag [X][X] den [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0526316
+Thursday prior to [X][X] the [X] ||| Donnerstag zu [X][X] den [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0526316
+to [X][X] presentation [X][X] report [X] ||| zu [X][X] Aussprache [X][X] Bericht [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0454545
+to [X][X] presentation of [X][X] [X] ||| zu [X][X] Aussprache über [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0777126
+to [X][X] of the report [X] ||| zu [X][X] über den Bericht [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0454545
+to [X][X] of [X][X] [X] ||| zu [X][X] über [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0777126
+to [X][X] the report [X] ||| zu [X][X] den Bericht [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0454545
+to [X][X] report [X] ||| zu [X][X] Bericht [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0454545
+to the start [X][X] report [X] ||| zu Beginn [X][X] Bericht [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0454545
+[X][X] of the [X][X] . [X] ||| [X][X] der [X][X] . [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0739247
+the start [X][X] the [X][X] [X] ||| Beginn [X][X] den [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0416667
+the start [X][X] report . [X] ||| Beginn [X][X] Bericht . [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0416667
+the start [X][X] . [X] ||| Beginn [X][X] . [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0416667
+[X][X] you may [X][X] , [X] ||| [X][X] können Sie [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.075
+time when [X][X] you [X][X] [X] ||| dann [X][X] Sie [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0416667
+time when [X][X] wish , [X] ||| dann [X][X] wollen , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0416667
+the [X][X] , [X][X] , [X] ||| [X][X] , [X][X] , [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0333333
+the [X][X] if [X][X] , [X] ||| [X][X] wenn [X][X] , [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0333333
+the [X][X] if you [X][X] [X] ||| [X][X] wenn Sie [X][X] [X] ||| 0.0182166 1 ||| 1-0 4-3 ||| 0.0333333
+the [X][X] you wish , [X] ||| [X][X] Sie wollen , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0333333
+the [X][X] you [X][X] [X] ||| [X][X] Sie [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0333333
+the [X][X] wish , [X] ||| [X][X] wollen , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0333333
+[X][X] you wish [X][X] [X] ||| [X][X] Sie wollen [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.119628
+[X][X] you wish , [X][X] [X] ||| [X][X] Sie wollen , [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.119628
+, [X][X] wish [X][X] [X] ||| , [X][X] wollen [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.077961
+, [X][X] wish , [X][X] [X] ||| , [X][X] wollen , [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.077961
+, [X][X] , raise [X][X] [X] ||| , [X][X] , [X][X] ansprechen [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0434783
+, [X][X] , [X][X] [X] ||| , [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.255907
+, [X][X] raise this question [X] ||| , [X][X] diese Frage ansprechen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0434783
+, [X][X] raise [X][X] [X] ||| , [X][X] [X][X] ansprechen [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0434783
+, if [X][X] , [X][X] [X] ||| , wenn [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.077961
+, if [X][X] raise [X][X] [X] ||| , wenn [X][X] [X][X] ansprechen [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0434783
+, if you wish [X][X] [X] ||| , wenn Sie wollen [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.077961
+[X][X] wish [X][X] , [X] ||| [X][X] wollen [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0844828
+[X][X] wish , [X][X] , [X] ||| [X][X] wollen , [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0844828
+if [X][X] , [X][X] , [X] ||| wenn [X][X] , [X][X] , [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.05
+if [X][X] raise [X][X] , [X] ||| wenn [X][X] [X][X] ansprechen , [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.05
+if you [X][X] , [X] ||| wenn Sie [X][X] , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.05
+if you wish [X][X] , [X] ||| wenn Sie wollen [X][X] , [X] ||| 0.0182166 1 ||| 3-3 ||| 0.05
+[X][X] raise [X][X] , i.e. [X] ||| [X][X] [X][X] ansprechen , d. h. [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.210145
+[X][X] raise this question [X][X] [X] ||| [X][X] diese Frage ansprechen [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.375872
+wish [X][X] , i.e. [X] ||| wollen [X][X] , d. h. [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+wish [X][X] i.e. [X] ||| wollen [X][X] d. h. [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+wish , [X][X] , i.e. [X] ||| wollen , [X][X] , d. h. [X] ||| 0.0182166 1 ||| 2-2 ||| 0.1
+wish , [X][X] i.e. [X] ||| wollen , [X][X] d. h. [X] ||| 0.0182166 1 ||| 2-2 ||| 0.1
+, raise [X][X] , [X][X] [X] ||| , [X][X] ansprechen , [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-4 ||| 0.177946
+, [X][X] , i.e. on [X] ||| , [X][X] , d. h. am [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+, [X][X] i.e. on [X] ||| , [X][X] d. h. am [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+, [X][X] on [X] ||| , [X][X] am [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+raise [X][X] , i.e. [X][X] [X] ||| [X][X] ansprechen , d. h. [X][X] [X] ||| 0.0182166 1 ||| 1-0 4-5 ||| 0.121429
+[X][X] , [X][X] Thursday prior [X] ||| [X][X] , [X][X] Donnerstag [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.163095
+[X][X] , i.e. [X][X] [X] ||| [X][X] , d. h. [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.250132
+[X][X] , i.e. on [X][X] [X] ||| [X][X] , d. h. am [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-5 ||| 0.250132
+[X][X] i.e. on Thursday prior [X] ||| [X][X] d. h. am Donnerstag [X] ||| 0.0182166 1 ||| 0-0 ||| 0.163095
+[X][X] i.e. [X][X] [X] ||| [X][X] d. h. [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.250132
+[X][X] i.e. on [X][X] [X] ||| [X][X] d. h. am [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.250132
+[X][X] on [X][X] of the [X] ||| [X][X] am [X][X] der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.05
+, [X][X] the start [X][X] [X] ||| , [X][X] Beginn [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.05
+, [X][X] of the [X] ||| , [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.05
+, i.e. [X][X] of the [X] ||| , d. h. [X][X] der [X] ||| 0.0182166 1 ||| 2-3 ||| 0.05
+[X][X] Thursday prior [X][X] presentation [X] ||| [X][X] Donnerstag [X][X] Aussprache [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.05
+i.e. [X][X] to [X][X] presentation [X] ||| d. h. [X][X] zu [X][X] Aussprache [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.05
+i.e. [X][X] of the presentation [X] ||| d. h. [X][X] der Aussprache [X] ||| 0.0182166 1 ||| 1-2 ||| 0.05
+i.e. [X][X] presentation [X] ||| d. h. [X][X] Aussprache [X] ||| 0.0182166 1 ||| 1-2 ||| 0.05
+i.e. on [X][X] presentation [X] ||| d. h. am [X][X] Aussprache [X] ||| 0.0182166 1 ||| 2-3 ||| 0.05
+to [X][X] presentation [X][X] . [X] ||| zu [X][X] Aussprache [X][X] . [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0322581
+to [X][X] of [X][X] . [X] ||| zu [X][X] über [X][X] . [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0322581
+to [X][X] of the [X][X] [X] ||| zu [X][X] über den [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0322581
+to [X][X] the report . [X] ||| zu [X][X] den Bericht . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0322581
+to [X][X] the [X][X] [X] ||| zu [X][X] den [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0322581
+to [X][X] report . [X] ||| zu [X][X] Bericht . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0322581
+to [X][X] . [X] ||| zu [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0322581
+to the start [X][X] . [X] ||| zu Beginn [X][X] . [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0322581
+[X][X] you [X][X] , [X] ||| [X][X] Sie [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0344828
+[X][X] you wish [X][X] , [X] ||| [X][X] Sie wollen [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0344828
+, [X][X] wish [X][X] , [X] ||| , [X][X] wollen [X][X] , [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0344828
+, [X][X] , [X][X] , [X] ||| , [X][X] , [X][X] , [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0344828
+, [X][X] raise [X][X] , [X] ||| , [X][X] [X][X] ansprechen , [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0344828
+, if you [X][X] , [X] ||| , wenn Sie [X][X] , [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0344828
+[X][X] , [X][X] , i.e. [X] ||| [X][X] , [X][X] , d. h. [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.110145
+[X][X] , [X][X] i.e. [X] ||| [X][X] , [X][X] d. h. [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.110145
+you [X][X] , i.e. [X] ||| Sie [X][X] , d. h. [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+you [X][X] i.e. [X] ||| Sie [X][X] d. h. [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+you wish [X][X] , i.e. [X] ||| Sie wollen [X][X] , d. h. [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0666667
+you wish [X][X] i.e. [X] ||| Sie wollen [X][X] d. h. [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0666667
+you wish , [X][X] i.e. [X] ||| Sie wollen , [X][X] d. h. [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0666667
+wish [X][X] , i.e. on [X] ||| wollen [X][X] , d. h. am [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+wish [X][X] , [X][X] [X] ||| wollen [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.113095
+wish [X][X] i.e. on [X] ||| wollen [X][X] d. h. am [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+wish [X][X] on [X] ||| wollen [X][X] am [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+wish , [X][X] , [X][X] [X] ||| wollen , [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.113095
+wish , [X][X] i.e. on [X] ||| wollen , [X][X] d. h. am [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0714286
+wish , [X][X] on [X] ||| wollen , [X][X] am [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0714286
+, [X][X] , i.e. [X][X] [X] ||| , [X][X] , d. h. [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-5 ||| 0.087037
+, [X][X] i.e. [X][X] [X] ||| , [X][X] d. h. [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-4 ||| 0.087037
+, [X][X] i.e. on [X][X] [X] ||| , [X][X] d. h. am [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-5 ||| 0.087037
+, [X][X] on Thursday prior [X] ||| , [X][X] am Donnerstag [X] ||| 0.0182166 1 ||| 1-1 ||| 0.05
+, [X][X] on [X][X] [X] ||| , [X][X] am [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.087037
+raise [X][X] , [X][X] to [X] ||| [X][X] ansprechen , [X][X] zu [X] ||| 0.0182166 1 ||| 1-0 3-3 ||| 0.05
+[X][X] , [X][X] to [X] ||| [X][X] , [X][X] zu [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.087037
+[X][X] , i.e. [X][X] to [X] ||| [X][X] , d. h. [X][X] zu [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.087037
+[X][X] i.e. [X][X] to [X] ||| [X][X] d. h. [X][X] zu [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.087037
+[X][X] i.e. on [X][X] to [X] ||| [X][X] d. h. am [X][X] zu [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.087037
+raise this question [X][X] to [X] ||| diese Frage ansprechen [X][X] zu [X] ||| 0.0182166 1 ||| 3-3 ||| 0.05
+[X][X] if you wish [X][X] [X] ||| [X][X] wenn Sie wollen [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.0416667
+you may [X][X] wish [X][X] [X] ||| können Sie [X][X] wollen [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0416667
+you may [X][X] , [X][X] [X] ||| können Sie [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0416667
+you may [X][X] raise [X][X] [X] ||| können Sie [X][X] [X][X] ansprechen [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0416667
+[X][X] wish [X][X] , i.e. [X] ||| [X][X] wollen [X][X] , d. h. [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0434783
+[X][X] wish [X][X] i.e. [X] ||| [X][X] wollen [X][X] d. h. [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0434783
+[X][X] wish , [X][X] i.e. [X] ||| [X][X] wollen , [X][X] d. h. [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0434783
+if [X][X] , [X][X] i.e. [X] ||| wenn [X][X] , [X][X] d. h. [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0434783
+if [X][X] , i.e. [X] ||| wenn [X][X] , d. h. [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0434783
+if [X][X] i.e. [X] ||| wenn [X][X] d. h. [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0434783
+if you [X][X] , i.e. [X] ||| wenn Sie [X][X] , d. h. [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0434783
+if you [X][X] i.e. [X] ||| wenn Sie [X][X] d. h. [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0434783
+if you wish [X][X] i.e. [X] ||| wenn Sie wollen [X][X] d. h. [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0434783
+[X][X] , [X][X] i.e. on [X] ||| [X][X] , [X][X] d. h. am [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0526316
+[X][X] , [X][X] on [X] ||| [X][X] , [X][X] am [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0526316
+you [X][X] , i.e. on [X] ||| Sie [X][X] , d. h. am [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+you [X][X] , [X][X] [X] ||| Sie [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0526316
+you [X][X] i.e. on [X] ||| Sie [X][X] d. h. am [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+you [X][X] on [X] ||| Sie [X][X] am [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+you wish [X][X] , [X][X] [X] ||| Sie wollen [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0526316
+you wish [X][X] i.e. on [X] ||| Sie wollen [X][X] d. h. am [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+you wish [X][X] on [X] ||| Sie wollen [X][X] am [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+you wish , [X][X] on [X] ||| Sie wollen , [X][X] am [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0526316
+wish [X][X] , i.e. [X][X] [X] ||| wollen [X][X] , d. h. [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-5 ||| 0.0416667
+wish [X][X] i.e. [X][X] [X] ||| wollen [X][X] d. h. [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-4 ||| 0.0416667
+wish [X][X] i.e. on [X][X] [X] ||| wollen [X][X] d. h. am [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-5 ||| 0.0416667
+wish [X][X] on Thursday prior [X] ||| wollen [X][X] am Donnerstag [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0416667
+wish [X][X] on [X][X] [X] ||| wollen [X][X] am [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0416667
+wish [X][X] Thursday prior [X] ||| wollen [X][X] Donnerstag [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0416667
+wish , [X][X] i.e. [X][X] [X] ||| wollen , [X][X] d. h. [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-5 ||| 0.0416667
+wish , [X][X] on [X][X] [X] ||| wollen , [X][X] am [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0416667
+wish , [X][X] Thursday prior [X] ||| wollen , [X][X] Donnerstag [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0416667
+, [X][X] , [X][X] to [X] ||| , [X][X] , [X][X] zu [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.037037
+, [X][X] i.e. [X][X] to [X] ||| , [X][X] d. h. [X][X] zu [X] ||| 0.0182166 1 ||| 1-1 3-4 ||| 0.037037
+, [X][X] on [X][X] to [X] ||| , [X][X] am [X][X] zu [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.037037
+first [X] ||| erste [X] ||| 0.0182166 1 ||| ||| 1
+part-session [X] ||| Tagung [X] ||| 0.0182166 1 ||| ||| 1
+of the [X] ||| des [X] ||| 0.0182166 1 ||| ||| 1
+European [X] ||| Europäischen [X] ||| 0.0182166 1 ||| ||| 1
+Parliament [X] ||| Parlaments [X] ||| 0.0182166 1 ||| ||| 1
+Parliament , [X] ||| Parlaments [X] ||| 0.0182166 1 ||| ||| 1
+Parliament , a [X] ||| Parlaments [X] ||| 0.0182166 1 ||| ||| 1
+Parliament , a date [X] ||| Parlaments [X] ||| 0.0182166 1 ||| ||| 1
+Parliament , a date has [X] ||| Parlaments [X] ||| 0.0182166 1 ||| ||| 1
+coinciding [X] ||| fällt [X] ||| 0.0182166 1 ||| ||| 1
+coinciding with [X] ||| fällt [X] ||| 0.0182166 1 ||| ||| 1
+, unfortunately [X] ||| leider [X] ||| 0.0182166 1 ||| ||| 1
+set , unfortunately [X] ||| leider [X] ||| 0.0182166 1 ||| ||| 1
+been set , unfortunately [X] ||| leider [X] ||| 0.0182166 1 ||| ||| 1
+has been set , unfortunately [X] ||| leider [X] ||| 0.0182166 1 ||| ||| 1
+for [X] ||| damit [X] ||| 0.0182166 1 ||| ||| 1
+for next [X] ||| damit [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| , [X] ||| 0.315522 1 ||| ||| 3
+in [X] ||| in [X] ||| 0.218091 1 ||| ||| 2
+Texas [X] ||| Texas [X] ||| 0.0182166 1 ||| ||| 1
+for [X] ||| für [X] ||| 0.0182166 1 ||| ||| 1
+Thursday [X] ||| Donnerstag [X] ||| 0.0182166 1 ||| ||| 1
+next Thursday [X] ||| Donnerstag [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| die [X] ||| 0.0182166 1 ||| ||| 1
+execution [X] ||| Hinrichtung [X] ||| 0.0182166 1 ||| ||| 1
+of a [X] ||| eines [X] ||| 0.0182166 1 ||| ||| 1
+President [X] ||| 34jährigen [X] ||| 0.0182166 1 ||| ||| 1
+Madam President [X] ||| 34jährigen [X] ||| 0.0182166 1 ||| ||| 1
+young [X] ||| jungen [X] ||| 0.0182166 1 ||| ||| 1
+young 34 [X] ||| jungen [X] ||| 0.0182166 1 ||| ||| 1
+young 34 year-old [X] ||| jungen [X] ||| 0.0182166 1 ||| ||| 1
+man who [X] ||| Mannes [X] ||| 0.0182166 1 ||| ||| 1
+year-old man who [X] ||| Mannes [X] ||| 0.0182166 1 ||| ||| 1
+34 year-old man who [X] ||| Mannes [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+part-session of the [X] ||| Tagung des [X] ||| 0.0182166 1 ||| ||| 0.5
+part-session [X][X] [X] ||| Tagung [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.30428
+of the European [X] ||| des Europäischen [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] European [X] ||| [X][X] Europäischen [X] ||| 0.218091 1 ||| 0-0 ||| 1.06111
+European Parliament [X] ||| Europäischen Parlaments [X] ||| 0.0182166 1 ||| ||| 1
+European Parliament , [X] ||| Europäischen Parlaments [X] ||| 0.0182166 1 ||| ||| 0.5
+European [X][X] [X] ||| Europäischen [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.83333
+European Parliament , a [X] ||| Europäischen Parlaments [X] ||| 0.0182166 1 ||| ||| 0.333333
+European [X][X] a [X] ||| Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+European Parliament , a date [X] ||| Europäischen Parlaments [X] ||| 0.0182166 1 ||| ||| 0.25
+European [X][X] a date [X] ||| Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+European [X][X] date [X] ||| Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+European [X][X] a date has [X] ||| Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+European [X][X] date has [X] ||| Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+European [X][X] has [X] ||| Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+European [X][X] date has been [X] ||| Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+European [X][X] has been [X] ||| Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+European [X][X] been [X] ||| Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+European [X][X] has been set [X] ||| Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+European [X][X] been set [X] ||| Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+European [X][X] set [X] ||| Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+, unfortunately for [X] ||| leider damit [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] for [X] ||| [X][X] damit [X] ||| 0.315522 1 ||| 0-0 ||| 2.08333
+, unfortunately for next [X] ||| leider damit [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] for next [X] ||| [X][X] damit [X] ||| 0.315522 1 ||| 0-0 ||| 2.16667
+, unfortunately [X][X] [X] ||| leider [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.583333
+set , unfortunately for [X] ||| leider damit [X] ||| 0.0182166 1 ||| ||| 0.333333
+set [X][X] for [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 1-0 ||| 0.333333
+set , unfortunately for next [X] ||| leider damit [X] ||| 0.0182166 1 ||| ||| 0.25
+set [X][X] for next [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+set , unfortunately [X][X] [X] ||| leider [X][X] [X] ||| 0.0182166 1 ||| 3-1 ||| 0.45
+been set , unfortunately for [X] ||| leider damit [X] ||| 0.0182166 1 ||| ||| 0.25
+been set [X][X] for [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 2-0 ||| 0.25
+been [X][X] for [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+been set [X][X] for next [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 2-0 ||| 0.25
+been [X][X] for next [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+been set , unfortunately [X][X] [X] ||| leider [X][X] [X] ||| 0.0182166 1 ||| 4-1 ||| 0.45
+has been set [X][X] for [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 3-0 ||| 0.25
+has been [X][X] for [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 2-0 ||| 0.25
+has [X][X] for [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+has been [X][X] for next [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 2-0 ||| 0.333333
+has [X][X] for next [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 1-0 ||| 0.333333
+date has been [X][X] for [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 3-0 ||| 0.25
+date has [X][X] for [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 2-0 ||| 0.25
+date [X][X] for [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+date has [X][X] for next [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 2-0 ||| 0.333333
+date [X][X] for next [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 1-0 ||| 0.333333
+a date has [X][X] for [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 3-0 ||| 0.25
+a date [X][X] for [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 2-0 ||| 0.25
+a [X][X] for [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+a date [X][X] for next [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 2-0 ||| 0.333333
+a [X][X] for next [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 1-0 ||| 0.333333
+, a date [X][X] for [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 3-0 ||| 0.25
+, a [X][X] for [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 2-0 ||| 0.25
+, [X][X] for [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+, a [X][X] for next [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 2-0 ||| 0.333333
+, [X][X] for next [X] ||| [X][X] damit [X] ||| 0.0182166 1 ||| 1-0 ||| 0.333333
+for [X] ||| damit zusammen [X] ||| 0.0182166 1 ||| ||| 1
+for next [X] ||| damit zusammen [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| zusammen , [X] ||| 0.00910828 1 ||| ||| 2
+, [X] ||| , daß [X] ||| 0.00910828 1 ||| ||| 2
+in [X] ||| daß in [X] ||| 0.00910828 1 ||| ||| 2
+in [X] ||| in den [X] ||| 0.00910828 1 ||| ||| 2
+America [X] ||| Vereinigten Staaten [X] ||| 0.0182166 1 ||| ||| 1
+, in [X] ||| , in [X] ||| 0.0182166 1 ||| ||| 1
+in Texas [X] ||| in Texas [X] ||| 0.0182166 1 ||| ||| 1
+, for [X] ||| , für [X] ||| 0.0182166 1 ||| ||| 1
+Thursday [X] ||| Donnerstag dieser [X] ||| 0.0182166 1 ||| ||| 1
+next Thursday [X] ||| Donnerstag dieser [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| Woche die [X] ||| 0.0182166 1 ||| ||| 1
+the execution [X] ||| die Hinrichtung [X] ||| 0.0182166 1 ||| ||| 1
+execution of a [X] ||| Hinrichtung eines [X] ||| 0.0182166 1 ||| ||| 0.5
+execution [X][X] [X] ||| Hinrichtung [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.5
+young 34 year-old man who [X] ||| jungen Mannes [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] year-old man who [X] ||| [X][X] Mannes [X] ||| 0.0182166 1 ||| 0-0 ||| 0.166667
+[X][X] man who [X] ||| [X][X] Mannes [X] ||| 0.0182166 1 ||| 0-0 ||| 0.166667
+young 34 year-old [X][X] [X] ||| jungen [X][X] [X] ||| 0.0182166 1 ||| 3-1 ||| 0.166667
+young 34 [X][X] [X] ||| jungen [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.166667
+young [X][X] [X] ||| jungen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+has been [X] ||| worden ist [X] ||| 0.0182166 1 ||| ||| 1
+this year ' s first [X] ||| die erste diesjährige [X] ||| 0.0182166 1 ||| ||| 1
+part-session of the European [X] ||| Tagung des Europäischen [X] ||| 0.0182166 1 ||| ||| 0.25
+part-session [X][X] European [X] ||| Tagung [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+of the European Parliament [X] ||| des Europäischen Parlaments [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] European Parliament [X] ||| [X][X] Europäischen Parlaments [X] ||| 0.0182166 1 ||| 0-0 ||| 0.517857
+[X][X] Parliament [X] ||| [X][X] Parlaments [X] ||| 0.0182166 1 ||| 0-0 ||| 0.517857
+of the [X][X] [X] ||| des [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.990079
+of the European Parliament , [X] ||| des Europäischen Parlaments [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] European Parliament , [X] ||| [X][X] Europäischen Parlaments [X] ||| 0.0182166 1 ||| 0-0 ||| 0.233766
+[X][X] European [X][X] [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.218091 1 ||| 0-0 2-2 ||| 1.1515
+[X][X] Parliament , [X] ||| [X][X] Parlaments [X] ||| 0.0182166 1 ||| 0-0 ||| 0.233766
+of the [X][X] , [X] ||| des [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.142857
+of the European [X][X] [X] ||| des Europäischen [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.740079
+[X][X] European Parliament , a [X] ||| [X][X] Europäischen Parlaments [X] ||| 0.0182166 1 ||| 0-0 ||| 0.188034
+[X][X] European [X][X] a [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.188034
+[X][X] Parliament , a [X] ||| [X][X] Parlaments [X] ||| 0.0182166 1 ||| 0-0 ||| 0.188034
+of the [X][X] , a [X] ||| des [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.111111
+of the [X][X] a [X] ||| des [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.111111
+of the European [X][X] a [X] ||| des Europäischen [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.111111
+[X][X] European [X][X] a date [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.188034
+[X][X] European [X][X] date [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.188034
+[X][X] Parliament , a date [X] ||| [X][X] Parlaments [X] ||| 0.0182166 1 ||| 0-0 ||| 0.188034
+of the [X][X] a date [X] ||| des [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.111111
+of the [X][X] date [X] ||| des [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.111111
+of the European [X][X] date [X] ||| des Europäischen [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.111111
+[X][X] European [X][X] date has [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.208333
+[X][X] European [X][X] has [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.208333
+of the [X][X] date has [X] ||| des [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+of the [X][X] has [X] ||| des [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+of the European [X][X] has [X] ||| des Europäischen [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.125
+[X][X] European [X][X] has been [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.208333
+[X][X] European [X][X] been [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.208333
+of the [X][X] has been [X] ||| des [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+of the [X][X] been [X] ||| des [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+of the European [X][X] been [X] ||| des Europäischen [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.125
+[X][X] European [X][X] been set [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.125
+[X][X] European [X][X] set [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.125
+of the [X][X] been set [X] ||| des [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+of the [X][X] set [X] ||| des [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+of the European [X][X] set [X] ||| des Europäischen [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.125
+, unfortunately for [X] ||| leider damit zusammen [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.315522 1 ||| 0-0 ||| 2.08333
+, unfortunately for next [X] ||| leider damit zusammen [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.218091 1 ||| 0-0 ||| 1.98333
+, unfortunately [X][X] [X] ||| leider [X][X] zusammen [X] ||| 0.0182166 1 ||| 2-1 ||| 0.25
+set , unfortunately for [X] ||| leider damit zusammen [X] ||| 0.0182166 1 ||| ||| 0.333333
+set [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.333333
+set , unfortunately for next [X] ||| leider damit zusammen [X] ||| 0.0182166 1 ||| ||| 0.2
+set [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.2
+set , unfortunately [X][X] [X] ||| leider [X][X] zusammen [X] ||| 0.0182166 1 ||| 3-1 ||| 0.2
+been set , unfortunately for [X] ||| leider damit zusammen [X] ||| 0.0182166 1 ||| ||| 0.25
+been set [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 2-0 ||| 0.25
+been [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+been set [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 2-0 ||| 0.2
+been [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.2
+been set , unfortunately [X][X] [X] ||| leider [X][X] zusammen [X] ||| 0.0182166 1 ||| 4-1 ||| 0.2
+has been set [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 3-0 ||| 0.25
+has been [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 2-0 ||| 0.25
+has [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+has been [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 2-0 ||| 0.333333
+has [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.333333
+date has been [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 3-0 ||| 0.25
+date has [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 2-0 ||| 0.25
+date [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+date has [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 2-0 ||| 0.333333
+date [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.333333
+a date has [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 3-0 ||| 0.25
+a date [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 2-0 ||| 0.25
+a [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+a date [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 2-0 ||| 0.333333
+a [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.333333
+, a date [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 3-0 ||| 0.25
+, a [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 2-0 ||| 0.25
+, [X][X] for [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+, a [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 2-0 ||| 0.333333
+, [X][X] for next [X] ||| [X][X] damit zusammen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.333333
+, [X] ||| zusammen , daß [X] ||| 0.0182166 1 ||| ||| 1
+in [X] ||| daß in den [X] ||| 0.0182166 1 ||| ||| 1
+America [X] ||| den Vereinigten Staaten [X] ||| 0.0182166 1 ||| ||| 1
+, in Texas [X] ||| , in Texas [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] Texas [X] ||| [X][X] Texas [X] ||| 0.0182166 1 ||| 0-0 ||| 0.333333
+, [X][X] [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+Thursday [X] ||| Donnerstag dieser Woche [X] ||| 0.0182166 1 ||| ||| 1
+next Thursday [X] ||| Donnerstag dieser Woche [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| dieser Woche die [X] ||| 0.0182166 1 ||| ||| 1
+the execution [X] ||| Woche die Hinrichtung [X] ||| 0.0182166 1 ||| ||| 1
+the execution of a [X] ||| die Hinrichtung eines [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] of a [X] ||| [X][X] eines [X] ||| 0.0182166 1 ||| 0-0 ||| 0.616667
+the [X][X] [X] ||| die [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+the execution [X][X] [X] ||| die Hinrichtung [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.25
+sentenced to death [X] ||| zum Tode verurteilten [X] ||| 0.0182166 1 ||| ||| 1
+sentenced to death . [X] ||| zum Tode verurteilten [X] ||| 0.0182166 1 ||| ||| 1
+[X][X] part-session [X] ||| [X][X] Tagung [X] ||| 0.218091 1 ||| 0-0 ||| 1.5
+with [X][X] part-session [X] ||| [X][X] Tagung [X] ||| 0.0182166 1 ||| 1-0 ||| 0.5
+part-session of the European Parliament [X] ||| Tagung des Europäischen Parlaments [X] ||| 0.0182166 1 ||| ||| 0.142857
+part-session [X][X] European Parliament [X] ||| Tagung [X][X] Europäischen Parlaments [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+part-session [X][X] Parliament [X] ||| Tagung [X][X] Parlaments [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+part-session of the [X][X] [X] ||| Tagung des [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.554279
+part-session [X][X] European Parliament , [X] ||| Tagung [X][X] Europäischen Parlaments [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+part-session [X][X] European [X][X] [X] ||| Tagung [X][X] Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.411422
+part-session [X][X] Parliament , [X] ||| Tagung [X][X] Parlaments [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+part-session [X][X] , [X] ||| Tagung [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+part-session of the [X][X] , [X] ||| Tagung des [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0909091
+part-session of the European [X][X] [X] ||| Tagung des Europäischen [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.411422
+part-session [X][X] European [X][X] a [X] ||| Tagung [X][X] Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0769231
+part-session [X][X] Parliament , a [X] ||| Tagung [X][X] Parlaments [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+part-session [X][X] , a [X] ||| Tagung [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+part-session [X][X] a [X] ||| Tagung [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+part-session of the [X][X] a [X] ||| Tagung des [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0769231
+part-session [X][X] European [X][X] date [X] ||| Tagung [X][X] Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0769231
+part-session [X][X] , a date [X] ||| Tagung [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+part-session [X][X] a date [X] ||| Tagung [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+part-session [X][X] date [X] ||| Tagung [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+part-session of the [X][X] date [X] ||| Tagung des [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0769231
+part-session [X][X] European [X][X] has [X] ||| Tagung [X][X] Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0833333
+part-session [X][X] a date has [X] ||| Tagung [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+part-session [X][X] date has [X] ||| Tagung [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+part-session [X][X] has [X] ||| Tagung [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+part-session of the [X][X] has [X] ||| Tagung des [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0833333
+part-session [X][X] European [X][X] been [X] ||| Tagung [X][X] Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0833333
+part-session [X][X] date has been [X] ||| Tagung [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+part-session [X][X] has been [X] ||| Tagung [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+part-session [X][X] been [X] ||| Tagung [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+part-session of the [X][X] been [X] ||| Tagung des [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0833333
+in America [X] ||| in den Vereinigten Staaten [X] ||| 0.0182166 1 ||| ||| 1
+the execution [X] ||| dieser Woche die Hinrichtung [X] ||| 0.0182166 1 ||| ||| 1
+the execution of a [X] ||| Woche die Hinrichtung eines [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] of a [X] ||| Woche [X][X] eines [X] ||| 0.0182166 1 ||| 0-1 ||| 0.2
+the [X][X] [X] ||| Woche die [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.2
+the execution [X][X] [X] ||| Woche die Hinrichtung [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.2
+[X][X] part-session of the [X] ||| [X][X] Tagung des [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+[X][X] part-session [X][X] [X] ||| [X][X] Tagung [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.936111
+[X][X] of the [X] ||| [X][X] des [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+with [X][X] part-session of the [X] ||| [X][X] Tagung des [X] ||| 0.0182166 1 ||| 1-0 ||| 0.166667
+with [X][X] part-session [X][X] [X] ||| [X][X] Tagung [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.277778
+with [X][X] of the [X] ||| [X][X] des [X] ||| 0.0182166 1 ||| 1-0 ||| 0.166667
+in America [X] ||| daß in den Vereinigten Staaten [X] ||| 0.0182166 1 ||| ||| 1
+the execution of a [X] ||| dieser Woche die Hinrichtung eines [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] of a [X] ||| dieser [X][X] eines [X] ||| 0.00910828 1 ||| 0-1 ||| 0.333334
+[X][X] of a [X] ||| dieser Woche [X][X] eines [X] ||| 0.00910828 1 ||| 0-2 ||| 0.333334
+the [X][X] [X] ||| dieser Woche die [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.166667
+the execution [X][X] [X] ||| dieser Woche die Hinrichtung [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.166667
+[X][X] part-session of the European [X] ||| [X][X] Tagung des Europäischen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.311111
+[X][X] part-session [X][X] European [X] ||| [X][X] Tagung [X][X] Europäischen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.311111
+[X][X] of the European [X] ||| [X][X] des Europäischen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.311111
+with [X][X] part-session [X][X] European [X] ||| [X][X] Tagung [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.111111
+with [X][X] of the European [X] ||| [X][X] des Europäischen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.111111
+with [X][X] European [X] ||| [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.111111
+[X][X] part-session [X][X] European Parliament [X] ||| [X][X] Tagung [X][X] Europäischen Parlaments [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.125
+[X][X] part-session [X][X] Parliament [X] ||| [X][X] Tagung [X][X] Parlaments [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.125
+[X][X] part-session of the [X][X] [X] ||| [X][X] Tagung des [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.125
+[X][X] of the European Parliament [X] ||| [X][X] des Europäischen Parlaments [X] ||| 0.0182166 1 ||| 0-0 ||| 0.125
+[X][X] of the [X][X] [X] ||| [X][X] des [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.125
+, in Texas in America [X] ||| in den Vereinigten Staaten , in Texas [X] ||| 0.0182166 1 ||| ||| 0.166667
+, in Texas [X][X] [X] ||| [X][X] , in Texas [X] ||| 0.0182166 1 ||| 3-0 ||| 0.291667
+[X][X] Texas [X][X] [X] ||| [X][X] [X][X] Texas [X] ||| 0.0182166 1 ||| 2-0 0-1 ||| 0.291667
+[X][X] Texas in America [X] ||| in den Vereinigten Staaten [X][X] Texas [X] ||| 0.0182166 1 ||| 0-4 ||| 0.166667
+[X][X] in America [X] ||| in den Vereinigten Staaten [X][X] [X] ||| 0.0182166 1 ||| 0-4 ||| 0.166667
+, [X][X] in America [X] ||| in den Vereinigten Staaten , [X][X] [X] ||| 0.0182166 1 ||| 1-5 ||| 0.166667
+, in Texas in America [X] ||| daß in den Vereinigten Staaten , in Texas [X] ||| 0.0182166 1 ||| ||| 0.125
+, in Texas [X][X] [X] ||| daß [X][X] , in Texas [X] ||| 0.0182166 1 ||| 3-1 ||| 0.125
+[X][X] Texas [X][X] [X] ||| daß [X][X] [X][X] Texas [X] ||| 0.0182166 1 ||| 2-1 0-2 ||| 0.125
+[X][X] Texas in America [X] ||| daß in den Vereinigten Staaten [X][X] Texas [X] ||| 0.0182166 1 ||| 0-5 ||| 0.125
+[X][X] in America [X] ||| daß in den Vereinigten Staaten [X][X] [X] ||| 0.0182166 1 ||| 0-5 ||| 0.125
+, [X][X] in America [X] ||| daß in den Vereinigten Staaten , [X][X] [X] ||| 0.0182166 1 ||| 1-6 ||| 0.125
+, in Texas [X][X] , [X] ||| [X][X] , in Texas , [X] ||| 0.0182166 1 ||| 3-0 ||| 0.277778
+[X][X] Texas [X][X] , [X] ||| [X][X] [X][X] Texas , [X] ||| 0.0182166 1 ||| 2-0 0-1 ||| 0.277778
+[X][X] , [X] ||| [X][X] , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.277778
+[X][X] Texas in America , [X] ||| in den Vereinigten Staaten [X][X] Texas , [X] ||| 0.0182166 1 ||| 0-4 ||| 0.166667
+[X][X] in America , [X] ||| in den Vereinigten Staaten [X][X] , [X] ||| 0.0182166 1 ||| 0-4 ||| 0.166667
+, [X][X] in America , [X] ||| in den Vereinigten Staaten , [X][X] , [X] ||| 0.0182166 1 ||| 1-5 ||| 0.166667
+, in Texas [X][X] , [X] ||| daß [X][X] , in Texas , [X] ||| 0.0182166 1 ||| 3-1 ||| 0.111111
+[X][X] Texas [X][X] , [X] ||| daß [X][X] [X][X] Texas , [X] ||| 0.0182166 1 ||| 2-1 0-2 ||| 0.111111
+[X][X] , [X] ||| daß [X][X] , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.111111
+[X][X] Texas in America , [X] ||| daß in den Vereinigten Staaten [X][X] Texas , [X] ||| 0.0182166 1 ||| 0-5 ||| 0.111111
+[X][X] in America , [X] ||| daß in den Vereinigten Staaten [X][X] , [X] ||| 0.0182166 1 ||| 0-5 ||| 0.111111
+, [X][X] in America , [X] ||| daß in den Vereinigten Staaten , [X][X] , [X] ||| 0.0182166 1 ||| 1-6 ||| 0.111111
+[X][X] Texas [X][X] , for [X] ||| [X][X] [X][X] Texas , für [X] ||| 0.0182166 1 ||| 2-0 0-1 ||| 0.242857
+[X][X] , for [X] ||| [X][X] , für [X] ||| 0.0182166 1 ||| 0-0 ||| 0.242857
+[X][X] for [X] ||| [X][X] für [X] ||| 0.0182166 1 ||| 0-0 ||| 0.242857
+[X][X] Texas in America [X][X] [X] ||| in den Vereinigten Staaten [X][X] Texas [X][X] [X] ||| 0.0182166 1 ||| 0-4 4-6 ||| 0.142857
+[X][X] in America , for [X] ||| in den Vereinigten Staaten [X][X] , für [X] ||| 0.0182166 1 ||| 0-4 ||| 0.142857
+[X][X] in America [X][X] [X] ||| in den Vereinigten Staaten [X][X] [X][X] [X] ||| 0.0182166 1 ||| 0-4 3-5 ||| 0.142857
+, [X][X] in America [X][X] [X] ||| in den Vereinigten Staaten , [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-5 4-6 ||| 0.142857
+[X][X] Texas [X][X] , for [X] ||| daß [X][X] [X][X] Texas , für [X] ||| 0.0182166 1 ||| 2-1 0-2 ||| 0.1
+[X][X] , for [X] ||| daß [X][X] , für [X] ||| 0.0182166 1 ||| 0-1 ||| 0.1
+[X][X] for [X] ||| daß [X][X] für [X] ||| 0.0182166 1 ||| 0-1 ||| 0.1
+[X][X] Texas in America [X][X] [X] ||| daß in den Vereinigten Staaten [X][X] Texas [X][X] [X] ||| 0.0182166 1 ||| 0-5 4-7 ||| 0.1
+[X][X] in America , for [X] ||| daß in den Vereinigten Staaten [X][X] , für [X] ||| 0.0182166 1 ||| 0-5 ||| 0.1
+[X][X] in America [X][X] [X] ||| daß in den Vereinigten Staaten [X][X] [X][X] [X] ||| 0.0182166 1 ||| 0-5 3-6 ||| 0.1
+, [X][X] in America [X][X] [X] ||| daß in den Vereinigten Staaten , [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-6 4-7 ||| 0.1
+Thursday [X][X] , for [X] ||| [X][X] , für Donnerstag [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+Thursday [X][X] for [X] ||| [X][X] für Donnerstag [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+Thursday [X][X] [X] ||| [X][X] Donnerstag [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+Thursday [X][X] in America [X][X] [X] ||| in den Vereinigten Staaten [X][X] [X][X] Donnerstag [X] ||| 0.0182166 1 ||| 1-4 4-5 ||| 0.25
+next Thursday [X][X] , for [X] ||| [X][X] , für Donnerstag [X] ||| 0.0182166 1 ||| 2-0 ||| 0.333333
+next Thursday [X][X] for [X] ||| [X][X] für Donnerstag [X] ||| 0.0182166 1 ||| 2-0 ||| 0.333333
+next Thursday [X][X] [X] ||| [X][X] Donnerstag [X] ||| 0.0182166 1 ||| 2-0 ||| 0.333333
+at [X] ||| auf [X] ||| 0.0182166 1 ||| ||| 1
+at the [X] ||| auf [X] ||| 0.0182166 1 ||| ||| 1
+request [X] ||| Wunsch [X] ||| 0.0182166 1 ||| ||| 1
+the request [X] ||| Wunsch [X] ||| 0.0182166 1 ||| ||| 1
+of a [X] ||| eines [X] ||| 0.0182166 1 ||| ||| 1
+French [X] ||| französischen [X] ||| 0.0182166 1 ||| ||| 1
+Member [X] ||| Mitglieds [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| , [X] ||| 0.443548 1 ||| ||| 4
+Mr [X] ||| Herrn [X] ||| 0.0182166 1 ||| ||| 1
+Zimeray [X] ||| Zimeray [X] ||| 0.0182166 1 ||| ||| 1
+has [X] ||| wurde [X] ||| 0.0182166 1 ||| ||| 1
+already been [X] ||| bereits [X] ||| 0.0182166 1 ||| ||| 1
+a [X] ||| eine [X] ||| 0.0182166 1 ||| ||| 1
+petition [X] ||| Petition [X] ||| 0.0182166 1 ||| ||| 1
+presented [X] ||| eingereicht [X] ||| 0.0182166 1 ||| ||| 1
+which [X] ||| die [X] ||| 0.0182166 1 ||| ||| 1
+many [X] ||| vielen [X] ||| 0.0182166 1 ||| ||| 1
+many people [X] ||| vielen [X] ||| 0.0182166 1 ||| ||| 1
+including [X] ||| auch [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+at the request [X] ||| auf Wunsch [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] request [X] ||| [X][X] Wunsch [X] ||| 0.0182166 1 ||| 0-0 ||| 0.333333
+at [X][X] [X] ||| auf [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.700617
+request of a [X] ||| Wunsch eines [X] ||| 0.0182166 1 ||| ||| 0.5
+request [X][X] [X] ||| Wunsch [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.09156
+the request of a [X] ||| Wunsch eines [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] of a [X] ||| [X][X] eines [X] ||| 0.0182166 1 ||| 0-0 ||| 0.458333
+the request [X][X] [X] ||| Wunsch [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.756306
+of a French [X] ||| eines französischen [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] French [X] ||| [X][X] französischen [X] ||| 0.0182166 1 ||| 0-0 ||| 1
+French Member [X] ||| französischen Mitglieds [X] ||| 0.0182166 1 ||| ||| 1
+Member , [X] ||| Mitglieds , [X] ||| 0.0182166 1 ||| ||| 1
+, Mr [X] ||| , Herrn [X] ||| 0.0182166 1 ||| ||| 1
+Mr Zimeray [X] ||| Herrn Zimeray [X] ||| 0.0182166 1 ||| ||| 1
+Zimeray , [X] ||| Zimeray , [X] ||| 0.0182166 1 ||| ||| 1
+has already been [X] ||| wurde bereits [X] ||| 0.0182166 1 ||| ||| 0.5
+has [X][X] [X] ||| wurde [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.5
+a petition [X] ||| eine Petition [X] ||| 0.0182166 1 ||| ||| 1
+presented , [X] ||| eingereicht , [X] ||| 0.0182166 1 ||| ||| 1
+, which [X] ||| , die [X] ||| 0.0182166 1 ||| ||| 1
+which [X] ||| die von [X] ||| 0.0182166 1 ||| ||| 1
+many [X] ||| von vielen [X] ||| 0.0182166 1 ||| ||| 1
+many people [X] ||| von vielen [X] ||| 0.0182166 1 ||| ||| 1
+, including [X] ||| , auch [X] ||| 0.0182166 1 ||| ||| 1
+including [X] ||| auch von [X] ||| 0.0182166 1 ||| ||| 1
+myself [X] ||| mir selbst [X] ||| 0.0182166 1 ||| ||| 1
+signed [X] ||| unterzeichnet worden [X] ||| 0.0182166 1 ||| ||| 1
+people signed [X] ||| unterzeichnet worden [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| ist . [X] ||| 0.0182166 1 ||| ||| 1
+at the request of a [X] ||| auf Wunsch eines [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] request of a [X] ||| [X][X] Wunsch eines [X] ||| 0.0182166 1 ||| 0-0 ||| 0.125
+[X][X] request [X][X] [X] ||| [X][X] Wunsch [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.367283
+at [X][X] of a [X] ||| auf [X][X] eines [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+at the [X][X] [X] ||| auf [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.367283
+at the request [X][X] [X] ||| auf Wunsch [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.367283
+request of a French [X] ||| Wunsch eines französischen [X] ||| 0.0182166 1 ||| ||| 0.25
+request [X][X] French [X] ||| Wunsch [X][X] französischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+the request of a French [X] ||| Wunsch eines französischen [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] of a French [X] ||| [X][X] eines französischen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25
+the [X][X] French [X] ||| [X][X] französischen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.166667
+the request [X][X] French [X] ||| Wunsch [X][X] französischen [X] ||| 0.0182166 1 ||| 2-1 ||| 0.166667
+of a French Member [X] ||| eines französischen Mitglieds [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] French Member [X] ||| [X][X] französischen Mitglieds [X] ||| 0.0182166 1 ||| 0-0 ||| 0.551681
+[X][X] Member [X] ||| [X][X] Mitglieds [X] ||| 0.0182166 1 ||| 0-0 ||| 0.551681
+of a [X][X] [X] ||| eines [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.529762
+French Member , [X] ||| französischen Mitglieds , [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] , [X] ||| [X][X] , [X] ||| 0.218091 1 ||| 0-0 ||| 1.97858
+French [X][X] [X] ||| französischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.643541
+Member , Mr [X] ||| Mitglieds , Herrn [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] Mr [X] ||| [X][X] Herrn [X] ||| 0.0182166 1 ||| 0-0 ||| 0.697985
+Member [X][X] [X] ||| Mitglieds [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.646465
+, Mr Zimeray [X] ||| , Herrn Zimeray [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] Zimeray [X] ||| [X][X] Zimeray [X] ||| 0.0182166 1 ||| 0-0 ||| 0.728044
+, [X][X] [X] ||| , [X][X] [X] ||| 0.315522 1 ||| 1-1 ||| 2.32946
+Mr Zimeray , [X] ||| Herrn Zimeray , [X] ||| 0.0182166 1 ||| ||| 0.333333
+Mr [X][X] [X] ||| Herrn [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.635256
+presented , which [X] ||| eingereicht , die [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] which [X] ||| [X][X] die [X] ||| 0.0182166 1 ||| 0-0 ||| 0.688034
+presented [X][X] [X] ||| eingereicht [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.779762
+, which [X] ||| , die von [X] ||| 0.0182166 1 ||| ||| 1
+which many [X] ||| die von vielen [X] ||| 0.0182166 1 ||| ||| 1
+which many people [X] ||| die von vielen [X] ||| 0.0182166 1 ||| ||| 0.333333
+which [X][X] [X] ||| die [X][X] [X] ||| 0.00910828 1 ||| 1-1 ||| 0.666666
+which [X][X] [X] ||| die von [X][X] [X] ||| 0.00910828 1 ||| 1-2 ||| 0.666666
+, including [X] ||| , auch von [X] ||| 0.0182166 1 ||| ||| 1
+myself [X] ||| von mir selbst [X] ||| 0.00910828 1 ||| ||| 2
+myself [X] ||| mir selbst , [X] ||| 0.00910828 1 ||| ||| 2
+signed [X] ||| , unterzeichnet worden [X] ||| 0.0182166 1 ||| ||| 1
+people signed [X] ||| , unterzeichnet worden [X] ||| 0.0182166 1 ||| ||| 1
+signed [X] ||| unterzeichnet worden ist [X] ||| 0.0182166 1 ||| ||| 1
+people signed [X] ||| unterzeichnet worden ist [X] ||| 0.0182166 1 ||| ||| 1
+[X][X] request of a French [X] ||| [X][X] Wunsch eines französischen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0833333
+[X][X] request [X][X] French [X] ||| [X][X] Wunsch [X][X] französischen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0833333
+at [X][X] of a French [X] ||| auf [X][X] eines französischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+at the [X][X] French [X] ||| auf [X][X] französischen [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0833333
+at [X][X] French [X] ||| auf [X][X] französischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+at the request [X][X] French [X] ||| auf Wunsch [X][X] französischen [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0833333
+request of a French Member [X] ||| Wunsch eines französischen Mitglieds [X] ||| 0.0182166 1 ||| ||| 0.142857
+request [X][X] French Member [X] ||| Wunsch [X][X] französischen Mitglieds [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+request [X][X] Member [X] ||| Wunsch [X][X] Mitglieds [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+request of a [X][X] [X] ||| Wunsch eines [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.341563
+[X][X] of a French Member [X] ||| [X][X] eines französischen Mitglieds [X] ||| 0.0182166 1 ||| 0-0 ||| 0.158824
+[X][X] of a [X][X] [X] ||| [X][X] eines [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.415256
+the [X][X] French Member [X] ||| [X][X] französischen Mitglieds [X] ||| 0.0182166 1 ||| 1-0 ||| 0.1
+the [X][X] Member [X] ||| [X][X] Mitglieds [X] ||| 0.0182166 1 ||| 1-0 ||| 0.1
+the request [X][X] French Member [X] ||| Wunsch [X][X] französischen Mitglieds [X] ||| 0.0182166 1 ||| 2-1 ||| 0.1
+the request [X][X] Member [X] ||| Wunsch [X][X] Mitglieds [X] ||| 0.0182166 1 ||| 2-1 ||| 0.1
+the request of a [X][X] [X] ||| Wunsch eines [X][X] [X] ||| 0.0182166 1 ||| 4-2 ||| 0.256306
+of a French Member , [X] ||| eines französischen Mitglieds , [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] French Member , [X] ||| [X][X] französischen Mitglieds , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.314312
+[X][X] French [X][X] [X] ||| [X][X] französischen [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.7349
+[X][X] Member , [X] ||| [X][X] Mitglieds , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.314312
+of a [X][X] , [X] ||| eines [X][X] , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.160714
+of a French [X][X] [X] ||| eines französischen [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.279762
+French Member , Mr [X] ||| französischen Mitglieds , Herrn [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] , Mr [X] ||| [X][X] , Herrn [X] ||| 0.0182166 1 ||| 0-0 ||| 0.364652
+French [X][X] Mr [X] ||| französischen [X][X] Herrn [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+French Member [X][X] [X] ||| französischen Mitglieds [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.310207
+Member , Mr Zimeray [X] ||| Mitglieds , Herrn Zimeray [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] Mr Zimeray [X] ||| [X][X] Herrn Zimeray [X] ||| 0.0182166 1 ||| 0-0 ||| 0.394711
+Member [X][X] Zimeray [X] ||| Mitglieds [X][X] Zimeray [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+Member , [X][X] [X] ||| Mitglieds , [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.313131
+, Mr Zimeray , [X] ||| , Herrn Zimeray , [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] Zimeray , [X] ||| [X][X] Zimeray , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.395676
+, [X][X] , [X] ||| , [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.366667
+, Mr [X][X] [X] ||| , Herrn [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.308824
+a petition has already been [X] ||| wurde bereits eine Petition [X] ||| 0.0182166 1 ||| ||| 0.2
+a petition [X][X] [X] ||| [X][X] eine Petition [X] ||| 0.0182166 1 ||| 2-0 ||| 0.2
+a petition has [X][X] [X] ||| wurde [X][X] eine Petition [X] ||| 0.0182166 1 ||| 3-1 ||| 0.2
+[X][X] has [X][X] [X] ||| wurde [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-1 0-2 ||| 0.2
+[X][X] has already been [X] ||| wurde bereits [X][X] [X] ||| 0.0182166 1 ||| 0-2 ||| 0.2
+presented , which [X] ||| eingereicht , die von [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] which [X] ||| [X][X] die von [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+presented [X][X] [X] ||| eingereicht [X][X] von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+, which many [X] ||| , die von vielen [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] many [X] ||| [X][X] von vielen [X] ||| 0.00910828 1 ||| 0-0 ||| 1.01667
+[X][X] many [X] ||| [X][X] vielen [X] ||| 0.00910828 1 ||| 0-0 ||| 1.01667
+, which many people [X] ||| , die von vielen [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] many people [X] ||| [X][X] von vielen [X] ||| 0.00910828 1 ||| 0-0 ||| 0.528572
+[X][X] many people [X] ||| [X][X] vielen [X] ||| 0.00910828 1 ||| 0-0 ||| 0.528572
+, [X][X] people [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+, which [X][X] [X] ||| , die [X][X] [X] ||| 0.00910828 1 ||| 2-2 ||| 0.285714
+, which [X][X] [X] ||| , die von [X][X] [X] ||| 0.00910828 1 ||| 2-3 ||| 0.285714
+including myself [X] ||| auch von mir selbst [X] ||| 0.0182166 1 ||| ||| 1
+myself [X] ||| von mir selbst , [X] ||| 0.0182166 1 ||| ||| 1
+signed [X] ||| , unterzeichnet worden ist [X] ||| 0.0182166 1 ||| ||| 1
+people signed [X] ||| , unterzeichnet worden ist [X] ||| 0.0182166 1 ||| ||| 1
+[X][X] request [X][X] French Member [X] ||| [X][X] Wunsch [X][X] französischen Mitglieds [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0588235
+[X][X] request [X][X] Member [X] ||| [X][X] Wunsch [X][X] Mitglieds [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0588235
+[X][X] request of a [X][X] [X] ||| [X][X] Wunsch eines [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.15895
+at [X][X] of a [X][X] [X] ||| auf [X][X] eines [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.15895
+at the [X][X] French Member [X] ||| auf [X][X] französischen Mitglieds [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0588235
+at [X][X] French Member [X] ||| auf [X][X] französischen Mitglieds [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0588235
+at the [X][X] Member [X] ||| auf [X][X] Mitglieds [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0588235
+at [X][X] Member [X] ||| auf [X][X] Mitglieds [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0588235
+at the request [X][X] Member [X] ||| auf Wunsch [X][X] Mitglieds [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0588235
+request [X][X] French Member , [X] ||| Wunsch [X][X] französischen Mitglieds , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+request [X][X] French [X][X] [X] ||| Wunsch [X][X] französischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.198706
+request [X][X] Member , [X] ||| Wunsch [X][X] Mitglieds , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+request [X][X] , [X] ||| Wunsch [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.11036
+request of a [X][X] , [X] ||| Wunsch eines [X][X] , [X] ||| 0.0182166 1 ||| 3-2 ||| 0.11036
+request of a French [X][X] [X] ||| Wunsch eines französischen [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.198706
+[X][X] of a [X][X] , [X] ||| [X][X] eines [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.128706
+[X][X] of a French [X][X] [X] ||| [X][X] eines französischen [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.256432
+the [X][X] French Member , [X] ||| [X][X] französischen Mitglieds , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0625
+the [X][X] French [X][X] [X] ||| [X][X] französischen [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.156306
+the [X][X] Member , [X] ||| [X][X] Mitglieds , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0625
+the [X][X] , [X] ||| [X][X] , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0852273
+the request [X][X] French [X][X] [X] ||| Wunsch [X][X] französischen [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.156306
+the request [X][X] Member , [X] ||| Wunsch [X][X] Mitglieds , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0625
+the request [X][X] , [X] ||| Wunsch [X][X] , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0852273
+[X][X] French Member , Mr [X] ||| [X][X] französischen Mitglieds , Herrn [X] ||| 0.0182166 1 ||| 0-0 ||| 0.197985
+[X][X] French [X][X] Mr [X] ||| [X][X] französischen [X][X] Herrn [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.197985
+[X][X] French Member [X][X] [X] ||| [X][X] französischen Mitglieds [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.420589
+[X][X] Member , Mr [X] ||| [X][X] Mitglieds , Herrn [X] ||| 0.0182166 1 ||| 0-0 ||| 0.197985
+[X][X] Member [X][X] [X] ||| [X][X] Mitglieds [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.420589
+of a [X][X] , Mr [X] ||| eines [X][X] , Herrn [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0714286
+of a [X][X] Mr [X] ||| eines [X][X] Herrn [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0714286
+of a French [X][X] Mr [X] ||| eines französischen [X][X] Herrn [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0714286
+of a French Member [X][X] [X] ||| eines französischen Mitglieds [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.154762
+French Member , Mr Zimeray [X] ||| französischen Mitglieds , Herrn Zimeray [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] , Mr Zimeray [X] ||| [X][X] , Herrn Zimeray [X] ||| 0.0182166 1 ||| 0-0 ||| 0.228044
+[X][X] , [X][X] [X] ||| [X][X] , [X][X] [X] ||| 0.218091 1 ||| 0-0 2-2 ||| 1.04911
+French [X][X] Mr Zimeray [X] ||| französischen [X][X] Herrn Zimeray [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+French [X][X] Zimeray [X] ||| französischen [X][X] Zimeray [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+French Member [X][X] Zimeray [X] ||| französischen Mitglieds [X][X] Zimeray [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+French Member , [X][X] [X] ||| französischen Mitglieds , [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.143541
+Member , Mr Zimeray , [X] ||| Mitglieds , Herrn Zimeray , [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] Mr Zimeray , [X] ||| [X][X] Herrn Zimeray , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.229009
+[X][X] Mr [X][X] [X] ||| [X][X] Herrn [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.284565
+Member [X][X] Zimeray , [X] ||| Mitglieds [X][X] Zimeray , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+Member [X][X] , [X] ||| Mitglieds [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+Member , [X][X] , [X] ||| Mitglieds , [X][X] , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+Member , Mr [X][X] [X] ||| Mitglieds , Herrn [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.146465
+, a petition [X][X] [X] ||| , [X][X] eine Petition [X] ||| 0.0182166 1 ||| 3-1 ||| 0.2
+, a petition has [X][X] [X] ||| , wurde [X][X] eine Petition [X] ||| 0.0182166 1 ||| 4-2 ||| 0.2
+, [X][X] has [X][X] [X] ||| , wurde [X][X] [X][X] [X] ||| 0.0182166 1 ||| 3-2 1-3 ||| 0.2
+, [X][X] has already been [X] ||| , wurde bereits [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.2
+a petition [X][X] presented [X] ||| [X][X] eine Petition eingereicht [X] ||| 0.0182166 1 ||| 2-0 ||| 0.2
+[X][X] presented [X] ||| [X][X] eingereicht [X] ||| 0.0182166 1 ||| 0-0 ||| 0.72549
+a petition has [X][X] presented [X] ||| wurde [X][X] eine Petition eingereicht [X] ||| 0.0182166 1 ||| 3-1 ||| 0.2
+[X][X] has [X][X] presented [X] ||| wurde [X][X] [X][X] eingereicht [X] ||| 0.0182166 1 ||| 2-1 0-2 ||| 0.2
+[X][X] has already been presented [X] ||| wurde bereits [X][X] eingereicht [X] ||| 0.0182166 1 ||| 0-2 ||| 0.2
+presented , which many [X] ||| eingereicht , die von vielen [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] which many [X] ||| [X][X] die von vielen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.258333
+presented [X][X] many [X] ||| eingereicht [X][X] von vielen [X] ||| 0.00910828 1 ||| 1-1 ||| 0.25
+presented [X][X] many [X] ||| eingereicht [X][X] vielen [X] ||| 0.00910828 1 ||| 1-1 ||| 0.25
+presented , [X][X] [X] ||| eingereicht , [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.196429
+presented , which many people [X] ||| eingereicht , die von vielen [X] ||| 0.0182166 1 ||| ||| 0.0714286
+[X][X] which many people [X] ||| [X][X] die von vielen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.121429
+[X][X] which [X][X] [X] ||| [X][X] die [X][X] [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.242858
+[X][X] which [X][X] [X] ||| [X][X] die von [X][X] [X] ||| 0.00910828 1 ||| 0-0 2-3 ||| 0.242858
+presented [X][X] many people [X] ||| eingereicht [X][X] von vielen [X] ||| 0.00910828 1 ||| 1-1 ||| 0.142857
+presented [X][X] many people [X] ||| eingereicht [X][X] vielen [X] ||| 0.00910828 1 ||| 1-1 ||| 0.142857
+presented [X][X] people [X] ||| eingereicht [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+presented , [X][X] people [X] ||| eingereicht , [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0714286
+presented , which [X][X] [X] ||| eingereicht , die [X][X] [X] ||| 0.00910828 1 ||| 3-3 ||| 0.142857
+presented , which [X][X] [X] ||| eingereicht , die von [X][X] [X] ||| 0.00910828 1 ||| 3-4 ||| 0.142857
+, including myself [X] ||| , auch von mir selbst [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] myself [X] ||| [X][X] von mir selbst [X] ||| 0.00910828 1 ||| 0-0 ||| 0.5
+[X][X] myself [X] ||| [X][X] mir selbst [X] ||| 0.00910828 1 ||| 0-0 ||| 0.5
+including myself [X] ||| auch von mir selbst , [X] ||| 0.0182166 1 ||| ||| 1
+[X][X] request [X][X] Member , [X] ||| [X][X] Wunsch [X][X] Mitglieds , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0434783
+[X][X] request [X][X] , [X] ||| [X][X] Wunsch [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0434783
+at the [X][X] French [X][X] [X] ||| auf [X][X] französischen [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.100127
+at [X][X] French Member , [X] ||| auf [X][X] französischen Mitglieds , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0434783
+at [X][X] French [X][X] [X] ||| auf [X][X] französischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.100127
+at the [X][X] Member , [X] ||| auf [X][X] Mitglieds , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0434783
+at [X][X] Member , [X] ||| auf [X][X] Mitglieds , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0434783
+at the [X][X] , [X] ||| auf [X][X] , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0434783
+at [X][X] , [X] ||| auf [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0434783
+at the request [X][X] , [X] ||| auf Wunsch [X][X] , [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0434783
+request [X][X] French [X][X] Mr [X] ||| Wunsch [X][X] französischen [X][X] Herrn [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0526316
+request [X][X] French Member [X][X] [X] ||| Wunsch [X][X] französischen Mitglieds [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.115373
+request [X][X] Member , Mr [X] ||| Wunsch [X][X] Mitglieds , Herrn [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+request [X][X] Member [X][X] [X] ||| Wunsch [X][X] Mitglieds [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.115373
+request [X][X] , Mr [X] ||| Wunsch [X][X] , Herrn [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+request [X][X] Mr [X] ||| Wunsch [X][X] Herrn [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+request of a [X][X] Mr [X] ||| Wunsch eines [X][X] Herrn [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0526316
+[X][X] of a [X][X] Mr [X] ||| [X][X] eines [X][X] Herrn [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0739247
+the [X][X] French [X][X] Mr [X] ||| [X][X] französischen [X][X] Herrn [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0416667
+the [X][X] French Member [X][X] [X] ||| [X][X] französischen Mitglieds [X][X] [X] ||| 0.0182166 1 ||| 1-0 4-3 ||| 0.0938057
+the [X][X] Member , Mr [X] ||| [X][X] Mitglieds , Herrn [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0416667
+the [X][X] Member [X][X] [X] ||| [X][X] Mitglieds [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0938057
+the [X][X] , Mr [X] ||| [X][X] , Herrn [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0416667
+the [X][X] Mr [X] ||| [X][X] Herrn [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0416667
+the request [X][X] Member [X][X] [X] ||| Wunsch [X][X] Mitglieds [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0938057
+the request [X][X] , Mr [X] ||| Wunsch [X][X] , Herrn [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0416667
+the request [X][X] Mr [X] ||| Wunsch [X][X] Herrn [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0416667
+[X][X] French [X][X] Mr Zimeray [X] ||| [X][X] französischen [X][X] Herrn Zimeray [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.137135
+[X][X] French [X][X] Zimeray [X] ||| [X][X] französischen [X][X] Zimeray [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.137135
+[X][X] French Member [X][X] Zimeray [X] ||| [X][X] französischen Mitglieds [X][X] Zimeray [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.137135
+[X][X] French Member , [X][X] [X] ||| [X][X] französischen Mitglieds , [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.222604
+[X][X] Member , Mr Zimeray [X] ||| [X][X] Mitglieds , Herrn Zimeray [X] ||| 0.0182166 1 ||| 0-0 ||| 0.137135
+[X][X] Member [X][X] Zimeray [X] ||| [X][X] Mitglieds [X][X] Zimeray [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.137135
+[X][X] Member , [X][X] [X] ||| [X][X] Mitglieds , [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.222604
+of a [X][X] , [X][X] [X] ||| eines [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0833333
+of a [X][X] Mr Zimeray [X] ||| eines [X][X] Herrn Zimeray [X] ||| 0.0182166 1 ||| 2-1 ||| 0.047619
+of a [X][X] Zimeray [X] ||| eines [X][X] Zimeray [X] ||| 0.0182166 1 ||| 2-1 ||| 0.047619
+of a French [X][X] Zimeray [X] ||| eines französischen [X][X] Zimeray [X] ||| 0.0182166 1 ||| 3-2 ||| 0.047619
+[X][X] , Mr Zimeray , [X] ||| [X][X] , Herrn Zimeray , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.1381
+[X][X] , [X][X] , [X] ||| [X][X] , [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.215023
+[X][X] , Mr [X][X] [X] ||| [X][X] , Herrn [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.1381
+French [X][X] Mr Zimeray , [X] ||| französischen [X][X] Herrn Zimeray , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+French [X][X] Mr [X][X] [X] ||| französischen [X][X] Herrn [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0526316
+French [X][X] Zimeray , [X] ||| französischen [X][X] Zimeray , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+French [X][X] , [X] ||| französischen [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+French Member [X][X] Zimeray , [X] ||| französischen Mitglieds [X][X] Zimeray , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+French Member [X][X] , [X] ||| französischen Mitglieds [X][X] , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+French Member , [X][X] , [X] ||| französischen Mitglieds , [X][X] , [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0526316
+French Member , Mr [X][X] [X] ||| französischen Mitglieds , Herrn [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.0526316
+[X][X] a petition [X][X] [X] ||| [X][X] [X][X] eine Petition [X] ||| 0.0182166 1 ||| 0-0 3-1 ||| 0.430556
+[X][X] a petition has [X][X] [X] ||| [X][X] wurde [X][X] eine Petition [X] ||| 0.0182166 1 ||| 0-0 4-2 ||| 0.430556
+Zimeray [X][X] [X] ||| Zimeray [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.590812
+Zimeray , a petition [X][X] [X] ||| Zimeray , [X][X] eine Petition [X] ||| 0.0182166 1 ||| 4-2 ||| 0.166667
+Zimeray , [X][X] [X] ||| Zimeray , [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.590812
+Zimeray , [X][X] has [X][X] [X] ||| Zimeray , wurde [X][X] [X][X] [X] ||| 0.0182166 1 ||| 4-3 2-4 ||| 0.166667
+, a petition [X][X] presented [X] ||| , [X][X] eine Petition eingereicht [X] ||| 0.0182166 1 ||| 3-1 ||| 0.2
+, [X][X] presented [X] ||| , [X][X] eingereicht [X] ||| 0.0182166 1 ||| 1-1 ||| 0.258824
+, [X][X] has [X][X] presented [X] ||| , wurde [X][X] [X][X] eingereicht [X] ||| 0.0182166 1 ||| 3-2 1-3 ||| 0.2
+a petition [X][X] presented , [X] ||| [X][X] eine Petition eingereicht , [X] ||| 0.0182166 1 ||| 2-0 ||| 0.2
+[X][X] presented , [X] ||| [X][X] eingereicht , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.601923
+[X][X] has [X][X] presented , [X] ||| wurde [X][X] [X][X] eingereicht , [X] ||| 0.0182166 1 ||| 2-1 0-2 ||| 0.2
+[X][X] has already been [X][X] [X] ||| wurde bereits [X][X] [X][X] [X] ||| 0.0182166 1 ||| 0-2 4-3 ||| 0.611111
+, including myself [X] ||| , auch von mir selbst , [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] myself [X] ||| [X][X] von mir selbst , [X] ||| 0.00910828 1 ||| 0-0 ||| 0.4
+[X][X] myself [X] ||| [X][X] mir selbst , [X] ||| 0.00910828 1 ||| 0-0 ||| 0.4
+, [X][X] [X] ||| , [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.2
+[X][X] request [X][X] , Mr [X] ||| [X][X] Wunsch [X][X] , Herrn [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0322581
+[X][X] request [X][X] Mr [X] ||| [X][X] Wunsch [X][X] Herrn [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0322581
+at [X][X] French [X][X] Mr [X] ||| auf [X][X] französischen [X][X] Herrn [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0322581
+at [X][X] French Member [X][X] [X] ||| auf [X][X] französischen Mitglieds [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0566483
+at the [X][X] Member [X][X] [X] ||| auf [X][X] Mitglieds [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0566483
+at [X][X] Member , Mr [X] ||| auf [X][X] Mitglieds , Herrn [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0322581
+at [X][X] Member [X][X] [X] ||| auf [X][X] Mitglieds [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0566483
+at the [X][X] , Mr [X] ||| auf [X][X] , Herrn [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0322581
+at [X][X] , Mr [X] ||| auf [X][X] , Herrn [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0322581
+at the [X][X] Mr [X] ||| auf [X][X] Herrn [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0322581
+at [X][X] Mr [X] ||| auf [X][X] Herrn [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0322581
+at the request [X][X] Mr [X] ||| auf Wunsch [X][X] Herrn [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0322581
+request [X][X] French [X][X] Zimeray [X] ||| Wunsch [X][X] französischen [X][X] Zimeray [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0357143
+request [X][X] Member [X][X] Zimeray [X] ||| Wunsch [X][X] Mitglieds [X][X] Zimeray [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0357143
+request [X][X] Member , [X][X] [X] ||| Wunsch [X][X] Mitglieds , [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0627413
+request [X][X] , Mr Zimeray [X] ||| Wunsch [X][X] , Herrn Zimeray [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+request [X][X] , [X][X] [X] ||| Wunsch [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0627413
+request [X][X] Mr Zimeray [X] ||| Wunsch [X][X] Herrn Zimeray [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+request [X][X] Zimeray [X] ||| Wunsch [X][X] Zimeray [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+request of a [X][X] Zimeray [X] ||| Wunsch eines [X][X] Zimeray [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0357143
+[X][X] of a [X][X] Zimeray [X] ||| [X][X] eines [X][X] Zimeray [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.053802
+the [X][X] French [X][X] Zimeray [X] ||| [X][X] französischen [X][X] Zimeray [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0294118
+the [X][X] Member [X][X] Zimeray [X] ||| [X][X] Mitglieds [X][X] Zimeray [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0294118
+the [X][X] Member , [X][X] [X] ||| [X][X] Mitglieds , [X][X] [X] ||| 0.0182166 1 ||| 1-0 4-3 ||| 0.052139
+the [X][X] , Mr Zimeray [X] ||| [X][X] , Herrn Zimeray [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0294118
+the [X][X] , [X][X] [X] ||| [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.052139
+the [X][X] Mr Zimeray [X] ||| [X][X] Herrn Zimeray [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0294118
+the [X][X] Zimeray [X] ||| [X][X] Zimeray [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0294118
+the request [X][X] , [X][X] [X] ||| Wunsch [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.052139
+the request [X][X] Mr Zimeray [X] ||| Wunsch [X][X] Herrn Zimeray [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0294118
+the request [X][X] Zimeray [X] ||| Wunsch [X][X] Zimeray [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0294118
+[X][X] French [X][X] Zimeray , [X] ||| [X][X] französischen [X][X] Zimeray , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0854686
+[X][X] French [X][X] , [X] ||| [X][X] französischen [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0854686
+[X][X] French Member [X][X] , [X] ||| [X][X] französischen Mitglieds [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0854686
+[X][X] Member [X][X] Zimeray , [X] ||| [X][X] Mitglieds [X][X] Zimeray , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0854686
+[X][X] Member [X][X] , [X] ||| [X][X] Mitglieds [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0854686
+[X][X] Member , [X][X] , [X] ||| [X][X] Mitglieds , [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0854686
+[X][X] Member , Mr [X][X] [X] ||| [X][X] Mitglieds , Herrn [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.0854686
+of a [X][X] Mr [X][X] [X] ||| eines [X][X] Herrn [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0357143
+of a [X][X] Zimeray , [X] ||| eines [X][X] Zimeray , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0357143
+of a French [X][X] , [X] ||| eines französischen [X][X] , [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0357143
+[X][X] , a petition [X][X] [X] ||| [X][X] , [X][X] eine Petition [X] ||| 0.0182166 1 ||| 0-0 4-2 ||| 0.263889
+Mr [X][X] a petition [X][X] [X] ||| Herrn [X][X] [X][X] eine Petition [X] ||| 0.0182166 1 ||| 1-1 4-2 ||| 0.125
+Mr Zimeray [X][X] [X] ||| Herrn Zimeray [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.301923
+Mr Zimeray , [X][X] [X] ||| Herrn Zimeray , [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.301923
+[X][X] a petition [X][X] presented [X] ||| [X][X] [X][X] eine Petition eingereicht [X] ||| 0.0182166 1 ||| 0-0 3-1 ||| 0.32549
+Zimeray [X][X] presented [X] ||| Zimeray [X][X] eingereicht [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+Zimeray , [X][X] presented [X] ||| Zimeray , [X][X] eingereicht [X] ||| 0.0182166 1 ||| 2-2 ||| 0.166667
+, [X][X] presented , [X] ||| , [X][X] eingereicht , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.2
+a petition [X][X] presented [X][X] [X] ||| [X][X] eine Petition eingereicht [X][X] [X] ||| 0.0182166 1 ||| 2-0 4-4 ||| 0.411111
+[X][X] presented , which [X] ||| [X][X] eingereicht , die [X] ||| 0.0182166 1 ||| 0-0 ||| 0.354701
+[X][X] presented [X][X] [X] ||| [X][X] eingereicht [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.788034
+[X][X] , which [X] ||| [X][X] , die [X] ||| 0.0182166 1 ||| 0-0 ||| 0.354701
+[X][X] request [X][X] Mr Zimeray [X] ||| [X][X] Wunsch [X][X] Herrn Zimeray [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0243902
+[X][X] request [X][X] Zimeray [X] ||| [X][X] Wunsch [X][X] Zimeray [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0243902
+at [X][X] French [X][X] Zimeray [X] ||| auf [X][X] französischen [X][X] Zimeray [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0243902
+at [X][X] Member [X][X] Zimeray [X] ||| auf [X][X] Mitglieds [X][X] Zimeray [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0243902
+at [X][X] Member , [X][X] [X] ||| auf [X][X] Mitglieds , [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0243902
+at the [X][X] , [X][X] [X] ||| auf [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0243902
+at [X][X] , Mr Zimeray [X] ||| auf [X][X] , Herrn Zimeray [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0243902
+at [X][X] , [X][X] [X] ||| auf [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0243902
+at the [X][X] Mr Zimeray [X] ||| auf [X][X] Herrn Zimeray [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0243902
+at [X][X] Mr Zimeray [X] ||| auf [X][X] Herrn Zimeray [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0243902
+at the [X][X] Zimeray [X] ||| auf [X][X] Zimeray [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0243902
+at [X][X] Zimeray [X] ||| auf [X][X] Zimeray [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0243902
+at the request [X][X] Zimeray [X] ||| auf Wunsch [X][X] Zimeray [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0243902
+request [X][X] French [X][X] , [X] ||| Wunsch [X][X] französischen [X][X] , [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.027027
+request [X][X] Member [X][X] , [X] ||| Wunsch [X][X] Mitglieds [X][X] , [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.027027
+request [X][X] , [X][X] , [X] ||| Wunsch [X][X] , [X][X] , [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.027027
+request [X][X] , Mr [X][X] [X] ||| Wunsch [X][X] , Herrn [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.027027
+request [X][X] Mr Zimeray , [X] ||| Wunsch [X][X] Herrn Zimeray , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.027027
+request [X][X] Mr [X][X] [X] ||| Wunsch [X][X] Herrn [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.027027
+request [X][X] Zimeray , [X] ||| Wunsch [X][X] Zimeray , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.027027
+the [X][X] French [X][X] , [X] ||| [X][X] französischen [X][X] , [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0227273
+the [X][X] Member [X][X] , [X] ||| [X][X] Mitglieds [X][X] , [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0227273
+the [X][X] , [X][X] , [X] ||| [X][X] , [X][X] , [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0227273
+the [X][X] , Mr [X][X] [X] ||| [X][X] , Herrn [X][X] [X] ||| 0.0182166 1 ||| 1-0 4-3 ||| 0.0227273
+the [X][X] Mr Zimeray , [X] ||| [X][X] Herrn Zimeray , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0227273
+the [X][X] Mr [X][X] [X] ||| [X][X] Herrn [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0227273
+the [X][X] Zimeray , [X] ||| [X][X] Zimeray , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0227273
+the request [X][X] Mr [X][X] [X] ||| Wunsch [X][X] Herrn [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0227273
+the request [X][X] Zimeray , [X] ||| Wunsch [X][X] Zimeray , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0227273
+[X][X] Zimeray [X][X] [X] ||| [X][X] Zimeray [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.197712
+[X][X] Zimeray , [X][X] [X] ||| [X][X] Zimeray , [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.197712
+, [X][X] , [X][X] [X] ||| , [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.192157
+, [X][X] a petition [X][X] [X] ||| , [X][X] [X][X] eine Petition [X] ||| 0.0182166 1 ||| 1-1 4-2 ||| 0.0833333
+, Mr Zimeray [X][X] [X] ||| , Herrn Zimeray [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.142157
+, Mr Zimeray , [X][X] [X] ||| , Herrn Zimeray , [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.142157
+[X][X] , [X][X] presented [X] ||| [X][X] , [X][X] eingereicht [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.158824
+Mr [X][X] presented [X] ||| Herrn [X][X] eingereicht [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+Mr Zimeray [X][X] presented [X] ||| Herrn Zimeray [X][X] eingereicht [X] ||| 0.0182166 1 ||| 2-2 ||| 0.1
+Mr Zimeray , [X][X] presented [X] ||| Herrn Zimeray , [X][X] eingereicht [X] ||| 0.0182166 1 ||| 3-3 ||| 0.1
+Zimeray [X][X] presented , [X] ||| Zimeray [X][X] eingereicht , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+Zimeray [X][X] , [X] ||| Zimeray [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+Zimeray , [X][X] presented , [X] ||| Zimeray , [X][X] eingereicht , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.125
+Zimeray , [X][X] , [X] ||| Zimeray , [X][X] , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.125
+, [X][X] presented , which [X] ||| , [X][X] eingereicht , die [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+, [X][X] presented [X][X] [X] ||| , [X][X] eingereicht [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.244444
+, [X][X] , which [X] ||| , [X][X] , die [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+, [X][X] which [X] ||| , [X][X] die [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+a petition [X][X] presented [X][X] [X] ||| [X][X] eine Petition eingereicht [X][X] von [X] ||| 0.0182166 1 ||| 2-0 4-4 ||| 0.111111
+[X][X] presented , which [X] ||| [X][X] eingereicht , die von [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25
+[X][X] presented [X][X] [X] ||| [X][X] eingereicht [X][X] von [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.25
+[X][X] , which [X] ||| [X][X] , die von [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25
+[X][X] has already been [X][X] [X] ||| wurde bereits [X][X] [X][X] von [X] ||| 0.0182166 1 ||| 0-2 4-3 ||| 0.111111
+signed , including myself [X] ||| , auch von mir selbst , unterzeichnet worden [X] ||| 0.0182166 1 ||| ||| 0.142857
+signed [X][X] myself [X] ||| [X][X] von mir selbst , unterzeichnet worden [X] ||| 0.00910828 1 ||| 1-0 ||| 0.285714
+signed [X][X] myself [X] ||| [X][X] mir selbst , unterzeichnet worden [X] ||| 0.00910828 1 ||| 1-0 ||| 0.285714
+signed [X][X] [X] ||| [X][X] , unterzeichnet worden [X] ||| 0.00910828 1 ||| 1-0 ||| 0.285714
+signed [X][X] [X] ||| [X][X] unterzeichnet worden [X] ||| 0.00910828 1 ||| 1-0 ||| 0.285714
+signed , [X][X] [X] ||| , [X][X] , unterzeichnet worden [X] ||| 0.00910828 1 ||| 2-1 ||| 0.285714
+signed , [X][X] [X] ||| , [X][X] unterzeichnet worden [X] ||| 0.00910828 1 ||| 2-1 ||| 0.285714
+people signed , including myself [X] ||| , auch von mir selbst , unterzeichnet worden [X] ||| 0.0182166 1 ||| ||| 0.0833333
+people signed [X][X] myself [X] ||| [X][X] von mir selbst , unterzeichnet worden [X] ||| 0.00910828 1 ||| 2-0 ||| 0.166667
+people signed [X][X] myself [X] ||| [X][X] mir selbst , unterzeichnet worden [X] ||| 0.00910828 1 ||| 2-0 ||| 0.166667
+people signed [X][X] [X] ||| [X][X] , unterzeichnet worden [X] ||| 0.00910828 1 ||| 2-0 ||| 0.166667
+people signed [X][X] [X] ||| [X][X] unterzeichnet worden [X] ||| 0.00910828 1 ||| 2-0 ||| 0.166667
+people signed , [X][X] [X] ||| , [X][X] , unterzeichnet worden [X] ||| 0.0182166 1 ||| 3-1 ||| 0.0833333
+[X][X] , [X][X] [X] ||| , [X][X] [X][X] [X] ||| 0.0121444 1 ||| 2-1 0-2 ||| 0.426471
+[X][X] , [X][X] [X] ||| , [X][X] , [X][X] [X] ||| 0.00607219 1 ||| 2-1 0-3 ||| 0.426471
+people signed , [X][X] [X] ||| , [X][X] unterzeichnet worden [X] ||| 0.0182166 1 ||| 3-1 ||| 0.0833333
+[X][X] , including myself [X] ||| , auch von mir selbst [X][X] [X] ||| 0.00910828 1 ||| 0-5 ||| 0.284314
+[X][X] , including myself [X] ||| , auch von mir selbst , [X][X] [X] ||| 0.00910828 1 ||| 0-6 ||| 0.284314
+[X][X] Mr Zimeray [X][X] [X] ||| [X][X] Herrn Zimeray [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0555556
+[X][X] Mr Zimeray , [X][X] [X] ||| [X][X] Herrn Zimeray , [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.0555556
+Member [X][X] Zimeray [X][X] [X] ||| Mitglieds [X][X] Zimeray [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0555556
+Member [X][X] Zimeray , [X][X] [X] ||| Mitglieds [X][X] Zimeray , [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0555556
+Member [X][X] , [X][X] [X] ||| Mitglieds [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0555556
+Member [X][X] a petition [X][X] [X] ||| Mitglieds [X][X] [X][X] eine Petition [X] ||| 0.0182166 1 ||| 1-1 4-2 ||| 0.0555556
+Member , [X][X] , [X][X] [X] ||| Mitglieds , [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0555556
+Member , Mr Zimeray [X][X] [X] ||| Mitglieds , Herrn Zimeray [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.0555556
+[X][X] Zimeray [X][X] presented [X] ||| [X][X] Zimeray [X][X] eingereicht [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0588235
+[X][X] Zimeray , [X][X] presented [X] ||| [X][X] Zimeray , [X][X] eingereicht [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0588235
+, [X][X] , [X][X] presented [X] ||| , [X][X] , [X][X] eingereicht [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0588235
+, Mr [X][X] presented [X] ||| , Herrn [X][X] eingereicht [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0588235
+, Mr Zimeray [X][X] presented [X] ||| , Herrn Zimeray [X][X] eingereicht [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0588235
+[X][X] , [X][X] presented , [X] ||| [X][X] , [X][X] eingereicht , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0769231
+Mr [X][X] presented , [X] ||| Herrn [X][X] eingereicht , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+Mr [X][X] , [X] ||| Herrn [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+Mr Zimeray [X][X] presented , [X] ||| Herrn Zimeray [X][X] eingereicht , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0769231
+Mr Zimeray [X][X] , [X] ||| Herrn Zimeray [X][X] , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0769231
+Mr Zimeray , [X][X] , [X] ||| Herrn Zimeray , [X][X] , [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0769231
+Zimeray [X][X] presented , which [X] ||| Zimeray [X][X] eingereicht , die [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+Zimeray [X][X] presented [X][X] [X] ||| Zimeray [X][X] eingereicht [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.132479
+Zimeray [X][X] , which [X] ||| Zimeray [X][X] , die [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+Zimeray [X][X] which [X] ||| Zimeray [X][X] die [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+Zimeray , [X][X] presented [X][X] [X] ||| Zimeray , [X][X] eingereicht [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.132479
+Zimeray , [X][X] , which [X] ||| Zimeray , [X][X] , die [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0769231
+Zimeray , [X][X] which [X] ||| Zimeray , [X][X] die [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0769231
+, [X][X] presented , which [X] ||| , [X][X] eingereicht , die von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+, [X][X] presented [X][X] [X] ||| , [X][X] eingereicht [X][X] von [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0833333
+, [X][X] , which [X] ||| , [X][X] , die von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+, [X][X] which [X] ||| , [X][X] die von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+, [X][X] [X] ||| , [X][X] von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+[X][X] presented , which many [X] ||| [X][X] eingereicht , die von vielen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.133333
+[X][X] presented [X][X] many [X] ||| [X][X] eingereicht [X][X] von vielen [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.266666
+[X][X] presented [X][X] many [X] ||| [X][X] eingereicht [X][X] vielen [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.266666
+[X][X] presented , [X][X] [X] ||| [X][X] eingereicht , [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.183333
+[X][X] , which many [X] ||| [X][X] , die von vielen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.133333
+[X][X] presented [X][X] many people [X] ||| [X][X] eingereicht [X][X] von vielen [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.1
+[X][X] presented [X][X] many people [X] ||| [X][X] eingereicht [X][X] vielen [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.1
+[X][X] presented [X][X] people [X] ||| [X][X] eingereicht [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.05
+[X][X] presented , [X][X] people [X] ||| [X][X] eingereicht , [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.05
+[X][X] presented , which [X][X] [X] ||| [X][X] eingereicht , die [X][X] [X] ||| 0.00910828 1 ||| 0-0 4-4 ||| 0.1
+[X][X] presented , which [X][X] [X] ||| [X][X] eingereicht , die von [X][X] [X] ||| 0.00910828 1 ||| 0-0 4-5 ||| 0.1
+[X][X] , which many people [X] ||| [X][X] , die von vielen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.05
+[X][X] , [X][X] people [X] ||| [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.05
+[X][X] , which [X][X] [X] ||| [X][X] , die [X][X] [X] ||| 0.00910828 1 ||| 0-0 3-3 ||| 0.1
+[X][X] , which [X][X] [X] ||| [X][X] , die von [X][X] [X] ||| 0.00910828 1 ||| 0-0 3-4 ||| 0.1
+[X][X] signed , including myself [X] ||| [X][X] , auch von mir selbst , unterzeichnet worden [X] ||| 0.0182166 1 ||| 0-0 ||| 0.087037
+[X][X] signed [X][X] myself [X] ||| [X][X] [X][X] von mir selbst , unterzeichnet worden [X] ||| 0.00910828 1 ||| 0-0 2-1 ||| 0.174074
+[X][X] signed [X][X] myself [X] ||| [X][X] [X][X] mir selbst , unterzeichnet worden [X] ||| 0.00910828 1 ||| 0-0 2-1 ||| 0.174074
+[X][X] signed [X][X] [X] ||| [X][X] [X][X] , unterzeichnet worden [X] ||| 0.00910828 1 ||| 0-0 2-1 ||| 0.174074
+[X][X] signed [X][X] [X] ||| [X][X] [X][X] unterzeichnet worden [X] ||| 0.00910828 1 ||| 0-0 2-1 ||| 0.174074
+[X][X] signed , [X][X] [X] ||| [X][X] , [X][X] , unterzeichnet worden [X] ||| 0.00910828 1 ||| 0-0 3-2 ||| 0.174074
+[X][X] signed , [X][X] [X] ||| [X][X] , [X][X] unterzeichnet worden [X] ||| 0.00910828 1 ||| 0-0 3-2 ||| 0.174074
+many people signed [X][X] myself [X] ||| vielen [X][X] von mir selbst , unterzeichnet worden [X] ||| 0.00910828 1 ||| 3-1 ||| 0.1
+many people signed [X][X] myself [X] ||| vielen [X][X] mir selbst , unterzeichnet worden [X] ||| 0.00910828 1 ||| 3-1 ||| 0.1
+many people signed [X][X] [X] ||| vielen [X][X] , unterzeichnet worden [X] ||| 0.00910828 1 ||| 3-1 ||| 0.1
+many people signed [X][X] [X] ||| vielen [X][X] unterzeichnet worden [X] ||| 0.00910828 1 ||| 3-1 ||| 0.1
+many people [X][X] [X] ||| vielen [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.087037
+many [X][X] [X] ||| vielen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.087037
+many people signed , [X][X] [X] ||| vielen , [X][X] , unterzeichnet worden [X] ||| 0.0182166 1 ||| 4-2 ||| 0.05
+many [X][X] , [X][X] [X] ||| vielen , [X][X] [X][X] [X] ||| 0.0121444 1 ||| 3-2 1-3 ||| 0.261111
+many [X][X] , [X][X] [X] ||| vielen , [X][X] , [X][X] [X] ||| 0.00607219 1 ||| 3-2 1-4 ||| 0.261111
+many people signed , [X][X] [X] ||| vielen , [X][X] unterzeichnet worden [X] ||| 0.0182166 1 ||| 4-2 ||| 0.05
+many [X][X] , including myself [X] ||| vielen , auch von mir selbst [X][X] [X] ||| 0.00910828 1 ||| 1-6 ||| 0.174074
+many [X][X] , including myself [X] ||| vielen , auch von mir selbst , [X][X] [X] ||| 0.00910828 1 ||| 1-7 ||| 0.174074
+signed , including myself [X] ||| , auch von mir selbst , unterzeichnet worden ist [X] ||| 0.0182166 1 ||| ||| 0.142857
+signed [X][X] myself [X] ||| [X][X] von mir selbst , unterzeichnet worden ist [X] ||| 0.00910828 1 ||| 1-0 ||| 0.285714
+signed [X][X] myself [X] ||| [X][X] mir selbst , unterzeichnet worden ist [X] ||| 0.00910828 1 ||| 1-0 ||| 0.285714
+signed [X][X] [X] ||| [X][X] , unterzeichnet worden ist [X] ||| 0.00910828 1 ||| 1-0 ||| 0.285714
+signed [X][X] [X] ||| [X][X] unterzeichnet worden ist [X] ||| 0.00910828 1 ||| 1-0 ||| 0.285714
+signed , [X][X] [X] ||| , [X][X] , unterzeichnet worden ist [X] ||| 0.00910828 1 ||| 2-1 ||| 0.285714
+signed , [X][X] [X] ||| , [X][X] unterzeichnet worden ist [X] ||| 0.00910828 1 ||| 2-1 ||| 0.285714
+people signed , including myself [X] ||| , auch von mir selbst , unterzeichnet worden ist [X] ||| 0.0182166 1 ||| ||| 0.0588235
+people signed [X][X] myself [X] ||| [X][X] von mir selbst , unterzeichnet worden ist [X] ||| 0.00910828 1 ||| 2-0 ||| 0.117647
+people signed [X][X] myself [X] ||| [X][X] mir selbst , unterzeichnet worden ist [X] ||| 0.00910828 1 ||| 2-0 ||| 0.117647
+people signed [X][X] [X] ||| [X][X] , unterzeichnet worden ist [X] ||| 0.00910828 1 ||| 2-0 ||| 0.117647
+people signed [X][X] [X] ||| [X][X] unterzeichnet worden ist [X] ||| 0.00910828 1 ||| 2-0 ||| 0.117647
+people signed , [X][X] [X] ||| , [X][X] , unterzeichnet worden ist [X] ||| 0.0182166 1 ||| 3-1 ||| 0.0588235
+[X][X] , [X][X] [X] ||| , [X][X] [X][X] ist [X] ||| 0.0121444 1 ||| 2-1 0-2 ||| 0.176471
+[X][X] , [X][X] [X] ||| , [X][X] , [X][X] ist [X] ||| 0.00607219 1 ||| 2-1 0-3 ||| 0.176471
+people signed , [X][X] [X] ||| , [X][X] unterzeichnet worden ist [X] ||| 0.0182166 1 ||| 3-1 ||| 0.0588235
+[X][X] , including myself [X] ||| , auch von mir selbst [X][X] ist [X] ||| 0.00910828 1 ||| 0-5 ||| 0.117647
+[X][X] , including myself [X] ||| , auch von mir selbst , [X][X] ist [X] ||| 0.00910828 1 ||| 0-6 ||| 0.117647
+Zimeray [X][X] presented , which [X] ||| Zimeray [X][X] eingereicht , die von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+Zimeray [X][X] presented [X][X] [X] ||| Zimeray [X][X] eingereicht [X][X] von [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0555556
+Zimeray [X][X] , which [X] ||| Zimeray [X][X] , die von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+Zimeray [X][X] which [X] ||| Zimeray [X][X] die von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+Zimeray [X][X] [X] ||| Zimeray [X][X] von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+Zimeray , [X][X] presented [X][X] [X] ||| Zimeray , [X][X] eingereicht [X][X] von [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0555556
+Zimeray , [X][X] , which [X] ||| Zimeray , [X][X] , die von [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0555556
+Zimeray , [X][X] which [X] ||| Zimeray , [X][X] die von [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0555556
+Zimeray , [X][X] [X] ||| Zimeray , [X][X] von [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0555556
+, [X][X] presented [X][X] many [X] ||| , [X][X] eingereicht [X][X] von vielen [X] ||| 0.00910828 1 ||| 1-1 3-3 ||| 0.1
+, [X][X] presented [X][X] many [X] ||| , [X][X] eingereicht [X][X] vielen [X] ||| 0.00910828 1 ||| 1-1 3-3 ||| 0.1
+, [X][X] presented , [X][X] [X] ||| , [X][X] eingereicht , [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.05
+, [X][X] , which many [X] ||| , [X][X] , die von vielen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.05
+, [X][X] which many [X] ||| , [X][X] die von vielen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.05
+, [X][X] many [X] ||| , [X][X] von vielen [X] ||| 0.00910828 1 ||| 1-1 ||| 0.1
+, [X][X] many [X] ||| , [X][X] vielen [X] ||| 0.00910828 1 ||| 1-1 ||| 0.1
+[X][X] signed , including myself [X] ||| von [X][X] , auch von mir selbst , unterzeichnet worden [X] ||| 0.0182166 1 ||| 0-1 ||| 0.037037
+[X][X] signed [X][X] myself [X] ||| von [X][X] [X][X] von mir selbst , unterzeichnet worden [X] ||| 0.00910828 1 ||| 0-1 2-2 ||| 0.074074
+[X][X] signed [X][X] myself [X] ||| von [X][X] [X][X] mir selbst , unterzeichnet worden [X] ||| 0.00910828 1 ||| 0-1 2-2 ||| 0.074074
+[X][X] signed [X][X] [X] ||| von [X][X] [X][X] , unterzeichnet worden [X] ||| 0.00910828 1 ||| 0-1 2-2 ||| 0.074074
+[X][X] signed [X][X] [X] ||| von [X][X] [X][X] unterzeichnet worden [X] ||| 0.00910828 1 ||| 0-1 2-2 ||| 0.074074
+[X][X] signed , [X][X] [X] ||| von [X][X] , [X][X] , unterzeichnet worden [X] ||| 0.00910828 1 ||| 0-1 3-3 ||| 0.074074
+[X][X] signed , [X][X] [X] ||| von [X][X] , [X][X] unterzeichnet worden [X] ||| 0.00910828 1 ||| 0-1 3-3 ||| 0.074074
+many people signed [X][X] myself [X] ||| von vielen [X][X] von mir selbst , unterzeichnet worden [X] ||| 0.00910828 1 ||| 3-2 ||| 0.074074
+many people signed [X][X] myself [X] ||| von vielen [X][X] mir selbst , unterzeichnet worden [X] ||| 0.00910828 1 ||| 3-2 ||| 0.074074
+many people signed [X][X] [X] ||| von vielen [X][X] , unterzeichnet worden [X] ||| 0.00910828 1 ||| 3-2 ||| 0.074074
+many people signed [X][X] [X] ||| von vielen [X][X] unterzeichnet worden [X] ||| 0.00910828 1 ||| 3-2 ||| 0.074074
+many people [X][X] [X] ||| von vielen [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.037037
+many [X][X] [X] ||| von vielen [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.037037
+many people signed , [X][X] [X] ||| von vielen , [X][X] , unterzeichnet worden [X] ||| 0.0182166 1 ||| 4-3 ||| 0.037037
+many [X][X] , [X][X] [X] ||| von vielen , [X][X] [X][X] [X] ||| 0.0121444 1 ||| 3-3 1-4 ||| 0.111111
+many [X][X] , [X][X] [X] ||| von vielen , [X][X] , [X][X] [X] ||| 0.00607218 1 ||| 3-3 1-5 ||| 0.111111
+many people signed , [X][X] [X] ||| von vielen , [X][X] unterzeichnet worden [X] ||| 0.0182166 1 ||| 4-3 ||| 0.037037
+many [X][X] , including myself [X] ||| von vielen , auch von mir selbst [X][X] [X] ||| 0.00910828 1 ||| 1-7 ||| 0.074074
+many [X][X] , including myself [X] ||| von vielen , auch von mir selbst , [X][X] [X] ||| 0.00910828 1 ||| 1-8 ||| 0.074074
+[X][X] signed , including myself [X] ||| [X][X] , auch von mir selbst , unterzeichnet worden ist [X] ||| 0.0182166 1 ||| 0-0 ||| 0.037037
+[X][X] signed [X][X] myself [X] ||| [X][X] [X][X] von mir selbst , unterzeichnet worden ist [X] ||| 0.00910828 1 ||| 0-0 2-1 ||| 0.074074
+[X][X] signed [X][X] myself [X] ||| [X][X] [X][X] mir selbst , unterzeichnet worden ist [X] ||| 0.00910828 1 ||| 0-0 2-1 ||| 0.074074
+[X][X] signed [X][X] [X] ||| [X][X] [X][X] , unterzeichnet worden ist [X] ||| 0.00910828 1 ||| 0-0 2-1 ||| 0.074074
+[X][X] signed [X][X] [X] ||| [X][X] [X][X] unterzeichnet worden ist [X] ||| 0.00910828 1 ||| 0-0 2-1 ||| 0.074074
+[X][X] signed , [X][X] [X] ||| [X][X] , [X][X] , unterzeichnet worden ist [X] ||| 0.00910828 1 ||| 0-0 3-2 ||| 0.074074
+[X][X] signed , [X][X] [X] ||| [X][X] , [X][X] unterzeichnet worden ist [X] ||| 0.00910828 1 ||| 0-0 3-2 ||| 0.074074
+many people signed [X][X] myself [X] ||| vielen [X][X] von mir selbst , unterzeichnet worden ist [X] ||| 0.00910828 1 ||| 3-1 ||| 0.074074
+many people signed [X][X] myself [X] ||| vielen [X][X] mir selbst , unterzeichnet worden ist [X] ||| 0.00910828 1 ||| 3-1 ||| 0.074074
+many people signed [X][X] [X] ||| vielen [X][X] , unterzeichnet worden ist [X] ||| 0.00910828 1 ||| 3-1 ||| 0.074074
+many people signed [X][X] [X] ||| vielen [X][X] unterzeichnet worden ist [X] ||| 0.00910828 1 ||| 3-1 ||| 0.074074
+many people [X][X] [X] ||| vielen [X][X] ist [X] ||| 0.0182166 1 ||| 2-1 ||| 0.037037
+many [X][X] [X] ||| vielen [X][X] ist [X] ||| 0.0182166 1 ||| 1-1 ||| 0.037037
+many people signed , [X][X] [X] ||| vielen , [X][X] , unterzeichnet worden ist [X] ||| 0.0182166 1 ||| 4-2 ||| 0.037037
+many [X][X] , [X][X] [X] ||| vielen , [X][X] [X][X] ist [X] ||| 0.0121444 1 ||| 3-2 1-3 ||| 0.111111
+many [X][X] , [X][X] [X] ||| vielen , [X][X] , [X][X] ist [X] ||| 0.00607218 1 ||| 3-2 1-4 ||| 0.111111
+many people signed , [X][X] [X] ||| vielen , [X][X] unterzeichnet worden ist [X] ||| 0.0182166 1 ||| 4-2 ||| 0.037037
+many [X][X] , including myself [X] ||| vielen , auch von mir selbst [X][X] ist [X] ||| 0.00910828 1 ||| 1-6 ||| 0.074074
+many [X][X] , including myself [X] ||| vielen , auch von mir selbst , [X][X] ist [X] ||| 0.00910828 1 ||| 1-7 ||| 0.074074
+signed , including myself . [X] ||| , auch von mir selbst , unterzeichnet worden ist . [X] ||| 0.0182166 1 ||| ||| 0.111111
+signed [X][X] myself . [X] ||| [X][X] von mir selbst , unterzeichnet worden ist . [X] ||| 0.00910828 1 ||| 1-0 ||| 0.222222
+signed [X][X] myself . [X] ||| [X][X] mir selbst , unterzeichnet worden ist . [X] ||| 0.00910828 1 ||| 1-0 ||| 0.222222
+signed [X][X] . [X] ||| [X][X] , unterzeichnet worden ist . [X] ||| 0.00910828 1 ||| 1-0 ||| 0.222222
+signed [X][X] . [X] ||| [X][X] unterzeichnet worden ist . [X] ||| 0.00910828 1 ||| 1-0 ||| 0.222222
+[X][X] . [X] ||| [X][X] ist . [X] ||| 0.00910828 1 ||| 0-0 ||| 0.322222
+[X][X] . [X] ||| [X][X] . [X] ||| 0.00910828 1 ||| 0-0 ||| 0.322222
+signed , [X][X] . [X] ||| , [X][X] , unterzeichnet worden ist . [X] ||| 0.00910828 1 ||| 2-1 ||| 0.222222
+signed , [X][X] . [X] ||| , [X][X] unterzeichnet worden ist . [X] ||| 0.00910828 1 ||| 2-1 ||| 0.222222
+people signed [X][X] myself . [X] ||| [X][X] von mir selbst , unterzeichnet worden ist . [X] ||| 0.00910828 1 ||| 2-0 ||| 0.1
+people signed [X][X] myself . [X] ||| [X][X] mir selbst , unterzeichnet worden ist . [X] ||| 0.00910828 1 ||| 2-0 ||| 0.1
+people signed [X][X] . [X] ||| [X][X] , unterzeichnet worden ist . [X] ||| 0.00910828 1 ||| 2-0 ||| 0.1
+people signed [X][X] . [X] ||| [X][X] unterzeichnet worden ist . [X] ||| 0.00910828 1 ||| 2-0 ||| 0.1
+people [X][X] . [X] ||| [X][X] ist . [X] ||| 0.00910828 1 ||| 1-0 ||| 0.1
+people [X][X] . [X] ||| [X][X] . [X] ||| 0.00910828 1 ||| 1-0 ||| 0.1
+people signed , [X][X] . [X] ||| , [X][X] , unterzeichnet worden ist . [X] ||| 0.0182166 1 ||| 3-1 ||| 0.05
+[X][X] , [X][X] . [X] ||| , [X][X] [X][X] ist . [X] ||| 0.00607219 1 ||| 2-1 0-2 ||| 0.3
+[X][X] , [X][X] . [X] ||| , [X][X] [X][X] . [X] ||| 0.00607219 1 ||| 2-1 0-2 ||| 0.3
+[X][X] , [X][X] . [X] ||| , [X][X] , [X][X] ist . [X] ||| 0.00303609 1 ||| 2-1 0-3 ||| 0.3
+[X][X] , [X][X] . [X] ||| , [X][X] , [X][X] . [X] ||| 0.00303609 1 ||| 2-1 0-3 ||| 0.3
+people signed , [X][X] . [X] ||| , [X][X] unterzeichnet worden ist . [X] ||| 0.0182166 1 ||| 3-1 ||| 0.05
+[X][X] , including myself . [X] ||| , auch von mir selbst [X][X] ist . [X] ||| 0.00455414 1 ||| 0-5 ||| 0.2
+[X][X] , including myself . [X] ||| , auch von mir selbst [X][X] . [X] ||| 0.00455414 1 ||| 0-5 ||| 0.2
+[X][X] , including myself . [X] ||| , auch von mir selbst , [X][X] ist . [X] ||| 0.00455414 1 ||| 0-6 ||| 0.2
+[X][X] , including myself . [X] ||| , auch von mir selbst , [X][X] . [X] ||| 0.00455414 1 ||| 0-6 ||| 0.2
+in accordance with [X] ||| gemäß [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| der [X] ||| 0.315522 1 ||| ||| 3
+by the [X] ||| vom [X] ||| 0.0182166 1 ||| ||| 1
+European [X] ||| Europäischen [X] ||| 0.218091 1 ||| ||| 2
+Parliament [X] ||| Parlament [X] ||| 0.0182166 1 ||| ||| 1
+and [X] ||| und [X] ||| 0.443548 1 ||| ||| 4
+by [X] ||| von [X] ||| 0.0182166 1 ||| ||| 1
+whole [X] ||| gesamten [X] ||| 0.0182166 1 ||| ||| 1
+whole of [X] ||| gesamten [X] ||| 0.0182166 1 ||| ||| 1
+whole of the [X] ||| gesamten [X] ||| 0.0182166 1 ||| ||| 1
+the European [X] ||| Europäischen [X] ||| 0.0182166 1 ||| ||| 1
+of the European [X] ||| Europäischen [X] ||| 0.0182166 1 ||| ||| 1
+Community [X] ||| Union [X] ||| 0.0182166 1 ||| ||| 1
+now [X] ||| nunmehr [X] ||| 0.0182166 1 ||| ||| 1
+constantly [X] ||| ständig [X] ||| 0.0182166 1 ||| ||| 1
+would [X] ||| möchte [X] ||| 0.0182166 1 ||| ||| 1
+I [X] ||| ich [X] ||| 0.0182166 1 ||| ||| 1
+you [X] ||| Sie [X] ||| 0.218091 1 ||| ||| 2
+ask [X] ||| bitten [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| , [X] ||| 0.443548 1 ||| ||| 5
+, using [X] ||| , [X] ||| 0.0182166 1 ||| ||| 1
+representations , [X] ||| , [X] ||| 0.0182166 1 ||| ||| 1
+representations , using [X] ||| , [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| den [X] ||| 0.0182166 1 ||| ||| 1
+using the [X] ||| den [X] ||| 0.0182166 1 ||| ||| 1
+of your [X] ||| Ihres [X] ||| 0.0182166 1 ||| ||| 1
+prestigious office [X] ||| Amtes [X] ||| 0.0182166 1 ||| ||| 1
+institution [X] ||| Institution [X] ||| 0.0182166 1 ||| ||| 1
+represent [X] ||| vertreten [X] ||| 0.0182166 1 ||| ||| 1
+to [X] ||| bei [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| dem [X] ||| 0.0182166 1 ||| ||| 1
+President [X] ||| Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| ||| 1
+and to [X] ||| und [X] ||| 0.0182166 1 ||| ||| 1
+and to the [X] ||| und [X] ||| 0.0182166 1 ||| ||| 1
+Governor [X] ||| Gouverneur [X] ||| 0.0182166 1 ||| ||| 1
+the Governor [X] ||| Gouverneur [X] ||| 0.0182166 1 ||| ||| 1
+to the Governor [X] ||| Gouverneur [X] ||| 0.0182166 1 ||| ||| 1
+of [X] ||| von [X] ||| 0.0182166 1 ||| ||| 1
+Bush [X] ||| Bush [X] ||| 0.0182166 1 ||| ||| 1
+who [X] ||| der [X] ||| 0.0182166 1 ||| ||| 1
+to order [X] ||| zur [X] ||| 0.0182166 1 ||| ||| 1
+power to order [X] ||| zur [X] ||| 0.0182166 1 ||| ||| 1
+the power to order [X] ||| zur [X] ||| 0.0182166 1 ||| ||| 1
+stay [X] ||| Aussetzung [X] ||| 0.0182166 1 ||| ||| 1
+to [X] ||| zur [X] ||| 0.0182166 1 ||| ||| 1
+reprieve [X] ||| Begnadigung [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| des [X] ||| 0.0182166 1 ||| ||| 1
+condemned person [X] ||| Verurteilten [X] ||| 0.0182166 1 ||| ||| 1
+has [X] ||| befugt [X] ||| 0.0182166 1 ||| ||| 1
+has the [X] ||| befugt [X] ||| 0.0182166 1 ||| ||| 1
+has the power [X] ||| befugt [X] ||| 0.0182166 1 ||| ||| 1
+is [X] ||| ist [X] ||| 0.0182166 1 ||| ||| 1
+which is [X] ||| ist [X] ||| 0.0182166 1 ||| ||| 1
+to [X] ||| zu [X] ||| 0.0182166 1 ||| ||| 1
+make [X] ||| machen [X] ||| 0.0182166 1 ||| ||| 1
+make representations [X] ||| machen [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+in accordance with the [X] ||| gemäß der [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] the [X] ||| [X][X] der [X] ||| 0.218091 1 ||| 0-0 ||| 1.7733
+by the European [X] ||| vom Europäischen [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] European [X] ||| [X][X] Europäischen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.964405
+European Parliament [X] ||| Europäischen Parlament [X] ||| 0.0182166 1 ||| ||| 1
+Parliament and [X] ||| Parlament und [X] ||| 0.0182166 1 ||| ||| 1
+and by [X] ||| und von [X] ||| 0.0182166 1 ||| ||| 1
+by the [X] ||| von der [X] ||| 0.0182166 1 ||| ||| 1
+the whole [X] ||| der gesamten [X] ||| 0.0182166 1 ||| ||| 1
+the whole of [X] ||| der gesamten [X] ||| 0.0182166 1 ||| ||| 0.5
+the [X][X] [X] ||| der [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.43085
+the whole of the [X] ||| der gesamten [X] ||| 0.0182166 1 ||| ||| 0.333333
+the [X][X] the [X] ||| der [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+whole of the European [X] ||| gesamten Europäischen [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] the European [X] ||| [X][X] Europäischen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.464405
+whole of [X][X] [X] ||| gesamten [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.311111
+whole [X][X] [X] ||| gesamten [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.311111
+European Community [X] ||| Europäischen Union [X] ||| 0.0182166 1 ||| ||| 1
+the European Community [X] ||| Europäischen Union [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] Community [X] ||| [X][X] Union [X] ||| 0.218091 1 ||| 0-0 ||| 1.12009
+of the European Community [X] ||| Europäischen Union [X] ||| 0.0182166 1 ||| ||| 0.333333
+of [X][X] Community [X] ||| [X][X] Union [X] ||| 0.0182166 1 ||| 1-0 ||| 0.333333
+now constantly [X] ||| nunmehr ständig [X] ||| 0.0182166 1 ||| ||| 1
+I would [X] ||| möchte ich [X] ||| 0.0182166 1 ||| ||| 1
+, using the [X] ||| , den [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] the [X] ||| [X][X] den [X] ||| 0.0182166 1 ||| 0-0 ||| 0.533333
+, [X][X] [X] ||| , [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.84916
+representations , using the [X] ||| , den [X] ||| 0.0182166 1 ||| ||| 0.2
+representations [X][X] the [X] ||| [X][X] den [X] ||| 0.0182166 1 ||| 1-0 ||| 0.2
+[X][X] using the [X] ||| [X][X] den [X] ||| 0.0182166 1 ||| 0-0 ||| 0.2
+representations , [X][X] [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.44368
+weight [X] ||| ganzen Einfluß [X] ||| 0.0182166 1 ||| ||| 1
+of your prestigious office [X] ||| Ihres Amtes [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] prestigious office [X] ||| [X][X] Amtes [X] ||| 0.0182166 1 ||| 0-0 ||| 0.853521
+of your [X][X] [X] ||| Ihres [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.925613
+prestigious office and [X] ||| Amtes und [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] and [X] ||| [X][X] und [X] ||| 0.443548 1 ||| 0-0 ||| 3.62111
+and the [X] ||| und der [X] ||| 0.0182166 1 ||| ||| 1
+the institution [X] ||| der Institution [X] ||| 0.0182166 1 ||| ||| 1
+institution [X] ||| Institution , [X] ||| 0.0182166 1 ||| ||| 1
+you [X] ||| die Sie [X] ||| 0.0182166 1 ||| ||| 1
+you represent [X] ||| Sie vertreten [X] ||| 0.0182166 1 ||| ||| 1
+represent , [X] ||| vertreten , [X] ||| 0.0182166 1 ||| ||| 1
+, to [X] ||| , bei [X] ||| 0.0182166 1 ||| ||| 1
+to the [X] ||| bei dem [X] ||| 0.0182166 1 ||| ||| 1
+the President [X] ||| dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| ||| 1
+President and [X] ||| Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| ||| 1
+President and to [X] ||| Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| ||| 0.5
+President [X][X] [X] ||| Präsidentschaftskandidaten [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.096
+President and to the [X] ||| Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| ||| 0.333333
+President [X][X] the [X] ||| Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+and to the Governor [X] ||| und Gouverneur [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] the Governor [X] ||| [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-0 ||| 0.503341
+[X][X] Governor [X] ||| [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-0 ||| 0.503341
+and to [X][X] [X] ||| und [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.463709
+and [X][X] [X] ||| und [X][X] [X] ||| 0.315522 1 ||| 1-1 ||| 2.77896
+Governor of [X] ||| Gouverneur von [X] ||| 0.0182166 1 ||| ||| 1
+the Governor of [X] ||| Gouverneur von [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] of [X] ||| [X][X] von [X] ||| 0.218091 1 ||| 0-0 ||| 1.12009
+to the Governor of [X] ||| Gouverneur von [X] ||| 0.0182166 1 ||| ||| 0.333333
+to [X][X] of [X] ||| [X][X] von [X] ||| 0.0182166 1 ||| 1-0 ||| 0.333333
+Bush , [X] ||| Bush , [X] ||| 0.0182166 1 ||| ||| 1
+, who [X] ||| , der [X] ||| 0.0182166 1 ||| ||| 1
+and to [X] ||| und zur [X] ||| 0.0182166 1 ||| ||| 1
+to reprieve [X] ||| zur Begnadigung [X] ||| 0.0182166 1 ||| ||| 1
+reprieve the [X] ||| Begnadigung des [X] ||| 0.0182166 1 ||| ||| 1
+the condemned person [X] ||| des Verurteilten [X] ||| 0.0182166 1 ||| ||| 0.5
+the [X][X] [X] ||| des [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.5
+, [X] ||| , geltend [X] ||| 0.0182166 1 ||| ||| 1
+to [X] ||| geltend zu [X] ||| 0.0182166 1 ||| ||| 1
+to make [X] ||| zu machen [X] ||| 0.0182166 1 ||| ||| 1
+to make representations [X] ||| zu machen [X] ||| 0.0182166 1 ||| ||| 0.5
+to [X][X] [X] ||| zu [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.5
+by the European Parliament [X] ||| vom Europäischen Parlament [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] European Parliament [X] ||| [X][X] Europäischen Parlament [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25
+[X][X] Parliament [X] ||| [X][X] Parlament [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25
+by the [X][X] [X] ||| vom [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.586951
+European Parliament and [X] ||| Europäischen Parlament und [X] ||| 0.0182166 1 ||| ||| 0.333333
+European [X][X] [X] ||| Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.751917
+Parliament and by [X] ||| Parlament und von [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] by [X] ||| [X][X] von [X] ||| 0.0182166 1 ||| 0-0 ||| 0.571429
+Parliament [X][X] [X] ||| Parlament [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.744877
+and by the [X] ||| und von der [X] ||| 0.0182166 1 ||| ||| 0.333333
+by the whole [X] ||| von der gesamten [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] whole [X] ||| [X][X] gesamten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.679255
+by [X][X] [X] ||| von [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.778691
+by the whole of [X] ||| von der gesamten [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] whole of [X] ||| [X][X] gesamten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.420682
+by [X][X] of [X] ||| von [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.2
+by the [X][X] [X] ||| von der [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.445357
+by the whole of the [X] ||| von der gesamten [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] whole of the [X] ||| [X][X] gesamten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.327435
+by [X][X] of the [X] ||| von [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+by [X][X] the [X] ||| von [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+by the [X][X] the [X] ||| von der [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.142857
+the whole of the European [X] ||| der gesamten Europäischen [X] ||| 0.0182166 1 ||| ||| 0.111111
+[X][X] of the European [X] ||| [X][X] Europäischen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.264405
+the [X][X] the European [X] ||| der [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+the [X][X] European [X] ||| der [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+the whole of [X][X] [X] ||| der gesamten [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.177778
+the whole [X][X] [X] ||| der gesamten [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.177778
+whole of the European Community [X] ||| gesamten Europäischen Union [X] ||| 0.0182166 1 ||| ||| 0.111111
+[X][X] the European Community [X] ||| [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 0-0 ||| 0.286753
+[X][X] European Community [X] ||| [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 0-0 ||| 0.286753
+whole of [X][X] Community [X] ||| gesamten [X][X] Union [X] ||| 0.0182166 1 ||| 2-1 ||| 0.111111
+whole [X][X] Community [X] ||| gesamten [X][X] Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+whole of the [X][X] [X] ||| gesamten [X][X] [X] ||| 0.0182166 1 ||| 3-1 ||| 0.111111
+the weight [X] ||| den ganzen Einfluß [X] ||| 0.0182166 1 ||| ||| 1
+using the weight [X] ||| den ganzen Einfluß [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] weight [X] ||| [X][X] ganzen Einfluß [X] ||| 0.0182166 1 ||| 0-0 ||| 0.777778
+weight of your [X] ||| ganzen Einfluß Ihres [X] ||| 0.0182166 1 ||| ||| 0.5
+weight [X][X] [X] ||| ganzen Einfluß [X][X] [X] ||| 0.218091 1 ||| 1-2 ||| 1.11887
+of your prestigious office and [X] ||| Ihres Amtes und [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] prestigious office and [X] ||| [X][X] Amtes und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.594223
+of your [X][X] and [X] ||| Ihres [X][X] und [X] ||| 0.0182166 1 ||| 2-1 ||| 0.2
+prestigious office and the [X] ||| Amtes und der [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] and the [X] ||| [X][X] und der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.634774
+prestigious office [X][X] [X] ||| Amtes [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.650052
+and the institution [X] ||| und der Institution [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] institution [X] ||| [X][X] Institution [X] ||| 0.0182166 1 ||| 0-0 ||| 0.698333
+the institution [X] ||| der Institution , [X] ||| 0.0182166 1 ||| ||| 1
+institution [X] ||| Institution , die [X] ||| 0.0182166 1 ||| ||| 1
+you [X] ||| , die Sie [X] ||| 0.0182166 1 ||| ||| 1
+you represent [X] ||| die Sie vertreten [X] ||| 0.0182166 1 ||| ||| 1
+you represent , [X] ||| Sie vertreten , [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] , [X] ||| [X][X] , [X] ||| 0.218091 1 ||| 0-0 ||| 1.71377
+you [X][X] [X] ||| Sie [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.746911
+represent , to [X] ||| vertreten , bei [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] to [X] ||| [X][X] bei [X] ||| 0.0182166 1 ||| 0-0 ||| 0.849944
+represent [X][X] [X] ||| vertreten [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.751917
+, to the [X] ||| , bei dem [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] the [X] ||| [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 ||| 0.780024
+to the President [X] ||| bei dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] President [X] ||| [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.747765
+to [X][X] [X] ||| bei [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.745495
+the President and [X] ||| dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| ||| 0.333333
+the [X][X] [X] ||| dem [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.817152
+the President and to [X] ||| dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] and to [X] ||| [X][X] und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.461445
+the [X][X] to [X] ||| dem [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.2
+the President [X][X] [X] ||| dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.483819
+the President and to the [X] ||| dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] and to the [X] ||| [X][X] und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.36457
+the [X][X] to the [X] ||| dem [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+the [X][X] the [X] ||| dem [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+the President [X][X] the [X] ||| dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.142857
+President and to the Governor [X] ||| Präsidentschaftskandidaten und Gouverneur [X] ||| 0.0182166 1 ||| ||| 0.111111
+[X][X] to the Governor [X] ||| [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-0 ||| 0.303341
+President [X][X] the Governor [X] ||| Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+President [X][X] Governor [X] ||| Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+President and to [X][X] [X] ||| Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.262667
+President and [X][X] [X] ||| Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.262667
+and to the Governor of [X] ||| und Gouverneur von [X] ||| 0.0182166 1 ||| ||| 0.111111
+[X][X] the Governor of [X] ||| [X][X] Gouverneur von [X] ||| 0.0182166 1 ||| 0-0 ||| 0.286753
+[X][X] Governor of [X] ||| [X][X] Gouverneur von [X] ||| 0.0182166 1 ||| 0-0 ||| 0.286753
+and to [X][X] of [X] ||| und [X][X] von [X] ||| 0.0182166 1 ||| 2-1 ||| 0.111111
+and [X][X] of [X] ||| und [X][X] von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+and to the [X][X] [X] ||| und [X][X] [X] ||| 0.0182166 1 ||| 3-1 ||| 0.263709
+Bush , who [X] ||| Bush , der [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] who [X] ||| [X][X] der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.753175
+Bush [X][X] [X] ||| Bush [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+and to reprieve [X] ||| und zur Begnadigung [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] reprieve [X] ||| [X][X] Begnadigung [X] ||| 0.0182166 1 ||| 0-0 ||| 0.758333
+to reprieve the [X] ||| zur Begnadigung des [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] the [X] ||| [X][X] des [X] ||| 0.0182166 1 ||| 0-0 ||| 0.688034
+to [X][X] [X] ||| zur [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.458333
+reprieve the condemned person [X] ||| Begnadigung des Verurteilten [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] condemned person [X] ||| [X][X] Verurteilten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.513095
+reprieve [X][X] [X] ||| Begnadigung [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+reprieve the [X][X] [X] ||| Begnadigung des [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.25
+, to [X] ||| , geltend zu [X] ||| 0.0182166 1 ||| ||| 1
+to make [X] ||| geltend zu machen [X] ||| 0.0182166 1 ||| ||| 1
+to make representations [X] ||| geltend zu machen [X] ||| 0.0182166 1 ||| ||| 0.5
+to [X][X] [X] ||| geltend zu [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.5
+by the European Parliament and [X] ||| vom Europäischen Parlament und [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] European Parliament and [X] ||| [X][X] Europäischen Parlament und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.125
+[X][X] European [X][X] [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.336951
+[X][X] Parliament and [X] ||| [X][X] Parlament und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.125
+by the [X][X] and [X] ||| vom [X][X] und [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+by the European [X][X] [X] ||| vom Europäischen [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.336951
+European Parliament and by [X] ||| Europäischen Parlament und von [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] and by [X] ||| [X][X] und von [X] ||| 0.0182166 1 ||| 0-0 ||| 0.238095
+European [X][X] by [X] ||| Europäischen [X][X] von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+European Parliament [X][X] [X] ||| Europäischen Parlament [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.418584
+Parliament and by the [X] ||| Parlament und von der [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] by the [X] ||| [X][X] von der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.305195
+Parliament [X][X] the [X] ||| Parlament [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+Parliament and [X][X] [X] ||| Parlament und [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.411544
+and by the whole [X] ||| und von der gesamten [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] the whole [X] ||| [X][X] der gesamten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.345922
+and [X][X] whole [X] ||| und [X][X] gesamten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+and by [X][X] [X] ||| und von [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.412161
+and by the whole of [X] ||| und von der gesamten [X] ||| 0.0182166 1 ||| ||| 0.1
+[X][X] the whole of [X] ||| [X][X] der gesamten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.220682
+[X][X] the [X][X] [X] ||| [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.793879
+and [X][X] whole of [X] ||| und [X][X] gesamten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+and [X][X] of [X] ||| und [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+and by [X][X] of [X] ||| und von [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.1
+and by the [X][X] [X] ||| und von der [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.245495
+[X][X] the whole of the [X] ||| [X][X] der gesamten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.184578
+[X][X] the [X][X] the [X] ||| [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.184578
+and [X][X] whole of the [X] ||| und [X][X] gesamten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+and [X][X] of the [X] ||| und [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+and [X][X] the [X] ||| und [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+and by [X][X] of the [X] ||| und von [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0769231
+and by [X][X] the [X] ||| und von [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0769231
+and by the [X][X] the [X] ||| und von der [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0769231
+[X][X] whole of the European [X] ||| [X][X] gesamten Europäischen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.153294
+[X][X] whole of [X][X] [X] ||| [X][X] gesamten [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.262269
+[X][X] whole [X][X] [X] ||| [X][X] gesamten [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.262269
+by [X][X] of the European [X] ||| von [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0625
+by [X][X] of [X][X] [X] ||| von [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.1025
+by [X][X] the European [X] ||| von [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0625
+by [X][X] European [X] ||| von [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0625
+by the [X][X] the European [X] ||| von der [X][X] Europäischen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0625
+by the [X][X] European [X] ||| von der [X][X] Europäischen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0625
+by the whole of [X][X] [X] ||| von der gesamten [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.1025
+by the whole [X][X] [X] ||| von der gesamten [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.1025
+[X][X] of the European Community [X] ||| [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 0-0 ||| 0.175642
+[X][X] of [X][X] Community [X] ||| [X][X] [X][X] Union [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.175642
+the [X][X] the European Community [X] ||| der [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+the [X][X] the [X][X] [X] ||| der [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0666667
+the [X][X] European Community [X] ||| der [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+the [X][X] Community [X] ||| der [X][X] Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+the whole of [X][X] Community [X] ||| der gesamten [X][X] Union [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0666667
+the whole [X][X] Community [X] ||| der gesamten [X][X] Union [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0666667
+the whole of the [X][X] [X] ||| der gesamten [X][X] [X] ||| 0.0182166 1 ||| 4-2 ||| 0.0666667
+, using the weight [X] ||| , den ganzen Einfluß [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] the weight [X] ||| [X][X] den ganzen Einfluß [X] ||| 0.0182166 1 ||| 0-0 ||| 0.277778
+, [X][X] weight [X] ||| , [X][X] ganzen Einfluß [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+, using [X][X] [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.378088
+representations , using the weight [X] ||| , den ganzen Einfluß [X] ||| 0.0182166 1 ||| ||| 0.111111
+representations [X][X] the weight [X] ||| [X][X] den ganzen Einfluß [X] ||| 0.0182166 1 ||| 1-0 ||| 0.111111
+[X][X] using the weight [X] ||| [X][X] den ganzen Einfluß [X] ||| 0.0182166 1 ||| 0-0 ||| 0.111111
+representations [X][X] weight [X] ||| [X][X] ganzen Einfluß [X] ||| 0.0182166 1 ||| 1-0 ||| 0.111111
+representations , [X][X] weight [X] ||| , [X][X] ganzen Einfluß [X] ||| 0.0182166 1 ||| 2-1 ||| 0.111111
+representations , using [X][X] [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 3-1 ||| 0.24368
+the weight of your [X] ||| den ganzen Einfluß Ihres [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] of your [X] ||| [X][X] Ihres [X] ||| 0.0182166 1 ||| 0-0 ||| 0.516917
+the [X][X] [X] ||| den [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.654762
+the weight [X][X] [X] ||| den ganzen Einfluß [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.654762
+using the weight of your [X] ||| den ganzen Einfluß Ihres [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] weight of your [X] ||| [X][X] ganzen Einfluß Ihres [X] ||| 0.0182166 1 ||| 0-0 ||| 0.266917
+[X][X] weight [X][X] [X] ||| [X][X] ganzen Einfluß [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.789251
+using [X][X] of your [X] ||| [X][X] Ihres [X] ||| 0.0182166 1 ||| 1-0 ||| 0.142857
+using the [X][X] [X] ||| den [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.445262
+using the weight [X][X] [X] ||| den ganzen Einfluß [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.445262
+weight of your prestigious office [X] ||| ganzen Einfluß Ihres Amtes [X] ||| 0.0182166 1 ||| ||| 0.2
+weight [X][X] prestigious office [X] ||| ganzen Einfluß [X][X] Amtes [X] ||| 0.0182166 1 ||| 1-2 ||| 0.2
+weight of your [X][X] [X] ||| ganzen Einfluß Ihres [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.618873
+[X][X] prestigious office and the [X] ||| [X][X] Amtes und der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.384774
+[X][X] prestigious office [X][X] [X] ||| [X][X] Amtes [X][X] [X] ||| 0.218091 1 ||| 0-0 3-2 ||| 1.02384
+of your [X][X] and the [X] ||| Ihres [X][X] und der [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+of your [X][X] the [X] ||| Ihres [X][X] der [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+of your prestigious office [X][X] [X] ||| Ihres Amtes [X][X] [X] ||| 0.0182166 1 ||| 4-2 ||| 0.392279
+prestigious office and the institution [X] ||| Amtes und der Institution [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] and the institution [X] ||| [X][X] und der Institution [X] ||| 0.0182166 1 ||| 0-0 ||| 0.365
+[X][X] and [X][X] [X] ||| [X][X] und [X][X] [X] ||| 0.315522 1 ||| 0-0 2-2 ||| 2.45092
+[X][X] the institution [X] ||| [X][X] der Institution [X] ||| 0.0182166 1 ||| 0-0 ||| 0.365
+prestigious office [X][X] institution [X] ||| Amtes [X][X] Institution [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+prestigious office and [X][X] [X] ||| Amtes und [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.400052
+and the institution [X] ||| und der Institution , [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] institution [X] ||| [X][X] Institution , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.50228
+and [X][X] [X] ||| und [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+the institution [X] ||| der Institution , die [X] ||| 0.0182166 1 ||| ||| 1
+institution you [X] ||| Institution , die Sie [X] ||| 0.0182166 1 ||| ||| 1
+you represent [X] ||| , die Sie vertreten [X] ||| 0.0182166 1 ||| ||| 1
+you represent , [X] ||| die Sie vertreten , [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] , [X] ||| die [X][X] , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.25
+you [X][X] [X] ||| die Sie [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.547537
+you represent , to [X] ||| Sie vertreten , bei [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] , to [X] ||| [X][X] , bei [X] ||| 0.0182166 1 ||| 0-0 ||| 0.51661
+you [X][X] to [X] ||| Sie [X][X] bei [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+you represent [X][X] [X] ||| Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.413578
+represent , to the [X] ||| vertreten , bei dem [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] to the [X] ||| [X][X] bei dem [X] ||| 0.0182166 1 ||| 0-0 ||| 0.44669
+represent [X][X] the [X] ||| vertreten [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+represent , [X][X] [X] ||| vertreten , [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.418584
+, to the President [X] ||| , bei dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] the President [X] ||| [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.414431
+, [X][X] President [X] ||| , [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+, to [X][X] [X] ||| , bei [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.411544
+to the President and [X] ||| bei dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] President and [X] ||| [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.401883
+to [X][X] and [X] ||| bei [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+to the [X][X] [X] ||| bei dem [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.412161
+to the President and to [X] ||| bei dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| ||| 0.1
+[X][X] President and to [X] ||| [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.261445
+[X][X] President [X][X] [X] ||| [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.681864
+to [X][X] and to [X] ||| bei [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+to [X][X] to [X] ||| bei [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+to the [X][X] to [X] ||| bei dem [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.1
+to the President [X][X] [X] ||| bei dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.245495
+[X][X] President and to the [X] ||| [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.221713
+[X][X] President [X][X] the [X] ||| [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.221713
+to [X][X] and to the [X] ||| bei [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+to [X][X] to the [X] ||| bei [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+to [X][X] the [X] ||| bei [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+to the [X][X] to the [X] ||| bei dem [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0769231
+to the [X][X] the [X] ||| bei dem [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0769231
+to the President [X][X] the [X] ||| bei dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0769231
+[X][X] and to the Governor [X] ||| [X][X] und Gouverneur [X] ||| 0.0182166 1 ||| 0-0 ||| 0.19223
+[X][X] and to [X][X] [X] ||| [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.339667
+the [X][X] to the Governor [X] ||| dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0625
+the [X][X] to [X][X] [X] ||| dem [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.140962
+the [X][X] the Governor [X] ||| dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0625
+the [X][X] Governor [X] ||| dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0625
+the President [X][X] the Governor [X] ||| dem Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0625
+the President [X][X] Governor [X] ||| dem Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0625
+the President and to [X][X] [X] ||| dem Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.140962
+the President and [X][X] [X] ||| dem Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.140962
+[X][X] to the Governor of [X] ||| [X][X] Gouverneur von [X] ||| 0.0182166 1 ||| 0-0 ||| 0.175642
+[X][X] to [X][X] of [X] ||| [X][X] [X][X] von [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.175642
+President [X][X] the Governor of [X] ||| Präsidentschaftskandidaten [X][X] Gouverneur von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+President [X][X] the [X][X] [X] ||| Präsidentschaftskandidaten [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.151556
+President [X][X] Governor of [X] ||| Präsidentschaftskandidaten [X][X] Gouverneur von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+President [X][X] of [X] ||| Präsidentschaftskandidaten [X][X] von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+President and to [X][X] of [X] ||| Präsidentschaftskandidaten und [X][X] von [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0666667
+President and [X][X] of [X] ||| Präsidentschaftskandidaten und [X][X] von [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0666667
+President and to the [X][X] [X] ||| Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 4-2 ||| 0.151556
+Texas , Mr [X] ||| Texas , George W. [X] ||| 0.0182166 1 ||| ||| 1
+and to reprieve the [X] ||| und zur Begnadigung des [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] reprieve the [X] ||| [X][X] Begnadigung des [X] ||| 0.0182166 1 ||| 0-0 ||| 0.354701
+and [X][X] the [X] ||| und [X][X] des [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+and to [X][X] [X] ||| und zur [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.238095
+to reprieve the condemned person [X] ||| zur Begnadigung des Verurteilten [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] the condemned person [X] ||| [X][X] des Verurteilten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.263095
+[X][X] the [X][X] [X] ||| [X][X] des [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.263095
+to [X][X] condemned person [X] ||| zur [X][X] Verurteilten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+to reprieve [X][X] [X] ||| zur Begnadigung [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.125
+to reprieve the [X][X] [X] ||| zur Begnadigung des [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.125
+, to make [X] ||| , geltend zu machen [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] make [X] ||| [X][X] machen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25
+, [X][X] [X] ||| , geltend [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.392857
+, to make representations [X] ||| , geltend zu machen [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] make representations [X] ||| [X][X] machen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.142857
+, [X][X] representations [X] ||| , [X][X] [X] ||| 0.00910828 1 ||| 1-1 ||| 0.285714
+, [X][X] representations [X] ||| , geltend [X][X] [X] ||| 0.00910828 1 ||| 1-2 ||| 0.285714
+, to [X][X] [X] ||| , geltend zu [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.142857
+[X][X] European Parliament and by [X] ||| [X][X] Europäischen Parlament und von [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0714286
+[X][X] European [X][X] by [X] ||| [X][X] Europäischen [X][X] von [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0714286
+[X][X] European Parliament [X][X] [X] ||| [X][X] Europäischen Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.211951
+[X][X] Parliament and by [X] ||| [X][X] Parlament und von [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0714286
+[X][X] Parliament [X][X] [X] ||| [X][X] Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.211951
+by the [X][X] and by [X] ||| vom [X][X] und von [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0714286
+by the [X][X] by [X] ||| vom [X][X] von [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0714286
+by the European [X][X] by [X] ||| vom Europäischen [X][X] von [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0714286
+by the European Parliament [X][X] [X] ||| vom Europäischen Parlament [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.211951
+European Parliament and by the [X] ||| Europäischen Parlament und von der [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] and by the [X] ||| [X][X] und von der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.138528
+European [X][X] by the [X] ||| Europäischen [X][X] von der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+European [X][X] the [X] ||| Europäischen [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+European Parliament [X][X] the [X] ||| Europäischen Parlament [X][X] der [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+European Parliament and [X][X] [X] ||| Europäischen Parlament und [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.251917
+Parliament and by the whole [X] ||| Parlament und von der gesamten [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] by the whole [X] ||| [X][X] von der gesamten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.179255
+[X][X] by [X][X] [X] ||| [X][X] von [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.498789
+Parliament [X][X] the whole [X] ||| Parlament [X][X] der gesamten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+Parliament [X][X] whole [X] ||| Parlament [X][X] gesamten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+Parliament and [X][X] whole [X] ||| Parlament und [X][X] gesamten [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+Parliament and by [X][X] [X] ||| Parlament und von [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.244877
+[X][X] by the whole of [X] ||| [X][X] von der gesamten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.120682
+[X][X] by [X][X] of [X] ||| [X][X] von [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.120682
+[X][X] by the [X][X] [X] ||| [X][X] von der [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.319534
+Parliament [X][X] the whole of [X] ||| Parlament [X][X] der gesamten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+Parliament [X][X] the [X][X] [X] ||| Parlament [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.153968
+Parliament [X][X] whole of [X] ||| Parlament [X][X] gesamten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+Parliament [X][X] of [X] ||| Parlament [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+Parliament and [X][X] whole of [X] ||| Parlament und [X][X] gesamten [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0555556
+Parliament and [X][X] of [X] ||| Parlament und [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0555556
+Parliament and by [X][X] of [X] ||| Parlament und von [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0555556
+Parliament and by the [X][X] [X] ||| Parlament und von der [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.153968
+[X][X] by [X][X] of the [X] ||| [X][X] von [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.107655
+[X][X] by [X][X] the [X] ||| [X][X] von [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.107655
+[X][X] by the [X][X] the [X] ||| [X][X] von der [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.107655
+Parliament [X][X] the [X][X] the [X] ||| Parlament [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.047619
+Parliament [X][X] whole of the [X] ||| Parlament [X][X] gesamten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.047619
+Parliament [X][X] of the [X] ||| Parlament [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.047619
+Parliament [X][X] the [X] ||| Parlament [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.047619
+Parliament and [X][X] of the [X] ||| Parlament und [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.047619
+Parliament and [X][X] the [X] ||| Parlament und [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.047619
+Parliament and by [X][X] the [X] ||| Parlament und von [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.047619
+[X][X] the [X][X] the European [X] ||| [X][X] der [X][X] Europäischen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0907936
+[X][X] the [X][X] European [X] ||| [X][X] der [X][X] Europäischen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0907936
+[X][X] the whole of [X][X] [X] ||| [X][X] der gesamten [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.159769
+[X][X] the whole [X][X] [X] ||| [X][X] der gesamten [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.159769
+and [X][X] whole of [X][X] [X] ||| und [X][X] gesamten [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0685714
+and [X][X] whole [X][X] [X] ||| und [X][X] gesamten [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0685714
+and [X][X] of the European [X] ||| und [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+and [X][X] of [X][X] [X] ||| und [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0685714
+and [X][X] the European [X] ||| und [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+and [X][X] European [X] ||| und [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+and by [X][X] of [X][X] [X] ||| und von [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0685714
+and by [X][X] the European [X] ||| und von [X][X] Europäischen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.04
+and by [X][X] European [X] ||| und von [X][X] Europäischen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.04
+and by the [X][X] European [X] ||| und von der [X][X] Europäischen [X] ||| 0.0182166 1 ||| 3-3 ||| 0.04
+and by the whole [X][X] [X] ||| und von der gesamten [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.0685714
+[X][X] whole of [X][X] Community [X] ||| [X][X] gesamten [X][X] Union [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.108975
+[X][X] whole [X][X] Community [X] ||| [X][X] gesamten [X][X] Union [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.108975
+[X][X] whole of the [X][X] [X] ||| [X][X] gesamten [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-2 ||| 0.108975
+by [X][X] of [X][X] Community [X] ||| von [X][X] [X][X] Union [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.04
+by [X][X] of the [X][X] [X] ||| von [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-2 ||| 0.04
+by [X][X] the European Community [X] ||| von [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+by [X][X] the [X][X] [X] ||| von [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.04
+by [X][X] European Community [X] ||| von [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+by [X][X] Community [X] ||| von [X][X] Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+by the [X][X] the [X][X] [X] ||| von der [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.04
+by the [X][X] European Community [X] ||| von der [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 2-2 ||| 0.04
+by the [X][X] Community [X] ||| von der [X][X] Union [X] ||| 0.0182166 1 ||| 2-2 ||| 0.04
+by the whole [X][X] Community [X] ||| von der gesamten [X][X] Union [X] ||| 0.0182166 1 ||| 3-3 ||| 0.04
+[X][X] the weight of your [X] ||| [X][X] den ganzen Einfluß Ihres [X] ||| 0.0182166 1 ||| 0-0 ||| 0.12406
+[X][X] the [X][X] [X] ||| [X][X] den [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.34399
+[X][X] the weight [X][X] [X] ||| [X][X] den ganzen Einfluß [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.34399
+, [X][X] weight of your [X] ||| , [X][X] ganzen Einfluß Ihres [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+, [X][X] weight [X][X] [X] ||| , [X][X] ganzen Einfluß [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-4 ||| 0.211421
+, using [X][X] of your [X] ||| , [X][X] Ihres [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0714286
+, [X][X] of your [X] ||| , [X][X] Ihres [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+, using the [X][X] [X] ||| , den [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.211421
+, using the weight [X][X] [X] ||| , den ganzen Einfluß [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.211421
+representations [X][X] the [X][X] [X] ||| [X][X] den [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.132569
+representations [X][X] the weight [X][X] [X] ||| [X][X] den ganzen Einfluß [X][X] [X] ||| 0.0182166 1 ||| 1-0 4-4 ||| 0.132569
+[X][X] using [X][X] of your [X] ||| [X][X] [X][X] Ihres [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.0526316
+[X][X] using the [X][X] [X] ||| [X][X] den [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.132569
+[X][X] using the weight [X][X] [X] ||| [X][X] den ganzen Einfluß [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.132569
+representations [X][X] weight of your [X] ||| [X][X] ganzen Einfluß Ihres [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0526316
+representations [X][X] weight [X][X] [X] ||| [X][X] ganzen Einfluß [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-3 ||| 0.132569
+representations [X][X] of your [X] ||| [X][X] Ihres [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0526316
+representations , [X][X] weight [X][X] [X] ||| , [X][X] ganzen Einfluß [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-4 ||| 0.132569
+representations , [X][X] of your [X] ||| , [X][X] Ihres [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0526316
+representations , using the [X][X] [X] ||| , den [X][X] [X] ||| 0.0182166 1 ||| 4-2 ||| 0.132569
+[X][X] of your prestigious office [X] ||| [X][X] Ihres Amtes [X] ||| 0.0182166 1 ||| 0-0 ||| 0.320187
+[X][X] of your [X][X] [X] ||| [X][X] Ihres [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.927096
+the [X][X] prestigious office [X] ||| den [X][X] Amtes [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+the weight [X][X] prestigious office [X] ||| den ganzen Einfluß [X][X] Amtes [X] ||| 0.0182166 1 ||| 2-3 ||| 0.125
+the weight of your [X][X] [X] ||| den ganzen Einfluß Ihres [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.404762
+[X][X] weight [X][X] prestigious office [X] ||| [X][X] ganzen Einfluß [X][X] Amtes [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.195187
+[X][X] weight of your [X][X] [X] ||| [X][X] ganzen Einfluß Ihres [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.522334
+using [X][X] of your [X][X] [X] ||| [X][X] Ihres [X][X] [X] ||| 0.0182166 1 ||| 1-0 4-2 ||| 0.302404
+using [X][X] prestigious office [X] ||| [X][X] Amtes [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0909091
+using the [X][X] prestigious office [X] ||| den [X][X] Amtes [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0909091
+weight [X][X] prestigious office and [X] ||| ganzen Einfluß [X][X] Amtes und [X] ||| 0.0182166 1 ||| 1-2 ||| 0.142857
+weight [X][X] and [X] ||| ganzen Einfluß [X][X] und [X] ||| 0.0182166 1 ||| 1-2 ||| 0.142857
+weight of your [X][X] and [X] ||| ganzen Einfluß Ihres [X][X] und [X] ||| 0.0182166 1 ||| 3-3 ||| 0.142857
+[X][X] prestigious office [X][X] institution [X] ||| [X][X] Amtes [X][X] Institution [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.24
+[X][X] prestigious office and [X][X] [X] ||| [X][X] Amtes und [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.639064
+of your [X][X] and [X][X] [X] ||| Ihres [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.26728
+of your [X][X] the institution [X] ||| Ihres [X][X] der Institution [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0833333
+of your [X][X] institution [X] ||| Ihres [X][X] Institution [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0833333
+prestigious office and the institution [X] ||| Amtes und der Institution , [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] and the institution [X] ||| [X][X] und der Institution , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25228
+[X][X] and [X][X] [X] ||| [X][X] und [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.25228
+[X][X] the institution [X] ||| [X][X] der Institution , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25228
+prestigious office [X][X] institution [X] ||| Amtes [X][X] Institution , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0909091
+prestigious office [X][X] [X] ||| Amtes [X][X] , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0909091
+prestigious office and [X][X] [X] ||| Amtes und [X][X] , [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0909091
+and the institution [X] ||| und der Institution , die [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] institution [X] ||| [X][X] Institution , die [X] ||| 0.0182166 1 ||| 0-0 ||| 0.392986
+and [X][X] [X] ||| und [X][X] , die [X] ||| 0.00910828 1 ||| 1-1 ||| 0.4
+and [X][X] [X] ||| und [X][X] die [X] ||| 0.00910828 1 ||| 1-1 ||| 0.4
+the institution you [X] ||| der Institution , die Sie [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] you [X] ||| [X][X] , die Sie [X] ||| 0.00607219 1 ||| 0-0 ||| 1.2446
+[X][X] you [X] ||| [X][X] die Sie [X] ||| 0.00607219 1 ||| 0-0 ||| 1.2446
+[X][X] you [X] ||| [X][X] Sie [X] ||| 0.00607219 1 ||| 0-0 ||| 1.2446
+institution you represent [X] ||| Institution , die Sie vertreten [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] represent [X] ||| [X][X] vertreten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.407519
+institution [X][X] [X] ||| Institution [X][X] [X] ||| 0.00607219 1 ||| 1-1 ||| 1.37228
+institution [X][X] [X] ||| Institution , [X][X] [X] ||| 0.00607219 1 ||| 1-2 ||| 1.37228
+institution [X][X] [X] ||| Institution , die [X][X] [X] ||| 0.00607219 1 ||| 1-3 ||| 1.37228
+you represent , [X] ||| , die Sie vertreten , [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] , [X] ||| , [X][X] , [X] ||| 0.00910828 1 ||| 0-1 ||| 0.4
+[X][X] , [X] ||| , die [X][X] , [X] ||| 0.00910828 1 ||| 0-2 ||| 0.4
+you [X][X] [X] ||| , die Sie [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.432803
+you represent , to [X] ||| die Sie vertreten , bei [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] , to [X] ||| die [X][X] , bei [X] ||| 0.0182166 1 ||| 0-1 ||| 0.125
+[X][X] to [X] ||| die [X][X] bei [X] ||| 0.0182166 1 ||| 0-1 ||| 0.125
+you [X][X] to [X] ||| die Sie [X][X] bei [X] ||| 0.0182166 1 ||| 1-2 ||| 0.125
+you represent [X][X] [X] ||| die Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.297537
+you represent , to the [X] ||| Sie vertreten , bei dem [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] , to the [X] ||| [X][X] , bei dem [X] ||| 0.0182166 1 ||| 0-0 ||| 0.280024
+[X][X] , [X][X] [X] ||| [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.70258
+you [X][X] to the [X] ||| Sie [X][X] bei dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+you [X][X] the [X] ||| Sie [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+you represent [X][X] the [X] ||| Sie vertreten [X][X] dem [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+you represent , [X][X] [X] ||| Sie vertreten , [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.246911
+represent , to the President [X] ||| vertreten , bei dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] to the President [X] ||| [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.247765
+[X][X] to [X][X] [X] ||| [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.674473
+represent [X][X] the President [X] ||| vertreten [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+represent [X][X] President [X] ||| vertreten [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+represent , [X][X] President [X] ||| vertreten , [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+represent , to [X][X] [X] ||| vertreten , bei [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.251917
+, to the President and [X] ||| , bei dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] the President and [X] ||| [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.235217
+[X][X] the [X][X] [X] ||| [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.671586
+, [X][X] President and [X] ||| , [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+, [X][X] and [X] ||| , [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.136364
+, to [X][X] and [X] ||| , bei [X][X] und [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+, to the [X][X] [X] ||| , bei dem [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.244877
+[X][X] the President and to [X] ||| [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.161445
+[X][X] the [X][X] to [X] ||| [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.161445
+[X][X] the President [X][X] [X] ||| [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.436369
+, [X][X] President and to [X] ||| , [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+, [X][X] President [X][X] [X] ||| , [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.153968
+, [X][X] and to [X] ||| , [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+, [X][X] to [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+, to [X][X] and to [X] ||| , bei [X][X] und [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0555556
+, to [X][X] to [X] ||| , bei [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0555556
+, to the [X][X] to [X] ||| , bei dem [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0555556
+, to the President [X][X] [X] ||| , bei dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.153968
+[X][X] the [X][X] to the [X] ||| [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.14479
+[X][X] the [X][X] the [X] ||| [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.14479
+[X][X] the President [X][X] the [X] ||| [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.14479
+, [X][X] President [X][X] the [X] ||| , [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.047619
+, [X][X] and to the [X] ||| , [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.047619
+, [X][X] to the [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.047619
+, [X][X] the [X] ||| , [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.047619
+, to [X][X] to the [X] ||| , bei [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.047619
+, to [X][X] the [X] ||| , bei [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.047619
+, to the [X][X] the [X] ||| , bei dem [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.047619
+[X][X] President [X][X] the Governor [X] ||| [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.12973
+[X][X] President [X][X] Governor [X] ||| [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.12973
+[X][X] President and to [X][X] [X] ||| [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.198705
+[X][X] President and [X][X] [X] ||| [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.198705
+to [X][X] and to [X][X] [X] ||| bei [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0685714
+to [X][X] and [X][X] [X] ||| bei [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0685714
+to [X][X] to the Governor [X] ||| bei [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+to [X][X] to [X][X] [X] ||| bei [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0685714
+to [X][X] the Governor [X] ||| bei [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+to [X][X] Governor [X] ||| bei [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+to the [X][X] to [X][X] [X] ||| bei dem [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0685714
+to the [X][X] the Governor [X] ||| bei dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 2-2 ||| 0.04
+to the [X][X] Governor [X] ||| bei dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 2-2 ||| 0.04
+to the President [X][X] Governor [X] ||| bei dem Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 3-3 ||| 0.04
+to the President and [X][X] [X] ||| bei dem Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.0685714
+[X][X] and to [X][X] of [X] ||| [X][X] und [X][X] von [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.108975
+[X][X] and [X][X] of [X] ||| [X][X] und [X][X] von [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.108975
+[X][X] and to the [X][X] [X] ||| [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-2 ||| 0.147437
+the [X][X] to [X][X] of [X] ||| dem [X][X] [X][X] von [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.04
+the [X][X] to the [X][X] [X] ||| dem [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-2 ||| 0.0784615
+the [X][X] the Governor of [X] ||| dem [X][X] Gouverneur von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+the [X][X] the [X][X] [X] ||| dem [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0784615
+the [X][X] Governor of [X] ||| dem [X][X] Gouverneur von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+the [X][X] of [X] ||| dem [X][X] von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+the President [X][X] the [X][X] [X] ||| dem Präsidentschaftskandidaten [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0784615
+the President [X][X] Governor of [X] ||| dem Präsidentschaftskandidaten [X][X] Gouverneur von [X] ||| 0.0182166 1 ||| 2-2 ||| 0.04
+the President [X][X] of [X] ||| dem Präsidentschaftskandidaten [X][X] von [X] ||| 0.0182166 1 ||| 2-2 ||| 0.04
+the President and [X][X] of [X] ||| dem Präsidentschaftskandidaten und [X][X] von [X] ||| 0.0182166 1 ||| 3-3 ||| 0.04
+of Texas , Mr [X] ||| von Texas , George W. [X] ||| 0.0182166 1 ||| ||| 0.5
+of [X][X] [X] ||| von [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.01667
+Texas , Mr Bush [X] ||| Texas , George W. Bush [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] Bush [X] ||| [X][X] Bush [X] ||| 0.218091 1 ||| 0-0 ||| 1.1964
+a stay of execution [X] ||| Aussetzung der Vollstreckung des Todesurteils [X] ||| 0.0182166 1 ||| ||| 1
+[X][X] reprieve the condemned person [X] ||| [X][X] Begnadigung des Verurteilten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.138095
+[X][X] reprieve [X][X] [X] ||| [X][X] Begnadigung [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.138095
+[X][X] reprieve the [X][X] [X] ||| [X][X] Begnadigung des [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.138095
+and [X][X] the condemned person [X] ||| und [X][X] des Verurteilten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+and [X][X] the [X][X] [X] ||| und [X][X] des [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0714286
+and [X][X] condemned person [X] ||| und [X][X] Verurteilten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+and to [X][X] condemned person [X] ||| und zur [X][X] Verurteilten [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0714286
+and to reprieve [X][X] [X] ||| und zur Begnadigung [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0714286
+and to reprieve the [X][X] [X] ||| und zur Begnadigung des [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.0714286
+[X][X] European [X][X] by the [X] ||| [X][X] Europäischen [X][X] von der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.047619
+[X][X] European [X][X] the [X] ||| [X][X] Europäischen [X][X] der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.047619
+[X][X] European Parliament [X][X] the [X] ||| [X][X] Europäischen Parlament [X][X] der [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.047619
+[X][X] European Parliament and [X][X] [X] ||| [X][X] Europäischen Parlament und [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.140523
+[X][X] Parliament and by the [X] ||| [X][X] Parlament und von der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.047619
+[X][X] Parliament [X][X] the [X] ||| [X][X] Parlament [X][X] der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.047619
+[X][X] Parliament and [X][X] [X] ||| [X][X] Parlament und [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.140523
+by the [X][X] and [X][X] [X] ||| vom [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.140523
+by the [X][X] by the [X] ||| vom [X][X] von der [X] ||| 0.0182166 1 ||| 2-1 ||| 0.047619
+by the [X][X] the [X] ||| vom [X][X] der [X] ||| 0.0182166 1 ||| 2-1 ||| 0.047619
+by the European [X][X] the [X] ||| vom Europäischen [X][X] der [X] ||| 0.0182166 1 ||| 3-2 ||| 0.047619
+[X][X] and by the whole [X] ||| [X][X] und von der gesamten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0883459
+[X][X] and [X][X] whole [X] ||| [X][X] und [X][X] gesamten [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0883459
+[X][X] and by [X][X] [X] ||| [X][X] und von [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.253912
+European [X][X] by the whole [X] ||| Europäischen [X][X] von der gesamten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+European [X][X] by [X][X] [X] ||| Europäischen [X][X] von [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.161008
+European [X][X] the whole [X] ||| Europäischen [X][X] der gesamten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+European [X][X] whole [X] ||| Europäischen [X][X] gesamten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+European Parliament [X][X] the whole [X] ||| Europäischen Parlament [X][X] der gesamten [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+European Parliament [X][X] whole [X] ||| Europäischen Parlament [X][X] gesamten [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+European Parliament and [X][X] whole [X] ||| Europäischen Parlament und [X][X] gesamten [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0526316
+European Parliament and by [X][X] [X] ||| Europäischen Parlament und von [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.161008
+[X][X] and [X][X] whole of [X] ||| [X][X] und [X][X] gesamten [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0651261
+[X][X] and [X][X] of [X] ||| [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0651261
+[X][X] and by [X][X] of [X] ||| [X][X] und von [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0651261
+[X][X] and by the [X][X] [X] ||| [X][X] und von der [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.165566
+European [X][X] by [X][X] of [X] ||| Europäischen [X][X] von [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0357143
+European [X][X] by the [X][X] [X] ||| Europäischen [X][X] von der [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.108376
+European [X][X] the whole of [X] ||| Europäischen [X][X] der gesamten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+European [X][X] the [X][X] [X] ||| Europäischen [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.108376
+European [X][X] whole of [X] ||| Europäischen [X][X] gesamten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+European [X][X] of [X] ||| Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+European Parliament [X][X] the [X][X] [X] ||| Europäischen Parlament [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.108376
+European Parliament [X][X] whole of [X] ||| Europäischen Parlament [X][X] gesamten [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0357143
+European Parliament [X][X] of [X] ||| Europäischen Parlament [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0357143
+European Parliament and [X][X] of [X] ||| Europäischen Parlament und [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0357143
+[X][X] and [X][X] of the [X] ||| [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0600358
+[X][X] and [X][X] the [X] ||| [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0600358
+[X][X] and by [X][X] the [X] ||| [X][X] und von [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0600358
+European [X][X] by [X][X] the [X] ||| Europäischen [X][X] von [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0322581
+European [X][X] the [X][X] the [X] ||| Europäischen [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0322581
+European [X][X] whole of the [X] ||| Europäischen [X][X] gesamten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0322581
+European [X][X] of the [X] ||| Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0322581
+European [X][X] the [X] ||| Europäischen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0322581
+European Parliament [X][X] of the [X] ||| Europäischen Parlament [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0322581
+European Parliament [X][X] the [X] ||| Europäischen Parlament [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0322581
+European Parliament and [X][X] the [X] ||| Europäischen Parlament und [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0322581
+[X][X] by [X][X] the European [X] ||| [X][X] von [X][X] Europäischen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0507937
+[X][X] by [X][X] European [X] ||| [X][X] von [X][X] Europäischen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0507937
+[X][X] by the [X][X] European [X] ||| [X][X] von der [X][X] Europäischen [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0507937
+[X][X] by the whole [X][X] [X] ||| [X][X] von der gesamten [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.0911977
+Parliament [X][X] the [X][X] European [X] ||| Parlament [X][X] der [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0285714
+Parliament [X][X] the whole [X][X] [X] ||| Parlament [X][X] der gesamten [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0507937
+Parliament [X][X] whole of [X][X] [X] ||| Parlament [X][X] gesamten [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0507937
+Parliament [X][X] whole [X][X] [X] ||| Parlament [X][X] gesamten [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0507937
+Parliament [X][X] of the European [X] ||| Parlament [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0285714
+Parliament [X][X] of [X][X] [X] ||| Parlament [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0507937
+Parliament [X][X] the European [X] ||| Parlament [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0285714
+Parliament [X][X] European [X] ||| Parlament [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0285714
+Parliament and [X][X] whole [X][X] [X] ||| Parlament und [X][X] gesamten [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0507937
+Parliament and [X][X] of [X][X] [X] ||| Parlament und [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0507937
+Parliament and [X][X] the European [X] ||| Parlament und [X][X] Europäischen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0285714
+Parliament and [X][X] European [X] ||| Parlament und [X][X] Europäischen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0285714
+Parliament and by [X][X] European [X] ||| Parlament und von [X][X] Europäischen [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0285714
+[X][X] the [X][X] European Community [X] ||| [X][X] der [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0689755
+[X][X] the [X][X] Community [X] ||| [X][X] der [X][X] Union [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0689755
+[X][X] the whole [X][X] Community [X] ||| [X][X] der gesamten [X][X] Union [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0689755
+and [X][X] whole [X][X] Community [X] ||| und [X][X] gesamten [X][X] Union [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0285714
+and [X][X] of [X][X] Community [X] ||| und [X][X] [X][X] Union [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0285714
+and [X][X] of the [X][X] [X] ||| und [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-2 ||| 0.0285714
+and [X][X] the European Community [X] ||| und [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0285714
+and [X][X] the [X][X] [X] ||| und [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0285714
+and [X][X] European Community [X] ||| und [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0285714
+and [X][X] Community [X] ||| und [X][X] Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0285714
+and by [X][X] the [X][X] [X] ||| und von [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0285714
+and by [X][X] European Community [X] ||| und von [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0285714
+and by [X][X] Community [X] ||| und von [X][X] Union [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0285714
+and by the [X][X] Community [X] ||| und von der [X][X] Union [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0285714
+[X][X] the [X][X] prestigious office [X] ||| [X][X] den [X][X] Amtes [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.104278
+, [X][X] of your [X][X] [X] ||| , [X][X] Ihres [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.139992
+, using [X][X] prestigious office [X] ||| , [X][X] Amtes [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0588235
+, [X][X] prestigious office [X] ||| , [X][X] Amtes [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0588235
+[X][X] using [X][X] prestigious office [X] ||| [X][X] [X][X] Amtes [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.0454545
+representations [X][X] of your [X][X] [X] ||| [X][X] Ihres [X][X] [X] ||| 0.0182166 1 ||| 1-0 4-2 ||| 0.0799373
+representations [X][X] prestigious office [X] ||| [X][X] Amtes [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0454545
+representations , [X][X] prestigious office [X] ||| , [X][X] Amtes [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0454545
+[X][X] of your [X][X] and [X] ||| [X][X] Ihres [X][X] und [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.251366
+the [X][X] prestigious office and [X] ||| den [X][X] Amtes und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+the [X][X] and [X] ||| den [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+the weight [X][X] and [X] ||| den ganzen Einfluß [X][X] und [X] ||| 0.0182166 1 ||| 2-3 ||| 0.1
+[X][X] weight [X][X] and [X] ||| [X][X] ganzen Einfluß [X][X] und [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.151366
+using [X][X] prestigious office and [X] ||| [X][X] Amtes und [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0714286
+using [X][X] and [X] ||| [X][X] und [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0714286
+using the [X][X] and [X] ||| den [X][X] und [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0714286
+using the weight [X][X] and [X] ||| den ganzen Einfluß [X][X] und [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0714286
+weight [X][X] prestigious office [X][X] [X] ||| ganzen Einfluß [X][X] Amtes [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-4 ||| 0.276016
+weight [X][X] and the [X] ||| ganzen Einfluß [X][X] und der [X] ||| 0.0182166 1 ||| 1-2 ||| 0.1
+weight [X][X] the [X] ||| ganzen Einfluß [X][X] der [X] ||| 0.0182166 1 ||| 1-2 ||| 0.1
+weight of your [X][X] the [X] ||| ganzen Einfluß Ihres [X][X] der [X] ||| 0.0182166 1 ||| 3-3 ||| 0.1
+[X][X] prestigious office [X][X] institution [X] ||| [X][X] Amtes [X][X] Institution , [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.16137
+[X][X] prestigious office [X][X] [X] ||| [X][X] Amtes [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.16137
+[X][X] prestigious office and [X][X] [X] ||| [X][X] Amtes und [X][X] , [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.16137
+of your [X][X] and [X][X] [X] ||| Ihres [X][X] und [X][X] , [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0555556
+of your [X][X] the institution [X] ||| Ihres [X][X] der Institution , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0555556
+of your [X][X] institution [X] ||| Ihres [X][X] Institution , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0555556
+of your [X][X] [X] ||| Ihres [X][X] , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0555556
+of your prestigious office [X][X] [X] ||| Ihres Amtes [X][X] , [X] ||| 0.0182166 1 ||| 4-2 ||| 0.0555556
+prestigious office and the institution [X] ||| Amtes und der Institution , die [X] ||| 0.0182166 1 ||| ||| 0.0714286
+[X][X] and the institution [X] ||| [X][X] und der Institution , die [X] ||| 0.0182166 1 ||| 0-0 ||| 0.192986
+[X][X] and [X][X] [X] ||| [X][X] und [X][X] , die [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.385972
+[X][X] and [X][X] [X] ||| [X][X] und [X][X] die [X] ||| 0.00910828 1 ||| 0-0 2-2 ||| 0.385972
+[X][X] the institution [X] ||| [X][X] der Institution , die [X] ||| 0.0182166 1 ||| 0-0 ||| 0.192986
+prestigious office [X][X] institution [X] ||| Amtes [X][X] Institution , die [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0714286
+prestigious office [X][X] [X] ||| Amtes [X][X] , die [X] ||| 0.00910828 1 ||| 2-1 ||| 0.142857
+prestigious office [X][X] [X] ||| Amtes [X][X] die [X] ||| 0.00910828 1 ||| 2-1 ||| 0.142857
+prestigious office and [X][X] [X] ||| Amtes und [X][X] , die [X] ||| 0.00910828 1 ||| 3-2 ||| 0.142857
+prestigious office and [X][X] [X] ||| Amtes und [X][X] die [X] ||| 0.00910828 1 ||| 3-2 ||| 0.142857
+and the institution you [X] ||| und der Institution , die Sie [X] ||| 0.0182166 1 ||| ||| 0.1
+[X][X] institution you [X] ||| [X][X] Institution , die Sie [X] ||| 0.0182166 1 ||| 0-0 ||| 0.214866
+and [X][X] you [X] ||| und [X][X] , die Sie [X] ||| 0.00607219 1 ||| 1-1 ||| 0.3
+and [X][X] you [X] ||| und [X][X] die Sie [X] ||| 0.00607219 1 ||| 1-1 ||| 0.3
+and [X][X] you [X] ||| und [X][X] Sie [X] ||| 0.00607219 1 ||| 1-1 ||| 0.3
+and the [X][X] [X] ||| und der [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.214996
+the institution you represent [X] ||| der Institution , die Sie vertreten [X] ||| 0.0182166 1 ||| ||| 0.1
+[X][X] you represent [X] ||| [X][X] , die Sie vertreten [X] ||| 0.00607219 1 ||| 0-0 ||| 0.622557
+[X][X] you represent [X] ||| [X][X] die Sie vertreten [X] ||| 0.00607219 1 ||| 0-0 ||| 0.622557
+[X][X] you represent [X] ||| [X][X] Sie vertreten [X] ||| 0.00607219 1 ||| 0-0 ||| 0.622557
+the [X][X] represent [X] ||| der [X][X] vertreten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+the institution [X][X] [X] ||| der Institution [X][X] [X] ||| 0.00607219 1 ||| 2-2 ||| 0.659208
+the institution [X][X] [X] ||| der Institution , [X][X] [X] ||| 0.00607219 1 ||| 2-3 ||| 0.659208
+the institution [X][X] [X] ||| der Institution , die [X][X] [X] ||| 0.00607219 1 ||| 2-4 ||| 0.659208
+institution you represent , [X] ||| Institution , die Sie vertreten , [X] ||| 0.0182166 1 ||| ||| 0.1
+[X][X] represent , [X] ||| [X][X] vertreten , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.22335
+institution [X][X] , [X] ||| Institution [X][X] , [X] ||| 0.00607219 1 ||| 1-1 ||| 0.3
+institution [X][X] , [X] ||| Institution , [X][X] , [X] ||| 0.00607219 1 ||| 1-2 ||| 0.3
+institution [X][X] , [X] ||| Institution , die [X][X] , [X] ||| 0.00607219 1 ||| 1-3 ||| 0.3
+institution you [X][X] [X] ||| Institution , die Sie [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.257426
+you represent , to [X] ||| , die Sie vertreten , bei [X] ||| 0.0182166 1 ||| ||| 0.1
+[X][X] , to [X] ||| , [X][X] , bei [X] ||| 0.0182166 1 ||| 0-1 ||| 0.1
+[X][X] to [X] ||| , [X][X] bei [X] ||| 0.0182166 1 ||| 0-1 ||| 0.1
+[X][X] , to [X] ||| , die [X][X] , bei [X] ||| 0.0182166 1 ||| 0-2 ||| 0.1
+[X][X] to [X] ||| , die [X][X] bei [X] ||| 0.0182166 1 ||| 0-2 ||| 0.1
+you [X][X] to [X] ||| , die Sie [X][X] bei [X] ||| 0.0182166 1 ||| 1-3 ||| 0.1
+you represent [X][X] [X] ||| , die Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.232803
+you represent , to the [X] ||| die Sie vertreten , bei dem [X] ||| 0.0182166 1 ||| ||| 0.0666667
+[X][X] , to the [X] ||| die [X][X] , bei dem [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0666667
+[X][X] , [X][X] [X] ||| die [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.172537
+[X][X] to the [X] ||| die [X][X] bei dem [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0666667
+[X][X] the [X] ||| die [X][X] dem [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0666667
+you [X][X] to the [X] ||| die Sie [X][X] bei dem [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0666667
+you [X][X] the [X] ||| die Sie [X][X] dem [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0666667
+you represent [X][X] the [X] ||| die Sie vertreten [X][X] dem [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0666667
+you represent , [X][X] [X] ||| die Sie vertreten , [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.172537
+[X][X] , to the President [X] ||| [X][X] , bei dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.156856
+[X][X] , [X][X] President [X] ||| [X][X] , [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.156856
+[X][X] , to [X][X] [X] ||| [X][X] , bei [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.422556
+you [X][X] to the President [X] ||| Sie [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+you [X][X] to [X][X] [X] ||| Sie [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.156002
+you [X][X] the President [X] ||| Sie [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+you [X][X] President [X] ||| Sie [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+you represent [X][X] the President [X] ||| Sie vertreten [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+you represent [X][X] President [X] ||| Sie vertreten [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+you represent , [X][X] President [X] ||| Sie vertreten , [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0526316
+you represent , to [X][X] [X] ||| Sie vertreten , bei [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.156002
+[X][X] to the President and [X] ||| [X][X] bei dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.144307
+[X][X] to [X][X] and [X] ||| [X][X] bei [X][X] und [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.144307
+[X][X] to the [X][X] [X] ||| [X][X] bei dem [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.426709
+represent [X][X] the President and [X] ||| vertreten [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+represent [X][X] the [X][X] [X] ||| vertreten [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.161008
+represent [X][X] President and [X] ||| vertreten [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+represent [X][X] and [X] ||| vertreten [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+represent , [X][X] President and [X] ||| vertreten , [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+represent , [X][X] and [X] ||| vertreten , [X][X] und [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+represent , to [X][X] and [X] ||| vertreten , bei [X][X] und [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0526316
+represent , to the [X][X] [X] ||| vertreten , bei dem [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.161008
+[X][X] to [X][X] and to [X] ||| [X][X] bei [X][X] und [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.10589
+[X][X] to [X][X] to [X] ||| [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.10589
+[X][X] to the [X][X] to [X] ||| [X][X] bei dem [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.10589
+[X][X] to the President [X][X] [X] ||| [X][X] bei dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.282401
+represent [X][X] the [X][X] to [X] ||| vertreten [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0357143
+represent [X][X] the President [X][X] [X] ||| vertreten [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.108376
+represent [X][X] President and to [X] ||| vertreten [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+represent [X][X] President [X][X] [X] ||| vertreten [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.108376
+represent [X][X] and to [X] ||| vertreten [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+represent [X][X] to [X] ||| vertreten [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+represent , [X][X] President [X][X] [X] ||| vertreten , [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.108376
+represent , [X][X] and to [X] ||| vertreten , [X][X] und [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0357143
+represent , [X][X] to [X] ||| vertreten , [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0357143
+represent , to [X][X] to [X] ||| vertreten , bei [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0357143
+[X][X] to [X][X] to the [X] ||| [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0971712
+[X][X] to [X][X] the [X] ||| [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0971712
+[X][X] to the [X][X] the [X] ||| [X][X] bei dem [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0971712
+represent [X][X] the [X][X] the [X] ||| vertreten [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0322581
+represent [X][X] President [X][X] the [X] ||| vertreten [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0322581
+represent [X][X] and to the [X] ||| vertreten [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0322581
+represent [X][X] to the [X] ||| vertreten [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0322581
+represent [X][X] the [X] ||| vertreten [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0322581
+represent , [X][X] to the [X] ||| vertreten , [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0322581
+represent , [X][X] the [X] ||| vertreten , [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0322581
+represent , to [X][X] the [X] ||| vertreten , bei [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0322581
+[X][X] the [X][X] the Governor [X] ||| [X][X] dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0897298
+[X][X] the [X][X] Governor [X] ||| [X][X] dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0897298
+[X][X] the President [X][X] Governor [X] ||| [X][X] dem Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0897298
+[X][X] the President and [X][X] [X] ||| [X][X] dem Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.130134
+, [X][X] President [X][X] Governor [X] ||| , [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0285714
+, [X][X] President and [X][X] [X] ||| , [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0507937
+, [X][X] and to [X][X] [X] ||| , [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0507937
+, [X][X] and [X][X] [X] ||| , [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0507937
+, [X][X] to the Governor [X] ||| , [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0285714
+, [X][X] to [X][X] [X] ||| , [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0507937
+, [X][X] the Governor [X] ||| , [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0285714
+, [X][X] Governor [X] ||| , [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0285714
+, to [X][X] and [X][X] [X] ||| , bei [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0507937
+, to [X][X] to [X][X] [X] ||| , bei [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0507937
+, to [X][X] the Governor [X] ||| , bei [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0285714
+, to [X][X] Governor [X] ||| , bei [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0285714
+, to the [X][X] Governor [X] ||| , bei dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0285714
+[X][X] President [X][X] Governor of [X] ||| [X][X] Präsidentschaftskandidaten [X][X] Gouverneur von [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0689755
+[X][X] President [X][X] of [X] ||| [X][X] Präsidentschaftskandidaten [X][X] von [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0689755
+[X][X] President and [X][X] of [X] ||| [X][X] Präsidentschaftskandidaten und [X][X] von [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0689755
+to [X][X] and [X][X] of [X] ||| bei [X][X] und [X][X] von [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0285714
+to [X][X] to [X][X] of [X] ||| bei [X][X] [X][X] von [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0285714
+to [X][X] to the [X][X] [X] ||| bei [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-2 ||| 0.0285714
+to [X][X] the Governor of [X] ||| bei [X][X] Gouverneur von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0285714
+to [X][X] the [X][X] [X] ||| bei [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0285714
+to [X][X] Governor of [X] ||| bei [X][X] Gouverneur von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0285714
+to [X][X] of [X] ||| bei [X][X] von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0285714
+to the [X][X] the [X][X] [X] ||| bei dem [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0285714
+to the [X][X] Governor of [X] ||| bei dem [X][X] Gouverneur von [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0285714
+to the [X][X] of [X] ||| bei dem [X][X] von [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0285714
+to the President [X][X] of [X] ||| bei dem Präsidentschaftskandidaten [X][X] von [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0285714
+Governor of Texas , Mr [X] ||| Gouverneur von Texas , George W. [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] Texas , Mr [X] ||| [X][X] Texas , George W. [X] ||| 0.0182166 1 ||| 0-0 ||| 0.722046
+Governor [X][X] [X] ||| Gouverneur [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.599206
+Governor of [X][X] [X] ||| Gouverneur von [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.599206
+[X][X] of Texas , Mr [X] ||| [X][X] von Texas , George W. [X] ||| 0.0182166 1 ||| 0-0 ||| 0.472046
+[X][X] of [X][X] [X] ||| [X][X] von [X][X] [X] ||| 0.218091 1 ||| 0-0 2-2 ||| 1.03664
+the [X][X] Texas , Mr [X] ||| [X][X] Texas , George W. [X] ||| 0.0182166 1 ||| 1-0 ||| 0.166667
+the Governor [X][X] [X] ||| Gouverneur [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.410256
+the Governor of [X][X] [X] ||| Gouverneur von [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.410256
+to [X][X] of [X][X] [X] ||| [X][X] von [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.350433
+to [X][X] Texas , Mr [X] ||| [X][X] Texas , George W. [X] ||| 0.0182166 1 ||| 1-0 ||| 0.142857
+to the Governor [X][X] [X] ||| Gouverneur [X][X] [X] ||| 0.0182166 1 ||| 3-1 ||| 0.350433
+to the Governor of [X][X] [X] ||| Gouverneur von [X][X] [X] ||| 0.0182166 1 ||| 4-2 ||| 0.350433
+of Texas , Mr Bush [X] ||| von Texas , George W. Bush [X] ||| 0.0182166 1 ||| ||| 0.25
+of [X][X] Bush [X] ||| von [X][X] Bush [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+Texas , Mr Bush , [X] ||| Texas , George W. Bush , [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] Bush , [X] ||| [X][X] Bush , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.707082
+Texas , Mr [X][X] [X] ||| Texas , George W. [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.392857
+[X][X] a stay of execution [X] ||| [X][X] Aussetzung der Vollstreckung des Todesurteils [X] ||| 0.218091 1 ||| 0-0 ||| 1.5
+to order [X][X] [X] ||| zur [X][X] [X] ||| 0.218091 1 ||| 2-1 ||| 1.23526
+power to order [X][X] [X] ||| zur [X][X] [X] ||| 0.218091 1 ||| 3-1 ||| 1.01667
+the power to order [X][X] [X] ||| zur [X][X] [X] ||| 0.0182166 1 ||| 4-1 ||| 0.892857
+a stay of execution and [X] ||| Aussetzung der Vollstreckung des Todesurteils und [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] European [X][X] the whole [X] ||| [X][X] Europäischen [X][X] der gesamten [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0357143
+[X][X] European [X][X] whole [X] ||| [X][X] Europäischen [X][X] gesamten [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0357143
+[X][X] European Parliament [X][X] whole [X] ||| [X][X] Europäischen Parlament [X][X] gesamten [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0357143
+[X][X] Parliament [X][X] the whole [X] ||| [X][X] Parlament [X][X] der gesamten [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0357143
+[X][X] Parliament [X][X] whole [X] ||| [X][X] Parlament [X][X] gesamten [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0357143
+[X][X] Parliament and [X][X] whole [X] ||| [X][X] Parlament und [X][X] gesamten [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0357143
+[X][X] Parliament and by [X][X] [X] ||| [X][X] Parlament und von [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.0929038
+by the [X][X] by [X][X] [X] ||| vom [X][X] von [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0929038
+by the [X][X] the whole [X] ||| vom [X][X] der gesamten [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0357143
+by the [X][X] whole [X] ||| vom [X][X] gesamten [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0357143
+by the European [X][X] whole [X] ||| vom Europäischen [X][X] gesamten [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0357143
+[X][X] European [X][X] whole of [X] ||| [X][X] Europäischen [X][X] gesamten [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0294118
+[X][X] European [X][X] of [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0294118
+[X][X] European Parliament [X][X] of [X] ||| [X][X] Europäischen Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0294118
+[X][X] Parliament [X][X] whole of [X] ||| [X][X] Parlament [X][X] gesamten [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0294118
+[X][X] Parliament [X][X] of [X] ||| [X][X] Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0294118
+[X][X] Parliament and [X][X] of [X] ||| [X][X] Parlament und [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0294118
+by the [X][X] the [X][X] [X] ||| vom [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0571895
+by the [X][X] whole of [X] ||| vom [X][X] gesamten [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0294118
+by the [X][X] of [X] ||| vom [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0294118
+by the European [X][X] of [X] ||| vom Europäischen [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0294118
+[X][X] European [X][X] of the [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0277778
+[X][X] European [X][X] the [X] ||| [X][X] Europäischen [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0277778
+[X][X] European Parliament [X][X] the [X] ||| [X][X] Europäischen Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0277778
+[X][X] Parliament [X][X] of the [X] ||| [X][X] Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0277778
+[X][X] Parliament [X][X] the [X] ||| [X][X] Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0277778
+[X][X] Parliament and [X][X] the [X] ||| [X][X] Parlament und [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0277778
+by the [X][X] of the [X] ||| vom [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0277778
+by the [X][X] the [X] ||| vom [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0277778
+by the European [X][X] the [X] ||| vom Europäischen [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0277778
+[X][X] and [X][X] the European [X] ||| [X][X] und [X][X] Europäischen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0222222
+[X][X] and [X][X] European [X] ||| [X][X] und [X][X] Europäischen [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0222222
+[X][X] and by [X][X] European [X] ||| [X][X] und von [X][X] Europäischen [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0222222
+European [X][X] by [X][X] European [X] ||| Europäischen [X][X] von [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0222222
+European [X][X] the [X][X] European [X] ||| Europäischen [X][X] der [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0222222
+European [X][X] the whole [X][X] [X] ||| Europäischen [X][X] der gesamten [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.040404
+European [X][X] whole of [X][X] [X] ||| Europäischen [X][X] gesamten [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.040404
+European [X][X] whole [X][X] [X] ||| Europäischen [X][X] gesamten [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.040404
+European [X][X] of the European [X] ||| Europäischen [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+European [X][X] of [X][X] [X] ||| Europäischen [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.040404
+European [X][X] the European [X] ||| Europäischen [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+European [X][X] European [X] ||| Europäischen [X][X] Europäischen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+European Parliament [X][X] whole [X][X] [X] ||| Europäischen Parlament [X][X] gesamten [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.040404
+European Parliament [X][X] of [X][X] [X] ||| Europäischen Parlament [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.040404
+European Parliament [X][X] the European [X] ||| Europäischen Parlament [X][X] Europäischen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0222222
+European Parliament [X][X] European [X] ||| Europäischen Parlament [X][X] Europäischen [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0222222
+European Parliament and [X][X] European [X] ||| Europäischen Parlament und [X][X] Europäischen [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0222222
+[X][X] by [X][X] European Community [X] ||| [X][X] von [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.040404
+[X][X] by [X][X] Community [X] ||| [X][X] von [X][X] Union [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.040404
+[X][X] by the [X][X] Community [X] ||| [X][X] von der [X][X] Union [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.040404
+Parliament [X][X] the [X][X] Community [X] ||| Parlament [X][X] der [X][X] Union [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0222222
+Parliament [X][X] whole [X][X] Community [X] ||| Parlament [X][X] gesamten [X][X] Union [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0222222
+Parliament [X][X] of [X][X] Community [X] ||| Parlament [X][X] [X][X] Union [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0222222
+Parliament [X][X] of the [X][X] [X] ||| Parlament [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-2 ||| 0.0222222
+Parliament [X][X] the European Community [X] ||| Parlament [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+Parliament [X][X] the [X][X] [X] ||| Parlament [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0222222
+Parliament [X][X] European Community [X] ||| Parlament [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+Parliament [X][X] Community [X] ||| Parlament [X][X] Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+Parliament and [X][X] the [X][X] [X] ||| Parlament und [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0222222
+Parliament and [X][X] European Community [X] ||| Parlament und [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0222222
+Parliament and [X][X] Community [X] ||| Parlament und [X][X] Union [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0222222
+Parliament and by [X][X] Community [X] ||| Parlament und von [X][X] Union [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0222222
+[X][X] the [X][X] and [X] ||| [X][X] den [X][X] und [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0799373
+[X][X] the weight [X][X] and [X] ||| [X][X] den ganzen Einfluß [X][X] und [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.0799373
+, [X][X] weight [X][X] and [X] ||| , [X][X] ganzen Einfluß [X][X] und [X] ||| 0.0182166 1 ||| 1-1 3-4 ||| 0.0454545
+, [X][X] prestigious office and [X] ||| , [X][X] Amtes und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0454545
+, using [X][X] and [X] ||| , [X][X] und [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0454545
+, using the [X][X] and [X] ||| , den [X][X] und [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0454545
+representations [X][X] the [X][X] and [X] ||| [X][X] den [X][X] und [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0344828
+[X][X] using [X][X] and [X] ||| [X][X] [X][X] und [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.0344828
+[X][X] using the [X][X] and [X] ||| [X][X] den [X][X] und [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0344828
+representations [X][X] weight [X][X] and [X] ||| [X][X] ganzen Einfluß [X][X] und [X] ||| 0.0182166 1 ||| 1-0 3-3 ||| 0.0344828
+representations [X][X] prestigious office and [X] ||| [X][X] Amtes und [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0344828
+representations [X][X] and [X] ||| [X][X] und [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0344828
+representations , using [X][X] and [X] ||| , [X][X] und [X] ||| 0.0182166 1 ||| 3-1 ||| 0.0344828
+representations , [X][X] and [X] ||| , [X][X] und [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0344828
+[X][X] of your [X][X] the [X] ||| [X][X] Ihres [X][X] der [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.159774
+the [X][X] prestigious office [X][X] [X] ||| den [X][X] Amtes [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.179762
+the [X][X] and the [X] ||| den [X][X] und der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+the [X][X] the [X] ||| den [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+the weight [X][X] and the [X] ||| den ganzen Einfluß [X][X] und der [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0714286
+the weight [X][X] the [X] ||| den ganzen Einfluß [X][X] der [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0714286
+[X][X] weight [X][X] and the [X] ||| [X][X] ganzen Einfluß [X][X] und der [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0883459
+[X][X] weight [X][X] the [X] ||| [X][X] ganzen Einfluß [X][X] der [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0883459
+using [X][X] prestigious office [X][X] [X] ||| [X][X] Amtes [X][X] [X] ||| 0.0182166 1 ||| 1-0 4-2 ||| 0.140067
+using [X][X] and the [X] ||| [X][X] und der [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0526316
+using [X][X] the [X] ||| [X][X] der [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0526316
+using the [X][X] and the [X] ||| den [X][X] und der [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0526316
+using the [X][X] the [X] ||| den [X][X] der [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0526316
+using the weight [X][X] the [X] ||| den ganzen Einfluß [X][X] der [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0526316
+weight [X][X] and the institution [X] ||| ganzen Einfluß [X][X] und der Institution [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0666667
+weight [X][X] and [X][X] [X] ||| ganzen Einfluß [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.176016
+weight [X][X] the institution [X] ||| ganzen Einfluß [X][X] der Institution [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0666667
+weight [X][X] institution [X] ||| ganzen Einfluß [X][X] Institution [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0666667
+weight of your [X][X] institution [X] ||| ganzen Einfluß Ihres [X][X] Institution [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0666667
+[X][X] prestigious office [X][X] institution [X] ||| [X][X] Amtes [X][X] Institution , die [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.121558
+[X][X] prestigious office [X][X] [X] ||| [X][X] Amtes [X][X] , die [X] ||| 0.00910828 1 ||| 0-0 3-2 ||| 0.243116
+[X][X] prestigious office [X][X] [X] ||| [X][X] Amtes [X][X] die [X] ||| 0.00910828 1 ||| 0-0 3-2 ||| 0.243116
+[X][X] prestigious office and [X][X] [X] ||| [X][X] Amtes und [X][X] , die [X] ||| 0.00910828 1 ||| 0-0 4-3 ||| 0.243116
+[X][X] prestigious office and [X][X] [X] ||| [X][X] Amtes und [X][X] die [X] ||| 0.00910828 1 ||| 0-0 4-3 ||| 0.243116
+of your [X][X] and [X][X] [X] ||| Ihres [X][X] und [X][X] , die [X] ||| 0.00910828 1 ||| 2-1 4-3 ||| 0.0833334
+of your [X][X] and [X][X] [X] ||| Ihres [X][X] und [X][X] die [X] ||| 0.00910828 1 ||| 2-1 4-3 ||| 0.0833334
+of your [X][X] the institution [X] ||| Ihres [X][X] der Institution , die [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0416667
+of your [X][X] institution [X] ||| Ihres [X][X] Institution , die [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0416667
+of your [X][X] [X] ||| Ihres [X][X] , die [X] ||| 0.00910828 1 ||| 2-1 ||| 0.0833334
+of your [X][X] [X] ||| Ihres [X][X] die [X] ||| 0.00910828 1 ||| 2-1 ||| 0.0833334
+of your prestigious office [X][X] [X] ||| Ihres Amtes [X][X] , die [X] ||| 0.00910828 1 ||| 4-2 ||| 0.0833334
+of your prestigious office [X][X] [X] ||| Ihres Amtes [X][X] die [X] ||| 0.00910828 1 ||| 4-2 ||| 0.0833334
+[X][X] and the institution you [X] ||| [X][X] und der Institution , die Sie [X] ||| 0.0182166 1 ||| 0-0 ||| 0.114866
+[X][X] and [X][X] you [X] ||| [X][X] und [X][X] , die Sie [X] ||| 0.00607219 1 ||| 0-0 2-2 ||| 0.344598
+[X][X] and [X][X] you [X] ||| [X][X] und [X][X] die Sie [X] ||| 0.00607219 1 ||| 0-0 2-2 ||| 0.344598
+[X][X] and [X][X] you [X] ||| [X][X] und [X][X] Sie [X] ||| 0.00607219 1 ||| 0-0 2-2 ||| 0.344598
+[X][X] and the [X][X] [X] ||| [X][X] und der [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.22885
+[X][X] the institution you [X] ||| [X][X] der Institution , die Sie [X] ||| 0.0182166 1 ||| 0-0 ||| 0.114866
+prestigious office [X][X] institution you [X] ||| Amtes [X][X] Institution , die Sie [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0454545
+prestigious office [X][X] you [X] ||| Amtes [X][X] , die Sie [X] ||| 0.00607219 1 ||| 2-1 ||| 0.136363
+prestigious office [X][X] you [X] ||| Amtes [X][X] die Sie [X] ||| 0.00607219 1 ||| 2-1 ||| 0.136363
+prestigious office [X][X] you [X] ||| Amtes [X][X] Sie [X] ||| 0.00607219 1 ||| 2-1 ||| 0.136363
+prestigious office and [X][X] you [X] ||| Amtes und [X][X] , die Sie [X] ||| 0.00607219 1 ||| 3-2 ||| 0.136363
+prestigious office and [X][X] you [X] ||| Amtes und [X][X] die Sie [X] ||| 0.00607219 1 ||| 3-2 ||| 0.136363
+prestigious office and [X][X] you [X] ||| Amtes und [X][X] Sie [X] ||| 0.00607219 1 ||| 3-2 ||| 0.136363
+prestigious office and the [X][X] [X] ||| Amtes und der [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.112714
+and the institution you represent [X] ||| und der Institution , die Sie vertreten [X] ||| 0.0182166 1 ||| ||| 0.0526316
+[X][X] institution you represent [X] ||| [X][X] Institution , die Sie vertreten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.107519
+[X][X] institution [X][X] [X] ||| [X][X] Institution [X][X] [X] ||| 0.00607219 1 ||| 0-0 2-2 ||| 0.68694
+[X][X] institution [X][X] [X] ||| [X][X] Institution , [X][X] [X] ||| 0.00607219 1 ||| 0-0 2-3 ||| 0.68694
+[X][X] institution [X][X] [X] ||| [X][X] Institution , die [X][X] [X] ||| 0.00607219 1 ||| 0-0 2-4 ||| 0.68694
+and [X][X] you represent [X] ||| und [X][X] , die Sie vertreten [X] ||| 0.00607219 1 ||| 1-1 ||| 0.157895
+and [X][X] you represent [X] ||| und [X][X] die Sie vertreten [X] ||| 0.00607219 1 ||| 1-1 ||| 0.157895
+and [X][X] you represent [X] ||| und [X][X] Sie vertreten [X] ||| 0.00607219 1 ||| 1-1 ||| 0.157895
+and [X][X] represent [X] ||| und [X][X] vertreten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+and the [X][X] represent [X] ||| und der [X][X] vertreten [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+and the institution [X][X] [X] ||| und der Institution [X][X] [X] ||| 0.00607219 1 ||| 3-3 ||| 0.344988
+and the institution [X][X] [X] ||| und der Institution , [X][X] [X] ||| 0.00607219 1 ||| 3-4 ||| 0.344988
+and the institution [X][X] [X] ||| und der Institution , die [X][X] [X] ||| 0.00607219 1 ||| 3-5 ||| 0.344988
+the institution you represent , [X] ||| der Institution , die Sie vertreten , [X] ||| 0.0182166 1 ||| ||| 0.0526316
+[X][X] you represent , [X] ||| [X][X] , die Sie vertreten , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.12335
+[X][X] you [X][X] [X] ||| [X][X] , die Sie [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.241197
+[X][X] you represent , [X] ||| [X][X] die Sie vertreten , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.12335
+[X][X] you [X][X] [X] ||| [X][X] die Sie [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.241197
+[X][X] you represent , [X] ||| [X][X] Sie vertreten , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.12335
+[X][X] you [X][X] [X] ||| [X][X] Sie [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.241197
+the [X][X] represent , [X] ||| der [X][X] vertreten , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+the [X][X] , [X] ||| der [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+the institution [X][X] , [X] ||| der Institution [X][X] , [X] ||| 0.00607219 1 ||| 2-2 ||| 0.157895
+the institution [X][X] , [X] ||| der Institution , [X][X] , [X] ||| 0.00607219 1 ||| 2-3 ||| 0.157895
+the institution [X][X] , [X] ||| der Institution , die [X][X] , [X] ||| 0.00607219 1 ||| 2-4 ||| 0.157895
+the institution you [X][X] [X] ||| der Institution , die Sie [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.119736
+institution you represent , to [X] ||| Institution , die Sie vertreten , bei [X] ||| 0.0182166 1 ||| ||| 0.0588235
+[X][X] represent , to [X] ||| [X][X] vertreten , bei [X] ||| 0.0182166 1 ||| 0-0 ||| 0.124944
+[X][X] represent [X][X] [X] ||| [X][X] vertreten [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.275273
+institution [X][X] , to [X] ||| Institution [X][X] , bei [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0588235
+institution [X][X] to [X] ||| Institution [X][X] bei [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0588235
+institution [X][X] , to [X] ||| Institution , [X][X] , bei [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0588235
+institution [X][X] to [X] ||| Institution , [X][X] bei [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0588235
+institution [X][X] , to [X] ||| Institution , die [X][X] , bei [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0588235
+institution [X][X] to [X] ||| Institution , die [X][X] bei [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0588235
+institution you [X][X] to [X] ||| Institution , die Sie [X][X] bei [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0588235
+institution you represent [X][X] [X] ||| Institution , die Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.157426
+you represent , to the [X] ||| , die Sie vertreten , bei dem [X] ||| 0.0182166 1 ||| ||| 0.0526316
+[X][X] , to the [X] ||| , [X][X] , bei dem [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0526316
+[X][X] , [X][X] [X] ||| , [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.132803
+[X][X] to the [X] ||| , [X][X] bei dem [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0526316
+[X][X] the [X] ||| , [X][X] dem [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0526316
+[X][X] , to the [X] ||| , die [X][X] , bei dem [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0526316
+[X][X] , [X][X] [X] ||| , die [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.132803
+[X][X] to the [X] ||| , die [X][X] bei dem [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0526316
+[X][X] the [X] ||| , die [X][X] dem [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0526316
+you [X][X] to the [X] ||| , die Sie [X][X] bei dem [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0526316
+you [X][X] the [X] ||| , die Sie [X][X] dem [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0526316
+you represent [X][X] the [X] ||| , die Sie vertreten [X][X] dem [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0526316
+you represent , [X][X] [X] ||| , die Sie vertreten , [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.132803
+[X][X] , to the President [X] ||| die [X][X] , bei dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-1 ||| 0.037037
+[X][X] , [X][X] President [X] ||| die [X][X] , [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.037037
+[X][X] , to [X][X] [X] ||| die [X][X] , bei [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.105871
+[X][X] to the President [X] ||| die [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-1 ||| 0.037037
+[X][X] to [X][X] [X] ||| die [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.105871
+[X][X] the President [X] ||| die [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-1 ||| 0.037037
+[X][X] President [X] ||| die [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-1 ||| 0.037037
+you [X][X] to the President [X] ||| die Sie [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-2 ||| 0.037037
+you [X][X] to [X][X] [X] ||| die Sie [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.105871
+you [X][X] the President [X] ||| die Sie [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-2 ||| 0.037037
+you [X][X] President [X] ||| die Sie [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-2 ||| 0.037037
+you represent [X][X] the President [X] ||| die Sie vertreten [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 2-3 ||| 0.037037
+you represent [X][X] President [X] ||| die Sie vertreten [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 2-3 ||| 0.037037
+you represent , [X][X] President [X] ||| die Sie vertreten , [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 3-4 ||| 0.037037
+you represent , to [X][X] [X] ||| die Sie vertreten , bei [X][X] [X] ||| 0.0182166 1 ||| 4-5 ||| 0.105871
+[X][X] , [X][X] President and [X] ||| [X][X] , [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0916759
+[X][X] , [X][X] and [X] ||| [X][X] , [X][X] und [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0916759
+[X][X] , to [X][X] and [X] ||| [X][X] , bei [X][X] und [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0916759
+[X][X] , to the [X][X] [X] ||| [X][X] , bei dem [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.265701
+you [X][X] to [X][X] and [X] ||| Sie [X][X] bei [X][X] und [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0344828
+you [X][X] to the [X][X] [X] ||| Sie [X][X] bei dem [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.103371
+you [X][X] the President and [X] ||| Sie [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+you [X][X] the [X][X] [X] ||| Sie [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.103371
+you [X][X] President and [X] ||| Sie [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+you [X][X] and [X] ||| Sie [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+you represent [X][X] the [X][X] [X] ||| Sie vertreten [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.103371
+you represent [X][X] President and [X] ||| Sie vertreten [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0344828
+you represent [X][X] and [X] ||| Sie vertreten [X][X] und [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0344828
+you represent , [X][X] and [X] ||| Sie vertreten , [X][X] und [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0344828
+[X][X] , [X][X] and to [X] ||| [X][X] , [X][X] und [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0701754
+[X][X] , [X][X] to [X] ||| [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0701754
+[X][X] , to [X][X] to [X] ||| [X][X] , bei [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0701754
+you [X][X] to [X][X] to [X] ||| Sie [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0263158
+you [X][X] the [X][X] to [X] ||| Sie [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0263158
+you [X][X] the President [X][X] [X] ||| Sie [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0688879
+you [X][X] President and to [X] ||| Sie [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0263158
+you [X][X] President [X][X] [X] ||| Sie [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0688879
+you [X][X] and to [X] ||| Sie [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0263158
+you [X][X] to [X] ||| Sie [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0263158
+you represent [X][X] President [X][X] [X] ||| Sie vertreten [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0688879
+you represent [X][X] and to [X] ||| Sie vertreten [X][X] und [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0263158
+you represent [X][X] to [X] ||| Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0263158
+you represent , [X][X] to [X] ||| Sie vertreten , [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0263158
+[X][X] , [X][X] to the [X] ||| [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0649131
+[X][X] , [X][X] the [X] ||| [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0649131
+[X][X] , to [X][X] the [X] ||| [X][X] , bei [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0649131
+you [X][X] to [X][X] the [X] ||| Sie [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0243902
+you [X][X] the [X][X] the [X] ||| Sie [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0243902
+you [X][X] President [X][X] the [X] ||| Sie [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0243902
+you [X][X] and to the [X] ||| Sie [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0243902
+you [X][X] to the [X] ||| Sie [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0243902
+you [X][X] the [X] ||| Sie [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0243902
+you represent [X][X] to the [X] ||| Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0243902
+you represent [X][X] the [X] ||| Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0243902
+you represent , [X][X] the [X] ||| Sie vertreten , [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0243902
+[X][X] to [X][X] the Governor [X] ||| [X][X] bei [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0611584
+[X][X] to [X][X] Governor [X] ||| [X][X] bei [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0611584
+[X][X] to the [X][X] Governor [X] ||| [X][X] bei dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0611584
+represent [X][X] the [X][X] Governor [X] ||| vertreten [X][X] dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0222222
+represent [X][X] President [X][X] Governor [X] ||| vertreten [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0222222
+represent [X][X] President and [X][X] [X] ||| vertreten [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.040404
+represent [X][X] and to [X][X] [X] ||| vertreten [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.040404
+represent [X][X] and [X][X] [X] ||| vertreten [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.040404
+represent [X][X] to the Governor [X] ||| vertreten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+represent [X][X] to [X][X] [X] ||| vertreten [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.040404
+represent [X][X] the Governor [X] ||| vertreten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+represent [X][X] Governor [X] ||| vertreten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+represent , [X][X] and [X][X] [X] ||| vertreten , [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.040404
+represent , [X][X] to [X][X] [X] ||| vertreten , [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.040404
+represent , [X][X] the Governor [X] ||| vertreten , [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0222222
+represent , [X][X] Governor [X] ||| vertreten , [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0222222
+represent , to [X][X] Governor [X] ||| vertreten , bei [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0222222
+[X][X] the [X][X] Governor of [X] ||| [X][X] dem [X][X] Gouverneur von [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.040404
+[X][X] the [X][X] of [X] ||| [X][X] dem [X][X] von [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.040404
+[X][X] the President [X][X] of [X] ||| [X][X] dem Präsidentschaftskandidaten [X][X] von [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.040404
+, [X][X] President [X][X] of [X] ||| , [X][X] Präsidentschaftskandidaten [X][X] von [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0222222
+, [X][X] and [X][X] of [X] ||| , [X][X] und [X][X] von [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0222222
+, [X][X] to [X][X] of [X] ||| , [X][X] [X][X] von [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0222222
+, [X][X] to the [X][X] [X] ||| , [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-2 ||| 0.0222222
+, [X][X] the Governor of [X] ||| , [X][X] Gouverneur von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+, [X][X] the [X][X] [X] ||| , [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0222222
+, [X][X] Governor of [X] ||| , [X][X] Gouverneur von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+, [X][X] of [X] ||| , [X][X] von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+, to [X][X] the [X][X] [X] ||| , bei [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0222222
+, to [X][X] Governor of [X] ||| , bei [X][X] Gouverneur von [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0222222
+, to [X][X] of [X] ||| , bei [X][X] von [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0222222
+, to the [X][X] of [X] ||| , bei dem [X][X] von [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0222222
+[X][X] the Governor [X][X] [X] ||| [X][X] Gouverneur [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.275949
+[X][X] the Governor of [X][X] [X] ||| [X][X] Gouverneur von [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.275949
+[X][X] Governor [X][X] [X] ||| [X][X] Gouverneur [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.275949
+[X][X] Governor of [X][X] [X] ||| [X][X] Gouverneur von [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.275949
+and to [X][X] of [X][X] [X] ||| und [X][X] von [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.152597
+and [X][X] of [X][X] [X] ||| und [X][X] von [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.152597
+and [X][X] Texas , Mr [X] ||| und [X][X] Texas , George W. [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+and to the Governor [X][X] [X] ||| und Gouverneur [X][X] [X] ||| 0.0182166 1 ||| 4-2 ||| 0.152597
+[X][X] Texas , Mr Bush [X] ||| [X][X] Texas , George W. Bush [X] ||| 0.0182166 1 ||| 0-0 ||| 0.446399
+Governor [X][X] Bush [X] ||| Gouverneur [X][X] Bush [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+Governor of [X][X] Bush [X] ||| Gouverneur von [X][X] Bush [X] ||| 0.0182166 1 ||| 2-2 ||| 0.166667
+[X][X] of [X][X] Bush [X] ||| [X][X] von [X][X] Bush [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.279733
+the [X][X] Bush [X] ||| [X][X] Bush [X] ||| 0.0182166 1 ||| 1-0 ||| 0.111111
+the Governor [X][X] Bush [X] ||| Gouverneur [X][X] Bush [X] ||| 0.0182166 1 ||| 2-1 ||| 0.111111
+the Governor of [X][X] Bush [X] ||| Gouverneur von [X][X] Bush [X] ||| 0.0182166 1 ||| 3-2 ||| 0.111111
+to [X][X] of [X][X] Bush [X] ||| [X][X] von [X][X] Bush [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0909091
+to the [X][X] Bush [X] ||| [X][X] Bush [X] ||| 0.0182166 1 ||| 2-0 ||| 0.0909091
+to [X][X] Bush [X] ||| [X][X] Bush [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0909091
+to the Governor [X][X] Bush [X] ||| Gouverneur [X][X] Bush [X] ||| 0.0182166 1 ||| 3-1 ||| 0.0909091
+of [X][X] Bush , [X] ||| von [X][X] Bush , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+of [X][X] , [X] ||| von [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+of Texas , Mr [X][X] [X] ||| von Texas , George W. [X][X] [X] ||| 0.0182166 1 ||| 4-5 ||| 0.266667
+[X][X] Bush , who [X] ||| [X][X] Bush , der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.419841
+[X][X] Bush [X][X] [X] ||| [X][X] Bush [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.419841
+[X][X] , who [X] ||| [X][X] , der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.419841
+Texas , Mr [X][X] who [X] ||| Texas , George W. [X][X] der [X] ||| 0.0182166 1 ||| 3-4 ||| 0.142857
+Texas , Mr Bush [X][X] [X] ||| Texas , George W. Bush [X][X] [X] ||| 0.0182166 1 ||| 4-5 ||| 0.142857
+to order [X][X] and [X] ||| zur [X][X] und [X] ||| 0.0182166 1 ||| 2-1 ||| 0.333333
+power [X][X] and [X] ||| [X][X] und [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+power to order [X][X] and [X] ||| zur [X][X] und [X] ||| 0.0182166 1 ||| 3-1 ||| 0.25
+the power [X][X] and [X] ||| [X][X] und [X] ||| 0.0182166 1 ||| 2-0 ||| 0.25
+the [X][X] and [X] ||| [X][X] und [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+[X][X] and to [X] ||| [X][X] und zur [X] ||| 0.0182166 1 ||| 0-0 ||| 0.842857
+[X][X] to [X] ||| [X][X] zur [X] ||| 0.0182166 1 ||| 0-0 ||| 0.842857
+a stay of execution [X][X] [X] ||| Aussetzung der Vollstreckung des Todesurteils [X][X] [X] ||| 0.0182166 1 ||| 4-5 ||| 0.711111
+[X][X] and [X][X] European Community [X] ||| [X][X] und [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0181818
+[X][X] and [X][X] Community [X] ||| [X][X] und [X][X] Union [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0181818
+[X][X] and by [X][X] Community [X] ||| [X][X] und von [X][X] Union [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0181818
+European [X][X] by [X][X] Community [X] ||| Europäischen [X][X] von [X][X] Union [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0181818
+European [X][X] the [X][X] Community [X] ||| Europäischen [X][X] der [X][X] Union [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0181818
+European [X][X] whole [X][X] Community [X] ||| Europäischen [X][X] gesamten [X][X] Union [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0181818
+European [X][X] of [X][X] Community [X] ||| Europäischen [X][X] [X][X] Union [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0181818
+European [X][X] of the [X][X] [X] ||| Europäischen [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-2 ||| 0.0181818
+European [X][X] the European Community [X] ||| Europäischen [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0181818
+European [X][X] the [X][X] [X] ||| Europäischen [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0181818
+European [X][X] European Community [X] ||| Europäischen [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0181818
+European [X][X] Community [X] ||| Europäischen [X][X] Union [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0181818
+European Parliament [X][X] the [X][X] [X] ||| Europäischen Parlament [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0181818
+European Parliament [X][X] European Community [X] ||| Europäischen Parlament [X][X] Europäischen Union [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0181818
+European Parliament [X][X] Community [X] ||| Europäischen Parlament [X][X] Union [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0181818
+European Parliament and [X][X] Community [X] ||| Europäischen Parlament und [X][X] Union [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0181818
+[X][X] the [X][X] and the [X] ||| [X][X] den [X][X] und der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0357143
+[X][X] the [X][X] the [X] ||| [X][X] den [X][X] der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0357143
+[X][X] the weight [X][X] the [X] ||| [X][X] den ganzen Einfluß [X][X] der [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.0357143
+, [X][X] weight [X][X] the [X] ||| , [X][X] ganzen Einfluß [X][X] der [X] ||| 0.0182166 1 ||| 1-1 3-4 ||| 0.0357143
+, [X][X] prestigious office [X][X] [X] ||| , [X][X] Amtes [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0357143
+, using [X][X] and the [X] ||| , [X][X] und der [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0357143
+, [X][X] and the [X] ||| , [X][X] und der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+, using [X][X] the [X] ||| , [X][X] der [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0357143
+, [X][X] the [X] ||| , [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+, using the [X][X] the [X] ||| , den [X][X] der [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0357143
+[X][X] of your [X][X] institution [X] ||| [X][X] Ihres [X][X] Institution [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.09
+the [X][X] and the institution [X] ||| den [X][X] und der Institution [X] ||| 0.0182166 1 ||| 1-1 ||| 0.05
+the [X][X] and [X][X] [X] ||| den [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.108333
+the [X][X] the institution [X] ||| den [X][X] der Institution [X] ||| 0.0182166 1 ||| 1-1 ||| 0.05
+the [X][X] institution [X] ||| den [X][X] Institution [X] ||| 0.0182166 1 ||| 1-1 ||| 0.05
+the weight [X][X] and [X][X] [X] ||| den ganzen Einfluß [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.108333
+the weight [X][X] the institution [X] ||| den ganzen Einfluß [X][X] der Institution [X] ||| 0.0182166 1 ||| 2-3 ||| 0.05
+the weight [X][X] institution [X] ||| den ganzen Einfluß [X][X] Institution [X] ||| 0.0182166 1 ||| 2-3 ||| 0.05
+[X][X] weight [X][X] the institution [X] ||| [X][X] ganzen Einfluß [X][X] der Institution [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.04
+[X][X] weight [X][X] institution [X] ||| [X][X] ganzen Einfluß [X][X] Institution [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.04
+using [X][X] and the institution [X] ||| [X][X] und der Institution [X] ||| 0.0182166 1 ||| 1-0 ||| 0.04
+using [X][X] and [X][X] [X] ||| [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0874352
+using [X][X] the institution [X] ||| [X][X] der Institution [X] ||| 0.0182166 1 ||| 1-0 ||| 0.04
+using [X][X] institution [X] ||| [X][X] Institution [X] ||| 0.0182166 1 ||| 1-0 ||| 0.04
+using the [X][X] and [X][X] [X] ||| den [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0874352
+using the [X][X] the institution [X] ||| den [X][X] der Institution [X] ||| 0.0182166 1 ||| 2-1 ||| 0.04
+using the [X][X] institution [X] ||| den [X][X] Institution [X] ||| 0.0182166 1 ||| 2-1 ||| 0.04
+using the weight [X][X] institution [X] ||| den ganzen Einfluß [X][X] Institution [X] ||| 0.0182166 1 ||| 3-3 ||| 0.04
+weight [X][X] prestigious office [X][X] [X] ||| ganzen Einfluß [X][X] Amtes [X][X] , [X] ||| 0.0182166 1 ||| 1-2 4-4 ||| 0.0454545
+weight [X][X] and the institution [X] ||| ganzen Einfluß [X][X] und der Institution , [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0454545
+weight [X][X] and [X][X] [X] ||| ganzen Einfluß [X][X] und [X][X] , [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0454545
+weight [X][X] the institution [X] ||| ganzen Einfluß [X][X] der Institution , [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0454545
+weight [X][X] institution [X] ||| ganzen Einfluß [X][X] Institution , [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0454545
+weight [X][X] [X] ||| ganzen Einfluß [X][X] , [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0454545
+weight of your [X][X] institution [X] ||| ganzen Einfluß Ihres [X][X] Institution , [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0454545
+weight of your [X][X] [X] ||| ganzen Einfluß Ihres [X][X] , [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0454545
+[X][X] prestigious office [X][X] you [X] ||| [X][X] Amtes [X][X] , die Sie [X] ||| 0.00607219 1 ||| 0-0 3-2 ||| 0.208235
+[X][X] prestigious office [X][X] you [X] ||| [X][X] Amtes [X][X] die Sie [X] ||| 0.00607219 1 ||| 0-0 3-2 ||| 0.208235
+[X][X] prestigious office [X][X] you [X] ||| [X][X] Amtes [X][X] Sie [X] ||| 0.00607219 1 ||| 0-0 3-2 ||| 0.208235
+of your [X][X] the [X][X] [X] ||| Ihres [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0867239
+of your [X][X] institution you [X] ||| Ihres [X][X] Institution , die Sie [X] ||| 0.0182166 1 ||| 2-1 ||| 0.04
+of your [X][X] you [X] ||| Ihres [X][X] , die Sie [X] ||| 0.00607219 1 ||| 2-1 ||| 0.12
+of your [X][X] you [X] ||| Ihres [X][X] die Sie [X] ||| 0.00607219 1 ||| 2-1 ||| 0.12
+of your [X][X] you [X] ||| Ihres [X][X] Sie [X] ||| 0.00607219 1 ||| 2-1 ||| 0.12
+[X][X] and [X][X] you represent [X] ||| [X][X] und [X][X] , die Sie vertreten [X] ||| 0.00607219 1 ||| 0-0 2-2 ||| 0.164662
+[X][X] and [X][X] you represent [X] ||| [X][X] und [X][X] die Sie vertreten [X] ||| 0.00607219 1 ||| 0-0 2-2 ||| 0.164662
+[X][X] and [X][X] you represent [X] ||| [X][X] und [X][X] Sie vertreten [X] ||| 0.00607219 1 ||| 0-0 2-2 ||| 0.164662
+[X][X] and [X][X] represent [X] ||| [X][X] und [X][X] vertreten [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0548872
+[X][X] and the [X][X] represent [X] ||| [X][X] und der [X][X] vertreten [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0548872
+[X][X] and the institution [X][X] [X] ||| [X][X] und der Institution [X][X] [X] ||| 0.00607219 1 ||| 0-0 4-4 ||| 0.341952
+[X][X] and the institution [X][X] [X] ||| [X][X] und der Institution , [X][X] [X] ||| 0.00607219 1 ||| 0-0 4-5 ||| 0.341952
+[X][X] and the institution [X][X] [X] ||| [X][X] und der Institution , die [X][X] [X] ||| 0.00607219 1 ||| 0-0 4-6 ||| 0.341952
+[X][X] the institution you represent [X] ||| [X][X] der Institution , die Sie vertreten [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0548872
+[X][X] the [X][X] represent [X] ||| [X][X] der [X][X] vertreten [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0548872
+[X][X] the institution [X][X] [X] ||| [X][X] der Institution [X][X] [X] ||| 0.00607219 1 ||| 0-0 3-3 ||| 0.341952
+[X][X] the institution [X][X] [X] ||| [X][X] der Institution , [X][X] [X] ||| 0.00607219 1 ||| 0-0 3-4 ||| 0.341952
+[X][X] the institution [X][X] [X] ||| [X][X] der Institution , die [X][X] [X] ||| 0.00607219 1 ||| 0-0 3-5 ||| 0.341952
+prestigious office [X][X] institution [X][X] [X] ||| Amtes [X][X] Institution [X][X] [X] ||| 0.00607219 1 ||| 2-1 4-3 ||| 0.201779
+prestigious office [X][X] institution [X][X] [X] ||| Amtes [X][X] Institution , [X][X] [X] ||| 0.00607219 1 ||| 2-1 4-4 ||| 0.201779
+prestigious office [X][X] institution [X][X] [X] ||| Amtes [X][X] Institution , die [X][X] [X] ||| 0.00607219 1 ||| 2-1 4-5 ||| 0.201779
+prestigious office [X][X] you represent [X] ||| Amtes [X][X] , die Sie vertreten [X] ||| 0.00607219 1 ||| 2-1 ||| 0.0857142
+prestigious office [X][X] you represent [X] ||| Amtes [X][X] die Sie vertreten [X] ||| 0.00607219 1 ||| 2-1 ||| 0.0857142
+prestigious office [X][X] you represent [X] ||| Amtes [X][X] Sie vertreten [X] ||| 0.00607219 1 ||| 2-1 ||| 0.0857142
+prestigious office [X][X] represent [X] ||| Amtes [X][X] vertreten [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0285714
+prestigious office and [X][X] represent [X] ||| Amtes und [X][X] vertreten [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0285714
+[X][X] institution you represent , [X] ||| [X][X] Institution , die Sie vertreten , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0707187
+[X][X] institution [X][X] , [X] ||| [X][X] Institution [X][X] , [X] ||| 0.00607219 1 ||| 0-0 2-2 ||| 0.212156
+[X][X] institution [X][X] , [X] ||| [X][X] Institution , [X][X] , [X] ||| 0.00607219 1 ||| 0-0 2-3 ||| 0.212156
+[X][X] institution [X][X] , [X] ||| [X][X] Institution , die [X][X] , [X] ||| 0.00607219 1 ||| 0-0 2-4 ||| 0.212156
+[X][X] institution you [X][X] [X] ||| [X][X] Institution , die Sie [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.121461
+and [X][X] you represent , [X] ||| und [X][X] , die Sie vertreten , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0285714
+and [X][X] you [X][X] [X] ||| und [X][X] , die Sie [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-5 ||| 0.0623647
+and [X][X] you represent , [X] ||| und [X][X] die Sie vertreten , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0285714
+and [X][X] you [X][X] [X] ||| und [X][X] die Sie [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-4 ||| 0.0623647
+and [X][X] you represent , [X] ||| und [X][X] Sie vertreten , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0285714
+and [X][X] you [X][X] [X] ||| und [X][X] Sie [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0623647
+and [X][X] represent , [X] ||| und [X][X] vertreten , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0285714
+and [X][X] , [X] ||| und [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0642857
+and the [X][X] represent , [X] ||| und der [X][X] vertreten , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0285714
+and the [X][X] , [X] ||| und der [X][X] , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0285714
+and the institution [X][X] , [X] ||| und der Institution [X][X] , [X] ||| 0.00607219 1 ||| 3-3 ||| 0.0857142
+and the institution [X][X] , [X] ||| und der Institution , [X][X] , [X] ||| 0.00607219 1 ||| 3-4 ||| 0.0857142
+and the institution [X][X] , [X] ||| und der Institution , die [X][X] , [X] ||| 0.00607219 1 ||| 3-5 ||| 0.0857142
+and the institution you [X][X] [X] ||| und der Institution , die Sie [X][X] [X] ||| 0.0182166 1 ||| 4-6 ||| 0.0623647
+[X][X] you represent , to [X] ||| [X][X] , die Sie vertreten , bei [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0661201
+[X][X] you [X][X] to [X] ||| [X][X] , die Sie [X][X] bei [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.0661201
+[X][X] you represent [X][X] [X] ||| [X][X] , die Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.117847
+[X][X] you represent , to [X] ||| [X][X] die Sie vertreten , bei [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0661201
+[X][X] you [X][X] to [X] ||| [X][X] die Sie [X][X] bei [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0661201
+[X][X] you represent [X][X] [X] ||| [X][X] die Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.117847
+[X][X] you represent , to [X] ||| [X][X] Sie vertreten , bei [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0661201
+[X][X] you [X][X] to [X] ||| [X][X] Sie [X][X] bei [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0661201
+[X][X] you represent [X][X] [X] ||| [X][X] Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.117847
+the [X][X] represent , to [X] ||| der [X][X] vertreten , bei [X] ||| 0.0182166 1 ||| 1-1 ||| 0.030303
+the [X][X] represent [X][X] [X] ||| der [X][X] vertreten [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0671046
+the [X][X] , to [X] ||| der [X][X] , bei [X] ||| 0.0182166 1 ||| 1-1 ||| 0.030303
+the [X][X] to [X] ||| der [X][X] bei [X] ||| 0.0182166 1 ||| 1-1 ||| 0.030303
+the institution [X][X] , to [X] ||| der Institution [X][X] , bei [X] ||| 0.0182166 1 ||| 2-2 ||| 0.030303
+the institution [X][X] to [X] ||| der Institution [X][X] bei [X] ||| 0.0182166 1 ||| 2-2 ||| 0.030303
+the institution [X][X] , to [X] ||| der Institution , [X][X] , bei [X] ||| 0.0182166 1 ||| 2-3 ||| 0.030303
+the institution [X][X] to [X] ||| der Institution , [X][X] bei [X] ||| 0.0182166 1 ||| 2-3 ||| 0.030303
+the institution [X][X] , to [X] ||| der Institution , die [X][X] , bei [X] ||| 0.0182166 1 ||| 2-4 ||| 0.030303
+the institution [X][X] to [X] ||| der Institution , die [X][X] bei [X] ||| 0.0182166 1 ||| 2-4 ||| 0.030303
+the institution you [X][X] to [X] ||| der Institution , die Sie [X][X] bei [X] ||| 0.0182166 1 ||| 3-5 ||| 0.030303
+the institution you represent [X][X] [X] ||| der Institution , die Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 4-6 ||| 0.0671046
+[X][X] represent , to the [X] ||| [X][X] vertreten , bei dem [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0698163
+[X][X] represent [X][X] the [X] ||| [X][X] vertreten [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0698163
+[X][X] represent , [X][X] [X] ||| [X][X] vertreten , [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.150329
+institution [X][X] , to the [X] ||| Institution [X][X] , bei dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+institution [X][X] , [X][X] [X] ||| Institution [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.098602
+institution [X][X] to the [X] ||| Institution [X][X] bei dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+institution [X][X] the [X] ||| Institution [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+institution [X][X] , to the [X] ||| Institution , [X][X] , bei dem [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0344828
+institution [X][X] , [X][X] [X] ||| Institution , [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.098602
+institution [X][X] to the [X] ||| Institution , [X][X] bei dem [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0344828
+institution [X][X] the [X] ||| Institution , [X][X] dem [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0344828
+institution [X][X] , to the [X] ||| Institution , die [X][X] , bei dem [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0344828
+institution [X][X] , [X][X] [X] ||| Institution , die [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.098602
+institution [X][X] to the [X] ||| Institution , die [X][X] bei dem [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0344828
+institution [X][X] the [X] ||| Institution , die [X][X] dem [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0344828
+institution you [X][X] to the [X] ||| Institution , die Sie [X][X] bei dem [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0344828
+institution you [X][X] the [X] ||| Institution , die Sie [X][X] dem [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0344828
+institution you represent [X][X] the [X] ||| Institution , die Sie vertreten [X][X] dem [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0344828
+institution you represent , [X][X] [X] ||| Institution , die Sie vertreten , [X][X] [X] ||| 0.0182166 1 ||| 4-6 ||| 0.098602
+[X][X] , to the President [X] ||| , [X][X] , bei dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0285714
+[X][X] , [X][X] President [X] ||| , [X][X] , [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0285714
+[X][X] , to [X][X] [X] ||| , [X][X] , bei [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0801709
+[X][X] to the President [X] ||| , [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0285714
+[X][X] to [X][X] [X] ||| , [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0801709
+[X][X] the President [X] ||| , [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0285714
+[X][X] President [X] ||| , [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0285714
+[X][X] , to the President [X] ||| , die [X][X] , bei dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0285714
+[X][X] , [X][X] President [X] ||| , die [X][X] , [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.0285714
+[X][X] , to [X][X] [X] ||| , die [X][X] , bei [X][X] [X] ||| 0.0182166 1 ||| 0-2 3-5 ||| 0.0801709
+[X][X] to the President [X] ||| , die [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0285714
+[X][X] to [X][X] [X] ||| , die [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.0801709
+[X][X] the President [X] ||| , die [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0285714
+[X][X] President [X] ||| , die [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0285714
+you [X][X] to the President [X] ||| , die Sie [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0285714
+you [X][X] to [X][X] [X] ||| , die Sie [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.0801709
+you [X][X] the President [X] ||| , die Sie [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0285714
+you [X][X] President [X] ||| , die Sie [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0285714
+you represent [X][X] the President [X] ||| , die Sie vertreten [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0285714
+you represent [X][X] President [X] ||| , die Sie vertreten [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0285714
+you represent , [X][X] President [X] ||| , die Sie vertreten , [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0285714
+you represent , to [X][X] [X] ||| , die Sie vertreten , bei [X][X] [X] ||| 0.0182166 1 ||| 4-6 ||| 0.0801709
+[X][X] , [X][X] President and [X] ||| die [X][X] , [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0232558
+[X][X] , [X][X] and [X] ||| die [X][X] , [X][X] und [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0232558
+[X][X] , to [X][X] and [X] ||| die [X][X] , bei [X][X] und [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0232558
+[X][X] , to the [X][X] [X] ||| die [X][X] , bei dem [X][X] [X] ||| 0.0182166 1 ||| 0-1 4-5 ||| 0.0688335
+[X][X] to the President and [X] ||| die [X][X] bei dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0232558
+[X][X] to [X][X] and [X] ||| die [X][X] bei [X][X] und [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0232558
+[X][X] to the [X][X] [X] ||| die [X][X] bei dem [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0688335
+[X][X] the President and [X] ||| die [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0232558
+[X][X] the [X][X] [X] ||| die [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0688335
+[X][X] President and [X] ||| die [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0232558
+[X][X] and [X] ||| die [X][X] und [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0232558
+you [X][X] to [X][X] and [X] ||| die Sie [X][X] bei [X][X] und [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0232558
+you [X][X] to the [X][X] [X] ||| die Sie [X][X] bei dem [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-5 ||| 0.0688335
+you [X][X] the President and [X] ||| die Sie [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0232558
+you [X][X] the [X][X] [X] ||| die Sie [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0688335
+you [X][X] President and [X] ||| die Sie [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0232558
+you [X][X] and [X] ||| die Sie [X][X] und [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0232558
+you represent [X][X] the [X][X] [X] ||| die Sie vertreten [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.0688335
+you represent [X][X] President and [X] ||| die Sie vertreten [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0232558
+you represent [X][X] and [X] ||| die Sie vertreten [X][X] und [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0232558
+you represent , [X][X] and [X] ||| die Sie vertreten , [X][X] und [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0232558
+[X][X] , [X][X] and to [X] ||| die [X][X] , [X][X] und [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0175439
+[X][X] , [X][X] to [X] ||| die [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0175439
+[X][X] , to [X][X] to [X] ||| die [X][X] , bei [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0175439
+[X][X] to [X][X] and to [X] ||| die [X][X] bei [X][X] und [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0175439
+[X][X] to [X][X] to [X] ||| die [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0175439
+[X][X] to the [X][X] to [X] ||| die [X][X] bei dem [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0175439
+[X][X] to the President [X][X] [X] ||| die [X][X] bei dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 0-1 4-5 ||| 0.0455777
+[X][X] the President and to [X] ||| die [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0175439
+[X][X] the [X][X] to [X] ||| die [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0175439
+[X][X] the President [X][X] [X] ||| die [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0455777
+[X][X] President and to [X] ||| die [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0175439
+[X][X] President [X][X] [X] ||| die [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0455777
+[X][X] and to [X] ||| die [X][X] und [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0175439
+you [X][X] to [X][X] to [X] ||| die Sie [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0175439
+you [X][X] the [X][X] to [X] ||| die Sie [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0175439
+you [X][X] the President [X][X] [X] ||| die Sie [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-5 ||| 0.0455777
+you [X][X] President and to [X] ||| die Sie [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0175439
+you [X][X] President [X][X] [X] ||| die Sie [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0455777
+you [X][X] and to [X] ||| die Sie [X][X] und [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0175439
+you [X][X] to [X] ||| die Sie [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0175439
+you represent [X][X] President [X][X] [X] ||| die Sie vertreten [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.0455777
+you represent [X][X] and to [X] ||| die Sie vertreten [X][X] und [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0175439
+you represent [X][X] to [X] ||| die Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0175439
+you represent , [X][X] to [X] ||| die Sie vertreten , [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0175439
+[X][X] , [X][X] to the [X] ||| die [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.016129
+[X][X] , [X][X] the [X] ||| die [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.016129
+[X][X] , to [X][X] the [X] ||| die [X][X] , bei [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.016129
+[X][X] to [X][X] to the [X] ||| die [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.016129
+[X][X] to [X][X] the [X] ||| die [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.016129
+[X][X] to the [X][X] the [X] ||| die [X][X] bei dem [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.016129
+[X][X] the [X][X] to the [X] ||| die [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.016129
+[X][X] the [X][X] the [X] ||| die [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.016129
+[X][X] the President [X][X] the [X] ||| die [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.016129
+[X][X] President and to the [X] ||| die [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-1 ||| 0.016129
+[X][X] President [X][X] the [X] ||| die [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.016129
+[X][X] and to the [X] ||| die [X][X] und [X] ||| 0.0182166 1 ||| 0-1 ||| 0.016129
+you [X][X] to [X][X] the [X] ||| die Sie [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.016129
+you [X][X] the [X][X] the [X] ||| die Sie [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.016129
+you [X][X] President [X][X] the [X] ||| die Sie [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.016129
+you [X][X] and to the [X] ||| die Sie [X][X] und [X] ||| 0.0182166 1 ||| 1-2 ||| 0.016129
+you [X][X] to the [X] ||| die Sie [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.016129
+you [X][X] the [X] ||| die Sie [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.016129
+you represent [X][X] to the [X] ||| die Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.016129
+you represent [X][X] the [X] ||| die Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.016129
+you represent , [X][X] the [X] ||| die Sie vertreten , [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.016129
+[X][X] , [X][X] the Governor [X] ||| [X][X] , [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0389361
+[X][X] , [X][X] Governor [X] ||| [X][X] , [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0389361
+[X][X] , to [X][X] Governor [X] ||| [X][X] , bei [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0389361
+you [X][X] to [X][X] Governor [X] ||| Sie [X][X] bei [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0181818
+you [X][X] the [X][X] Governor [X] ||| Sie [X][X] dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0181818
+you [X][X] President [X][X] Governor [X] ||| Sie [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0181818
+you [X][X] President and [X][X] [X] ||| Sie [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0181818
+you [X][X] and to [X][X] [X] ||| Sie [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0181818
+you [X][X] and [X][X] [X] ||| Sie [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0181818
+you [X][X] to the Governor [X] ||| Sie [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0181818
+you [X][X] to [X][X] [X] ||| Sie [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0181818
+you [X][X] the Governor [X] ||| Sie [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0181818
+you [X][X] Governor [X] ||| Sie [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0181818
+you represent [X][X] and [X][X] [X] ||| Sie vertreten [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0181818
+you represent [X][X] to [X][X] [X] ||| Sie vertreten [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0181818
+you represent [X][X] the Governor [X] ||| Sie vertreten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0181818
+you represent [X][X] Governor [X] ||| Sie vertreten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0181818
+you represent , [X][X] Governor [X] ||| Sie vertreten , [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0181818
+[X][X] to [X][X] Governor of [X] ||| [X][X] bei [X][X] Gouverneur von [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0181818
+[X][X] to [X][X] of [X] ||| [X][X] bei [X][X] von [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0181818
+[X][X] to the [X][X] of [X] ||| [X][X] bei dem [X][X] von [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0181818
+represent [X][X] the [X][X] of [X] ||| vertreten [X][X] dem [X][X] von [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0181818
+represent [X][X] President [X][X] of [X] ||| vertreten [X][X] Präsidentschaftskandidaten [X][X] von [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0181818
+represent [X][X] and [X][X] of [X] ||| vertreten [X][X] und [X][X] von [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0181818
+represent [X][X] to [X][X] of [X] ||| vertreten [X][X] [X][X] von [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0181818
+represent [X][X] to the [X][X] [X] ||| vertreten [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-2 ||| 0.0181818
+represent [X][X] the Governor of [X] ||| vertreten [X][X] Gouverneur von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0181818
+represent [X][X] the [X][X] [X] ||| vertreten [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0181818
+represent [X][X] Governor of [X] ||| vertreten [X][X] Gouverneur von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0181818
+represent [X][X] of [X] ||| vertreten [X][X] von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0181818
+represent , [X][X] the [X][X] [X] ||| vertreten , [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0181818
+represent , [X][X] Governor of [X] ||| vertreten , [X][X] Gouverneur von [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0181818
+represent , [X][X] of [X] ||| vertreten , [X][X] von [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0181818
+represent , to [X][X] of [X] ||| vertreten , bei [X][X] von [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0181818
+[X][X] to the Governor [X][X] [X] ||| [X][X] Gouverneur [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-2 ||| 0.123351
+President [X][X] the Governor [X][X] [X] ||| Präsidentschaftskandidaten [X][X] Gouverneur [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0848896
+President [X][X] Governor [X][X] [X] ||| Präsidentschaftskandidaten [X][X] Gouverneur [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0848896
+President [X][X] Governor of [X][X] [X] ||| Präsidentschaftskandidaten [X][X] Gouverneur von [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0848896
+President [X][X] of [X][X] [X] ||| Präsidentschaftskandidaten [X][X] von [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0848896
+President [X][X] Texas , Mr [X] ||| Präsidentschaftskandidaten [X][X] Texas , George W. [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+President and [X][X] of [X][X] [X] ||| Präsidentschaftskandidaten und [X][X] von [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0848896
+[X][X] the [X][X] Bush [X] ||| [X][X] [X][X] Bush [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.0777126
+[X][X] the Governor [X][X] Bush [X] ||| [X][X] Gouverneur [X][X] Bush [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0777126
+[X][X] Governor [X][X] Bush [X] ||| [X][X] Gouverneur [X][X] Bush [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0777126
+[X][X] Governor of [X][X] Bush [X] ||| [X][X] Gouverneur von [X][X] Bush [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0777126
+and [X][X] of [X][X] Bush [X] ||| und [X][X] von [X][X] Bush [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0454545
+and to the [X][X] Bush [X] ||| und [X][X] Bush [X] ||| 0.0182166 1 ||| 3-1 ||| 0.0454545
+and to [X][X] Bush [X] ||| und [X][X] Bush [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0454545
+and [X][X] Bush [X] ||| und [X][X] Bush [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0454545
+[X][X] Texas , Mr [X][X] [X] ||| [X][X] Texas , George W. [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-5 ||| 0.467399
+Governor [X][X] Bush , [X] ||| Gouverneur [X][X] Bush , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+Governor [X][X] , [X] ||| Gouverneur [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+Governor of [X][X] Bush , [X] ||| Gouverneur von [X][X] Bush , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.111111
+Governor of [X][X] , [X] ||| Gouverneur von [X][X] , [X] ||| 0.0182166 1 ||| 2-2 ||| 0.111111
+[X][X] of [X][X] Bush , [X] ||| [X][X] von [X][X] Bush , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.179304
+[X][X] of [X][X] , [X] ||| [X][X] von [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.179304
+the [X][X] Bush , [X] ||| [X][X] Bush , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0769231
+the [X][X] , [X] ||| [X][X] , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0769231
+the Governor [X][X] Bush , [X] ||| Gouverneur [X][X] Bush , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0769231
+the Governor [X][X] , [X] ||| Gouverneur [X][X] , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0769231
+the Governor of [X][X] , [X] ||| Gouverneur von [X][X] , [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0769231
+to [X][X] of [X][X] , [X] ||| [X][X] von [X][X] , [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0666667
+to the [X][X] Bush , [X] ||| [X][X] Bush , [X] ||| 0.0182166 1 ||| 2-0 ||| 0.0666667
+to [X][X] Bush , [X] ||| [X][X] Bush , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0666667
+to the [X][X] , [X] ||| [X][X] , [X] ||| 0.0182166 1 ||| 2-0 ||| 0.0666667
+to [X][X] , [X] ||| [X][X] , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0666667
+to the Governor [X][X] , [X] ||| Gouverneur [X][X] , [X] ||| 0.0182166 1 ||| 3-1 ||| 0.0666667
+of [X][X] Bush , who [X] ||| von [X][X] Bush , der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+of [X][X] Bush [X][X] [X] ||| von [X][X] Bush [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.1
+of [X][X] , who [X] ||| von [X][X] , der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+of [X][X] who [X] ||| von [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+to order [X][X] and to [X] ||| zur [X][X] und zur [X] ||| 0.0182166 1 ||| 2-1 ||| 0.2
+to order [X][X] to [X] ||| zur [X][X] zur [X] ||| 0.0182166 1 ||| 2-1 ||| 0.2
+power [X][X] and to [X] ||| [X][X] und zur [X] ||| 0.0182166 1 ||| 1-0 ||| 0.166667
+power [X][X] to [X] ||| [X][X] zur [X] ||| 0.0182166 1 ||| 1-0 ||| 0.166667
+power to order [X][X] to [X] ||| zur [X][X] zur [X] ||| 0.0182166 1 ||| 3-1 ||| 0.166667
+the power [X][X] and to [X] ||| [X][X] und zur [X] ||| 0.0182166 1 ||| 2-0 ||| 0.142857
+the [X][X] and to [X] ||| [X][X] und zur [X] ||| 0.0182166 1 ||| 1-0 ||| 0.142857
+the power [X][X] to [X] ||| [X][X] zur [X] ||| 0.0182166 1 ||| 2-0 ||| 0.142857
+the [X][X] to [X] ||| [X][X] zur [X] ||| 0.0182166 1 ||| 1-0 ||| 0.142857
+[X][X] and to reprieve [X] ||| [X][X] und zur Begnadigung [X] ||| 0.0182166 1 ||| 0-0 ||| 0.425
+[X][X] to reprieve [X] ||| [X][X] zur Begnadigung [X] ||| 0.0182166 1 ||| 0-0 ||| 0.425
+[X][X] of your [X][X] institution [X] ||| [X][X] Ihres [X][X] Institution , [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0603604
+[X][X] of your [X][X] [X] ||| [X][X] Ihres [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0603604
+the [X][X] prestigious office [X][X] [X] ||| den [X][X] Amtes [X][X] , [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0333333
+the [X][X] and the institution [X] ||| den [X][X] und der Institution , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0333333
+the [X][X] and [X][X] [X] ||| den [X][X] und [X][X] , [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0333333
+the [X][X] the institution [X] ||| den [X][X] der Institution , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0333333
+the [X][X] institution [X] ||| den [X][X] Institution , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0333333
+the [X][X] [X] ||| den [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0333333
+the weight [X][X] and [X][X] [X] ||| den ganzen Einfluß [X][X] und [X][X] , [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.0333333
+the weight [X][X] the institution [X] ||| den ganzen Einfluß [X][X] der Institution , [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0333333
+the weight [X][X] institution [X] ||| den ganzen Einfluß [X][X] Institution , [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0333333
+the weight [X][X] [X] ||| den ganzen Einfluß [X][X] , [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0333333
+the weight of your [X][X] [X] ||| den ganzen Einfluß Ihres [X][X] , [X] ||| 0.0182166 1 ||| 4-4 ||| 0.0333333
+[X][X] weight [X][X] the institution [X] ||| [X][X] ganzen Einfluß [X][X] der Institution , [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.027027
+[X][X] weight [X][X] institution [X] ||| [X][X] ganzen Einfluß [X][X] Institution , [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.027027
+[X][X] weight [X][X] [X] ||| [X][X] ganzen Einfluß [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.027027
+[X][X] weight of your [X][X] [X] ||| [X][X] ganzen Einfluß Ihres [X][X] , [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.027027
+using [X][X] of your [X][X] [X] ||| [X][X] Ihres [X][X] , [X] ||| 0.0182166 1 ||| 1-0 4-2 ||| 0.027027
+using [X][X] prestigious office [X][X] [X] ||| [X][X] Amtes [X][X] , [X] ||| 0.0182166 1 ||| 1-0 4-2 ||| 0.027027
+using [X][X] and the institution [X] ||| [X][X] und der Institution , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.027027
+using [X][X] and [X][X] [X] ||| [X][X] und [X][X] , [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.027027
+using [X][X] the institution [X] ||| [X][X] der Institution , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.027027
+using [X][X] institution [X] ||| [X][X] Institution , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.027027
+using the [X][X] and [X][X] [X] ||| den [X][X] und [X][X] , [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.027027
+using the [X][X] the institution [X] ||| den [X][X] der Institution , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.027027
+using the [X][X] institution [X] ||| den [X][X] Institution , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.027027
+using the [X][X] [X] ||| den [X][X] , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.027027
+using the weight [X][X] institution [X] ||| den ganzen Einfluß [X][X] Institution , [X] ||| 0.0182166 1 ||| 3-3 ||| 0.027027
+using the weight [X][X] [X] ||| den ganzen Einfluß [X][X] , [X] ||| 0.0182166 1 ||| 3-3 ||| 0.027027
+weight [X][X] prestigious office [X][X] [X] ||| ganzen Einfluß [X][X] Amtes [X][X] , die [X] ||| 0.00910828 1 ||| 1-2 4-4 ||| 0.0689656
+weight [X][X] prestigious office [X][X] [X] ||| ganzen Einfluß [X][X] Amtes [X][X] die [X] ||| 0.00910828 1 ||| 1-2 4-4 ||| 0.0689656
+weight [X][X] and the institution [X] ||| ganzen Einfluß [X][X] und der Institution , die [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0344828
+weight [X][X] and [X][X] [X] ||| ganzen Einfluß [X][X] und [X][X] , die [X] ||| 0.00910828 1 ||| 1-2 3-4 ||| 0.0689656
+weight [X][X] and [X][X] [X] ||| ganzen Einfluß [X][X] und [X][X] die [X] ||| 0.00910828 1 ||| 1-2 3-4 ||| 0.0689656
+weight [X][X] the institution [X] ||| ganzen Einfluß [X][X] der Institution , die [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0344828
+weight [X][X] institution [X] ||| ganzen Einfluß [X][X] Institution , die [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0344828
+weight [X][X] [X] ||| ganzen Einfluß [X][X] , die [X] ||| 0.00910828 1 ||| 1-2 ||| 0.0689656
+weight [X][X] [X] ||| ganzen Einfluß [X][X] die [X] ||| 0.00910828 1 ||| 1-2 ||| 0.0689656
+weight of your [X][X] institution [X] ||| ganzen Einfluß Ihres [X][X] Institution , die [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0344828
+weight of your [X][X] [X] ||| ganzen Einfluß Ihres [X][X] , die [X] ||| 0.00910828 1 ||| 3-3 ||| 0.0689656
+weight of your [X][X] [X] ||| ganzen Einfluß Ihres [X][X] die [X] ||| 0.00910828 1 ||| 3-3 ||| 0.0689656
+[X][X] prestigious office [X][X] represent [X] ||| [X][X] Amtes [X][X] vertreten [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0263158
+of your [X][X] institution [X][X] [X] ||| Ihres [X][X] Institution [X][X] [X] ||| 0.00607219 1 ||| 2-1 4-3 ||| 0.140172
+of your [X][X] institution [X][X] [X] ||| Ihres [X][X] Institution , [X][X] [X] ||| 0.00607219 1 ||| 2-1 4-4 ||| 0.140172
+of your [X][X] institution [X][X] [X] ||| Ihres [X][X] Institution , die [X][X] [X] ||| 0.00607219 1 ||| 2-1 4-5 ||| 0.140172
+of your [X][X] you represent [X] ||| Ihres [X][X] , die Sie vertreten [X] ||| 0.00607219 1 ||| 2-1 ||| 0.0789474
+of your [X][X] you represent [X] ||| Ihres [X][X] die Sie vertreten [X] ||| 0.00607219 1 ||| 2-1 ||| 0.0789474
+of your [X][X] you represent [X] ||| Ihres [X][X] Sie vertreten [X] ||| 0.00607219 1 ||| 2-1 ||| 0.0789474
+of your [X][X] represent [X] ||| Ihres [X][X] vertreten [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0263158
+[X][X] and [X][X] represent , [X] ||| [X][X] und [X][X] vertreten , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0421473
+[X][X] and [X][X] , [X] ||| [X][X] und [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0421473
+[X][X] and the [X][X] , [X] ||| [X][X] und der [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0421473
+[X][X] the [X][X] represent , [X] ||| [X][X] der [X][X] vertreten , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0421473
+[X][X] the [X][X] , [X] ||| [X][X] der [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0421473
+[X][X] the institution [X][X] , [X] ||| [X][X] der Institution [X][X] , [X] ||| 0.00607219 1 ||| 0-0 3-3 ||| 0.126442
+[X][X] the institution [X][X] , [X] ||| [X][X] der Institution , [X][X] , [X] ||| 0.00607219 1 ||| 0-0 3-4 ||| 0.126442
+[X][X] the institution [X][X] , [X] ||| [X][X] der Institution , die [X][X] , [X] ||| 0.00607219 1 ||| 0-0 3-5 ||| 0.126442
+[X][X] the institution you [X][X] [X] ||| [X][X] der Institution , die Sie [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-6 ||| 0.0590964
+prestigious office [X][X] you [X][X] [X] ||| Amtes [X][X] , die Sie [X][X] [X] ||| 0.00607219 1 ||| 2-1 4-5 ||| 0.116065
+prestigious office [X][X] you [X][X] [X] ||| Amtes [X][X] die Sie [X][X] [X] ||| 0.00607219 1 ||| 2-1 4-4 ||| 0.116065
+prestigious office [X][X] you [X][X] [X] ||| Amtes [X][X] Sie [X][X] [X] ||| 0.00607219 1 ||| 2-1 4-3 ||| 0.116065
+prestigious office [X][X] represent , [X] ||| Amtes [X][X] vertreten , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0217391
+prestigious office [X][X] , [X] ||| Amtes [X][X] , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0217391
+prestigious office and [X][X] , [X] ||| Amtes und [X][X] , [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0217391
+[X][X] institution [X][X] , to [X] ||| [X][X] Institution [X][X] , bei [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0358171
+[X][X] institution [X][X] to [X] ||| [X][X] Institution [X][X] bei [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0358171
+[X][X] institution [X][X] , to [X] ||| [X][X] Institution , [X][X] , bei [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0358171
+[X][X] institution [X][X] to [X] ||| [X][X] Institution , [X][X] bei [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0358171
+[X][X] institution [X][X] , to [X] ||| [X][X] Institution , die [X][X] , bei [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.0358171
+[X][X] institution [X][X] to [X] ||| [X][X] Institution , die [X][X] bei [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.0358171
+[X][X] institution you [X][X] to [X] ||| [X][X] Institution , die Sie [X][X] bei [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.0358171
+[X][X] institution you represent [X][X] [X] ||| [X][X] Institution , die Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-6 ||| 0.0507425
+and [X][X] you [X][X] to [X] ||| und [X][X] , die Sie [X][X] bei [X] ||| 0.0182166 1 ||| 1-1 3-5 ||| 0.0188679
+and [X][X] you represent [X][X] [X] ||| und [X][X] , die Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-6 ||| 0.0337933
+and [X][X] you [X][X] to [X] ||| und [X][X] die Sie [X][X] bei [X] ||| 0.0182166 1 ||| 1-1 3-4 ||| 0.0188679
+and [X][X] you represent [X][X] [X] ||| und [X][X] die Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-5 ||| 0.0337933
+and [X][X] you [X][X] to [X] ||| und [X][X] Sie [X][X] bei [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0188679
+and [X][X] you represent [X][X] [X] ||| und [X][X] Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0337933
+and [X][X] represent , to [X] ||| und [X][X] vertreten , bei [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0188679
+and [X][X] represent [X][X] [X] ||| und [X][X] vertreten [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0337933
+and [X][X] , to [X] ||| und [X][X] , bei [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0188679
+and [X][X] to [X] ||| und [X][X] bei [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0188679
+and the [X][X] represent [X][X] [X] ||| und der [X][X] vertreten [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0337933
+and the [X][X] , to [X] ||| und der [X][X] , bei [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0188679
+and the [X][X] to [X] ||| und der [X][X] bei [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0188679
+and the institution [X][X] to [X] ||| und der Institution [X][X] bei [X] ||| 0.00607219 1 ||| 3-3 ||| 0.0566037
+and the institution [X][X] to [X] ||| und der Institution , [X][X] bei [X] ||| 0.00607219 1 ||| 3-4 ||| 0.0566037
+and the institution [X][X] to [X] ||| und der Institution , die [X][X] bei [X] ||| 0.00607219 1 ||| 3-5 ||| 0.0566037
+[X][X] you [X][X] to the [X] ||| [X][X] , die Sie [X][X] bei dem [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.0353335
+[X][X] you [X][X] the [X] ||| [X][X] , die Sie [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.0353335
+[X][X] you represent [X][X] the [X] ||| [X][X] , die Sie vertreten [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.0353335
+[X][X] you represent , [X][X] [X] ||| [X][X] , die Sie vertreten , [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-6 ||| 0.051727
+[X][X] you [X][X] to the [X] ||| [X][X] die Sie [X][X] bei dem [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0353335
+[X][X] you [X][X] the [X] ||| [X][X] die Sie [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0353335
+[X][X] you represent [X][X] the [X] ||| [X][X] die Sie vertreten [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.0353335
+[X][X] you represent , [X][X] [X] ||| [X][X] die Sie vertreten , [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-5 ||| 0.051727
+[X][X] you [X][X] to the [X] ||| [X][X] Sie [X][X] bei dem [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0353335
+[X][X] you [X][X] the [X] ||| [X][X] Sie [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0353335
+[X][X] you represent [X][X] the [X] ||| [X][X] Sie vertreten [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0353335
+[X][X] you represent , [X][X] [X] ||| [X][X] Sie vertreten , [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.051727
+the [X][X] represent [X][X] the [X] ||| der [X][X] vertreten [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0204082
+the [X][X] represent , [X][X] [X] ||| der [X][X] vertreten , [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0368016
+the [X][X] , to the [X] ||| der [X][X] , bei dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0204082
+the [X][X] , [X][X] [X] ||| der [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0368016
+the [X][X] to the [X] ||| der [X][X] bei dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0204082
+the [X][X] the [X] ||| der [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0204082
+the institution [X][X] , [X][X] [X] ||| der Institution [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0368016
+the institution [X][X] to the [X] ||| der Institution [X][X] bei dem [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0204082
+the institution [X][X] the [X] ||| der Institution [X][X] dem [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0204082
+the institution [X][X] , [X][X] [X] ||| der Institution , [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.0368016
+the institution [X][X] to the [X] ||| der Institution , [X][X] bei dem [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0204082
+the institution [X][X] the [X] ||| der Institution , [X][X] dem [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0204082
+the institution [X][X] , [X][X] [X] ||| der Institution , die [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 2-4 4-6 ||| 0.0368016
+the institution [X][X] to the [X] ||| der Institution , die [X][X] bei dem [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0204082
+the institution [X][X] the [X] ||| der Institution , die [X][X] dem [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0204082
+the institution you [X][X] the [X] ||| der Institution , die Sie [X][X] dem [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0204082
+[X][X] represent [X][X] the President [X] ||| [X][X] vertreten [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0386157
+[X][X] represent [X][X] President [X] ||| [X][X] vertreten [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0386157
+[X][X] represent , [X][X] President [X] ||| [X][X] vertreten , [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0386157
+[X][X] represent , to [X][X] [X] ||| [X][X] vertreten , bei [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.0805127
+institution [X][X] , [X][X] President [X] ||| Institution [X][X] , [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0222222
+institution [X][X] , to [X][X] [X] ||| Institution [X][X] , bei [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0641192
+institution [X][X] to the President [X] ||| Institution [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+institution [X][X] to [X][X] [X] ||| Institution [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0641192
+institution [X][X] the President [X] ||| Institution [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+institution [X][X] President [X] ||| Institution [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0222222
+institution [X][X] , [X][X] President [X] ||| Institution , [X][X] , [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0222222
+institution [X][X] , to [X][X] [X] ||| Institution , [X][X] , bei [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-5 ||| 0.0641192
+institution [X][X] to the President [X] ||| Institution , [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0222222
+institution [X][X] to [X][X] [X] ||| Institution , [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0641192
+institution [X][X] the President [X] ||| Institution , [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0222222
+institution [X][X] President [X] ||| Institution , [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0222222
+institution [X][X] , [X][X] President [X] ||| Institution , die [X][X] , [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.0222222
+institution [X][X] , to [X][X] [X] ||| Institution , die [X][X] , bei [X][X] [X] ||| 0.0182166 1 ||| 1-3 4-6 ||| 0.0641192
+institution [X][X] to the President [X] ||| Institution , die [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0222222
+institution [X][X] to [X][X] [X] ||| Institution , die [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.0641192
+institution [X][X] the President [X] ||| Institution , die [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0222222
+institution [X][X] President [X] ||| Institution , die [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0222222
+institution you [X][X] to [X][X] [X] ||| Institution , die Sie [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 2-4 4-6 ||| 0.0641192
+institution you [X][X] the President [X] ||| Institution , die Sie [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0222222
+institution you [X][X] President [X] ||| Institution , die Sie [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0222222
+institution you represent [X][X] President [X] ||| Institution , die Sie vertreten [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0222222
+[X][X] , [X][X] President and [X] ||| , [X][X] , [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0175439
+[X][X] , [X][X] and [X] ||| , [X][X] , [X][X] und [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0175439
+[X][X] , to [X][X] and [X] ||| , [X][X] , bei [X][X] und [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0175439
+[X][X] , to the [X][X] [X] ||| , [X][X] , bei dem [X][X] [X] ||| 0.0182166 1 ||| 0-1 4-5 ||| 0.0515995
+[X][X] to the President and [X] ||| , [X][X] bei dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0175439
+[X][X] to [X][X] and [X] ||| , [X][X] bei [X][X] und [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0175439
+[X][X] to the [X][X] [X] ||| , [X][X] bei dem [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0515995
+[X][X] the President and [X] ||| , [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0175439
+[X][X] the [X][X] [X] ||| , [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0515995
+[X][X] President and [X] ||| , [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0175439
+[X][X] and [X] ||| , [X][X] und [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0175439
+[X][X] , [X][X] President and [X] ||| , die [X][X] , [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.0175439
+[X][X] , [X][X] and [X] ||| , die [X][X] , [X][X] und [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.0175439
+[X][X] , to [X][X] and [X] ||| , die [X][X] , bei [X][X] und [X] ||| 0.0182166 1 ||| 0-2 3-5 ||| 0.0175439
+[X][X] , to the [X][X] [X] ||| , die [X][X] , bei dem [X][X] [X] ||| 0.0182166 1 ||| 0-2 4-6 ||| 0.0515995
+[X][X] to the President and [X] ||| , die [X][X] bei dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0175439
+[X][X] to [X][X] and [X] ||| , die [X][X] bei [X][X] und [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.0175439
+[X][X] to the [X][X] [X] ||| , die [X][X] bei dem [X][X] [X] ||| 0.0182166 1 ||| 0-2 3-5 ||| 0.0515995
+[X][X] the President and [X] ||| , die [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0175439
+[X][X] the [X][X] [X] ||| , die [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.0515995
+[X][X] President and [X] ||| , die [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0175439
+[X][X] and [X] ||| , die [X][X] und [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0175439
+you [X][X] to [X][X] and [X] ||| , die Sie [X][X] bei [X][X] und [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.0175439
+you [X][X] to the [X][X] [X] ||| , die Sie [X][X] bei dem [X][X] [X] ||| 0.0182166 1 ||| 1-3 4-6 ||| 0.0515995
+you [X][X] the President and [X] ||| , die Sie [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0175439
+you [X][X] the [X][X] [X] ||| , die Sie [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.0515995
+you [X][X] President and [X] ||| , die Sie [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0175439
+you [X][X] and [X] ||| , die Sie [X][X] und [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0175439
+you represent [X][X] the [X][X] [X] ||| , die Sie vertreten [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 2-4 4-6 ||| 0.0515995
+you represent [X][X] President and [X] ||| , die Sie vertreten [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0175439
+you represent [X][X] and [X] ||| , die Sie vertreten [X][X] und [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0175439
+you represent , [X][X] and [X] ||| , die Sie vertreten , [X][X] und [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0175439
+[X][X] , [X][X] and to [X] ||| , [X][X] , [X][X] und [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0131579
+[X][X] , [X][X] to [X] ||| , [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0131579
+[X][X] , to [X][X] to [X] ||| , [X][X] , bei [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0131579
+[X][X] to [X][X] and to [X] ||| , [X][X] bei [X][X] und [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0131579
+[X][X] to [X][X] to [X] ||| , [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0131579
+[X][X] to the [X][X] to [X] ||| , [X][X] bei dem [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0131579
+[X][X] to the President [X][X] [X] ||| , [X][X] bei dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 0-1 4-5 ||| 0.0340556
+[X][X] the President and to [X] ||| , [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0131579
+[X][X] the [X][X] to [X] ||| , [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0131579
+[X][X] the President [X][X] [X] ||| , [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0340556
+[X][X] President and to [X] ||| , [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0131579
+[X][X] President [X][X] [X] ||| , [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0340556
+[X][X] and to [X] ||| , [X][X] und [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0131579
+[X][X] , [X][X] and to [X] ||| , die [X][X] , [X][X] und [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.0131579
+[X][X] , [X][X] to [X] ||| , die [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.0131579
+[X][X] , to [X][X] to [X] ||| , die [X][X] , bei [X][X] [X] ||| 0.0182166 1 ||| 0-2 3-5 ||| 0.0131579
+[X][X] to [X][X] and to [X] ||| , die [X][X] bei [X][X] und [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.0131579
+[X][X] to [X][X] to [X] ||| , die [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.0131579
+[X][X] to the [X][X] to [X] ||| , die [X][X] bei dem [X][X] [X] ||| 0.0182166 1 ||| 0-2 3-5 ||| 0.0131579
+[X][X] to the President [X][X] [X] ||| , die [X][X] bei dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 0-2 4-6 ||| 0.0340556
+[X][X] the President and to [X] ||| , die [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0131579
+[X][X] the [X][X] to [X] ||| , die [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.0131579
+[X][X] the President [X][X] [X] ||| , die [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 0-2 3-5 ||| 0.0340556
+[X][X] President and to [X] ||| , die [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0131579
+[X][X] President [X][X] [X] ||| , die [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.0340556
+[X][X] and to [X] ||| , die [X][X] und [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0131579
+you [X][X] to [X][X] to [X] ||| , die Sie [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.0131579
+you [X][X] the [X][X] to [X] ||| , die Sie [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.0131579
+you [X][X] the President [X][X] [X] ||| , die Sie [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-3 4-6 ||| 0.0340556
+you [X][X] President and to [X] ||| , die Sie [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0131579
+you [X][X] President [X][X] [X] ||| , die Sie [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.0340556
+you [X][X] and to [X] ||| , die Sie [X][X] und [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0131579
+you [X][X] to [X] ||| , die Sie [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0131579
+you represent [X][X] President [X][X] [X] ||| , die Sie vertreten [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 2-4 4-6 ||| 0.0340556
+you represent [X][X] and to [X] ||| , die Sie vertreten [X][X] und [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0131579
+you represent [X][X] to [X] ||| , die Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0131579
+you represent , [X][X] to [X] ||| , die Sie vertreten , [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0131579
+[X][X] , [X][X] to the [X] ||| , [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0120482
+[X][X] , [X][X] the [X] ||| , [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0120482
+[X][X] , to [X][X] the [X] ||| , [X][X] , bei [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0120482
+[X][X] to [X][X] to the [X] ||| , [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0120482
+[X][X] to [X][X] the [X] ||| , [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0120482
+[X][X] to the [X][X] the [X] ||| , [X][X] bei dem [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0120482
+[X][X] the [X][X] to the [X] ||| , [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0120482
+[X][X] the [X][X] the [X] ||| , [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0120482
+[X][X] the President [X][X] the [X] ||| , [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0120482
+[X][X] President and to the [X] ||| , [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0120482
+[X][X] President [X][X] the [X] ||| , [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0120482
+[X][X] and to the [X] ||| , [X][X] und [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0120482
+[X][X] , [X][X] to the [X] ||| , die [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.0120482
+[X][X] , [X][X] the [X] ||| , die [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.0120482
+[X][X] , to [X][X] the [X] ||| , die [X][X] , bei [X][X] [X] ||| 0.0182166 1 ||| 0-2 3-5 ||| 0.0120482
+[X][X] to [X][X] to the [X] ||| , die [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.0120482
+[X][X] to [X][X] the [X] ||| , die [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.0120482
+[X][X] to the [X][X] the [X] ||| , die [X][X] bei dem [X][X] [X] ||| 0.0182166 1 ||| 0-2 3-5 ||| 0.0120482
+[X][X] the [X][X] to the [X] ||| , die [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.0120482
+[X][X] the [X][X] the [X] ||| , die [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.0120482
+[X][X] the President [X][X] the [X] ||| , die [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 0-2 3-5 ||| 0.0120482
+[X][X] President and to the [X] ||| , die [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0120482
+[X][X] President [X][X] the [X] ||| , die [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.0120482
+[X][X] and to the [X] ||| , die [X][X] und [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0120482
+you [X][X] to [X][X] the [X] ||| , die Sie [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.0120482
+you [X][X] the [X][X] the [X] ||| , die Sie [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.0120482
+you [X][X] President [X][X] the [X] ||| , die Sie [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.0120482
+you [X][X] and to the [X] ||| , die Sie [X][X] und [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0120482
+you [X][X] to the [X] ||| , die Sie [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0120482
+you [X][X] the [X] ||| , die Sie [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0120482
+you represent [X][X] to the [X] ||| , die Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0120482
+you represent [X][X] the [X] ||| , die Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0120482
+you represent , [X][X] the [X] ||| , die Sie vertreten , [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0120482
+[X][X] , [X][X] the Governor [X] ||| die [X][X] , [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0119048
+[X][X] , [X][X] Governor [X] ||| die [X][X] , [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0119048
+[X][X] , to [X][X] Governor [X] ||| die [X][X] , bei [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0119048
+[X][X] to [X][X] the Governor [X] ||| die [X][X] bei [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0119048
+[X][X] to [X][X] Governor [X] ||| die [X][X] bei [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0119048
+[X][X] to the [X][X] Governor [X] ||| die [X][X] bei dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0119048
+[X][X] the [X][X] the Governor [X] ||| die [X][X] dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0119048
+[X][X] the [X][X] Governor [X] ||| die [X][X] dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0119048
+[X][X] the President [X][X] Governor [X] ||| die [X][X] dem Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0119048
+[X][X] the President and [X][X] [X] ||| die [X][X] dem Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 0-1 4-5 ||| 0.0119048
+[X][X] President [X][X] the Governor [X] ||| die [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0119048
+[X][X] President [X][X] Governor [X] ||| die [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0119048
+[X][X] President and to [X][X] [X] ||| die [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 0-1 4-4 ||| 0.0119048
+[X][X] President and [X][X] [X] ||| die [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0119048
+[X][X] and to the Governor [X] ||| die [X][X] und Gouverneur [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0119048
+[X][X] and to [X][X] [X] ||| die [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-3 ||| 0.0119048
+[X][X] and [X][X] [X] ||| die [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0119048
+[X][X] to the Governor [X] ||| die [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0119048
+[X][X] the Governor [X] ||| die [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0119048
+[X][X] Governor [X] ||| die [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0119048
+you [X][X] to [X][X] Governor [X] ||| die Sie [X][X] bei [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0119048
+you [X][X] the [X][X] Governor [X] ||| die Sie [X][X] dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0119048
+you [X][X] President [X][X] Governor [X] ||| die Sie [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0119048
+you [X][X] President and [X][X] [X] ||| die Sie [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-5 ||| 0.0119048
+you [X][X] and to [X][X] [X] ||| die Sie [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-4 ||| 0.0119048
+you [X][X] and [X][X] [X] ||| die Sie [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0119048
+you [X][X] to the Governor [X] ||| die Sie [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0119048
+you [X][X] to [X][X] [X] ||| die Sie [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.0119048
+you [X][X] the Governor [X] ||| die Sie [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0119048
+you [X][X] Governor [X] ||| die Sie [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0119048
+you represent [X][X] and [X][X] [X] ||| die Sie vertreten [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.0119048
+you represent [X][X] to [X][X] [X] ||| die Sie vertreten [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-4 ||| 0.0119048
+you represent [X][X] the Governor [X] ||| die Sie vertreten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0119048
+you represent [X][X] Governor [X] ||| die Sie vertreten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0119048
+you represent , [X][X] Governor [X] ||| die Sie vertreten , [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0119048
+the [X][X] the Governor [X][X] [X] ||| dem [X][X] Gouverneur [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0384615
+the [X][X] Governor [X][X] [X] ||| dem [X][X] Gouverneur [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0384615
+the [X][X] Governor of [X][X] [X] ||| dem [X][X] Gouverneur von [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0384615
+the [X][X] of [X][X] [X] ||| dem [X][X] von [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0384615
+the [X][X] Texas , Mr [X] ||| dem [X][X] Texas , George W. [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0384615
+the President [X][X] Governor [X][X] [X] ||| dem Präsidentschaftskandidaten [X][X] Gouverneur [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0384615
+the President [X][X] of [X][X] [X] ||| dem Präsidentschaftskandidaten [X][X] von [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0384615
+[X][X] to the [X][X] Bush [X] ||| [X][X] [X][X] Bush [X] ||| 0.0182166 1 ||| 0-0 3-1 ||| 0.0322581
+[X][X] to [X][X] Bush [X] ||| [X][X] [X][X] Bush [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.0322581
+President [X][X] the [X][X] Bush [X] ||| Präsidentschaftskandidaten [X][X] [X][X] Bush [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0322581
+President [X][X] Governor [X][X] Bush [X] ||| Präsidentschaftskandidaten [X][X] Gouverneur [X][X] Bush [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0322581
+President [X][X] of [X][X] Bush [X] ||| Präsidentschaftskandidaten [X][X] von [X][X] Bush [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0322581
+President [X][X] Bush [X] ||| Präsidentschaftskandidaten [X][X] Bush [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0322581
+President and to [X][X] Bush [X] ||| Präsidentschaftskandidaten und [X][X] Bush [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0322581
+President and [X][X] Bush [X] ||| Präsidentschaftskandidaten und [X][X] Bush [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0322581
+[X][X] the [X][X] Bush , [X] ||| [X][X] [X][X] Bush , [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.0357143
+[X][X] the [X][X] , [X] ||| [X][X] [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.0357143
+[X][X] the Governor [X][X] , [X] ||| [X][X] Gouverneur [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0357143
+[X][X] Governor [X][X] Bush , [X] ||| [X][X] Gouverneur [X][X] Bush , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0357143
+[X][X] Governor [X][X] , [X] ||| [X][X] Gouverneur [X][X] , [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0357143
+[X][X] Governor of [X][X] , [X] ||| [X][X] Gouverneur von [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0357143
+and [X][X] of [X][X] , [X] ||| und [X][X] von [X][X] , [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0357143
+and to [X][X] Bush , [X] ||| und [X][X] Bush , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0357143
+and [X][X] Bush , [X] ||| und [X][X] Bush , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+and to the [X][X] , [X] ||| und [X][X] , [X] ||| 0.0182166 1 ||| 3-1 ||| 0.0357143
+and to [X][X] , [X] ||| und [X][X] , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0357143
+Governor [X][X] Bush , who [X] ||| Gouverneur [X][X] Bush , der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+Governor [X][X] Bush [X][X] [X] ||| Gouverneur [X][X] Bush [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0714286
+Governor [X][X] , who [X] ||| Gouverneur [X][X] , der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+Governor [X][X] who [X] ||| Gouverneur [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+Governor of [X][X] Bush [X][X] [X] ||| Gouverneur von [X][X] Bush [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0714286
+Governor of [X][X] , who [X] ||| Gouverneur von [X][X] , der [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0714286
+Governor of [X][X] who [X] ||| Gouverneur von [X][X] der [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0714286
+[X][X] of [X][X] , who [X] ||| [X][X] von [X][X] , der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.105556
+[X][X] of [X][X] who [X] ||| [X][X] von [X][X] der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.105556
+the [X][X] Bush , who [X] ||| [X][X] Bush , der [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0555556
+the [X][X] Bush [X][X] [X] ||| [X][X] Bush [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0555556
+the [X][X] , who [X] ||| [X][X] , der [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0555556
+the [X][X] who [X] ||| [X][X] der [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0555556
+the Governor [X][X] Bush [X][X] [X] ||| Gouverneur [X][X] Bush [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0555556
+the Governor [X][X] , who [X] ||| Gouverneur [X][X] , der [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0555556
+the Governor [X][X] who [X] ||| Gouverneur [X][X] der [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0555556
+the Governor of [X][X] who [X] ||| Gouverneur von [X][X] der [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0555556
+to [X][X] of [X][X] who [X] ||| [X][X] von [X][X] der [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.05
+to the [X][X] Bush [X][X] [X] ||| [X][X] Bush [X][X] [X] ||| 0.0182166 1 ||| 2-0 4-2 ||| 0.05
+to [X][X] Bush , who [X] ||| [X][X] Bush , der [X] ||| 0.0182166 1 ||| 1-0 ||| 0.05
+to [X][X] Bush [X][X] [X] ||| [X][X] Bush [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.05
+to the [X][X] , who [X] ||| [X][X] , der [X] ||| 0.0182166 1 ||| 2-0 ||| 0.05
+to [X][X] , who [X] ||| [X][X] , der [X] ||| 0.0182166 1 ||| 1-0 ||| 0.05
+to the [X][X] who [X] ||| [X][X] der [X] ||| 0.0182166 1 ||| 2-0 ||| 0.05
+to [X][X] who [X] ||| [X][X] der [X] ||| 0.0182166 1 ||| 1-0 ||| 0.05
+to the Governor [X][X] who [X] ||| Gouverneur [X][X] der [X] ||| 0.0182166 1 ||| 3-1 ||| 0.05
+to order [X][X] and [X][X] [X] ||| zur [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.201923
+to order [X][X] to reprieve [X] ||| zur [X][X] zur Begnadigung [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+to order [X][X] reprieve [X] ||| zur [X][X] Begnadigung [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+power [X][X] and to reprieve [X] ||| [X][X] und zur Begnadigung [X] ||| 0.0182166 1 ||| 1-0 ||| 0.1
+power [X][X] and [X][X] [X] ||| [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.1
+power [X][X] to reprieve [X] ||| [X][X] zur Begnadigung [X] ||| 0.0182166 1 ||| 1-0 ||| 0.1
+power [X][X] reprieve [X] ||| [X][X] Begnadigung [X] ||| 0.0182166 1 ||| 1-0 ||| 0.1
+power to order [X][X] reprieve [X] ||| zur [X][X] Begnadigung [X] ||| 0.0182166 1 ||| 3-1 ||| 0.1
+[X][X] and to reprieve the [X] ||| [X][X] und zur Begnadigung des [X] ||| 0.0182166 1 ||| 0-0 ||| 0.188034
+[X][X] and [X][X] the [X] ||| [X][X] und [X][X] des [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.188034
+[X][X] and to [X][X] [X] ||| [X][X] und zur [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.254701
+[X][X] to reprieve the [X] ||| [X][X] zur Begnadigung des [X] ||| 0.0182166 1 ||| 0-0 ||| 0.188034
+[X][X] to [X][X] [X] ||| [X][X] zur [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.254701
+[X][X] of your [X][X] institution [X] ||| [X][X] Ihres [X][X] Institution , die [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0454082
+[X][X] of your [X][X] [X] ||| [X][X] Ihres [X][X] , die [X] ||| 0.00910828 1 ||| 0-0 3-2 ||| 0.0908164
+[X][X] of your [X][X] [X] ||| [X][X] Ihres [X][X] die [X] ||| 0.00910828 1 ||| 0-0 3-2 ||| 0.0908164
+the [X][X] prestigious office [X][X] [X] ||| den [X][X] Amtes [X][X] , die [X] ||| 0.00910828 1 ||| 1-1 4-3 ||| 0.05
+the [X][X] prestigious office [X][X] [X] ||| den [X][X] Amtes [X][X] die [X] ||| 0.00910828 1 ||| 1-1 4-3 ||| 0.05
+the [X][X] and the institution [X] ||| den [X][X] und der Institution , die [X] ||| 0.0182166 1 ||| 1-1 ||| 0.025
+the [X][X] and [X][X] [X] ||| den [X][X] und [X][X] , die [X] ||| 0.00910828 1 ||| 1-1 3-3 ||| 0.05
+the [X][X] and [X][X] [X] ||| den [X][X] und [X][X] die [X] ||| 0.00910828 1 ||| 1-1 3-3 ||| 0.05
+the [X][X] the institution [X] ||| den [X][X] der Institution , die [X] ||| 0.0182166 1 ||| 1-1 ||| 0.025
+the [X][X] institution [X] ||| den [X][X] Institution , die [X] ||| 0.0182166 1 ||| 1-1 ||| 0.025
+the [X][X] [X] ||| den [X][X] , die [X] ||| 0.00910828 1 ||| 1-1 ||| 0.05
+the [X][X] [X] ||| den [X][X] die [X] ||| 0.00910828 1 ||| 1-1 ||| 0.05
+the weight [X][X] and [X][X] [X] ||| den ganzen Einfluß [X][X] und [X][X] , die [X] ||| 0.00910828 1 ||| 2-3 4-5 ||| 0.05
+the weight [X][X] and [X][X] [X] ||| den ganzen Einfluß [X][X] und [X][X] die [X] ||| 0.00910828 1 ||| 2-3 4-5 ||| 0.05
+the weight [X][X] the institution [X] ||| den ganzen Einfluß [X][X] der Institution , die [X] ||| 0.0182166 1 ||| 2-3 ||| 0.025
+the weight [X][X] institution [X] ||| den ganzen Einfluß [X][X] Institution , die [X] ||| 0.0182166 1 ||| 2-3 ||| 0.025
+the weight [X][X] [X] ||| den ganzen Einfluß [X][X] , die [X] ||| 0.00910828 1 ||| 2-3 ||| 0.05
+the weight [X][X] [X] ||| den ganzen Einfluß [X][X] die [X] ||| 0.00910828 1 ||| 2-3 ||| 0.05
+the weight of your [X][X] [X] ||| den ganzen Einfluß Ihres [X][X] , die [X] ||| 0.00910828 1 ||| 4-4 ||| 0.05
+the weight of your [X][X] [X] ||| den ganzen Einfluß Ihres [X][X] die [X] ||| 0.00910828 1 ||| 4-4 ||| 0.05
+[X][X] weight [X][X] the institution [X] ||| [X][X] ganzen Einfluß [X][X] der Institution , die [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0204082
+[X][X] weight [X][X] institution [X] ||| [X][X] ganzen Einfluß [X][X] Institution , die [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0204082
+[X][X] weight [X][X] [X] ||| [X][X] ganzen Einfluß [X][X] , die [X] ||| 0.00910828 1 ||| 0-0 2-3 ||| 0.0408164
+[X][X] weight [X][X] [X] ||| [X][X] ganzen Einfluß [X][X] die [X] ||| 0.00910828 1 ||| 0-0 2-3 ||| 0.0408164
+[X][X] weight of your [X][X] [X] ||| [X][X] ganzen Einfluß Ihres [X][X] , die [X] ||| 0.00910828 1 ||| 0-0 4-4 ||| 0.0408164
+[X][X] weight of your [X][X] [X] ||| [X][X] ganzen Einfluß Ihres [X][X] die [X] ||| 0.00910828 1 ||| 0-0 4-4 ||| 0.0408164
+using [X][X] of your [X][X] [X] ||| [X][X] Ihres [X][X] , die [X] ||| 0.00910828 1 ||| 1-0 4-2 ||| 0.0408164
+using [X][X] of your [X][X] [X] ||| [X][X] Ihres [X][X] die [X] ||| 0.00910828 1 ||| 1-0 4-2 ||| 0.0408164
+using [X][X] prestigious office [X][X] [X] ||| [X][X] Amtes [X][X] , die [X] ||| 0.00910828 1 ||| 1-0 4-2 ||| 0.0408164
+using [X][X] prestigious office [X][X] [X] ||| [X][X] Amtes [X][X] die [X] ||| 0.00910828 1 ||| 1-0 4-2 ||| 0.0408164
+using [X][X] and the institution [X] ||| [X][X] und der Institution , die [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0204082
+using [X][X] and [X][X] [X] ||| [X][X] und [X][X] , die [X] ||| 0.00910828 1 ||| 1-0 3-2 ||| 0.0408164
+using [X][X] and [X][X] [X] ||| [X][X] und [X][X] die [X] ||| 0.00910828 1 ||| 1-0 3-2 ||| 0.0408164
+using [X][X] the institution [X] ||| [X][X] der Institution , die [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0204082
+using [X][X] institution [X] ||| [X][X] Institution , die [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0204082
+using the [X][X] and [X][X] [X] ||| den [X][X] und [X][X] , die [X] ||| 0.00910828 1 ||| 2-1 4-3 ||| 0.0408164
+using the [X][X] and [X][X] [X] ||| den [X][X] und [X][X] die [X] ||| 0.00910828 1 ||| 2-1 4-3 ||| 0.0408164
+using the [X][X] the institution [X] ||| den [X][X] der Institution , die [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0204082
+using the [X][X] institution [X] ||| den [X][X] Institution , die [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0204082
+using the [X][X] [X] ||| den [X][X] , die [X] ||| 0.00910828 1 ||| 2-1 ||| 0.0408164
+using the [X][X] [X] ||| den [X][X] die [X] ||| 0.00910828 1 ||| 2-1 ||| 0.0408164
+using the weight [X][X] institution [X] ||| den ganzen Einfluß [X][X] Institution , die [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0204082
+using the weight [X][X] [X] ||| den ganzen Einfluß [X][X] , die [X] ||| 0.00910828 1 ||| 3-3 ||| 0.0408164
+using the weight [X][X] [X] ||| den ganzen Einfluß [X][X] die [X] ||| 0.00910828 1 ||| 3-3 ||| 0.0408164
+weight [X][X] and [X][X] you [X] ||| ganzen Einfluß [X][X] und [X][X] , die Sie [X] ||| 0.00607219 1 ||| 1-2 3-4 ||| 0.0882354
+weight [X][X] and [X][X] you [X] ||| ganzen Einfluß [X][X] und [X][X] die Sie [X] ||| 0.00607219 1 ||| 1-2 3-4 ||| 0.0882354
+weight [X][X] and [X][X] you [X] ||| ganzen Einfluß [X][X] und [X][X] Sie [X] ||| 0.00607219 1 ||| 1-2 3-4 ||| 0.0882354
+weight [X][X] and the [X][X] [X] ||| ganzen Einfluß [X][X] und der [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-5 ||| 0.0294118
+weight [X][X] the institution you [X] ||| ganzen Einfluß [X][X] der Institution , die Sie [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0294118
+weight [X][X] the [X][X] [X] ||| ganzen Einfluß [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0294118
+weight [X][X] institution you [X] ||| ganzen Einfluß [X][X] Institution , die Sie [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0294118
+weight [X][X] you [X] ||| ganzen Einfluß [X][X] , die Sie [X] ||| 0.00607219 1 ||| 1-2 ||| 0.0882354
+weight [X][X] you [X] ||| ganzen Einfluß [X][X] die Sie [X] ||| 0.00607219 1 ||| 1-2 ||| 0.0882354
+weight [X][X] you [X] ||| ganzen Einfluß [X][X] Sie [X] ||| 0.00607219 1 ||| 1-2 ||| 0.0882354
+weight of your [X][X] you [X] ||| ganzen Einfluß Ihres [X][X] , die Sie [X] ||| 0.00607219 1 ||| 3-3 ||| 0.0882354
+weight of your [X][X] you [X] ||| ganzen Einfluß Ihres [X][X] die Sie [X] ||| 0.00607219 1 ||| 3-3 ||| 0.0882354
+weight of your [X][X] you [X] ||| ganzen Einfluß Ihres [X][X] Sie [X] ||| 0.00607219 1 ||| 3-3 ||| 0.0882354
+[X][X] prestigious office [X][X] , [X] ||| [X][X] Amtes [X][X] , [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0204082
+of your [X][X] you [X][X] [X] ||| Ihres [X][X] , die Sie [X][X] [X] ||| 0.00607219 1 ||| 2-1 4-5 ||| 0.0612246
+of your [X][X] you [X][X] [X] ||| Ihres [X][X] die Sie [X][X] [X] ||| 0.00607219 1 ||| 2-1 4-4 ||| 0.0612246
+of your [X][X] you [X][X] [X] ||| Ihres [X][X] Sie [X][X] [X] ||| 0.00607219 1 ||| 2-1 4-3 ||| 0.0612246
+of your [X][X] represent , [X] ||| Ihres [X][X] vertreten , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0204082
+of your [X][X] , [X] ||| Ihres [X][X] , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0204082
+[X][X] and [X][X] , to [X] ||| [X][X] und [X][X] , bei [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0169492
+[X][X] and [X][X] to [X] ||| [X][X] und [X][X] bei [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0169492
+[X][X] and the [X][X] to [X] ||| [X][X] und der [X][X] bei [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0169492
+[X][X] the [X][X] , to [X] ||| [X][X] der [X][X] , bei [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0169492
+[X][X] the [X][X] to [X] ||| [X][X] der [X][X] bei [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0169492
+[X][X] the institution [X][X] to [X] ||| [X][X] der Institution [X][X] bei [X] ||| 0.00607219 1 ||| 0-0 3-3 ||| 0.0508476
+[X][X] the institution [X][X] to [X] ||| [X][X] der Institution , [X][X] bei [X] ||| 0.00607219 1 ||| 0-0 3-4 ||| 0.0508476
+[X][X] the institution [X][X] to [X] ||| [X][X] der Institution , die [X][X] bei [X] ||| 0.00607219 1 ||| 0-0 3-5 ||| 0.0508476
+prestigious office [X][X] represent [X][X] [X] ||| Amtes [X][X] vertreten [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0169492
+prestigious office [X][X] , to [X] ||| Amtes [X][X] , bei [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0169492
+prestigious office [X][X] to [X] ||| Amtes [X][X] bei [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0169492
+prestigious office and [X][X] to [X] ||| Amtes und [X][X] bei [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0169492
+[X][X] institution [X][X] to the [X] ||| [X][X] Institution [X][X] bei dem [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0149254
+[X][X] institution [X][X] the [X] ||| [X][X] Institution [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0149254
+[X][X] institution [X][X] to the [X] ||| [X][X] Institution , [X][X] bei dem [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0149254
+[X][X] institution [X][X] the [X] ||| [X][X] Institution , [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0149254
+[X][X] institution [X][X] to the [X] ||| [X][X] Institution , die [X][X] bei dem [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.0149254
+[X][X] institution [X][X] the [X] ||| [X][X] Institution , die [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.0149254
+[X][X] institution you [X][X] the [X] ||| [X][X] Institution , die Sie [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.0149254
+and [X][X] you [X][X] the [X] ||| und [X][X] , die Sie [X][X] dem [X] ||| 0.00607219 1 ||| 1-1 3-5 ||| 0.0447762
+and [X][X] you [X][X] the [X] ||| und [X][X] die Sie [X][X] dem [X] ||| 0.00607219 1 ||| 1-1 3-4 ||| 0.0447762
+and [X][X] you [X][X] the [X] ||| und [X][X] Sie [X][X] dem [X] ||| 0.00607219 1 ||| 1-1 3-3 ||| 0.0447762
+and [X][X] represent [X][X] the [X] ||| und [X][X] vertreten [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0149254
+and [X][X] represent , [X][X] [X] ||| und [X][X] vertreten , [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0149254
+and [X][X] , to the [X] ||| und [X][X] , bei dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0149254
+and [X][X] , [X][X] [X] ||| und [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0149254
+and [X][X] to the [X] ||| und [X][X] bei dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0149254
+and [X][X] the [X] ||| und [X][X] dem [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0149254
+and the [X][X] , [X][X] [X] ||| und der [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0149254
+and the [X][X] to the [X] ||| und der [X][X] bei dem [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0149254
+and the [X][X] the [X] ||| und der [X][X] dem [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0149254
+and the institution [X][X] the [X] ||| und der Institution [X][X] dem [X] ||| 0.00607219 1 ||| 3-3 ||| 0.0447762
+and the institution [X][X] the [X] ||| und der Institution , [X][X] dem [X] ||| 0.00607219 1 ||| 3-4 ||| 0.0447762
+and the institution [X][X] the [X] ||| und der Institution , die [X][X] dem [X] ||| 0.00607219 1 ||| 3-5 ||| 0.0447762
+[X][X] you [X][X] the President [X] ||| [X][X] , die Sie [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.0163934
+[X][X] you [X][X] President [X] ||| [X][X] , die Sie [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.0163934
+[X][X] you represent [X][X] President [X] ||| [X][X] , die Sie vertreten [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.0163934
+[X][X] you [X][X] the President [X] ||| [X][X] die Sie [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0163934
+[X][X] you [X][X] President [X] ||| [X][X] die Sie [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0163934
+[X][X] you represent [X][X] President [X] ||| [X][X] die Sie vertreten [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.0163934
+[X][X] you [X][X] the President [X] ||| [X][X] Sie [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0163934
+[X][X] you [X][X] President [X] ||| [X][X] Sie [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0163934
+[X][X] you represent [X][X] President [X] ||| [X][X] Sie vertreten [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0163934
+the [X][X] represent [X][X] President [X] ||| der [X][X] vertreten [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0163934
+the [X][X] , [X][X] President [X] ||| der [X][X] , [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0163934
+the [X][X] , to [X][X] [X] ||| der [X][X] , bei [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0163934
+the [X][X] to the President [X] ||| der [X][X] bei dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0163934
+the [X][X] to [X][X] [X] ||| der [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0163934
+the [X][X] the President [X] ||| der [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0163934
+the [X][X] President [X] ||| der [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0163934
+the institution [X][X] to [X][X] [X] ||| der Institution [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0163934
+the institution [X][X] the President [X] ||| der Institution [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0163934
+the institution [X][X] President [X] ||| der Institution [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0163934
+the institution [X][X] to [X][X] [X] ||| der Institution , [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.0163934
+the institution [X][X] the President [X] ||| der Institution , [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0163934
+the institution [X][X] President [X] ||| der Institution , [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0163934
+the institution [X][X] to [X][X] [X] ||| der Institution , die [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 2-4 4-6 ||| 0.0163934
+the institution [X][X] the President [X] ||| der Institution , die [X][X] dem Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0163934
+the institution [X][X] President [X] ||| der Institution , die [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0163934
+the institution you [X][X] President [X] ||| der Institution , die Sie [X][X] Präsidentschaftskandidaten [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0163934
+[X][X] represent [X][X] President and [X] ||| [X][X] vertreten [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0163934
+[X][X] represent [X][X] and [X] ||| [X][X] vertreten [X][X] und [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0163934
+[X][X] represent , [X][X] and [X] ||| [X][X] vertreten , [X][X] und [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0163934
+institution [X][X] , [X][X] and [X] ||| Institution [X][X] , [X][X] und [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0163934
+institution [X][X] to [X][X] and [X] ||| Institution [X][X] bei [X][X] und [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0163934
+institution [X][X] to the [X][X] [X] ||| Institution [X][X] bei dem [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.041897
+institution [X][X] the President and [X] ||| Institution [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0163934
+institution [X][X] the [X][X] [X] ||| Institution [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.041897
+institution [X][X] President and [X] ||| Institution [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0163934
+institution [X][X] and [X] ||| Institution [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0163934
+institution [X][X] , [X][X] and [X] ||| Institution , [X][X] , [X][X] und [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0163934
+institution [X][X] to [X][X] and [X] ||| Institution , [X][X] bei [X][X] und [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0163934
+institution [X][X] to the [X][X] [X] ||| Institution , [X][X] bei dem [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-5 ||| 0.041897
+institution [X][X] the President and [X] ||| Institution , [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0163934
+institution [X][X] the [X][X] [X] ||| Institution , [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.041897
+institution [X][X] President and [X] ||| Institution , [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0163934
+institution [X][X] and [X] ||| Institution , [X][X] und [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0163934
+institution [X][X] , [X][X] and [X] ||| Institution , die [X][X] , [X][X] und [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.0163934
+institution [X][X] to [X][X] and [X] ||| Institution , die [X][X] bei [X][X] und [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.0163934
+institution [X][X] to the [X][X] [X] ||| Institution , die [X][X] bei dem [X][X] [X] ||| 0.0182166 1 ||| 1-3 4-6 ||| 0.041897
+institution [X][X] the President and [X] ||| Institution , die [X][X] dem Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0163934
+institution [X][X] the [X][X] [X] ||| Institution , die [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.041897
+institution [X][X] President and [X] ||| Institution , die [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0163934
+institution [X][X] and [X] ||| Institution , die [X][X] und [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0163934
+institution you [X][X] the [X][X] [X] ||| Institution , die Sie [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 2-4 4-6 ||| 0.041897
+institution you [X][X] President and [X] ||| Institution , die Sie [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0163934
+institution you [X][X] and [X] ||| Institution , die Sie [X][X] und [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0163934
+institution you represent [X][X] and [X] ||| Institution , die Sie vertreten [X][X] und [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0163934
+[X][X] represent [X][X] and to [X] ||| [X][X] vertreten [X][X] und [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0131579
+[X][X] represent [X][X] to [X] ||| [X][X] vertreten [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0131579
+[X][X] represent , [X][X] to [X] ||| [X][X] vertreten , [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0131579
+institution [X][X] , [X][X] to [X] ||| Institution [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0131579
+institution [X][X] to [X][X] to [X] ||| Institution [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0131579
+institution [X][X] the [X][X] to [X] ||| Institution [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0131579
+institution [X][X] the President [X][X] [X] ||| Institution [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0255036
+institution [X][X] President and to [X] ||| Institution [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0131579
+institution [X][X] President [X][X] [X] ||| Institution [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0255036
+institution [X][X] and to [X] ||| Institution [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0131579
+institution [X][X] to [X] ||| Institution [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0131579
+institution [X][X] , [X][X] to [X] ||| Institution , [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0131579
+institution [X][X] to [X][X] to [X] ||| Institution , [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0131579
+institution [X][X] the [X][X] to [X] ||| Institution , [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0131579
+institution [X][X] the President [X][X] [X] ||| Institution , [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-5 ||| 0.0255036
+institution [X][X] President and to [X] ||| Institution , [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0131579
+institution [X][X] President [X][X] [X] ||| Institution , [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0255036
+institution [X][X] and to [X] ||| Institution , [X][X] und [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0131579
+institution [X][X] to [X] ||| Institution , [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0131579
+institution [X][X] , [X][X] to [X] ||| Institution , die [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.0131579
+institution [X][X] to [X][X] to [X] ||| Institution , die [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.0131579
+institution [X][X] the [X][X] to [X] ||| Institution , die [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.0131579
+institution [X][X] the President [X][X] [X] ||| Institution , die [X][X] dem Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-3 4-6 ||| 0.0255036
+institution [X][X] President and to [X] ||| Institution , die [X][X] Präsidentschaftskandidaten und [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0131579
+institution [X][X] President [X][X] [X] ||| Institution , die [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.0255036
+institution [X][X] and to [X] ||| Institution , die [X][X] und [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0131579
+institution [X][X] to [X] ||| Institution , die [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0131579
+institution you [X][X] President [X][X] [X] ||| Institution , die Sie [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 2-4 4-6 ||| 0.0255036
+institution you [X][X] and to [X] ||| Institution , die Sie [X][X] und [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0131579
+institution you [X][X] to [X] ||| Institution , die Sie [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0131579
+institution you represent [X][X] to [X] ||| Institution , die Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0131579
+[X][X] represent [X][X] to the [X] ||| [X][X] vertreten [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0123457
+[X][X] represent [X][X] the [X] ||| [X][X] vertreten [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0123457
+[X][X] represent , [X][X] the [X] ||| [X][X] vertreten , [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0123457
+institution [X][X] , [X][X] the [X] ||| Institution [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0123457
+institution [X][X] to [X][X] the [X] ||| Institution [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0123457
+institution [X][X] the [X][X] the [X] ||| Institution [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0123457
+institution [X][X] President [X][X] the [X] ||| Institution [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0123457
+institution [X][X] and to the [X] ||| Institution [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0123457
+institution [X][X] to the [X] ||| Institution [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0123457
+institution [X][X] the [X] ||| Institution [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0123457
+institution [X][X] , [X][X] the [X] ||| Institution , [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0123457
+institution [X][X] to [X][X] the [X] ||| Institution , [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0123457
+institution [X][X] the [X][X] the [X] ||| Institution , [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0123457
+institution [X][X] President [X][X] the [X] ||| Institution , [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0123457
+institution [X][X] and to the [X] ||| Institution , [X][X] und [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0123457
+institution [X][X] to the [X] ||| Institution , [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0123457
+institution [X][X] the [X] ||| Institution , [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0123457
+institution [X][X] , [X][X] the [X] ||| Institution , die [X][X] , [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.0123457
+institution [X][X] to [X][X] the [X] ||| Institution , die [X][X] bei [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.0123457
+institution [X][X] the [X][X] the [X] ||| Institution , die [X][X] dem [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.0123457
+institution [X][X] President [X][X] the [X] ||| Institution , die [X][X] Präsidentschaftskandidaten [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.0123457
+institution [X][X] and to the [X] ||| Institution , die [X][X] und [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0123457
+institution [X][X] to the [X] ||| Institution , die [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0123457
+institution [X][X] the [X] ||| Institution , die [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0123457
+institution you [X][X] to the [X] ||| Institution , die Sie [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0123457
+institution you [X][X] the [X] ||| Institution , die Sie [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0123457
+institution you represent [X][X] the [X] ||| Institution , die Sie vertreten [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0123457
+[X][X] , [X][X] the Governor [X] ||| , [X][X] , [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.00884956
+[X][X] , [X][X] Governor [X] ||| , [X][X] , [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.00884956
+[X][X] , to [X][X] Governor [X] ||| , [X][X] , bei [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.00884956
+[X][X] to [X][X] the Governor [X] ||| , [X][X] bei [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.00884956
+[X][X] to [X][X] Governor [X] ||| , [X][X] bei [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.00884956
+[X][X] to the [X][X] Governor [X] ||| , [X][X] bei dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.00884956
+[X][X] the [X][X] the Governor [X] ||| , [X][X] dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.00884956
+[X][X] the [X][X] Governor [X] ||| , [X][X] dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.00884956
+[X][X] the President [X][X] Governor [X] ||| , [X][X] dem Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.00884956
+[X][X] the President and [X][X] [X] ||| , [X][X] dem Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 0-1 4-5 ||| 0.00884956
+[X][X] President [X][X] the Governor [X] ||| , [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.00884956
+[X][X] President [X][X] Governor [X] ||| , [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.00884956
+[X][X] President and to [X][X] [X] ||| , [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 0-1 4-4 ||| 0.00884956
+[X][X] President and [X][X] [X] ||| , [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.00884956
+[X][X] and to the Governor [X] ||| , [X][X] und Gouverneur [X] ||| 0.0182166 1 ||| 0-1 ||| 0.00884956
+[X][X] and to [X][X] [X] ||| , [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-3 ||| 0.00884956
+[X][X] and [X][X] [X] ||| , [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.00884956
+[X][X] to the Governor [X] ||| , [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 ||| 0.00884956
+[X][X] the Governor [X] ||| , [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 ||| 0.00884956
+[X][X] Governor [X] ||| , [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-1 ||| 0.00884956
+[X][X] , [X][X] the Governor [X] ||| , die [X][X] , [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.00884956
+[X][X] , [X][X] Governor [X] ||| , die [X][X] , [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.00884956
+[X][X] , to [X][X] Governor [X] ||| , die [X][X] , bei [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-2 3-5 ||| 0.00884956
+[X][X] to [X][X] the Governor [X] ||| , die [X][X] bei [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.00884956
+[X][X] to [X][X] Governor [X] ||| , die [X][X] bei [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.00884956
+[X][X] to the [X][X] Governor [X] ||| , die [X][X] bei dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-2 3-5 ||| 0.00884956
+[X][X] the [X][X] the Governor [X] ||| , die [X][X] dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.00884956
+[X][X] the [X][X] Governor [X] ||| , die [X][X] dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.00884956
+[X][X] the President [X][X] Governor [X] ||| , die [X][X] dem Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-2 3-5 ||| 0.00884956
+[X][X] the President and [X][X] [X] ||| , die [X][X] dem Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 0-2 4-6 ||| 0.00884956
+[X][X] President [X][X] the Governor [X] ||| , die [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.00884956
+[X][X] President [X][X] Governor [X] ||| , die [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.00884956
+[X][X] President and to [X][X] [X] ||| , die [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 0-2 4-5 ||| 0.00884956
+[X][X] President and [X][X] [X] ||| , die [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 0-2 3-5 ||| 0.00884956
+[X][X] and to the Governor [X] ||| , die [X][X] und Gouverneur [X] ||| 0.0182166 1 ||| 0-2 ||| 0.00884956
+[X][X] and to [X][X] [X] ||| , die [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 0-2 3-4 ||| 0.00884956
+[X][X] and [X][X] [X] ||| , die [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 0-2 2-4 ||| 0.00884956
+[X][X] to the Governor [X] ||| , die [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-2 ||| 0.00884956
+[X][X] the Governor [X] ||| , die [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-2 ||| 0.00884956
+[X][X] Governor [X] ||| , die [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 0-2 ||| 0.00884956
+you [X][X] to [X][X] Governor [X] ||| , die Sie [X][X] bei [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.00884956
+you [X][X] the [X][X] Governor [X] ||| , die Sie [X][X] dem [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.00884956
+you [X][X] President [X][X] Governor [X] ||| , die Sie [X][X] Präsidentschaftskandidaten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.00884956
+you [X][X] President and [X][X] [X] ||| , die Sie [X][X] Präsidentschaftskandidaten und [X][X] [X] ||| 0.0182166 1 ||| 1-3 4-6 ||| 0.00884956
+you [X][X] and to [X][X] [X] ||| , die Sie [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-3 4-5 ||| 0.00884956
+you [X][X] and [X][X] [X] ||| , die Sie [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-5 ||| 0.00884956
+you [X][X] to the Governor [X] ||| , die Sie [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-3 ||| 0.00884956
+you [X][X] to [X][X] [X] ||| , die Sie [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-4 ||| 0.00884956
+you [X][X] the Governor [X] ||| , die Sie [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-3 ||| 0.00884956
+you [X][X] Governor [X] ||| , die Sie [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 1-3 ||| 0.00884956
+you represent [X][X] and [X][X] [X] ||| , die Sie vertreten [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 2-4 4-6 ||| 0.00884956
+you represent [X][X] to [X][X] [X] ||| , die Sie vertreten [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-4 4-5 ||| 0.00884956
+you represent [X][X] the Governor [X] ||| , die Sie vertreten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 2-4 ||| 0.00884956
+you represent [X][X] Governor [X] ||| , die Sie vertreten [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 2-4 ||| 0.00884956
+you represent , [X][X] Governor [X] ||| , die Sie vertreten , [X][X] Gouverneur [X] ||| 0.0182166 1 ||| 3-5 ||| 0.00884956
+to order [X][X] to [X][X] [X] ||| zur [X][X] zur [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0769231
+to order [X][X] reprieve the [X] ||| zur [X][X] Begnadigung des [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0769231
+to order [X][X] the [X] ||| zur [X][X] des [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0769231
+[X][X] and [X][X] condemned person [X] ||| [X][X] und [X][X] Verurteilten [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0666667
+[X][X] and to reprieve [X][X] [X] ||| [X][X] und zur Begnadigung [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.0666667
+[X][X] to [X][X] condemned person [X] ||| [X][X] zur [X][X] Verurteilten [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0666667
+[X][X] to reprieve [X][X] [X] ||| [X][X] zur Begnadigung [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0666667
+[X][X] to reprieve the [X][X] [X] ||| [X][X] zur Begnadigung des [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.0666667
+all [X] ||| all [X] ||| 0.0182166 1 ||| ||| 1
+this [X] ||| dies [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| den [X] ||| 0.0182166 1 ||| ||| 1
+principles [X] ||| Grundsätzen [X] ||| 0.0182166 1 ||| ||| 1
+we [X] ||| wir [X] ||| 0.0182166 1 ||| ||| 1
+always [X] ||| stets [X] ||| 0.0182166 1 ||| ||| 1
+upheld [X] ||| verteidigt [X] ||| 0.0182166 1 ||| ||| 1
+have [X] ||| haben [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+the principles [X] ||| den Grundsätzen [X] ||| 0.0182166 1 ||| ||| 1
+that [X] ||| , die [X] ||| 0.0182166 1 ||| ||| 1
+always upheld [X] ||| stets verteidigt [X] ||| 0.0182166 1 ||| ||| 1
+principles that [X] ||| Grundsätzen , die [X] ||| 0.0182166 1 ||| ||| 1
+that we [X] ||| , die wir [X] ||| 0.0182166 1 ||| ||| 1
+have always upheld [X] ||| stets verteidigt haben [X] ||| 0.0182166 1 ||| ||| 0.5
+have [X][X] [X] ||| [X][X] haben [X] ||| 0.0182166 1 ||| 1-0 ||| 0.5
+[X][X] the [X] ||| [X][X] den [X] ||| 0.0182166 1 ||| 0-0 ||| 1
+the principles that [X] ||| den Grundsätzen , die [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] that [X] ||| [X][X] , die [X] ||| 0.0182166 1 ||| 0-0 ||| 0.583333
+the [X][X] [X] ||| den [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.608824
+principles that we [X] ||| Grundsätzen , die wir [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] we [X] ||| [X][X] wir [X] ||| 0.0182166 1 ||| 0-0 ||| 0.625
+principles [X][X] [X] ||| Grundsätzen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.501166
+we have always upheld [X] ||| wir stets verteidigt haben [X] ||| 0.0182166 1 ||| ||| 0.333333
+we have [X][X] [X] ||| wir [X][X] haben [X] ||| 0.0182166 1 ||| 2-1 ||| 0.333333
+we [X][X] [X] ||| wir [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.533333
+have always upheld . [X] ||| stets verteidigt haben . [X] ||| 0.0182166 1 ||| ||| 0.333333
+have [X][X] . [X] ||| [X][X] haben . [X] ||| 0.0182166 1 ||| 1-0 ||| 0.333333
+[X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.785256
+[X][X] the principles [X] ||| [X][X] den Grundsätzen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+[X][X] principles [X] ||| [X][X] Grundsätzen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+the principles that we [X] ||| den Grundsätzen , die wir [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] that we [X] ||| [X][X] , die wir [X] ||| 0.0182166 1 ||| 0-0 ||| 0.291667
+the [X][X] we [X] ||| den [X][X] wir [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+the principles [X][X] [X] ||| den Grundsätzen [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.27549
+we have always upheld . [X] ||| wir stets verteidigt haben . [X] ||| 0.0182166 1 ||| ||| 0.2
+we have [X][X] . [X] ||| wir [X][X] haben . [X] ||| 0.0182166 1 ||| 2-1 ||| 0.2
+we [X][X] . [X] ||| wir [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.2
+that we have always upheld [X] ||| , die wir stets verteidigt haben [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] have always upheld [X] ||| [X][X] stets verteidigt haben [X] ||| 0.0182166 1 ||| 0-0 ||| 0.316399
+[X][X] have [X][X] [X] ||| [X][X] [X][X] haben [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.316399
+that [X][X] [X] ||| , die [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.291667
+that we have [X][X] [X] ||| , die wir [X][X] haben [X] ||| 0.0182166 1 ||| 3-3 ||| 0.166667
+that we [X][X] [X] ||| , die wir [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.291667
+[X][X] the principles that [X] ||| [X][X] den Grundsätzen , die [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25
+[X][X] the [X][X] [X] ||| [X][X] den [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.375
+[X][X] principles that [X] ||| [X][X] Grundsätzen , die [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25
+[X][X] we have always upheld [X] ||| [X][X] wir stets verteidigt haben [X] ||| 0.0182166 1 ||| 0-0 ||| 0.149733
+[X][X] we have [X][X] [X] ||| [X][X] wir [X][X] haben [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.149733
+[X][X] we [X][X] [X] ||| [X][X] wir [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.276656
+principles [X][X] have always upheld [X] ||| Grundsätzen [X][X] stets verteidigt haben [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+principles [X][X] have [X][X] [X] ||| Grundsätzen [X][X] [X][X] haben [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0909091
+principles that [X][X] [X] ||| Grundsätzen , die [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.167832
+principles that we have [X][X] [X] ||| Grundsätzen , die wir [X][X] haben [X] ||| 0.0182166 1 ||| 4-4 ||| 0.0909091
+principles that we [X][X] [X] ||| Grundsätzen , die wir [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.167832
+[X][X] have always upheld . [X] ||| [X][X] stets verteidigt haben . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.251923
+[X][X] have [X][X] . [X] ||| [X][X] [X][X] haben . [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.251923
+that [X][X] . [X] ||| , die [X][X] . [X] ||| 0.0182166 1 ||| 1-2 ||| 0.125
+that we have [X][X] . [X] ||| , die wir [X][X] haben . [X] ||| 0.0182166 1 ||| 3-3 ||| 0.125
+that we [X][X] . [X] ||| , die wir [X][X] . [X] ||| 0.0182166 1 ||| 2-3 ||| 0.125
+[X][X] the principles that we [X] ||| [X][X] den Grundsätzen , die wir [X] ||| 0.0182166 1 ||| 0-0 ||| 0.125
+[X][X] the [X][X] we [X] ||| [X][X] den [X][X] wir [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.125
+[X][X] the principles [X][X] [X] ||| [X][X] den Grundsätzen [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.125
+[X][X] principles that we [X] ||| [X][X] Grundsätzen , die wir [X] ||| 0.0182166 1 ||| 0-0 ||| 0.125
+[X][X] principles [X][X] [X] ||| [X][X] Grundsätzen [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.125
+[X][X] that [X][X] [X] ||| [X][X] , die [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.108824
+[X][X] that we have [X][X] [X] ||| [X][X] , die wir [X][X] haben [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.0588235
+[X][X] that we [X][X] [X] ||| [X][X] , die wir [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.108824
+the [X][X] we have [X][X] [X] ||| den [X][X] wir [X][X] haben [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0588235
+the [X][X] we [X][X] [X] ||| den [X][X] wir [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.108824
+the [X][X] have always upheld [X] ||| den [X][X] stets verteidigt haben [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0588235
+the [X][X] have [X][X] [X] ||| den [X][X] [X][X] haben [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0588235
+the principles [X][X] have [X][X] [X] ||| den Grundsätzen [X][X] [X][X] haben [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0588235
+the principles that [X][X] [X] ||| den Grundsätzen , die [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.108824
+the principles that we [X][X] [X] ||| den Grundsätzen , die wir [X][X] [X] ||| 0.0182166 1 ||| 4-5 ||| 0.108824
+[X][X] we have [X][X] . [X] ||| [X][X] wir [X][X] haben . [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.126923
+[X][X] we [X][X] . [X] ||| [X][X] wir [X][X] . [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.126923
+principles [X][X] have [X][X] . [X] ||| Grundsätzen [X][X] [X][X] haben . [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0769231
+principles [X][X] . [X] ||| Grundsätzen [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+principles that [X][X] . [X] ||| Grundsätzen , die [X][X] . [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0769231
+principles that we [X][X] . [X] ||| Grundsätzen , die wir [X][X] . [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0769231
+[X][X] that [X][X] . [X] ||| [X][X] , die [X][X] . [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.05
+[X][X] that we [X][X] . [X] ||| [X][X] , die wir [X][X] . [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.05
+the [X][X] we [X][X] . [X] ||| den [X][X] wir [X][X] . [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.05
+the [X][X] have [X][X] . [X] ||| den [X][X] [X][X] haben . [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.05
+the [X][X] . [X] ||| den [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.05
+the principles [X][X] . [X] ||| den Grundsätzen [X][X] . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.05
+the principles that [X][X] . [X] ||| den Grundsätzen , die [X][X] . [X] ||| 0.0182166 1 ||| 3-4 ||| 0.05
+it [X] ||| das [X] ||| 0.0182166 1 ||| ||| 1
+is [X] ||| ist [X] ||| 0.0182166 1 ||| ||| 1
+quite [X] ||| ganz [X] ||| 0.0182166 1 ||| ||| 1
+in [X] ||| im [X] ||| 0.0182166 1 ||| ||| 1
+keeping with [X] ||| Sinne [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| der [X] ||| 0.0182166 1 ||| ||| 1
+positions [X] ||| Position [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| , [X] ||| 0.0182166 1 ||| ||| 1
+indeed , [X] ||| , [X] ||| 0.0182166 1 ||| ||| 1
+always [X] ||| immer [X] ||| 0.0182166 1 ||| ||| 1
+has always [X] ||| immer [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+it is [X] ||| das ist [X] ||| 0.0182166 1 ||| ||| 1
+is quite [X] ||| ist ganz [X] ||| 0.0182166 1 ||| ||| 1
+quite in [X] ||| ganz im [X] ||| 0.0182166 1 ||| ||| 1
+in keeping with [X] ||| im Sinne [X] ||| 0.0182166 1 ||| ||| 0.5
+in [X][X] [X] ||| im [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.892857
+keeping with the [X] ||| Sinne der [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] the [X] ||| [X][X] der [X] ||| 0.218091 1 ||| 0-0 ||| 1.02882
+the positions [X] ||| der Position [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| , die [X] ||| 0.0182166 1 ||| ||| 1
+indeed , [X] ||| , die [X] ||| 0.0182166 1 ||| ||| 1
+adopted [X] ||| vertreten haben [X] ||| 0.0182166 1 ||| ||| 1
+it is quite [X] ||| das ist ganz [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] quite [X] ||| [X][X] ganz [X] ||| 0.0182166 1 ||| 0-0 ||| 0.333333
+it [X][X] [X] ||| das [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.66406
+is quite in [X] ||| ist ganz im [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] in [X] ||| [X][X] im [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+is [X][X] [X] ||| ist [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.60049
+quite in keeping with [X] ||| ganz im Sinne [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] keeping with [X] ||| [X][X] Sinne [X] ||| 0.0182166 1 ||| 0-0 ||| 0.446429
+quite [X][X] [X] ||| ganz [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.483766
+quite in [X][X] [X] ||| ganz im [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.483766
+in keeping with the [X] ||| im Sinne der [X] ||| 0.0182166 1 ||| ||| 0.25
+in [X][X] the [X] ||| im [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+keeping with the positions [X] ||| Sinne der Position [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] the positions [X] ||| [X][X] der Position [X] ||| 0.0182166 1 ||| 0-0 ||| 0.58259
+[X][X] positions [X] ||| [X][X] Position [X] ||| 0.0182166 1 ||| 0-0 ||| 0.58259
+keeping with [X][X] [X] ||| Sinne [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.25
+this House [X] ||| wir als Parlament [X] ||| 0.0182166 1 ||| ||| 1
+this House has [X] ||| wir als Parlament [X] ||| 0.0182166 1 ||| ||| 1
+always adopted [X] ||| immer vertreten haben [X] ||| 0.0182166 1 ||| ||| 1
+has always adopted [X] ||| immer vertreten haben [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] adopted [X] ||| [X][X] vertreten haben [X] ||| 0.0182166 1 ||| 0-0 ||| 0.742857
+adopted . [X] ||| vertreten haben . [X] ||| 0.0182166 1 ||| ||| 1
+it is quite in [X] ||| das ist ganz im [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] quite in [X] ||| [X][X] ganz im [X] ||| 0.0182166 1 ||| 0-0 ||| 0.166667
+it [X][X] in [X] ||| das [X][X] im [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+it is [X][X] [X] ||| das ist [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.330727
+is quite in keeping with [X] ||| ist ganz im Sinne [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] in keeping with [X] ||| [X][X] im Sinne [X] ||| 0.0182166 1 ||| 0-0 ||| 0.196429
+[X][X] in [X][X] [X] ||| [X][X] im [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.431217
+is [X][X] keeping with [X] ||| ist [X][X] Sinne [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+is quite [X][X] [X] ||| ist ganz [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.267157
+is quite in [X][X] [X] ||| ist ganz im [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.267157
+quite in keeping with the [X] ||| ganz im Sinne der [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] keeping with the [X] ||| [X][X] Sinne der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.278822
+quite [X][X] the [X] ||| ganz [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+quite in [X][X] the [X] ||| ganz im [X][X] der [X] ||| 0.0182166 1 ||| 2-2 ||| 0.142857
+in keeping with the positions [X] ||| im Sinne der Position [X] ||| 0.0182166 1 ||| ||| 0.142857
+in [X][X] the positions [X] ||| im [X][X] der Position [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+in [X][X] positions [X] ||| im [X][X] Position [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+in keeping with [X][X] [X] ||| im Sinne [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.142857
+this House [X] ||| die wir als Parlament [X] ||| 0.0182166 1 ||| ||| 1
+this House has [X] ||| die wir als Parlament [X] ||| 0.0182166 1 ||| ||| 1
+this House has always [X] ||| wir als Parlament immer [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] has always [X] ||| [X][X] immer [X] ||| 0.0182166 1 ||| 0-0 ||| 0.416667
+[X][X] always [X] ||| [X][X] immer [X] ||| 0.0182166 1 ||| 0-0 ||| 0.416667
+this House [X][X] [X] ||| wir als Parlament [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.46978
+always adopted . [X] ||| immer vertreten haben . [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.660256
+always [X][X] [X] ||| immer [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+has always adopted . [X] ||| immer vertreten haben . [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] adopted . [X] ||| [X][X] vertreten haben . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.326923
+has [X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 1-0 ||| 0.2
+has always [X][X] [X] ||| immer [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.2
+[X][X] quite in keeping with [X] ||| [X][X] ganz im Sinne [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0714286
+[X][X] quite [X][X] [X] ||| [X][X] ganz [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.16406
+[X][X] quite in [X][X] [X] ||| [X][X] ganz im [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.16406
+it [X][X] in keeping with [X] ||| das [X][X] im Sinne [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+it [X][X] in [X][X] [X] ||| das [X][X] im [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.16406
+it [X][X] keeping with [X] ||| das [X][X] Sinne [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+it is [X][X] keeping with [X] ||| das ist [X][X] Sinne [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0714286
+it is quite [X][X] [X] ||| das ist ganz [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.16406
+it is quite in [X][X] [X] ||| das ist ganz im [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.16406
+[X][X] in keeping with the [X] ||| [X][X] im Sinne der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.135965
+[X][X] in [X][X] the [X] ||| [X][X] im [X][X] der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.135965
+is [X][X] keeping with the [X] ||| ist [X][X] Sinne der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+is [X][X] the [X] ||| ist [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+is quite [X][X] the [X] ||| ist ganz [X][X] der [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0833333
+is quite in [X][X] the [X] ||| ist ganz im [X][X] der [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0833333
+[X][X] keeping with the positions [X] ||| [X][X] Sinne der Position [X] ||| 0.0182166 1 ||| 0-0 ||| 0.189733
+[X][X] keeping with [X][X] [X] ||| [X][X] Sinne [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.189733
+quite [X][X] the positions [X] ||| ganz [X][X] der Position [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+quite [X][X] positions [X] ||| ganz [X][X] Position [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+quite in [X][X] the positions [X] ||| ganz im [X][X] der Position [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+quite in [X][X] positions [X] ||| ganz im [X][X] Position [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+quite in keeping with [X][X] [X] ||| ganz im Sinne [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.0909091
+this House has always [X] ||| die wir als Parlament immer [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] has always [X] ||| die [X][X] immer [X] ||| 0.0182166 1 ||| 0-1 ||| 0.166667
+[X][X] always [X] ||| die [X][X] immer [X] ||| 0.0182166 1 ||| 0-1 ||| 0.166667
+this House [X][X] [X] ||| die wir als Parlament [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.316667
+[X][X] quite [X][X] the [X] ||| [X][X] ganz [X][X] der [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0526316
+[X][X] quite in [X][X] the [X] ||| [X][X] ganz im [X][X] der [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0526316
+it [X][X] in [X][X] the [X] ||| das [X][X] im [X][X] der [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0526316
+it [X][X] keeping with the [X] ||| das [X][X] Sinne der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+it [X][X] the [X] ||| das [X][X] der [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+it is [X][X] the [X] ||| das ist [X][X] der [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+it is quite [X][X] the [X] ||| das ist ganz [X][X] der [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0526316
+[X][X] in [X][X] the positions [X] ||| [X][X] im [X][X] der Position [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0988235
+[X][X] in [X][X] positions [X] ||| [X][X] im [X][X] Position [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0988235
+[X][X] in keeping with [X][X] [X] ||| [X][X] im Sinne [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.0988235
+is [X][X] keeping with [X][X] [X] ||| ist [X][X] Sinne [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0588235
+is [X][X] the positions [X] ||| ist [X][X] der Position [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0588235
+is [X][X] positions [X] ||| ist [X][X] Position [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0588235
+is quite [X][X] the positions [X] ||| ist ganz [X][X] der Position [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0588235
+is quite [X][X] positions [X] ||| ist ganz [X][X] Position [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0588235
+is quite in [X][X] positions [X] ||| ist ganz im [X][X] Position [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0588235
+this House has always adopted [X] ||| wir als Parlament immer vertreten haben [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] has always adopted [X] ||| [X][X] immer vertreten haben [X] ||| 0.0182166 1 ||| 0-0 ||| 0.242857
+[X][X] always adopted [X] ||| [X][X] immer vertreten haben [X] ||| 0.0182166 1 ||| 0-0 ||| 0.242857
+this House [X][X] adopted [X] ||| wir als Parlament [X][X] vertreten haben [X] ||| 0.0182166 1 ||| 2-3 ||| 0.142857
+this House has [X][X] [X] ||| wir als Parlament [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.21978
+[X][X] quite [X][X] the positions [X] ||| [X][X] ganz [X][X] der Position [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.04
+[X][X] quite [X][X] positions [X] ||| [X][X] ganz [X][X] Position [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.04
+[X][X] quite in [X][X] positions [X] ||| [X][X] ganz im [X][X] Position [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.04
+it [X][X] in [X][X] positions [X] ||| das [X][X] im [X][X] Position [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.04
+it [X][X] keeping with [X][X] [X] ||| das [X][X] Sinne [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.04
+it [X][X] the positions [X] ||| das [X][X] der Position [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+it [X][X] positions [X] ||| das [X][X] Position [X] ||| 0.0182166 1 ||| 1-1 ||| 0.04
+it is [X][X] the positions [X] ||| das ist [X][X] der Position [X] ||| 0.0182166 1 ||| 2-2 ||| 0.04
+it is [X][X] positions [X] ||| das ist [X][X] Position [X] ||| 0.0182166 1 ||| 2-2 ||| 0.04
+it is quite [X][X] positions [X] ||| das ist ganz [X][X] Position [X] ||| 0.0182166 1 ||| 3-3 ||| 0.04
+this House has always adopted [X] ||| die wir als Parlament immer vertreten haben [X] ||| 0.0182166 1 ||| ||| 0.1
+[X][X] has always adopted [X] ||| die [X][X] immer vertreten haben [X] ||| 0.0182166 1 ||| 0-1 ||| 0.1
+[X][X] always adopted [X] ||| die [X][X] immer vertreten haben [X] ||| 0.0182166 1 ||| 0-1 ||| 0.1
+[X][X] adopted [X] ||| die [X][X] vertreten haben [X] ||| 0.0182166 1 ||| 0-1 ||| 0.1
+this House [X][X] adopted [X] ||| die wir als Parlament [X][X] vertreten haben [X] ||| 0.0182166 1 ||| 2-4 ||| 0.1
+this House has [X][X] [X] ||| die wir als Parlament [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.15
+[X][X] has always adopted . [X] ||| [X][X] immer vertreten haben . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.126923
+[X][X] has [X][X] . [X] ||| [X][X] [X][X] . [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.126923
+[X][X] has always [X][X] [X] ||| [X][X] immer [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.126923
+[X][X] always adopted . [X] ||| [X][X] immer vertreten haben . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.126923
+[X][X] always [X][X] [X] ||| [X][X] immer [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.126923
+this House [X][X] adopted . [X] ||| wir als Parlament [X][X] vertreten haben . [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0769231
+this House has [X][X] . [X] ||| wir als Parlament [X][X] . [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0769231
+this House [X][X] . [X] ||| wir als Parlament [X][X] . [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0769231
+this House has always [X][X] [X] ||| wir als Parlament immer [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.0769231
+, [X][X] quite [X][X] positions [X] ||| [X][X] ganz [X][X] Position , [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0625
+, [X][X] quite [X][X] [X] ||| [X][X] ganz [X][X] , [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0625
+, [X][X] quite in [X][X] [X] ||| [X][X] ganz im [X][X] , [X] ||| 0.0182166 1 ||| 1-0 4-3 ||| 0.0625
+, [X][X] in [X][X] positions [X] ||| [X][X] im [X][X] Position , [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0625
+, [X][X] in [X][X] [X] ||| [X][X] im [X][X] , [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0625
+, [X][X] keeping with [X][X] [X] ||| [X][X] Sinne [X][X] , [X] ||| 0.0182166 1 ||| 1-0 4-2 ||| 0.0625
+, [X][X] the positions [X] ||| [X][X] der Position , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0625
+, [X][X] positions [X] ||| [X][X] Position , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0625
+, [X][X] [X] ||| [X][X] , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0625
+, it [X][X] in [X][X] [X] ||| das [X][X] im [X][X] , [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0625
+, it [X][X] the positions [X] ||| das [X][X] der Position , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0625
+, it [X][X] positions [X] ||| das [X][X] Position , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0625
+, it [X][X] [X] ||| das [X][X] , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0625
+, it is [X][X] positions [X] ||| das ist [X][X] Position , [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0625
+, it is [X][X] [X] ||| das ist [X][X] , [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0625
+, it is quite [X][X] [X] ||| das ist ganz [X][X] , [X] ||| 0.0182166 1 ||| 4-3 ||| 0.0625
+indeed , [X][X] quite [X][X] [X] ||| [X][X] ganz [X][X] , [X] ||| 0.0182166 1 ||| 2-0 4-2 ||| 0.0714286
+indeed , [X][X] in [X][X] [X] ||| [X][X] im [X][X] , [X] ||| 0.0182166 1 ||| 2-0 4-2 ||| 0.0714286
+indeed , [X][X] the positions [X] ||| [X][X] der Position , [X] ||| 0.0182166 1 ||| 2-0 ||| 0.0714286
+indeed , [X][X] positions [X] ||| [X][X] Position , [X] ||| 0.0182166 1 ||| 2-0 ||| 0.0714286
+indeed , [X][X] [X] ||| [X][X] , [X] ||| 0.0182166 1 ||| 2-0 ||| 0.0714286
+[X][X] it [X][X] the positions [X] ||| das [X][X] der Position [X][X] [X] ||| 0.0182166 1 ||| 2-1 0-4 ||| 0.121429
+indeed , it [X][X] positions [X] ||| das [X][X] Position , [X] ||| 0.0182166 1 ||| 3-1 ||| 0.0714286
+[X][X] it [X][X] positions [X] ||| das [X][X] Position [X][X] [X] ||| 0.0182166 1 ||| 2-1 0-3 ||| 0.121429
+indeed , it [X][X] [X] ||| das [X][X] , [X] ||| 0.0182166 1 ||| 3-1 ||| 0.0714286
+[X][X] it [X][X] [X] ||| das [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-1 0-2 ||| 0.121429
+[X][X] it is [X][X] positions [X] ||| das ist [X][X] Position [X][X] [X] ||| 0.0182166 1 ||| 3-2 0-4 ||| 0.121429
+indeed , it is [X][X] [X] ||| das ist [X][X] , [X] ||| 0.0182166 1 ||| 4-2 ||| 0.0714286
+[X][X] it is [X][X] [X] ||| das ist [X][X] [X][X] [X] ||| 0.0182166 1 ||| 3-2 0-3 ||| 0.121429
+[X][X] it is quite [X][X] [X] ||| das ist ganz [X][X] [X][X] [X] ||| 0.0182166 1 ||| 4-3 0-4 ||| 0.121429
+[X][X] has always adopted . [X] ||| die [X][X] immer vertreten haben . [X] ||| 0.0182166 1 ||| 0-1 ||| 0.05
+[X][X] has [X][X] . [X] ||| die [X][X] [X][X] . [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.05
+[X][X] has always [X][X] [X] ||| die [X][X] immer [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-3 ||| 0.05
+[X][X] always adopted . [X] ||| die [X][X] immer vertreten haben . [X] ||| 0.0182166 1 ||| 0-1 ||| 0.05
+[X][X] always [X][X] [X] ||| die [X][X] immer [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.05
+[X][X] adopted . [X] ||| die [X][X] vertreten haben . [X] ||| 0.0182166 1 ||| 0-1 ||| 0.05
+[X][X] . [X] ||| die [X][X] . [X] ||| 0.0182166 1 ||| 0-1 ||| 0.05
+this House [X][X] adopted . [X] ||| die wir als Parlament [X][X] vertreten haben . [X] ||| 0.0182166 1 ||| 2-4 ||| 0.05
+this House has [X][X] . [X] ||| die wir als Parlament [X][X] . [X] ||| 0.0182166 1 ||| 3-4 ||| 0.05
+this House [X][X] . [X] ||| die wir als Parlament [X][X] . [X] ||| 0.0182166 1 ||| 2-4 ||| 0.05
+this House has always [X][X] [X] ||| die wir als Parlament immer [X][X] [X] ||| 0.0182166 1 ||| 4-5 ||| 0.05
+, [X][X] quite [X][X] positions [X] ||| [X][X] ganz [X][X] Position , die [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0625
+, [X][X] quite [X][X] [X] ||| [X][X] ganz [X][X] , die [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0625
+, [X][X] quite in [X][X] [X] ||| [X][X] ganz im [X][X] , die [X] ||| 0.0182166 1 ||| 1-0 4-3 ||| 0.0625
+, [X][X] in [X][X] positions [X] ||| [X][X] im [X][X] Position , die [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0625
+, [X][X] in [X][X] [X] ||| [X][X] im [X][X] , die [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0625
+, [X][X] keeping with [X][X] [X] ||| [X][X] Sinne [X][X] , die [X] ||| 0.0182166 1 ||| 1-0 4-2 ||| 0.0625
+, [X][X] the positions [X] ||| [X][X] der Position , die [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0625
+, [X][X] positions [X] ||| [X][X] Position , die [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0625
+, [X][X] [X] ||| [X][X] , die [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0625
+, it [X][X] in [X][X] [X] ||| das [X][X] im [X][X] , die [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0625
+, it [X][X] the positions [X] ||| das [X][X] der Position , die [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0625
+, it [X][X] positions [X] ||| das [X][X] Position , die [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0625
+, it [X][X] [X] ||| das [X][X] , die [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0625
+, it is [X][X] positions [X] ||| das ist [X][X] Position , die [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0625
+, it is [X][X] [X] ||| das ist [X][X] , die [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0625
+, it is quite [X][X] [X] ||| das ist ganz [X][X] , die [X] ||| 0.0182166 1 ||| 4-3 ||| 0.0625
+indeed , [X][X] quite [X][X] [X] ||| [X][X] ganz [X][X] , die [X] ||| 0.0182166 1 ||| 2-0 4-2 ||| 0.05
+indeed , [X][X] in [X][X] [X] ||| [X][X] im [X][X] , die [X] ||| 0.0182166 1 ||| 2-0 4-2 ||| 0.05
+indeed , [X][X] the positions [X] ||| [X][X] der Position , die [X] ||| 0.0182166 1 ||| 2-0 ||| 0.05
+indeed , [X][X] positions [X] ||| [X][X] Position , die [X] ||| 0.0182166 1 ||| 2-0 ||| 0.05
+indeed , [X][X] [X] ||| [X][X] , die [X] ||| 0.0182166 1 ||| 2-0 ||| 0.05
+[X][X] it [X][X] the positions [X] ||| das [X][X] der Position [X][X] die [X] ||| 0.0182166 1 ||| 2-1 0-4 ||| 0.05
+indeed , it [X][X] positions [X] ||| das [X][X] Position , die [X] ||| 0.0182166 1 ||| 3-1 ||| 0.05
+[X][X] it [X][X] positions [X] ||| das [X][X] Position [X][X] die [X] ||| 0.0182166 1 ||| 2-1 0-3 ||| 0.05
+indeed , it [X][X] [X] ||| das [X][X] , die [X] ||| 0.0182166 1 ||| 3-1 ||| 0.05
+[X][X] it [X][X] [X] ||| das [X][X] [X][X] die [X] ||| 0.0182166 1 ||| 2-1 0-2 ||| 0.05
+[X][X] it is [X][X] positions [X] ||| das ist [X][X] Position [X][X] die [X] ||| 0.0182166 1 ||| 3-2 0-4 ||| 0.05
+indeed , it is [X][X] [X] ||| das ist [X][X] , die [X] ||| 0.0182166 1 ||| 4-2 ||| 0.05
+[X][X] it is [X][X] [X] ||| das ist [X][X] [X][X] die [X] ||| 0.0182166 1 ||| 3-2 0-3 ||| 0.05
+[X][X] it is quite [X][X] [X] ||| das ist ganz [X][X] [X][X] die [X] ||| 0.0182166 1 ||| 4-3 0-4 ||| 0.05
+Madam [X] ||| Frau [X] ||| 0.0182166 1 ||| ||| 1
+I [X] ||| ich [X] ||| 0.0182166 1 ||| ||| 1
+should like to [X] ||| möchte [X] ||| 0.0182166 1 ||| ||| 1
+to [X] ||| auf [X] ||| 0.0182166 1 ||| ||| 1
+a [X] ||| einen [X] ||| 0.0182166 1 ||| ||| 1
+case [X] ||| Fall [X] ||| 0.0182166 1 ||| ||| 1
+in [X] ||| mit [X] ||| 0.0182166 1 ||| ||| 1
+which [X] ||| dem [X] ||| 0.0182166 1 ||| ||| 1
+this [X] ||| dieses [X] ||| 0.0182166 1 ||| ||| 1
+Parliament [X] ||| Parlament [X] ||| 0.0182166 1 ||| ||| 1
+has [X] ||| hat [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+interest . [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+an interest . [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+President , [X] ||| Präsidentin ! [X] ||| 0.0182166 1 ||| ||| 1
+I should like to [X] ||| ich möchte [X] ||| 0.0182166 1 ||| ||| 0.5
+I [X][X] [X] ||| ich [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.11111
+should like to [X] ||| möchte Sie [X] ||| 0.0182166 1 ||| ||| 1
+to [X] ||| Sie auf [X] ||| 0.0182166 1 ||| ||| 1
+to a [X] ||| auf einen [X] ||| 0.0182166 1 ||| ||| 1
+a case [X] ||| einen Fall [X] ||| 0.0182166 1 ||| ||| 1
+draw your attention [X] ||| aufmerksam machen [X] ||| 0.0182166 1 ||| ||| 1
+in [X] ||| , mit [X] ||| 0.0182166 1 ||| ||| 1
+in which [X] ||| mit dem [X] ||| 0.0182166 1 ||| ||| 1
+which [X] ||| dem sich [X] ||| 0.0182166 1 ||| ||| 1
+this [X] ||| sich dieses [X] ||| 0.0182166 1 ||| ||| 1
+this Parliament [X] ||| dieses Parlament [X] ||| 0.0182166 1 ||| ||| 1
+Madam President , [X] ||| Frau Präsidentin ! [X] ||| 0.0182166 1 ||| ||| 0.5
+Madam [X][X] [X] ||| Frau [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.951923
+President , I [X] ||| Präsidentin ! ich [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] I [X] ||| [X][X] ich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.75
+I should like to [X] ||| ich möchte Sie [X] ||| 0.0182166 1 ||| ||| 0.333333
+I [X][X] [X] ||| ich [X][X] Sie [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+to a [X] ||| Sie auf einen [X] ||| 0.0182166 1 ||| ||| 1
+to a case [X] ||| auf einen Fall [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] case [X] ||| [X][X] Fall [X] ||| 0.0182166 1 ||| 0-0 ||| 0.583333
+to [X][X] [X] ||| auf [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+draw your attention [X] ||| aufmerksam machen , [X] ||| 0.0182166 1 ||| ||| 1
+in which [X] ||| , mit dem [X] ||| 0.00910828 1 ||| ||| 2
+in which [X] ||| mit dem sich [X] ||| 0.00910828 1 ||| ||| 2
+which this [X] ||| dem sich dieses [X] ||| 0.0182166 1 ||| ||| 1
+this Parliament [X] ||| sich dieses Parlament [X] ||| 0.0182166 1 ||| ||| 1
+consistently shown [X] ||| immer wieder befaßt [X] ||| 0.0182166 1 ||| ||| 1
+consistently shown an [X] ||| immer wieder befaßt [X] ||| 0.0182166 1 ||| ||| 1
+consistently shown an interest [X] ||| immer wieder befaßt [X] ||| 0.0182166 1 ||| ||| 1
+Madam President , I [X] ||| Frau Präsidentin ! ich [X] ||| 0.0182166 1 ||| ||| 0.25
+Madam [X][X] I [X] ||| Frau [X][X] ich [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+[X][X] I should like to [X] ||| [X][X] ich möchte [X] ||| 0.0182166 1 ||| 0-0 ||| 0.325
+[X][X] I [X][X] [X] ||| [X][X] ich [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.526923
+[X][X] should like to [X] ||| [X][X] möchte [X] ||| 0.0182166 1 ||| 0-0 ||| 0.325
+President , [X][X] [X] ||| Präsidentin ! [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.325
+President , I [X][X] [X] ||| Präsidentin ! ich [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.325
+to a case [X] ||| Sie auf einen Fall [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] case [X] ||| Sie [X][X] Fall [X] ||| 0.0182166 1 ||| 0-1 ||| 0.25
+to [X][X] [X] ||| Sie auf [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.25
+in which [X] ||| , mit dem sich [X] ||| 0.0182166 1 ||| ||| 1
+in which this [X] ||| mit dem sich dieses [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] this [X] ||| [X][X] sich dieses [X] ||| 0.00910828 1 ||| 0-0 ||| 1.03333
+[X][X] this [X] ||| [X][X] dieses [X] ||| 0.00910828 1 ||| 0-0 ||| 1.03333
+in [X][X] [X] ||| mit [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.50204
+which this Parliament [X] ||| dem sich dieses Parlament [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] Parliament [X] ||| [X][X] Parlament [X] ||| 0.0182166 1 ||| 0-0 ||| 0.465909
+which [X][X] [X] ||| dem [X][X] [X] ||| 0.00910828 1 ||| 1-1 ||| 0.89762
+which [X][X] [X] ||| dem sich [X][X] [X] ||| 0.00910828 1 ||| 1-2 ||| 0.89762
+has consistently shown [X] ||| immer wieder befaßt hat [X] ||| 0.0182166 1 ||| ||| 0.5
+has [X][X] [X] ||| [X][X] hat [X] ||| 0.218091 1 ||| 1-0 ||| 1.08333
+has consistently shown an [X] ||| immer wieder befaßt hat [X] ||| 0.0182166 1 ||| ||| 0.333333
+has [X][X] an [X] ||| [X][X] hat [X] ||| 0.0182166 1 ||| 1-0 ||| 0.333333
+has consistently shown an interest [X] ||| immer wieder befaßt hat [X] ||| 0.0182166 1 ||| ||| 0.25
+has [X][X] an interest [X] ||| [X][X] hat [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+has [X][X] interest [X] ||| [X][X] hat [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+Madam [X][X] I [X][X] [X] ||| Frau [X][X] ich [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.201923
+Madam [X][X] should like to [X] ||| Frau [X][X] möchte [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+Madam President , [X][X] [X] ||| Frau Präsidentin ! [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.201923
+Madam President , I [X][X] [X] ||| Frau Präsidentin ! ich [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.201923
+[X][X] I should like to [X] ||| [X][X] ich möchte Sie [X] ||| 0.0182166 1 ||| 0-0 ||| 0.201923
+[X][X] I [X][X] [X] ||| [X][X] ich [X][X] Sie [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.201923
+[X][X] should like to [X] ||| [X][X] möchte Sie [X] ||| 0.0182166 1 ||| 0-0 ||| 0.201923
+President , [X][X] [X] ||| Präsidentin ! [X][X] Sie [X] ||| 0.0182166 1 ||| 2-2 ||| 0.125
+President , I [X][X] [X] ||| Präsidentin ! ich [X][X] Sie [X] ||| 0.0182166 1 ||| 3-3 ||| 0.125
+draw your attention [X][X] case [X] ||| [X][X] Fall aufmerksam machen [X] ||| 0.0182166 1 ||| 3-0 ||| 0.342857
+draw your attention [X][X] [X] ||| [X][X] aufmerksam machen [X] ||| 0.0182166 1 ||| 3-0 ||| 0.342857
+draw your attention to [X][X] [X] ||| auf [X][X] aufmerksam machen [X] ||| 0.0182166 1 ||| 4-1 ||| 0.2
+[X][X] to [X][X] [X] ||| auf [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-1 0-2 ||| 0.342857
+[X][X] to a case [X] ||| auf einen Fall [X][X] [X] ||| 0.0182166 1 ||| 0-3 ||| 0.342857
+in which this [X] ||| , mit dem sich dieses [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] this [X] ||| , [X][X] sich dieses [X] ||| 0.00910828 1 ||| 0-1 ||| 0.333334
+[X][X] this [X] ||| , [X][X] dieses [X] ||| 0.00910828 1 ||| 0-1 ||| 0.333334
+in [X][X] [X] ||| , mit [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.324828
+in which this Parliament [X] ||| mit dem sich dieses Parlament [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] this Parliament [X] ||| [X][X] sich dieses Parlament [X] ||| 0.00910828 1 ||| 0-0 ||| 0.431818
+[X][X] this Parliament [X] ||| [X][X] dieses Parlament [X] ||| 0.00910828 1 ||| 0-0 ||| 0.431818
+in [X][X] Parliament [X] ||| mit [X][X] Parlament [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+in which [X][X] [X] ||| mit dem [X][X] [X] ||| 0.00910828 1 ||| 2-2 ||| 0.50408
+in which [X][X] [X] ||| mit dem sich [X][X] [X] ||| 0.00910828 1 ||| 2-3 ||| 0.50408
+Parliament has consistently shown [X] ||| Parlament immer wieder befaßt hat [X] ||| 0.0182166 1 ||| ||| 0.333333
+Parliament has [X][X] [X] ||| Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 2-1 ||| 0.7
+Parliament [X][X] [X] ||| Parlament [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.783333
+Parliament has consistently shown an [X] ||| Parlament immer wieder befaßt hat [X] ||| 0.0182166 1 ||| ||| 0.2
+Parliament has [X][X] an [X] ||| Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 2-1 ||| 0.2
+Parliament [X][X] an [X] ||| Parlament [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.2
+Parliament has [X][X] an interest [X] ||| Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 2-1 ||| 0.166667
+Parliament has [X][X] interest [X] ||| Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 2-1 ||| 0.166667
+Parliament [X][X] an interest [X] ||| Parlament [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+Parliament [X][X] interest [X] ||| Parlament [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+has [X][X] an interest . [X] ||| [X][X] hat . [X] ||| 0.0182166 1 ||| 1-0 ||| 0.111111
+has [X][X] an [X][X] [X] ||| [X][X] hat [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.111111
+has [X][X] interest . [X] ||| [X][X] hat . [X] ||| 0.0182166 1 ||| 1-0 ||| 0.111111
+has [X][X] . [X] ||| [X][X] hat . [X] ||| 0.0182166 1 ||| 1-0 ||| 0.111111
+[X][X] an interest . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.363754
+[X][X] interest . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.363754
+[X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.363754
+has consistently shown an [X][X] [X] ||| immer wieder befaßt hat [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.111111
+has consistently shown [X][X] [X] ||| immer wieder befaßt hat [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.111111
+Madam [X][X] I [X][X] [X] ||| Frau [X][X] ich [X][X] Sie [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0769231
+Madam [X][X] should like to [X] ||| Frau [X][X] möchte Sie [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+Madam [X][X] [X] ||| Frau [X][X] Sie [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0769231
+Madam President , [X][X] [X] ||| Frau Präsidentin ! [X][X] Sie [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0769231
+Madam President , I [X][X] [X] ||| Frau Präsidentin ! ich [X][X] Sie [X] ||| 0.0182166 1 ||| 4-4 ||| 0.0769231
+draw your attention [X][X] case [X] ||| Sie [X][X] Fall aufmerksam machen [X] ||| 0.0182166 1 ||| 3-1 ||| 0.142857
+draw your attention [X][X] [X] ||| Sie [X][X] aufmerksam machen [X] ||| 0.0182166 1 ||| 3-1 ||| 0.142857
+draw your attention to [X][X] [X] ||| Sie auf [X][X] aufmerksam machen [X] ||| 0.0182166 1 ||| 4-2 ||| 0.142857
+[X][X] to [X][X] [X] ||| Sie auf [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-2 0-3 ||| 0.253968
+[X][X] to a case [X] ||| Sie auf einen Fall [X][X] [X] ||| 0.0182166 1 ||| 0-4 ||| 0.253968
+draw your attention [X][X] case [X] ||| [X][X] Fall aufmerksam machen , [X] ||| 0.0182166 1 ||| 3-0 ||| 0.253968
+draw your attention [X][X] [X] ||| [X][X] aufmerksam machen , [X] ||| 0.0182166 1 ||| 3-0 ||| 0.253968
+draw your attention to [X][X] [X] ||| auf [X][X] aufmerksam machen , [X] ||| 0.0182166 1 ||| 4-1 ||| 0.142857
+[X][X] to [X][X] [X] ||| auf [X][X] [X][X] , [X] ||| 0.0182166 1 ||| 2-1 0-2 ||| 0.142857
+[X][X] to a case [X] ||| auf einen Fall [X][X] , [X] ||| 0.0182166 1 ||| 0-3 ||| 0.142857
+in which this Parliament [X] ||| , mit dem sich dieses Parlament [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] this Parliament [X] ||| , [X][X] sich dieses Parlament [X] ||| 0.00910828 1 ||| 0-1 ||| 0.181818
+[X][X] this Parliament [X] ||| , [X][X] dieses Parlament [X] ||| 0.00910828 1 ||| 0-1 ||| 0.181818
+[X][X] Parliament [X] ||| , [X][X] Parlament [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0909091
+in [X][X] Parliament [X] ||| , mit [X][X] Parlament [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0909091
+in which [X][X] [X] ||| , mit dem [X][X] [X] ||| 0.00910828 1 ||| 2-3 ||| 0.316322
+in which [X][X] [X] ||| , mit dem sich [X][X] [X] ||| 0.00910828 1 ||| 2-4 ||| 0.316322
+this Parliament has consistently shown [X] ||| dieses Parlament immer wieder befaßt hat [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] has consistently shown [X] ||| [X][X] immer wieder befaßt hat [X] ||| 0.0182166 1 ||| 0-0 ||| 0.438853
+[X][X] has [X][X] [X] ||| [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.980195
+this [X][X] [X] ||| dieses [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.431187
+this Parliament has [X][X] [X] ||| dieses Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 3-2 ||| 0.368687
+this Parliament [X][X] [X] ||| dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.431187
+[X][X] has consistently shown an [X] ||| [X][X] immer wieder befaßt hat [X] ||| 0.0182166 1 ||| 0-0 ||| 0.294748
+[X][X] has [X][X] an [X] ||| [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.294748
+this [X][X] an [X] ||| dieses [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+this Parliament has [X][X] an [X] ||| dieses Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 3-2 ||| 0.111111
+this Parliament [X][X] an [X] ||| dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.111111
+[X][X] has [X][X] an interest [X] ||| [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.246595
+[X][X] has [X][X] interest [X] ||| [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.246595
+this [X][X] an interest [X] ||| dieses [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+this [X][X] interest [X] ||| dieses [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+this Parliament has [X][X] interest [X] ||| dieses Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0909091
+this Parliament [X][X] an interest [X] ||| dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+this Parliament [X][X] interest [X] ||| dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+Parliament has [X][X] an [X][X] [X] ||| Parlament [X][X] hat [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.0833333
+Parliament has [X][X] interest . [X] ||| Parlament [X][X] hat . [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0833333
+Parliament has [X][X] . [X] ||| Parlament [X][X] hat . [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0833333
+Parliament [X][X] an interest . [X] ||| Parlament [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+Parliament [X][X] an [X][X] [X] ||| Parlament [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0833333
+Parliament [X][X] interest . [X] ||| Parlament [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+Parliament [X][X] . [X] ||| Parlament [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+Parliament has consistently shown [X][X] [X] ||| Parlament immer wieder befaßt hat [X][X] [X] ||| 0.0182166 1 ||| 4-5 ||| 0.0833333
+[X][X] draw your attention [X][X] [X] ||| [X][X] [X][X] aufmerksam machen [X] ||| 0.0121444 1 ||| 0-0 4-1 ||| 1.1
+[X][X] draw your attention [X][X] [X] ||| [X][X] Sie [X][X] aufmerksam machen [X] ||| 0.00607219 1 ||| 0-0 4-2 ||| 1.1
+should like to [X][X] [X] ||| möchte [X][X] [X] ||| 0.00910828 1 ||| 3-1 ||| 0.935714
+should like to [X][X] [X] ||| möchte Sie [X][X] [X] ||| 0.00910828 1 ||| 3-2 ||| 0.935714
+draw your attention [X][X] case [X] ||| Sie [X][X] Fall aufmerksam machen , [X] ||| 0.0182166 1 ||| 3-1 ||| 0.111111
+draw your attention [X][X] [X] ||| Sie [X][X] aufmerksam machen , [X] ||| 0.0182166 1 ||| 3-1 ||| 0.111111
+draw your attention to [X][X] [X] ||| Sie auf [X][X] aufmerksam machen , [X] ||| 0.0182166 1 ||| 4-2 ||| 0.111111
+[X][X] to [X][X] [X] ||| Sie auf [X][X] [X][X] , [X] ||| 0.0182166 1 ||| 2-2 0-3 ||| 0.111111
+[X][X] to a case [X] ||| Sie auf einen Fall [X][X] , [X] ||| 0.0182166 1 ||| 0-4 ||| 0.111111
+draw your attention [X][X] in [X] ||| [X][X] aufmerksam machen , mit [X] ||| 0.0182166 1 ||| 3-0 ||| 0.242857
+[X][X] in [X] ||| [X][X] , mit [X] ||| 0.00910828 1 ||| 0-0 ||| 0.735714
+[X][X] in [X] ||| [X][X] mit [X] ||| 0.00910828 1 ||| 0-0 ||| 0.735714
+[X][X] to [X][X] in [X] ||| auf [X][X] [X][X] , mit [X] ||| 0.00910828 1 ||| 2-1 0-2 ||| 0.285714
+[X][X] to [X][X] in [X] ||| auf [X][X] [X][X] mit [X] ||| 0.00910828 1 ||| 2-1 0-2 ||| 0.285714
+[X][X] to a case in [X] ||| auf einen Fall [X][X] , mit [X] ||| 0.00910828 1 ||| 0-3 ||| 0.285714
+[X][X] to a case in [X] ||| auf einen Fall [X][X] mit [X] ||| 0.00910828 1 ||| 0-3 ||| 0.285714
+this Parliament has consistently shown [X] ||| sich dieses Parlament immer wieder befaßt hat [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] has consistently shown [X] ||| sich [X][X] immer wieder befaßt hat [X] ||| 0.0182166 1 ||| 0-1 ||| 0.125
+[X][X] has [X][X] [X] ||| sich [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.279762
+this [X][X] [X] ||| sich dieses [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.325216
+this Parliament has [X][X] [X] ||| sich dieses Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 3-3 ||| 0.279762
+this Parliament [X][X] [X] ||| sich dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.325216
+[X][X] has consistently shown an [X] ||| sich [X][X] immer wieder befaßt hat [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0833333
+[X][X] has [X][X] an [X] ||| sich [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.0833333
+this [X][X] an [X] ||| sich dieses [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0833333
+this Parliament has [X][X] an [X] ||| sich dieses Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0833333
+this Parliament [X][X] an [X] ||| sich dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0833333
+[X][X] has [X][X] an interest [X] ||| sich [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.0714286
+[X][X] has [X][X] interest [X] ||| sich [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.0714286
+this [X][X] an interest [X] ||| sich dieses [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0714286
+this [X][X] interest [X] ||| sich dieses [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0714286
+this Parliament has [X][X] interest [X] ||| sich dieses Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0714286
+this Parliament [X][X] an interest [X] ||| sich dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0714286
+this Parliament [X][X] interest [X] ||| sich dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0714286
+[X][X] has [X][X] interest . [X] ||| [X][X] [X][X] hat . [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.16931
+[X][X] has [X][X] . [X] ||| [X][X] [X][X] hat . [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.16931
+[X][X] has consistently shown [X][X] [X] ||| [X][X] immer wieder befaßt hat [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-5 ||| 0.16931
+this [X][X] an interest . [X] ||| dieses [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0625
+this [X][X] an [X][X] [X] ||| dieses [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0625
+this [X][X] interest . [X] ||| dieses [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0625
+this [X][X] . [X] ||| dieses [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0625
+this Parliament has [X][X] . [X] ||| dieses Parlament [X][X] hat . [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0625
+this Parliament [X][X] an [X][X] [X] ||| dieses Parlament [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0625
+this Parliament [X][X] interest . [X] ||| dieses Parlament [X][X] . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0625
+this Parliament [X][X] . [X] ||| dieses Parlament [X][X] . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0625
+I should like to [X][X] [X] ||| ich möchte [X][X] [X] ||| 0.00910828 1 ||| 4-2 ||| 0.555556
+I should like to [X][X] [X] ||| ich möchte Sie [X][X] [X] ||| 0.00910828 1 ||| 4-3 ||| 0.555556
+[X][X] draw your attention [X][X] [X] ||| [X][X] [X][X] aufmerksam machen , [X] ||| 0.0121444 1 ||| 0-0 4-1 ||| 0.761905
+[X][X] draw your attention [X][X] [X] ||| [X][X] Sie [X][X] aufmerksam machen , [X] ||| 0.00607218 1 ||| 0-0 4-2 ||| 0.761905
+should like to [X][X] [X] ||| möchte [X][X] , [X] ||| 0.00910828 1 ||| 3-1 ||| 0.285714
+should like to [X][X] [X] ||| möchte Sie [X][X] , [X] ||| 0.00910828 1 ||| 3-2 ||| 0.285714
+draw your attention [X][X] in [X] ||| Sie [X][X] aufmerksam machen , mit [X] ||| 0.0182166 1 ||| 3-1 ||| 0.1
+[X][X] in [X] ||| Sie [X][X] , mit [X] ||| 0.00910828 1 ||| 0-1 ||| 0.2
+[X][X] in [X] ||| Sie [X][X] mit [X] ||| 0.00910828 1 ||| 0-1 ||| 0.2
+[X][X] to [X][X] in [X] ||| Sie auf [X][X] [X][X] , mit [X] ||| 0.00910828 1 ||| 2-2 0-3 ||| 0.2
+[X][X] to [X][X] in [X] ||| Sie auf [X][X] [X][X] mit [X] ||| 0.00910828 1 ||| 2-2 0-3 ||| 0.2
+[X][X] to a case in [X] ||| Sie auf einen Fall [X][X] , mit [X] ||| 0.00910828 1 ||| 0-4 ||| 0.2
+[X][X] to a case in [X] ||| Sie auf einen Fall [X][X] mit [X] ||| 0.00910828 1 ||| 0-4 ||| 0.2
+[X][X] in which [X] ||| [X][X] , mit dem [X] ||| 0.00910828 1 ||| 0-0 ||| 0.431818
+[X][X] in which [X] ||| [X][X] mit dem [X] ||| 0.00910828 1 ||| 0-0 ||| 0.431818
+[X][X] which [X] ||| [X][X] dem [X] ||| 0.0182166 1 ||| 0-0 ||| 0.215909
+[X][X] to [X][X] in which [X] ||| auf [X][X] [X][X] , mit dem [X] ||| 0.00910828 1 ||| 2-1 0-2 ||| 0.25
+[X][X] to [X][X] in which [X] ||| auf [X][X] [X][X] mit dem [X] ||| 0.00910828 1 ||| 2-1 0-2 ||| 0.25
+[X][X] to a case [X][X] [X] ||| auf einen Fall [X][X] [X][X] [X] ||| 0.0121444 1 ||| 0-3 4-4 ||| 0.947727
+[X][X] to a case [X][X] [X] ||| auf einen Fall [X][X] , [X][X] [X] ||| 0.00607219 1 ||| 0-3 4-5 ||| 0.947727
+[X][X] Parliament has consistently shown [X] ||| [X][X] Parlament immer wieder befaßt hat [X] ||| 0.0182166 1 ||| 0-0 ||| 0.147186
+[X][X] Parliament has [X][X] [X] ||| [X][X] Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.331746
+[X][X] Parliament [X][X] [X] ||| [X][X] Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.393101
+which [X][X] has consistently shown [X] ||| dem [X][X] immer wieder befaßt hat [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0714286
+which [X][X] has [X][X] [X] ||| dem [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.163095
+which [X][X] has consistently shown [X] ||| dem sich [X][X] immer wieder befaßt hat [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0714286
+which [X][X] has [X][X] [X] ||| dem sich [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.163095
+which this [X][X] [X] ||| dem sich dieses [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.19881
+which this Parliament has [X][X] [X] ||| dem sich dieses Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 4-4 ||| 0.163095
+which this Parliament [X][X] [X] ||| dem sich dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.19881
+[X][X] Parliament has [X][X] an [X] ||| [X][X] Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.100303
+[X][X] Parliament [X][X] an [X] ||| [X][X] Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.100303
+which [X][X] has [X][X] an [X] ||| dem [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.05
+which [X][X] an [X] ||| dem [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.05
+which [X][X] has [X][X] an [X] ||| dem sich [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.05
+which [X][X] an [X] ||| dem sich [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.05
+which this [X][X] an [X] ||| dem sich dieses [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.05
+which this Parliament [X][X] an [X] ||| dem sich dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.05
+[X][X] Parliament has [X][X] interest [X] ||| [X][X] Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0842569
+[X][X] Parliament [X][X] an interest [X] ||| [X][X] Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0842569
+[X][X] Parliament [X][X] interest [X] ||| [X][X] Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0842569
+which [X][X] has [X][X] interest [X] ||| dem [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0416667
+which [X][X] an interest [X] ||| dem [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0416667
+which [X][X] interest [X] ||| dem [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0416667
+which [X][X] has [X][X] interest [X] ||| dem sich [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.0416667
+which [X][X] an interest [X] ||| dem sich [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0416667
+which [X][X] interest [X] ||| dem sich [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0416667
+which this [X][X] an interest [X] ||| dem sich dieses [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0416667
+which this [X][X] interest [X] ||| dem sich dieses [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0416667
+which this Parliament [X][X] interest [X] ||| dem sich dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0416667
+[X][X] has [X][X] interest . [X] ||| sich [X][X] [X][X] hat . [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.0454545
+[X][X] has [X][X] . [X] ||| sich [X][X] [X][X] hat . [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.0454545
+[X][X] has consistently shown [X][X] [X] ||| sich [X][X] immer wieder befaßt hat [X][X] [X] ||| 0.0182166 1 ||| 0-1 4-6 ||| 0.0454545
+[X][X] an interest . [X] ||| sich [X][X] . [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0454545
+[X][X] interest . [X] ||| sich [X][X] . [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0454545
+[X][X] . [X] ||| sich [X][X] . [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0454545
+this [X][X] an interest . [X] ||| sich dieses [X][X] . [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0454545
+this [X][X] an [X][X] [X] ||| sich dieses [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.0454545
+this [X][X] interest . [X] ||| sich dieses [X][X] . [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0454545
+this [X][X] . [X] ||| sich dieses [X][X] . [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0454545
+this Parliament has [X][X] . [X] ||| sich dieses Parlament [X][X] hat . [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0454545
+this Parliament [X][X] an [X][X] [X] ||| sich dieses Parlament [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-4 ||| 0.0454545
+this Parliament [X][X] interest . [X] ||| sich dieses Parlament [X][X] . [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0454545
+this Parliament [X][X] . [X] ||| sich dieses Parlament [X][X] . [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0454545
+I [X][X] [X] ||| ich [X][X] , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+I should like to [X][X] [X] ||| ich möchte [X][X] , [X] ||| 0.00910828 1 ||| 4-2 ||| 0.222222
+I should like to [X][X] [X] ||| ich möchte Sie [X][X] , [X] ||| 0.00910828 1 ||| 4-3 ||| 0.222222
+should like to [X][X] in [X] ||| möchte [X][X] , mit [X] ||| 0.00455414 1 ||| 3-1 ||| 0.5
+should like to [X][X] in [X] ||| möchte [X][X] mit [X] ||| 0.00455414 1 ||| 3-1 ||| 0.5
+should like to [X][X] in [X] ||| möchte Sie [X][X] , mit [X] ||| 0.00455414 1 ||| 3-2 ||| 0.5
+should like to [X][X] in [X] ||| möchte Sie [X][X] mit [X] ||| 0.00455414 1 ||| 3-2 ||| 0.5
+[X][X] in which [X] ||| Sie [X][X] , mit dem [X] ||| 0.00910828 1 ||| 0-1 ||| 0.181818
+[X][X] in which [X] ||| Sie [X][X] mit dem [X] ||| 0.00910828 1 ||| 0-1 ||| 0.181818
+[X][X] which [X] ||| Sie [X][X] dem [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0909091
+[X][X] to [X][X] in which [X] ||| Sie auf [X][X] [X][X] , mit dem [X] ||| 0.00910828 1 ||| 2-2 0-3 ||| 0.181818
+[X][X] to [X][X] in which [X] ||| Sie auf [X][X] [X][X] mit dem [X] ||| 0.00910828 1 ||| 2-2 0-3 ||| 0.181818
+[X][X] to a case [X][X] [X] ||| Sie auf einen Fall [X][X] [X][X] [X] ||| 0.0121444 1 ||| 0-4 4-5 ||| 0.487013
+[X][X] to a case [X][X] [X] ||| Sie auf einen Fall [X][X] , [X][X] [X] ||| 0.0060722 1 ||| 0-4 4-6 ||| 0.487013
+[X][X] in which [X] ||| [X][X] , mit dem sich [X] ||| 0.00910828 1 ||| 0-0 ||| 0.324676
+[X][X] in which [X] ||| [X][X] mit dem sich [X] ||| 0.00910828 1 ||| 0-0 ||| 0.324676
+[X][X] which [X] ||| [X][X] dem sich [X] ||| 0.0182166 1 ||| 0-0 ||| 0.162338
+[X][X] to [X][X] in which [X] ||| auf [X][X] [X][X] , mit dem sich [X] ||| 0.00910828 1 ||| 2-1 0-2 ||| 0.181818
+[X][X] to [X][X] in which [X] ||| auf [X][X] [X][X] mit dem sich [X] ||| 0.00910828 1 ||| 2-1 0-2 ||| 0.181818
+[X][X] to a case [X][X] [X] ||| auf einen Fall [X][X] [X][X] sich [X] ||| 0.0121444 1 ||| 0-3 4-4 ||| 0.272727
+[X][X] to a case [X][X] [X] ||| auf einen Fall [X][X] , [X][X] sich [X] ||| 0.00607219 1 ||| 0-3 4-5 ||| 0.272727
+[X][X] this [X][X] [X] ||| [X][X] sich dieses [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.194292
+[X][X] this Parliament has [X][X] [X] ||| [X][X] sich dieses Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.168651
+[X][X] this Parliament [X][X] [X] ||| [X][X] sich dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.194292
+[X][X] this [X][X] [X] ||| [X][X] dieses [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.194292
+[X][X] this Parliament has [X][X] [X] ||| [X][X] dieses Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.168651
+[X][X] this Parliament [X][X] [X] ||| [X][X] dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.194292
+in [X][X] Parliament has [X][X] [X] ||| mit [X][X] Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.101399
+in [X][X] Parliament [X][X] [X] ||| mit [X][X] Parlament [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.12704
+in [X][X] has consistently shown [X] ||| mit [X][X] immer wieder befaßt hat [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0454545
+in [X][X] has [X][X] [X] ||| mit [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.101399
+in which [X][X] has [X][X] [X] ||| mit dem [X][X] [X][X] hat [X] ||| 0.00910828 1 ||| 2-2 4-3 ||| 0.202798
+in which [X][X] has [X][X] [X] ||| mit dem sich [X][X] [X][X] hat [X] ||| 0.00910828 1 ||| 2-3 4-4 ||| 0.202798
+in which this [X][X] [X] ||| mit dem sich dieses [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.12704
+in which this Parliament [X][X] [X] ||| mit dem sich dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 4-5 ||| 0.12704
+[X][X] this [X][X] an [X] ||| [X][X] sich dieses [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.050303
+[X][X] this Parliament [X][X] an [X] ||| [X][X] sich dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.050303
+[X][X] this [X][X] an [X] ||| [X][X] dieses [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.050303
+[X][X] this Parliament [X][X] an [X] ||| [X][X] dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.050303
+in [X][X] Parliament [X][X] an [X] ||| mit [X][X] Parlament [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.030303
+in [X][X] has [X][X] an [X] ||| mit [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.030303
+in [X][X] an [X] ||| mit [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.030303
+in which [X][X] an [X] ||| mit dem [X][X] [X] ||| 0.00910828 1 ||| 2-2 ||| 0.060606
+in which [X][X] an [X] ||| mit dem sich [X][X] [X] ||| 0.00910828 1 ||| 2-3 ||| 0.060606
+in which this [X][X] an [X] ||| mit dem sich dieses [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.030303
+[X][X] this [X][X] an interest [X] ||| [X][X] sich dieses [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0425902
+[X][X] this [X][X] interest [X] ||| [X][X] sich dieses [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0425902
+[X][X] this Parliament [X][X] interest [X] ||| [X][X] sich dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.0425902
+[X][X] this [X][X] an interest [X] ||| [X][X] dieses [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0425902
+[X][X] this [X][X] interest [X] ||| [X][X] dieses [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0425902
+[X][X] this Parliament [X][X] interest [X] ||| [X][X] dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0425902
+in [X][X] Parliament [X][X] interest [X] ||| mit [X][X] Parlament [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.025641
+in [X][X] has [X][X] interest [X] ||| mit [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.025641
+in [X][X] an interest [X] ||| mit [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.025641
+in [X][X] interest [X] ||| mit [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.025641
+in which [X][X] an interest [X] ||| mit dem [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.025641
+in which [X][X] interest [X] ||| mit dem [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.025641
+in which [X][X] an interest [X] ||| mit dem sich [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.025641
+in which [X][X] interest [X] ||| mit dem sich [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.025641
+in which this [X][X] interest [X] ||| mit dem sich dieses [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.025641
+[X][X] Parliament has [X][X] . [X] ||| [X][X] Parlament [X][X] hat . [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0613553
+[X][X] Parliament [X][X] interest . [X] ||| [X][X] Parlament [X][X] . [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0613553
+[X][X] Parliament [X][X] . [X] ||| [X][X] Parlament [X][X] . [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0613553
+which [X][X] has [X][X] . [X] ||| dem [X][X] [X][X] hat . [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0357143
+which [X][X] an interest . [X] ||| dem [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+which [X][X] an [X][X] [X] ||| dem [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0357143
+which [X][X] interest . [X] ||| dem [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+which [X][X] . [X] ||| dem [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0357143
+which [X][X] has [X][X] . [X] ||| dem sich [X][X] [X][X] hat . [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.0357143
+which [X][X] an interest . [X] ||| dem sich [X][X] . [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0357143
+which [X][X] an [X][X] [X] ||| dem sich [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.0357143
+which [X][X] interest . [X] ||| dem sich [X][X] . [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0357143
+which [X][X] . [X] ||| dem sich [X][X] . [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0357143
+which this [X][X] an [X][X] [X] ||| dem sich dieses [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-4 ||| 0.0357143
+which this [X][X] interest . [X] ||| dem sich dieses [X][X] . [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0357143
+which this [X][X] . [X] ||| dem sich dieses [X][X] . [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0357143
+which this Parliament [X][X] . [X] ||| dem sich dieses Parlament [X][X] . [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0357143
+[X][X] in which [X] ||| Sie [X][X] , mit dem sich [X] ||| 0.00910828 1 ||| 0-1 ||| 0.142857
+[X][X] in which [X] ||| Sie [X][X] mit dem sich [X] ||| 0.00910828 1 ||| 0-1 ||| 0.142857
+[X][X] which [X] ||| Sie [X][X] dem sich [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0714286
+[X][X] to [X][X] in which [X] ||| Sie auf [X][X] [X][X] , mit dem sich [X] ||| 0.00910828 1 ||| 2-2 0-3 ||| 0.142857
+[X][X] to [X][X] in which [X] ||| Sie auf [X][X] [X][X] mit dem sich [X] ||| 0.00910828 1 ||| 2-2 0-3 ||| 0.142857
+[X][X] to a case [X][X] [X] ||| Sie auf einen Fall [X][X] [X][X] sich [X] ||| 0.0121444 1 ||| 0-4 4-5 ||| 0.214286
+[X][X] to a case [X][X] [X] ||| Sie auf einen Fall [X][X] , [X][X] sich [X] ||| 0.00607219 1 ||| 0-4 4-6 ||| 0.214286
+[X][X] in which this [X] ||| [X][X] , mit dem sich dieses [X] ||| 0.0182166 1 ||| 0-0 ||| 0.1
+[X][X] in [X][X] [X] ||| [X][X] , mit [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.1
+[X][X] in which this [X] ||| [X][X] mit dem sich dieses [X] ||| 0.0182166 1 ||| 0-0 ||| 0.1
+[X][X] in [X][X] [X] ||| [X][X] mit [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.1
+[X][X] which this [X] ||| [X][X] dem sich dieses [X] ||| 0.0182166 1 ||| 0-0 ||| 0.1
+[X][X] this [X][X] [X] ||| , [X][X] sich dieses [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-4 ||| 0.0672522
+[X][X] this Parliament has [X][X] [X] ||| , [X][X] sich dieses Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 0-1 4-5 ||| 0.0672522
+[X][X] this Parliament [X][X] [X] ||| , [X][X] sich dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-5 ||| 0.0672522
+[X][X] this [X][X] [X] ||| , [X][X] dieses [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0672522
+[X][X] this Parliament has [X][X] [X] ||| , [X][X] dieses Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 0-1 4-4 ||| 0.0672522
+[X][X] this Parliament [X][X] [X] ||| , [X][X] dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0672522
+[X][X] Parliament has consistently shown [X] ||| , [X][X] Parlament immer wieder befaßt hat [X] ||| 0.0182166 1 ||| 0-1 ||| 0.030303
+[X][X] Parliament has [X][X] [X] ||| , [X][X] Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 0-1 3-3 ||| 0.0672522
+[X][X] Parliament [X][X] [X] ||| , [X][X] Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0672522
+[X][X] has consistently shown [X] ||| , [X][X] immer wieder befaßt hat [X] ||| 0.0182166 1 ||| 0-1 ||| 0.030303
+[X][X] has [X][X] [X] ||| , [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.0672522
+in [X][X] Parliament has [X][X] [X] ||| , mit [X][X] Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 1-2 4-4 ||| 0.0672522
+in [X][X] Parliament [X][X] [X] ||| , mit [X][X] Parlament [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0672522
+in [X][X] has consistently shown [X] ||| , mit [X][X] immer wieder befaßt hat [X] ||| 0.0182166 1 ||| 1-2 ||| 0.030303
+in [X][X] has [X][X] [X] ||| , mit [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.0672522
+in which [X][X] has [X][X] [X] ||| , mit dem [X][X] [X][X] hat [X] ||| 0.00910828 1 ||| 2-3 4-4 ||| 0.134504
+in which [X][X] has [X][X] [X] ||| , mit dem sich [X][X] [X][X] hat [X] ||| 0.00910828 1 ||| 2-4 4-5 ||| 0.134504
+in which this [X][X] [X] ||| , mit dem sich dieses [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0672522
+in which this Parliament [X][X] [X] ||| , mit dem sich dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 4-6 ||| 0.0672522
+[X][X] this [X][X] an [X] ||| , [X][X] sich dieses [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-4 ||| 0.02
+[X][X] this Parliament [X][X] an [X] ||| , [X][X] sich dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-5 ||| 0.02
+[X][X] this [X][X] an [X] ||| , [X][X] dieses [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.02
+[X][X] this Parliament [X][X] an [X] ||| , [X][X] dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.02
+[X][X] Parliament has [X][X] an [X] ||| , [X][X] Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 0-1 3-3 ||| 0.02
+[X][X] Parliament [X][X] an [X] ||| , [X][X] Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.02
+[X][X] has consistently shown an [X] ||| , [X][X] immer wieder befaßt hat [X] ||| 0.0182166 1 ||| 0-1 ||| 0.02
+[X][X] has [X][X] an [X] ||| , [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.02
+in [X][X] Parliament [X][X] an [X] ||| , mit [X][X] Parlament [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.02
+in [X][X] has [X][X] an [X] ||| , mit [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.02
+in [X][X] an [X] ||| , mit [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.02
+in which [X][X] an [X] ||| , mit dem [X][X] [X] ||| 0.00910828 1 ||| 2-3 ||| 0.04
+in which [X][X] an [X] ||| , mit dem sich [X][X] [X] ||| 0.00910828 1 ||| 2-4 ||| 0.04
+in which this [X][X] an [X] ||| , mit dem sich dieses [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.02
+[X][X] this [X][X] an interest [X] ||| , [X][X] sich dieses [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-4 ||| 0.0169492
+[X][X] this [X][X] interest [X] ||| , [X][X] sich dieses [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-4 ||| 0.0169492
+[X][X] this Parliament [X][X] interest [X] ||| , [X][X] sich dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-5 ||| 0.0169492
+[X][X] this [X][X] an interest [X] ||| , [X][X] dieses [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0169492
+[X][X] this [X][X] interest [X] ||| , [X][X] dieses [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0169492
+[X][X] this Parliament [X][X] interest [X] ||| , [X][X] dieses Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-4 ||| 0.0169492
+[X][X] Parliament has [X][X] interest [X] ||| , [X][X] Parlament [X][X] hat [X] ||| 0.0182166 1 ||| 0-1 3-3 ||| 0.0169492
+[X][X] Parliament [X][X] an interest [X] ||| , [X][X] Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0169492
+[X][X] Parliament [X][X] interest [X] ||| , [X][X] Parlament [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0169492
+[X][X] has [X][X] an interest [X] ||| , [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.0169492
+[X][X] has [X][X] interest [X] ||| , [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.0169492
+in [X][X] Parliament [X][X] interest [X] ||| , mit [X][X] Parlament [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0169492
+in [X][X] has [X][X] interest [X] ||| , mit [X][X] [X][X] hat [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.0169492
+in [X][X] an interest [X] ||| , mit [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0169492
+in [X][X] interest [X] ||| , mit [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0169492
+in which [X][X] an interest [X] ||| , mit dem [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0169492
+in which [X][X] interest [X] ||| , mit dem [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0169492
+in which [X][X] an interest [X] ||| , mit dem sich [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0169492
+in which [X][X] interest [X] ||| , mit dem sich [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.0169492
+in which this [X][X] interest [X] ||| , mit dem sich dieses [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0169492
+[X][X] this [X][X] interest . [X] ||| [X][X] sich dieses [X][X] . [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.025641
+[X][X] this [X][X] . [X] ||| [X][X] sich dieses [X][X] . [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.025641
+[X][X] this Parliament [X][X] . [X] ||| [X][X] sich dieses Parlament [X][X] . [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.025641
+[X][X] this [X][X] interest . [X] ||| [X][X] dieses [X][X] . [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.025641
+[X][X] this [X][X] . [X] ||| [X][X] dieses [X][X] . [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.025641
+[X][X] this Parliament [X][X] . [X] ||| [X][X] dieses Parlament [X][X] . [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.025641
+in [X][X] Parliament [X][X] . [X] ||| mit [X][X] Parlament [X][X] . [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.025641
+in [X][X] has [X][X] . [X] ||| mit [X][X] [X][X] hat . [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.025641
+in [X][X] an interest . [X] ||| mit [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.025641
+in [X][X] an [X][X] [X] ||| mit [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.025641
+in [X][X] interest . [X] ||| mit [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.025641
+in [X][X] . [X] ||| mit [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.025641
+in which [X][X] an [X][X] [X] ||| mit dem [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.025641
+in which [X][X] interest . [X] ||| mit dem [X][X] . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.025641
+in which [X][X] . [X] ||| mit dem [X][X] . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.025641
+in which [X][X] an [X][X] [X] ||| mit dem sich [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-4 ||| 0.025641
+in which [X][X] interest . [X] ||| mit dem sich [X][X] . [X] ||| 0.0182166 1 ||| 2-3 ||| 0.025641
+in which [X][X] . [X] ||| mit dem sich [X][X] . [X] ||| 0.0182166 1 ||| 2-3 ||| 0.025641
+in which this [X][X] . [X] ||| mit dem sich dieses [X][X] . [X] ||| 0.0182166 1 ||| 3-4 ||| 0.025641
+it [X] ||| das [X] ||| 0.0182166 1 ||| ||| 1
+is [X] ||| ist [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| der [X] ||| 0.0182166 1 ||| ||| 1
+case [X] ||| Fall [X] ||| 0.0182166 1 ||| ||| 1
+of [X] ||| von [X] ||| 0.0182166 1 ||| ||| 1
+Alexander [X] ||| Alexander [X] ||| 0.0182166 1 ||| ||| 1
+Nikitin [X] ||| Nikitin [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+it is [X] ||| das ist [X] ||| 0.0182166 1 ||| ||| 1
+is the [X] ||| ist der [X] ||| 0.0182166 1 ||| ||| 1
+the case [X] ||| der Fall [X] ||| 0.0182166 1 ||| ||| 1
+case of [X] ||| Fall von [X] ||| 0.0182166 1 ||| ||| 1
+of Alexander [X] ||| von Alexander [X] ||| 0.0182166 1 ||| ||| 1
+Alexander Nikitin [X] ||| Alexander Nikitin [X] ||| 0.0182166 1 ||| ||| 1
+Nikitin . [X] ||| Nikitin . [X] ||| 0.0182166 1 ||| ||| 1
+it is the [X] ||| das ist der [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] the [X] ||| [X][X] der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.333333
+it [X][X] [X] ||| das [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.703664
+is the case [X] ||| ist der Fall [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] case [X] ||| [X][X] Fall [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+is [X][X] [X] ||| ist [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.678023
+the case of [X] ||| der Fall von [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] of [X] ||| [X][X] von [X] ||| 0.0182166 1 ||| 0-0 ||| 0.590909
+the [X][X] [X] ||| der [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.643541
+case of Alexander [X] ||| Fall von Alexander [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] Alexander [X] ||| [X][X] Alexander [X] ||| 0.0182166 1 ||| 0-0 ||| 0.643541
+case [X][X] [X] ||| Fall [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.590909
+of Alexander Nikitin [X] ||| von Alexander Nikitin [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] Nikitin [X] ||| [X][X] Nikitin [X] ||| 0.0182166 1 ||| 0-0 ||| 0.678023
+of [X][X] [X] ||| von [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.5
+Alexander Nikitin . [X] ||| Alexander Nikitin . [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.703664
+Alexander [X][X] [X] ||| Alexander [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+it is the case [X] ||| das ist der Fall [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] the case [X] ||| [X][X] der Fall [X] ||| 0.0182166 1 ||| 0-0 ||| 0.166667
+it [X][X] case [X] ||| das [X][X] Fall [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+it is [X][X] [X] ||| das ist [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.370331
+is the case of [X] ||| ist der Fall von [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] case of [X] ||| [X][X] Fall von [X] ||| 0.0182166 1 ||| 0-0 ||| 0.257576
+is [X][X] of [X] ||| ist [X][X] von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+is the [X][X] [X] ||| ist der [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.34469
+the case of Alexander [X] ||| der Fall von Alexander [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] of Alexander [X] ||| [X][X] von Alexander [X] ||| 0.0182166 1 ||| 0-0 ||| 0.310207
+the [X][X] Alexander [X] ||| der [X][X] Alexander [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+the case [X][X] [X] ||| der Fall [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.310207
+case of Alexander Nikitin [X] ||| Fall von Alexander Nikitin [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] Alexander Nikitin [X] ||| [X][X] Alexander Nikitin [X] ||| 0.0182166 1 ||| 0-0 ||| 0.34469
+case [X][X] Nikitin [X] ||| Fall [X][X] Nikitin [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+case of [X][X] [X] ||| Fall von [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.257576
+of Alexander Nikitin . [X] ||| von Alexander Nikitin . [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] Nikitin . [X] ||| [X][X] Nikitin . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.370331
+of [X][X] . [X] ||| von [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+of Alexander [X][X] [X] ||| von Alexander [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.166667
+it is the case of [X] ||| das ist der Fall von [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] the case of [X] ||| [X][X] der Fall von [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0909091
+[X][X] the [X][X] [X] ||| [X][X] der [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.203664
+it [X][X] case of [X] ||| das [X][X] Fall von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+it [X][X] of [X] ||| das [X][X] von [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+it is [X][X] of [X] ||| das ist [X][X] von [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+it is the [X][X] [X] ||| das ist der [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.203664
+is the case of Alexander [X] ||| ist der Fall von Alexander [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] case of Alexander [X] ||| [X][X] Fall von Alexander [X] ||| 0.0182166 1 ||| 0-0 ||| 0.143541
+[X][X] case [X][X] [X] ||| [X][X] Fall [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.290779
+is [X][X] of Alexander [X] ||| ist [X][X] von Alexander [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+is [X][X] Alexander [X] ||| ist [X][X] Alexander [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+is the [X][X] Alexander [X] ||| ist der [X][X] Alexander [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+is the case [X][X] [X] ||| ist der Fall [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.178023
+the case of Alexander Nikitin [X] ||| der Fall von Alexander Nikitin [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] of Alexander Nikitin [X] ||| [X][X] von Alexander Nikitin [X] ||| 0.0182166 1 ||| 0-0 ||| 0.178023
+[X][X] of [X][X] [X] ||| [X][X] von [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.290779
+the [X][X] Alexander Nikitin [X] ||| der [X][X] Alexander Nikitin [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+the [X][X] Nikitin [X] ||| der [X][X] Nikitin [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+the case [X][X] Nikitin [X] ||| der Fall [X][X] Nikitin [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+the case of [X][X] [X] ||| der Fall von [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.143541
+case of Alexander Nikitin . [X] ||| Fall von Alexander Nikitin . [X] ||| 0.0182166 1 ||| ||| 0.0909091
+[X][X] Alexander Nikitin . [X] ||| [X][X] Alexander Nikitin . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.203664
+[X][X] Alexander [X][X] [X] ||| [X][X] Alexander [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.203664
+case [X][X] Nikitin . [X] ||| Fall [X][X] Nikitin . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+case [X][X] . [X] ||| Fall [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+case of [X][X] . [X] ||| Fall von [X][X] . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0909091
+case of Alexander [X][X] [X] ||| Fall von Alexander [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0909091
+[X][X] the case of Alexander [X] ||| [X][X] der Fall von Alexander [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0526316
+[X][X] the [X][X] Alexander [X] ||| [X][X] der [X][X] Alexander [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0526316
+[X][X] the case [X][X] [X] ||| [X][X] der Fall [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.112755
+it [X][X] case of Alexander [X] ||| das [X][X] Fall von Alexander [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+it [X][X] case [X][X] [X] ||| das [X][X] Fall [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.112755
+it [X][X] of Alexander [X] ||| das [X][X] von Alexander [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+it [X][X] Alexander [X] ||| das [X][X] Alexander [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+it is [X][X] of Alexander [X] ||| das ist [X][X] von Alexander [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+it is [X][X] Alexander [X] ||| das ist [X][X] Alexander [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+it is the [X][X] Alexander [X] ||| das ist der [X][X] Alexander [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0526316
+it is the case [X][X] [X] ||| das ist der Fall [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.112755
+[X][X] case of Alexander Nikitin [X] ||| [X][X] Fall von Alexander Nikitin [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0871143
+[X][X] case [X][X] Nikitin [X] ||| [X][X] Fall [X][X] Nikitin [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0871143
+[X][X] case of [X][X] [X] ||| [X][X] Fall von [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.147238
+is [X][X] of Alexander Nikitin [X] ||| ist [X][X] von Alexander Nikitin [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+is [X][X] of [X][X] [X] ||| ist [X][X] von [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0871143
+is [X][X] Alexander Nikitin [X] ||| ist [X][X] Alexander Nikitin [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+is [X][X] Nikitin [X] ||| ist [X][X] Nikitin [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+is the [X][X] Alexander Nikitin [X] ||| ist der [X][X] Alexander Nikitin [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+is the [X][X] Nikitin [X] ||| ist der [X][X] Nikitin [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+is the case [X][X] Nikitin [X] ||| ist der Fall [X][X] Nikitin [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0526316
+is the case of [X][X] [X] ||| ist der Fall von [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.0871143
+[X][X] of Alexander Nikitin . [X] ||| [X][X] von Alexander Nikitin . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.112755
+[X][X] of [X][X] . [X] ||| [X][X] von [X][X] . [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.112755
+[X][X] of Alexander [X][X] [X] ||| [X][X] von Alexander [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.112755
+the [X][X] Alexander Nikitin . [X] ||| der [X][X] Alexander Nikitin . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+the [X][X] Alexander [X][X] [X] ||| der [X][X] Alexander [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0526316
+the [X][X] Nikitin . [X] ||| der [X][X] Nikitin . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+the [X][X] . [X] ||| der [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+the case [X][X] Nikitin . [X] ||| der Fall [X][X] Nikitin . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+the case [X][X] . [X] ||| der Fall [X][X] . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0526316
+the case of [X][X] . [X] ||| der Fall von [X][X] . [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0526316
+the case of Alexander [X][X] [X] ||| der Fall von Alexander [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.0526316
+[X][X] the [X][X] Alexander Nikitin [X] ||| [X][X] der [X][X] Alexander Nikitin [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0344828
+[X][X] the [X][X] Nikitin [X] ||| [X][X] der [X][X] Nikitin [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0344828
+[X][X] the case [X][X] Nikitin [X] ||| [X][X] der Fall [X][X] Nikitin [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0344828
+[X][X] the case of [X][X] [X] ||| [X][X] der Fall von [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.0601238
+it [X][X] case [X][X] Nikitin [X] ||| das [X][X] Fall [X][X] Nikitin [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0344828
+it [X][X] case of [X][X] [X] ||| das [X][X] Fall von [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0601238
+it [X][X] of Alexander Nikitin [X] ||| das [X][X] von Alexander Nikitin [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+it [X][X] of [X][X] [X] ||| das [X][X] von [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0601238
+it [X][X] Alexander Nikitin [X] ||| das [X][X] Alexander Nikitin [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+it [X][X] Nikitin [X] ||| das [X][X] Nikitin [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+it is [X][X] of [X][X] [X] ||| das ist [X][X] von [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0601238
+it is [X][X] Alexander Nikitin [X] ||| das ist [X][X] Alexander Nikitin [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0344828
+it is [X][X] Nikitin [X] ||| das ist [X][X] Nikitin [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0344828
+it is the [X][X] Nikitin [X] ||| das ist der [X][X] Nikitin [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0344828
+[X][X] case [X][X] Nikitin . [X] ||| [X][X] Fall [X][X] Nikitin . [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0601238
+[X][X] case [X][X] . [X] ||| [X][X] Fall [X][X] . [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0601238
+[X][X] case of [X][X] . [X] ||| [X][X] Fall von [X][X] . [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0601238
+[X][X] case of Alexander [X][X] [X] ||| [X][X] Fall von Alexander [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.0601238
+is [X][X] of [X][X] . [X] ||| ist [X][X] von [X][X] . [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0344828
+is [X][X] of Alexander [X][X] [X] ||| ist [X][X] von Alexander [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0344828
+is [X][X] Alexander Nikitin . [X] ||| ist [X][X] Alexander Nikitin . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+is [X][X] Alexander [X][X] [X] ||| ist [X][X] Alexander [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0344828
+is [X][X] Nikitin . [X] ||| ist [X][X] Nikitin . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+is [X][X] . [X] ||| ist [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0344828
+is the [X][X] Alexander [X][X] [X] ||| ist der [X][X] Alexander [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0344828
+is the [X][X] Nikitin . [X] ||| ist der [X][X] Nikitin . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0344828
+is the [X][X] . [X] ||| ist der [X][X] . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0344828
+is the case [X][X] . [X] ||| ist der Fall [X][X] . [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0344828
+[X][X] the [X][X] Nikitin . [X] ||| [X][X] der [X][X] Nikitin . [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.025641
+[X][X] the [X][X] . [X] ||| [X][X] der [X][X] . [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.025641
+[X][X] the case [X][X] . [X] ||| [X][X] der Fall [X][X] . [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.025641
+it [X][X] case [X][X] . [X] ||| das [X][X] Fall [X][X] . [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.025641
+it [X][X] of [X][X] . [X] ||| das [X][X] von [X][X] . [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.025641
+it [X][X] of Alexander [X][X] [X] ||| das [X][X] von Alexander [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.025641
+it [X][X] Alexander Nikitin . [X] ||| das [X][X] Alexander Nikitin . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.025641
+it [X][X] Alexander [X][X] [X] ||| das [X][X] Alexander [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.025641
+it [X][X] Nikitin . [X] ||| das [X][X] Nikitin . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.025641
+it [X][X] . [X] ||| das [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.025641
+it is [X][X] Alexander [X][X] [X] ||| das ist [X][X] Alexander [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.025641
+it is [X][X] Nikitin . [X] ||| das ist [X][X] Nikitin . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.025641
+it is [X][X] . [X] ||| das ist [X][X] . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.025641
+it is the [X][X] . [X] ||| das ist der [X][X] . [X] ||| 0.0182166 1 ||| 3-3 ||| 0.025641
+are pleased [X] ||| freuen [X] ||| 0.0182166 1 ||| ||| 1
+us [X] ||| uns [X] ||| 0.0182166 1 ||| ||| 1
+of us [X] ||| uns [X] ||| 0.0182166 1 ||| ||| 1
+here [X] ||| hier [X] ||| 0.0182166 1 ||| ||| 1
+all [X] ||| alle [X] ||| 0.0182166 1 ||| ||| 1
+all of [X] ||| alle [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| das [X] ||| 0.0182166 1 ||| ||| 1
+courts [X] ||| Gericht [X] ||| 0.0182166 1 ||| ||| 1
+courts have [X] ||| Gericht [X] ||| 0.0182166 1 ||| ||| 1
+him [X] ||| ihn [X] ||| 0.0182166 1 ||| ||| 1
+acquitted [X] ||| freigesprochen [X] ||| 0.0182166 1 ||| ||| 1
+have acquitted [X] ||| freigesprochen [X] ||| 0.0182166 1 ||| ||| 1
+and [X] ||| und [X] ||| 0.0182166 1 ||| ||| 1
+it clear [X] ||| deutlich [X] ||| 0.0182166 1 ||| ||| 1
+too [X] ||| auch [X] ||| 0.0182166 1 ||| ||| 1
+too , [X] ||| auch [X] ||| 0.0182166 1 ||| ||| 1
+, too [X] ||| auch [X] ||| 0.0182166 1 ||| ||| 1
+, too , [X] ||| auch [X] ||| 0.0182166 1 ||| ||| 1
+in [X] ||| in [X] ||| 0.0182166 1 ||| ||| 1
+Russia [X] ||| Rußland [X] ||| 0.0182166 1 ||| ||| 1
+Russia , [X] ||| Rußland [X] ||| 0.0182166 1 ||| ||| 1
+to [X] ||| zu [X] ||| 0.0182166 1 ||| ||| 1
+environmental information [X] ||| Umweltinformationen [X] ||| 0.0182166 1 ||| ||| 1
+constitutional [X] ||| konstitutionelles [X] ||| 0.0182166 1 ||| ||| 1
+a constitutional [X] ||| konstitutionelles [X] ||| 0.0182166 1 ||| ||| 1
+right [X] ||| Recht [X] ||| 0.0182166 1 ||| ||| 1
+is [X] ||| ist [X] ||| 0.0182166 1 ||| ||| 1
+is a [X] ||| ist [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+are pleased [X] ||| wir freuen [X] ||| 0.0182166 1 ||| ||| 1
+us here [X] ||| uns hier [X] ||| 0.0182166 1 ||| ||| 1
+of us here [X] ||| uns hier [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] here [X] ||| [X][X] hier [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+that [X] ||| , daß [X] ||| 0.218091 1 ||| ||| 2
+the courts [X] ||| das Gericht [X] ||| 0.0182166 1 ||| ||| 1
+the courts have [X] ||| das Gericht [X] ||| 0.0182166 1 ||| ||| 0.5
+the [X][X] [X] ||| das [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.804443
+acquitted him [X] ||| ihn freigesprochen [X] ||| 0.0182166 1 ||| ||| 1
+have acquitted him [X] ||| ihn freigesprochen [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] him [X] ||| ihn [X][X] [X] ||| 0.0182166 1 ||| 0-1 ||| 0.5
+made [X] ||| gemacht hat [X] ||| 0.0182166 1 ||| ||| 1
+in Russia [X] ||| in Rußland [X] ||| 0.0182166 1 ||| ||| 1
+in Russia , [X] ||| in Rußland [X] ||| 0.0182166 1 ||| ||| 0.5
+in [X][X] [X] ||| in [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.5
+access [X] ||| der Zugang [X] ||| 0.0182166 1 ||| ||| 1
+, access [X] ||| der Zugang [X] ||| 0.0182166 1 ||| ||| 1
+to environmental information [X] ||| zu Umweltinformationen [X] ||| 0.0182166 1 ||| ||| 0.5
+to [X][X] [X] ||| zu [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.711111
+constitutional right [X] ||| konstitutionelles Recht [X] ||| 0.0182166 1 ||| ||| 1
+a constitutional right [X] ||| konstitutionelles Recht [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] right [X] ||| [X][X] Recht [X] ||| 0.0182166 1 ||| 0-0 ||| 0.5
+us here are pleased [X] ||| freuen uns hier [X] ||| 0.0182166 1 ||| ||| 0.333333
+us here [X][X] [X] ||| [X][X] uns hier [X] ||| 0.0182166 1 ||| 2-0 ||| 0.583333
+[X][X] are pleased [X] ||| freuen [X][X] [X] ||| 0.0182166 1 ||| 0-1 ||| 0.6
+of us here are pleased [X] ||| freuen uns hier [X] ||| 0.0182166 1 ||| ||| 0.166667
+of us here [X][X] [X] ||| [X][X] uns hier [X] ||| 0.0182166 1 ||| 3-0 ||| 0.291667
+[X][X] here [X][X] [X] ||| [X][X] [X][X] hier [X] ||| 0.0182166 1 ||| 2-0 0-1 ||| 0.291667
+[X][X] here are pleased [X] ||| freuen [X][X] hier [X] ||| 0.0182166 1 ||| 0-1 ||| 0.166667
+of [X][X] are pleased [X] ||| freuen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+all of us here [X] ||| uns hier alle [X] ||| 0.0182166 1 ||| ||| 0.2
+all [X][X] here [X] ||| [X][X] hier alle [X] ||| 0.0182166 1 ||| 1-0 ||| 0.2
+all of [X][X] [X] ||| [X][X] alle [X] ||| 0.0182166 1 ||| 2-0 ||| 0.366667
+all [X][X] [X] ||| [X][X] alle [X] ||| 0.0182166 1 ||| 1-0 ||| 0.366667
+[X][X] us here [X] ||| uns hier [X][X] [X] ||| 0.0182166 1 ||| 0-2 ||| 0.2
+that the [X] ||| , daß das [X] ||| 0.0182166 1 ||| ||| 1
+courts have acquitted him [X] ||| Gericht ihn freigesprochen [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] acquitted him [X] ||| [X][X] ihn freigesprochen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.391667
+courts have [X][X] [X] ||| Gericht [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.428175
+courts [X][X] [X] ||| Gericht [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.428175
+courts [X][X] him [X] ||| Gericht ihn [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.2
+acquitted him and [X] ||| ihn freigesprochen und [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] and [X] ||| [X][X] und [X] ||| 0.218091 1 ||| 0-0 ||| 1.01096
+have acquitted him and [X] ||| ihn freigesprochen und [X] ||| 0.0182166 1 ||| ||| 0.25
+have [X][X] and [X] ||| [X][X] und [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+[X][X] him and [X] ||| ihn [X][X] und [X] ||| 0.0182166 1 ||| 0-1 ||| 0.25
+made it clear [X] ||| deutlich gemacht hat [X] ||| 0.0182166 1 ||| ||| 0.5
+made [X][X] [X] ||| [X][X] gemacht hat [X] ||| 0.0182166 1 ||| 1-0 ||| 0.5
+in Russia , too [X] ||| auch in Rußland [X] ||| 0.0182166 1 ||| ||| 0.2
+in Russia [X][X] [X] ||| [X][X] in Rußland [X] ||| 0.0182166 1 ||| 2-0 ||| 0.342857
+[X][X] , too [X] ||| auch [X][X] [X] ||| 0.0182166 1 ||| 0-1 ||| 0.2
+[X][X] too [X] ||| auch [X][X] [X] ||| 0.0182166 1 ||| 0-1 ||| 0.2
+in [X][X] too [X] ||| auch in [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.2
+in Russia , too , [X] ||| auch in Rußland [X] ||| 0.0182166 1 ||| ||| 0.142857
+in Russia , [X][X] [X] ||| [X][X] in Rußland [X] ||| 0.0182166 1 ||| 3-0 ||| 0.142857
+in Russia [X][X] , [X] ||| [X][X] in Rußland [X] ||| 0.0182166 1 ||| 2-0 ||| 0.142857
+[X][X] , too , [X] ||| auch [X][X] [X] ||| 0.0182166 1 ||| 0-1 ||| 0.142857
+[X][X] too , [X] ||| auch [X][X] [X] ||| 0.0182166 1 ||| 0-1 ||| 0.142857
+in [X][X] too , [X] ||| auch in [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.142857
+access to [X] ||| der Zugang zu [X] ||| 0.0182166 1 ||| ||| 1
+, access to [X] ||| der Zugang zu [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] to [X] ||| [X][X] zu [X] ||| 0.0182166 1 ||| 0-0 ||| 0.635747
+is a constitutional right [X] ||| konstitutionelles Recht ist [X] ||| 0.0182166 1 ||| ||| 0.2
+is [X][X] right [X] ||| [X][X] Recht ist [X] ||| 0.0182166 1 ||| 1-0 ||| 0.2
+is a [X][X] [X] ||| [X][X] ist [X] ||| 0.0182166 1 ||| 2-0 ||| 0.2
+is [X][X] [X] ||| [X][X] ist [X] ||| 0.0182166 1 ||| 1-0 ||| 0.2
+[X][X] constitutional right [X] ||| konstitutionelles Recht [X][X] [X] ||| 0.0182166 1 ||| 0-2 ||| 0.2
+us here are pleased [X] ||| wir freuen uns hier [X] ||| 0.0182166 1 ||| ||| 0.25
+us here [X][X] [X] ||| wir [X][X] uns hier [X] ||| 0.0182166 1 ||| 2-1 ||| 0.25
+[X][X] are pleased [X] ||| wir freuen [X][X] [X] ||| 0.0182166 1 ||| 0-2 ||| 0.441667
+of us here are pleased [X] ||| wir freuen uns hier [X] ||| 0.0182166 1 ||| ||| 0.125
+of us here [X][X] [X] ||| wir [X][X] uns hier [X] ||| 0.0182166 1 ||| 3-1 ||| 0.125
+[X][X] here [X][X] [X] ||| wir [X][X] [X][X] hier [X] ||| 0.0182166 1 ||| 2-1 0-2 ||| 0.125
+[X][X] here are pleased [X] ||| wir freuen [X][X] hier [X] ||| 0.0182166 1 ||| 0-2 ||| 0.125
+of [X][X] are pleased [X] ||| wir freuen [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.125
+all of us here [X][X] [X] ||| [X][X] uns hier alle [X] ||| 0.0182166 1 ||| 4-0 ||| 0.166667
+all [X][X] here [X][X] [X] ||| [X][X] [X][X] hier alle [X] ||| 0.0182166 1 ||| 3-0 1-1 ||| 0.166667
+[X][X] us here [X][X] [X] ||| [X][X] uns hier [X][X] [X] ||| 0.0182166 1 ||| 3-0 0-3 ||| 0.166667
+all [X][X] here are pleased [X] ||| freuen [X][X] hier alle [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+all of [X][X] are pleased [X] ||| freuen [X][X] alle [X] ||| 0.0182166 1 ||| 2-1 ||| 0.1
+all [X][X] are pleased [X] ||| freuen [X][X] alle [X] ||| 0.0182166 1 ||| 1-1 ||| 0.1
+[X][X] us here are pleased [X] ||| freuen uns hier [X][X] [X] ||| 0.0182166 1 ||| 0-3 ||| 0.1
+that the courts [X] ||| , daß das Gericht [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] courts [X] ||| [X][X] Gericht [X] ||| 0.0182166 1 ||| 0-0 ||| 0.479798
+that [X][X] [X] ||| , daß [X][X] [X] ||| 0.218091 1 ||| 1-2 ||| 1.19132
+that the courts have [X] ||| , daß das Gericht [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] courts have [X] ||| [X][X] Gericht [X] ||| 0.0182166 1 ||| 0-0 ||| 0.305128
+that [X][X] have [X] ||| , daß [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.2
+that the [X][X] [X] ||| , daß das [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.364753
+the courts have acquitted him [X] ||| das Gericht ihn freigesprochen [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] have acquitted him [X] ||| [X][X] ihn freigesprochen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.191667
+the [X][X] acquitted him [X] ||| das [X][X] ihn freigesprochen [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+the courts have [X][X] [X] ||| das Gericht [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.304443
+the courts [X][X] [X] ||| das Gericht [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.304443
+the courts [X][X] him [X] ||| das Gericht ihn [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.125
+courts have acquitted him and [X] ||| Gericht ihn freigesprochen und [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] acquitted him and [X] ||| [X][X] ihn freigesprochen und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.260965
+courts have [X][X] and [X] ||| Gericht [X][X] und [X] ||| 0.0182166 1 ||| 2-1 ||| 0.125
+courts [X][X] and [X] ||| Gericht [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.125
+courts [X][X] him and [X] ||| Gericht ihn [X][X] und [X] ||| 0.0182166 1 ||| 1-2 ||| 0.125
+and made it clear [X] ||| und deutlich gemacht hat [X] ||| 0.0182166 1 ||| ||| 0.333333
+and made [X][X] [X] ||| und [X][X] gemacht hat [X] ||| 0.0182166 1 ||| 2-1 ||| 0.333333
+and [X][X] [X] ||| und [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.666667
+access to environmental information [X] ||| der Zugang zu Umweltinformationen [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] environmental information [X] ||| [X][X] Umweltinformationen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.490476
+access [X][X] [X] ||| der Zugang [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.410256
+access to [X][X] [X] ||| der Zugang zu [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.410256
+, access to environmental information [X] ||| der Zugang zu Umweltinformationen [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] to environmental information [X] ||| [X][X] zu Umweltinformationen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.240476
+[X][X] to [X][X] [X] ||| [X][X] zu [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.369643
+, [X][X] environmental information [X] ||| [X][X] Umweltinformationen [X] ||| 0.0182166 1 ||| 1-0 ||| 0.142857
+, access [X][X] [X] ||| der Zugang [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.272024
+, access to [X][X] [X] ||| der Zugang zu [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.272024
+[X][X] is a constitutional right [X] ||| [X][X] konstitutionelles Recht ist [X] ||| 0.0182166 1 ||| 0-0 ||| 0.354701
+[X][X] is [X][X] right [X] ||| [X][X] [X][X] Recht ist [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.354701
+[X][X] is a [X][X] [X] ||| [X][X] [X][X] ist [X] ||| 0.0182166 1 ||| 0-0 3-1 ||| 0.354701
+[X][X] is [X][X] [X] ||| [X][X] [X][X] ist [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.354701
+environmental information is [X][X] right [X] ||| Umweltinformationen [X][X] Recht ist [X] ||| 0.0182166 1 ||| 3-1 ||| 0.111111
+environmental information is a [X][X] [X] ||| Umweltinformationen [X][X] ist [X] ||| 0.0182166 1 ||| 4-1 ||| 0.111111
+environmental information is [X][X] [X] ||| Umweltinformationen [X][X] ist [X] ||| 0.0182166 1 ||| 3-1 ||| 0.111111
+environmental information [X][X] [X] ||| Umweltinformationen [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.253968
+environmental information [X][X] constitutional right [X] ||| Umweltinformationen konstitutionelles Recht [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.111111
+is a constitutional right . [X] ||| konstitutionelles Recht ist . [X] ||| 0.0182166 1 ||| ||| 0.166667
+is [X][X] right . [X] ||| [X][X] Recht ist . [X] ||| 0.0182166 1 ||| 1-0 ||| 0.166667
+is a [X][X] . [X] ||| [X][X] ist . [X] ||| 0.0182166 1 ||| 2-0 ||| 0.166667
+is [X][X] . [X] ||| [X][X] ist . [X] ||| 0.0182166 1 ||| 1-0 ||| 0.166667
+[X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 0-0 ||| 0.566468
+[X][X] constitutional right . [X] ||| konstitutionelles Recht [X][X] . [X] ||| 0.0182166 1 ||| 0-2 ||| 0.166667
+all of us here [X][X] [X] ||| wir [X][X] uns hier alle [X] ||| 0.0182166 1 ||| 4-1 ||| 0.0666667
+all [X][X] here [X][X] [X] ||| wir [X][X] [X][X] hier alle [X] ||| 0.0182166 1 ||| 3-1 1-2 ||| 0.0666667
+[X][X] us here [X][X] [X] ||| wir [X][X] uns hier [X][X] [X] ||| 0.0182166 1 ||| 3-1 0-4 ||| 0.0666667
+all of [X][X] [X] ||| wir [X][X] alle [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0666667
+all [X][X] [X] ||| wir [X][X] alle [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+all [X][X] here are pleased [X] ||| wir freuen [X][X] hier alle [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0666667
+all of [X][X] are pleased [X] ||| wir freuen [X][X] alle [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0666667
+all [X][X] are pleased [X] ||| wir freuen [X][X] alle [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0666667
+[X][X] us here are pleased [X] ||| wir freuen uns hier [X][X] [X] ||| 0.0182166 1 ||| 0-4 ||| 0.0666667
+[X][X] have acquitted him and [X] ||| [X][X] ihn freigesprochen und [X] ||| 0.0182166 1 ||| 0-0 ||| 0.135965
+[X][X] have [X][X] and [X] ||| [X][X] [X][X] und [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.135965
+the [X][X] acquitted him and [X] ||| das [X][X] ihn freigesprochen und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+the [X][X] and [X] ||| das [X][X] und [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+the courts have [X][X] and [X] ||| das Gericht [X][X] und [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0833333
+the courts [X][X] and [X] ||| das Gericht [X][X] und [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0833333
+the courts [X][X] him and [X] ||| das Gericht ihn [X][X] und [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0833333
+made it clear that [X] ||| deutlich gemacht hat , daß [X] ||| 0.0182166 1 ||| ||| 0.333333
+made [X][X] that [X] ||| [X][X] gemacht hat , daß [X] ||| 0.0182166 1 ||| 1-0 ||| 0.333333
+[X][X] that [X] ||| [X][X] , daß [X] ||| 0.218091 1 ||| 0-0 ||| 1.00944
+that in Russia , too [X] ||| , daß auch in Rußland [X] ||| 0.0182166 1 ||| ||| 0.166667
+that in Russia [X][X] [X] ||| , daß [X][X] in Rußland [X] ||| 0.0182166 1 ||| 3-2 ||| 0.277778
+that [X][X] , too [X] ||| , daß auch [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.166667
+that [X][X] too [X] ||| , daß auch [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.166667
+that in [X][X] too [X] ||| , daß auch in [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.166667
+that in Russia , [X][X] [X] ||| , daß [X][X] in Rußland [X] ||| 0.0182166 1 ||| 4-2 ||| 0.111111
+that [X][X] , [X][X] [X] ||| , daß [X][X] [X][X] [X] ||| 0.0182166 1 ||| 3-2 1-3 ||| 0.111111
+that in Russia [X][X] , [X] ||| , daß [X][X] in Rußland [X] ||| 0.0182166 1 ||| 3-2 ||| 0.111111
+that [X][X] , [X] ||| , daß [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.111111
+that [X][X] , too , [X] ||| , daß auch [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.111111
+that [X][X] too , [X] ||| , daß auch [X][X] [X] ||| 0.0182166 1 ||| 1-3 ||| 0.111111
+that in [X][X] too , [X] ||| , daß auch in [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.111111
+in Russia , [X][X] access [X] ||| [X][X] in Rußland der Zugang [X] ||| 0.0182166 1 ||| 3-0 ||| 0.0769231
+[X][X] , [X][X] access [X] ||| [X][X] [X][X] der Zugang [X] ||| 0.0182166 1 ||| 2-0 0-1 ||| 0.0769231
+in Russia [X][X] , access [X] ||| [X][X] in Rußland der Zugang [X] ||| 0.0182166 1 ||| 2-0 ||| 0.0769231
+in Russia [X][X] access [X] ||| [X][X] in Rußland der Zugang [X] ||| 0.0182166 1 ||| 2-0 ||| 0.0769231
+[X][X] , access [X] ||| [X][X] der Zugang [X] ||| 0.0182166 1 ||| 0-0 ||| 0.258741
+[X][X] access [X] ||| [X][X] der Zugang [X] ||| 0.0182166 1 ||| 0-0 ||| 0.258741
+[X][X] , too , access [X] ||| auch [X][X] der Zugang [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0769231
+[X][X] , too [X][X] [X] ||| auch [X][X] [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-2 ||| 0.185747
+[X][X] too , access [X] ||| auch [X][X] der Zugang [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0769231
+[X][X] too [X][X] [X] ||| auch [X][X] [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.185747
+in [X][X] too , access [X] ||| auch in [X][X] der Zugang [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0769231
+in [X][X] too [X][X] [X] ||| auch in [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.185747
+in Russia , too [X][X] [X] ||| auch in Rußland [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.185747
+to [X][X] is [X][X] right [X] ||| zu [X][X] [X][X] Recht ist [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.1
+to [X][X] is a [X][X] [X] ||| zu [X][X] [X][X] ist [X] ||| 0.0182166 1 ||| 1-1 4-2 ||| 0.1
+to [X][X] is [X][X] [X] ||| zu [X][X] [X][X] ist [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.1
+to environmental information is [X][X] [X] ||| zu Umweltinformationen [X][X] ist [X] ||| 0.0182166 1 ||| 4-2 ||| 0.1
+to environmental information [X][X] [X] ||| zu Umweltinformationen [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.211111
+[X][X] is [X][X] right . [X] ||| [X][X] [X][X] Recht ist . [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.399802
+[X][X] is a [X][X] . [X] ||| [X][X] [X][X] ist . [X] ||| 0.0182166 1 ||| 0-0 3-1 ||| 0.399802
+[X][X] is [X][X] . [X] ||| [X][X] [X][X] ist . [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.399802
+environmental information is [X][X] . [X] ||| Umweltinformationen [X][X] ist . [X] ||| 0.0182166 1 ||| 3-1 ||| 0.142857
+environmental information [X][X] . [X] ||| Umweltinformationen [X][X] . [X] ||| 0.0182166 1 ||| 2-1 ||| 0.142857
+all [X][X] here [X][X] that [X] ||| [X][X] [X][X] hier alle , daß [X] ||| 0.0182166 1 ||| 3-0 1-1 ||| 0.22619
+[X][X] us here [X][X] that [X] ||| [X][X] uns hier [X][X] , daß [X] ||| 0.0182166 1 ||| 3-0 0-3 ||| 0.22619
+all of [X][X] that [X] ||| [X][X] alle , daß [X] ||| 0.0182166 1 ||| 2-0 ||| 0.22619
+all [X][X] that [X] ||| [X][X] alle , daß [X] ||| 0.0182166 1 ||| 1-0 ||| 0.22619
+all [X][X] are pleased that [X] ||| freuen [X][X] alle , daß [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+[X][X] are pleased that [X] ||| freuen [X][X] , daß [X] ||| 0.0182166 1 ||| 0-1 ||| 0.142857
+[X][X] courts have acquitted him [X] ||| [X][X] Gericht ihn freigesprochen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0666667
+[X][X] courts have [X][X] [X] ||| [X][X] Gericht [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.164753
+[X][X] courts [X][X] [X] ||| [X][X] Gericht [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.164753
+[X][X] courts [X][X] him [X] ||| [X][X] Gericht ihn [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0666667
+that [X][X] have acquitted him [X] ||| , daß [X][X] ihn freigesprochen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0666667
+that [X][X] have [X][X] [X] ||| , daß [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.164753
+that [X][X] acquitted him [X] ||| , daß [X][X] ihn freigesprochen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0666667
+that the [X][X] acquitted him [X] ||| , daß das [X][X] ihn freigesprochen [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0666667
+that the courts have [X][X] [X] ||| , daß das Gericht [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.164753
+that the courts [X][X] [X] ||| , daß das Gericht [X][X] [X] ||| 0.0182166 1 ||| 3-4 ||| 0.164753
+that the courts [X][X] him [X] ||| , daß das Gericht ihn [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.0666667
+[X][X] and made it clear [X] ||| [X][X] und deutlich gemacht hat [X] ||| 0.0182166 1 ||| 0-0 ||| 0.35007
+[X][X] and made [X][X] [X] ||| [X][X] und [X][X] gemacht hat [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.35007
+[X][X] and [X][X] [X] ||| [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.599991
+[X][X] made it clear [X] ||| [X][X] deutlich gemacht hat [X] ||| 0.0182166 1 ||| 0-0 ||| 0.35007
+[X][X] made [X][X] [X] ||| [X][X] [X][X] gemacht hat [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.35007
+acquitted him [X][X] [X] ||| ihn freigesprochen [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.225
+acquitted him and made [X][X] [X] ||| ihn freigesprochen und [X][X] gemacht hat [X] ||| 0.0182166 1 ||| 4-3 ||| 0.125
+acquitted him and [X][X] [X] ||| ihn freigesprochen und [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.225
+have [X][X] and made [X][X] [X] ||| [X][X] und [X][X] gemacht hat [X] ||| 0.0182166 1 ||| 1-0 4-2 ||| 0.0714286
+have [X][X] and [X][X] [X] ||| [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.130252
+have [X][X] made it clear [X] ||| [X][X] deutlich gemacht hat [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0714286
+have [X][X] made [X][X] [X] ||| [X][X] [X][X] gemacht hat [X] ||| 0.0182166 1 ||| 1-0 3-1 ||| 0.0714286
+[X][X] him [X][X] [X] ||| ihn [X][X] [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.130252
+[X][X] him and made [X][X] [X] ||| ihn [X][X] und [X][X] gemacht hat [X] ||| 0.0182166 1 ||| 0-1 4-3 ||| 0.0714286
+[X][X] him and [X][X] [X] ||| ihn [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-3 ||| 0.130252
+have acquitted him [X][X] [X] ||| ihn freigesprochen [X][X] [X] ||| 0.0182166 1 ||| 3-2 ||| 0.130252
+have acquitted him and [X][X] [X] ||| ihn freigesprochen und [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.130252
+and made it clear that [X] ||| und deutlich gemacht hat , daß [X] ||| 0.0182166 1 ||| ||| 0.2
+and made [X][X] that [X] ||| und [X][X] gemacht hat , daß [X] ||| 0.0182166 1 ||| 2-1 ||| 0.2
+and [X][X] that [X] ||| und [X][X] , daß [X] ||| 0.0182166 1 ||| 1-1 ||| 0.2
+[X][X] , [X][X] access to [X] ||| [X][X] [X][X] der Zugang zu [X] ||| 0.0182166 1 ||| 2-0 0-1 ||| 0.0588235
+in Russia [X][X] , [X][X] [X] ||| [X][X] in Rußland [X][X] [X] ||| 0.0182166 1 ||| 2-0 4-3 ||| 0.108824
+in Russia [X][X] access to [X] ||| [X][X] in Rußland der Zugang zu [X] ||| 0.0182166 1 ||| 2-0 ||| 0.0588235
+[X][X] , access to [X] ||| [X][X] der Zugang zu [X] ||| 0.0182166 1 ||| 0-0 ||| 0.135747
+[X][X] access to [X] ||| [X][X] der Zugang zu [X] ||| 0.0182166 1 ||| 0-0 ||| 0.135747
+[X][X] , too [X][X] to [X] ||| auch [X][X] [X][X] zu [X] ||| 0.0182166 1 ||| 0-1 3-2 ||| 0.0588235
+[X][X] , too , [X][X] [X] ||| auch [X][X] [X][X] [X] ||| 0.0182166 1 ||| 0-1 4-2 ||| 0.108824
+[X][X] too , access to [X] ||| auch [X][X] der Zugang zu [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0588235
+[X][X] too [X][X] to [X] ||| auch [X][X] [X][X] zu [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.0588235
+[X][X] too , [X][X] [X] ||| auch [X][X] [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-2 ||| 0.108824
+in [X][X] too [X][X] to [X] ||| auch in [X][X] [X][X] zu [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.0588235
+in [X][X] too , [X][X] [X] ||| auch in [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-3 ||| 0.108824
+to [X][X] is [X][X] . [X] ||| zu [X][X] [X][X] ist . [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.111111
+to [X][X] . [X] ||| zu [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+to environmental information [X][X] . [X] ||| zu Umweltinformationen [X][X] . [X] ||| 0.0182166 1 ||| 3-2 ||| 0.111111
+all [X][X] here [X][X] that [X] ||| wir [X][X] [X][X] hier alle , daß [X] ||| 0.0182166 1 ||| 3-1 1-2 ||| 0.0833333
+[X][X] us here [X][X] that [X] ||| wir [X][X] uns hier [X][X] , daß [X] ||| 0.0182166 1 ||| 3-1 0-4 ||| 0.0833333
+all of [X][X] that [X] ||| wir [X][X] alle , daß [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0833333
+all [X][X] that [X] ||| wir [X][X] alle , daß [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0833333
+[X][X] that [X] ||| wir [X][X] , daß [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0833333
+all [X][X] are pleased that [X] ||| wir freuen [X][X] alle , daß [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0833333
+[X][X] are pleased that [X] ||| wir freuen [X][X] , daß [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0833333
+all of [X][X] that the [X] ||| [X][X] alle , daß das [X] ||| 0.0182166 1 ||| 2-0 ||| 0.233766
+all [X][X] that the [X] ||| [X][X] alle , daß das [X] ||| 0.0182166 1 ||| 1-0 ||| 0.233766
+[X][X] that the [X] ||| [X][X] , daß das [X] ||| 0.0182166 1 ||| 0-0 ||| 0.233766
+[X][X] the [X] ||| [X][X] das [X] ||| 0.0182166 1 ||| 0-0 ||| 0.233766
+all [X][X] are pleased [X][X] [X] ||| freuen [X][X] alle [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.300433
+[X][X] are pleased that the [X] ||| freuen [X][X] , daß das [X] ||| 0.0182166 1 ||| 0-1 ||| 0.142857
+[X][X] are pleased [X][X] [X] ||| freuen [X][X] [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-2 ||| 0.300433
+[X][X] courts have [X][X] and [X] ||| [X][X] Gericht [X][X] und [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.0526316
+[X][X] courts [X][X] and [X] ||| [X][X] Gericht [X][X] und [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0526316
+[X][X] courts [X][X] him and [X] ||| [X][X] Gericht ihn [X][X] und [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0526316
+that [X][X] have [X][X] and [X] ||| , daß [X][X] [X][X] und [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.0526316
+that [X][X] acquitted him and [X] ||| , daß [X][X] ihn freigesprochen und [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0526316
+that [X][X] and [X] ||| , daß [X][X] und [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0526316
+that the [X][X] and [X] ||| , daß das [X][X] und [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0526316
+that the courts [X][X] and [X] ||| , daß das Gericht [X][X] und [X] ||| 0.0182166 1 ||| 3-4 ||| 0.0526316
+[X][X] acquitted him [X][X] [X] ||| [X][X] ihn freigesprochen [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.244739
+[X][X] acquitted him and [X][X] [X] ||| [X][X] ihn freigesprochen und [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.244739
+courts have [X][X] and [X][X] [X] ||| Gericht [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-3 ||| 0.103175
+courts [X][X] and made [X][X] [X] ||| Gericht [X][X] und [X][X] gemacht hat [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0555556
+courts [X][X] and [X][X] [X] ||| Gericht [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.103175
+courts have [X][X] made [X][X] [X] ||| Gericht [X][X] [X][X] gemacht hat [X] ||| 0.0182166 1 ||| 2-1 4-2 ||| 0.0555556
+courts [X][X] made it clear [X] ||| Gericht [X][X] deutlich gemacht hat [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+courts [X][X] made [X][X] [X] ||| Gericht [X][X] [X][X] gemacht hat [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0555556
+courts [X][X] him [X][X] [X] ||| Gericht ihn [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.103175
+courts [X][X] him and [X][X] [X] ||| Gericht ihn [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-4 ||| 0.103175
+courts have acquitted him [X][X] [X] ||| Gericht ihn freigesprochen [X][X] [X] ||| 0.0182166 1 ||| 4-3 ||| 0.103175
+that [X][X] , [X][X] access [X] ||| , daß [X][X] [X][X] der Zugang [X] ||| 0.0182166 1 ||| 3-2 1-3 ||| 0.0909091
+that in Russia [X][X] access [X] ||| , daß [X][X] in Rußland der Zugang [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0909091
+that [X][X] , access [X] ||| , daß [X][X] der Zugang [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0909091
+that [X][X] access [X] ||| , daß [X][X] der Zugang [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0909091
+that [X][X] , too [X][X] [X] ||| , daß auch [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-3 4-4 ||| 0.215451
+that [X][X] too , access [X] ||| , daß auch [X][X] der Zugang [X] ||| 0.0182166 1 ||| 1-3 ||| 0.0909091
+that [X][X] too [X][X] [X] ||| , daß auch [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-3 3-4 ||| 0.215451
+that in [X][X] too [X][X] [X] ||| , daß auch in [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-4 4-5 ||| 0.215451
+in Russia [X][X] access [X][X] [X] ||| [X][X] in Rußland der Zugang [X][X] [X] ||| 0.0182166 1 ||| 2-0 4-5 ||| 0.05
+[X][X] , [X][X] environmental information [X] ||| [X][X] [X][X] Umweltinformationen [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.097619
+[X][X] , access [X][X] [X] ||| [X][X] der Zugang [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.097619
+[X][X] , access to [X][X] [X] ||| [X][X] der Zugang zu [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-4 ||| 0.097619
+[X][X] access to environmental information [X] ||| [X][X] der Zugang zu Umweltinformationen [X] ||| 0.0182166 1 ||| 0-0 ||| 0.097619
+[X][X] access [X][X] [X] ||| [X][X] der Zugang [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.097619
+[X][X] access to [X][X] [X] ||| [X][X] der Zugang zu [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.097619
+[X][X] too [X][X] environmental information [X] ||| auch [X][X] [X][X] Umweltinformationen [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.05
+[X][X] too , access [X][X] [X] ||| auch [X][X] der Zugang [X][X] [X] ||| 0.0182166 1 ||| 0-1 4-4 ||| 0.05
+[X][X] environmental information is [X][X] [X] ||| [X][X] Umweltinformationen [X][X] ist [X] ||| 0.0182166 1 ||| 0-0 4-2 ||| 0.14359
+[X][X] environmental information [X][X] [X] ||| [X][X] Umweltinformationen [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.289423
+access [X][X] is [X][X] right [X] ||| der Zugang [X][X] [X][X] Recht ist [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.0769231
+access [X][X] is a [X][X] [X] ||| der Zugang [X][X] [X][X] ist [X] ||| 0.0182166 1 ||| 1-2 4-3 ||| 0.0769231
+access [X][X] is [X][X] [X] ||| der Zugang [X][X] [X][X] ist [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.0769231
+access to [X][X] is [X][X] [X] ||| der Zugang zu [X][X] [X][X] ist [X] ||| 0.0182166 1 ||| 2-3 4-4 ||| 0.0769231
+access to environmental information [X][X] [X] ||| der Zugang zu Umweltinformationen [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.160256
+[X][X] to environmental information [X][X] [X] ||| [X][X] zu Umweltinformationen [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.129167
+, [X][X] environmental information [X][X] [X] ||| [X][X] Umweltinformationen [X][X] [X] ||| 0.0182166 1 ||| 1-0 4-2 ||| 0.129167
+, [X][X] is [X][X] right [X] ||| [X][X] [X][X] Recht ist [X] ||| 0.0182166 1 ||| 1-0 3-1 ||| 0.0666667
+, [X][X] is a [X][X] [X] ||| [X][X] [X][X] ist [X] ||| 0.0182166 1 ||| 1-0 4-1 ||| 0.0666667
+, [X][X] is [X][X] [X] ||| [X][X] [X][X] ist [X] ||| 0.0182166 1 ||| 1-0 3-1 ||| 0.0666667
+, access [X][X] is [X][X] [X] ||| der Zugang [X][X] [X][X] ist [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0666667
+all of [X][X] that the [X] ||| wir [X][X] alle , daß das [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0909091
+all [X][X] that the [X] ||| wir [X][X] alle , daß das [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+[X][X] that the [X] ||| wir [X][X] , daß das [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0909091
+[X][X] the [X] ||| wir [X][X] das [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0909091
+all [X][X] are pleased [X][X] [X] ||| wir freuen [X][X] alle [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-4 ||| 0.184926
+[X][X] are pleased that the [X] ||| wir freuen [X][X] , daß das [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0909091
+[X][X] are pleased [X][X] [X] ||| wir freuen [X][X] [X][X] [X] ||| 0.0182166 1 ||| 0-2 3-3 ||| 0.184926
+all of [X][X] that [X][X] [X] ||| [X][X] alle , daß [X][X] [X] ||| 0.0182166 1 ||| 2-0 4-4 ||| 0.251593
+all [X][X] that the courts [X] ||| [X][X] alle , daß das Gericht [X] ||| 0.0182166 1 ||| 1-0 ||| 0.146465
+all [X][X] that [X][X] [X] ||| [X][X] alle , daß [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-4 ||| 0.251593
+[X][X] that the courts [X] ||| [X][X] , daß das Gericht [X] ||| 0.0182166 1 ||| 0-0 ||| 0.146465
+[X][X] that [X][X] [X] ||| [X][X] , daß [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.636092
+[X][X] the courts [X] ||| [X][X] das Gericht [X] ||| 0.0182166 1 ||| 0-0 ||| 0.146465
+[X][X] are pleased [X][X] courts [X] ||| freuen [X][X] [X][X] Gericht [X] ||| 0.0182166 1 ||| 0-1 3-2 ||| 0.0909091
+[X][X] are pleased that [X][X] [X] ||| freuen [X][X] , daß [X][X] [X] ||| 0.0182166 1 ||| 0-1 4-4 ||| 0.157576
+all [X][X] that [X][X] have [X] ||| [X][X] alle , daß [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-4 ||| 0.105128
+all [X][X] that the [X][X] [X] ||| [X][X] alle , daß das [X][X] [X] ||| 0.0182166 1 ||| 1-0 4-5 ||| 0.105128
+[X][X] that the courts have [X] ||| [X][X] , daß das Gericht [X] ||| 0.0182166 1 ||| 0-0 ||| 0.105128
+[X][X] that [X][X] have [X] ||| [X][X] , daß [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.105128
+[X][X] that the [X][X] [X] ||| [X][X] , daß das [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-4 ||| 0.105128
+[X][X] the courts have [X] ||| [X][X] das Gericht [X] ||| 0.0182166 1 ||| 0-0 ||| 0.105128
+[X][X] the [X][X] [X] ||| [X][X] das [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.105128
+[X][X] are pleased [X][X] have [X] ||| freuen [X][X] [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-2 ||| 0.0666667
+[X][X] have acquitted him [X][X] [X] ||| [X][X] ihn freigesprochen [X][X] [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.141564
+the [X][X] acquitted him [X][X] [X] ||| das [X][X] ihn freigesprochen [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-4 ||| 0.0961098
+the [X][X] and made [X][X] [X] ||| das [X][X] und [X][X] gemacht hat [X] ||| 0.0182166 1 ||| 1-1 4-3 ||| 0.0526316
+the [X][X] and [X][X] [X] ||| das [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0961098
+the [X][X] made it clear [X] ||| das [X][X] deutlich gemacht hat [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0526316
+the [X][X] made [X][X] [X] ||| das [X][X] [X][X] gemacht hat [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0526316
+the courts [X][X] and [X][X] [X] ||| das Gericht [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 2-2 4-4 ||| 0.0961098
+the courts [X][X] made [X][X] [X] ||| das Gericht [X][X] [X][X] gemacht hat [X] ||| 0.0182166 1 ||| 2-2 4-3 ||| 0.0526316
+the courts [X][X] him [X][X] [X] ||| das Gericht ihn [X][X] [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-4 ||| 0.0961098
+[X][X] and made [X][X] that [X] ||| [X][X] und [X][X] gemacht hat , daß [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.249921
+[X][X] and [X][X] that [X] ||| [X][X] und [X][X] , daß [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.249921
+[X][X] made it clear that [X] ||| [X][X] deutlich gemacht hat , daß [X] ||| 0.0182166 1 ||| 0-0 ||| 0.249921
+[X][X] made [X][X] that [X] ||| [X][X] [X][X] gemacht hat , daß [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.249921
+acquitted him [X][X] that [X] ||| ihn freigesprochen [X][X] , daß [X] ||| 0.0182166 1 ||| 2-2 ||| 0.1
+acquitted him and [X][X] that [X] ||| ihn freigesprochen und [X][X] , daß [X] ||| 0.0182166 1 ||| 3-3 ||| 0.1
+have [X][X] and [X][X] that [X] ||| [X][X] und [X][X] , daß [X] ||| 0.0182166 1 ||| 1-0 3-2 ||| 0.0588235
+have [X][X] made [X][X] that [X] ||| [X][X] [X][X] gemacht hat , daß [X] ||| 0.0182166 1 ||| 1-0 3-1 ||| 0.0588235
+have [X][X] that [X] ||| [X][X] , daß [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0588235
+[X][X] him [X][X] that [X] ||| ihn [X][X] [X][X] , daß [X] ||| 0.0182166 1 ||| 0-1 2-2 ||| 0.0588235
+[X][X] him and [X][X] that [X] ||| ihn [X][X] und [X][X] , daß [X] ||| 0.0182166 1 ||| 0-1 3-3 ||| 0.0588235
+have acquitted him [X][X] that [X] ||| ihn freigesprochen [X][X] , daß [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0588235
+made [X][X] that [X][X] [X] ||| [X][X] gemacht hat , daß [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-5 ||| 0.251166
+made [X][X] that [X][X] too [X] ||| [X][X] gemacht hat , daß auch [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-6 ||| 0.0833333
+[X][X] that in Russia [X][X] [X] ||| [X][X] , daß [X][X] in Rußland [X] ||| 0.0182166 1 ||| 0-0 4-3 ||| 0.29359
+[X][X] that [X][X] , too [X] ||| [X][X] , daß auch [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.15
+[X][X] that [X][X] too [X] ||| [X][X] , daß auch [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.15
+[X][X] that in [X][X] too [X] ||| [X][X] , daß auch in [X][X] [X] ||| 0.0182166 1 ||| 0-0 3-5 ||| 0.15
+[X][X] in Russia , too [X] ||| [X][X] auch in Rußland [X] ||| 0.0182166 1 ||| 0-0 ||| 0.15
+[X][X] in Russia [X][X] [X] ||| [X][X] [X][X] in Rußland [X] ||| 0.0182166 1 ||| 0-0 3-1 ||| 0.29359
+[X][X] in [X][X] too [X] ||| [X][X] auch in [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.15
+made it clear [X][X] [X] ||| deutlich gemacht hat [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.251166
+made it clear that [X][X] [X] ||| deutlich gemacht hat , daß [X][X] [X] ||| 0.0182166 1 ||| 4-5 ||| 0.251166
+made [X][X] that [X][X] , [X] ||| [X][X] gemacht hat , daß [X][X] [X] ||| 0.0182166 1 ||| 1-0 3-5 ||| 0.0769231
+[X][X] that [X][X] , [X] ||| [X][X] , daß [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.14359
+[X][X] that [X][X] too , [X] ||| [X][X] , daß auch [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-4 ||| 0.14359
+[X][X] in Russia , [X][X] [X] ||| [X][X] [X][X] in Rußland [X] ||| 0.0182166 1 ||| 0-0 4-1 ||| 0.14359
+[X][X] in Russia [X][X] , [X] ||| [X][X] [X][X] in Rußland [X] ||| 0.0182166 1 ||| 0-0 3-1 ||| 0.14359
+[X][X] in [X][X] too , [X] ||| [X][X] auch in [X][X] [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.14359
+made it clear [X][X] , [X] ||| deutlich gemacht hat [X][X] [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0769231
+that [X][X] , access to [X] ||| , daß [X][X] der Zugang zu [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0769231
+that [X][X] , [X][X] [X] ||| , daß [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.124542
+that [X][X] access to [X] ||| , daß [X][X] der Zugang zu [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0769231
+that [X][X] to [X] ||| , daß [X][X] zu [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0769231
+that [X][X] too [X][X] to [X] ||| , daß auch [X][X] [X][X] zu [X] ||| 0.0182166 1 ||| 1-3 3-4 ||| 0.0769231
+that [X][X] too , [X][X] [X] ||| , daß auch [X][X] [X][X] [X] ||| 0.0182166 1 ||| 1-3 4-4 ||| 0.124542
+[X][X] environmental information [X][X] . [X] ||| [X][X] Umweltinformationen [X][X] . [X] ||| 0.0182166 1 ||| 0-0 3-2 ||| 0.145833
+access [X][X] is [X][X] . [X] ||| der Zugang [X][X] [X][X] ist . [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.0833333
+access [X][X] . [X] ||| der Zugang [X][X] . [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0833333
+access to [X][X] . [X] ||| der Zugang zu [X][X] . [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0833333
+[X][X] to [X][X] . [X] ||| [X][X] zu [X][X] . [X] ||| 0.0182166 1 ||| 0-0 2-2 ||| 0.0625
+, [X][X] is [X][X] . [X] ||| [X][X] [X][X] ist . [X] ||| 0.0182166 1 ||| 1-0 3-1 ||| 0.0625
+, [X][X] . [X] ||| [X][X] . [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0625
+, access [X][X] . [X] ||| der Zugang [X][X] . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0625
+, access to [X][X] . [X] ||| der Zugang zu [X][X] . [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0625
+all of [X][X] that [X][X] [X] ||| wir [X][X] alle , daß [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-5 ||| 0.0940171
+all [X][X] that the courts [X] ||| wir [X][X] alle , daß das Gericht [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0555556
+all [X][X] that [X][X] [X] ||| wir [X][X] alle , daß [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-5 ||| 0.0940171
+[X][X] that the courts [X] ||| wir [X][X] , daß das Gericht [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0555556
+[X][X] that [X][X] [X] ||| wir [X][X] , daß [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-4 ||| 0.0940171
+[X][X] the courts [X] ||| wir [X][X] das Gericht [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0555556
+[X][X] courts [X] ||| wir [X][X] Gericht [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0555556
+[X][X] are pleased [X][X] courts [X] ||| wir freuen [X][X] [X][X] Gericht [X] ||| 0.0182166 1 ||| 0-2 3-3 ||| 0.0555556
+[X][X] are pleased that [X][X] [X] ||| wir freuen [X][X] , daß [X][X] [X] ||| 0.0182166 1 ||| 0-2 4-5 ||| 0.0940171
+all [X][X] that [X][X] have [X] ||| wir [X][X] alle , daß [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-5 ||| 0.0384615
+all [X][X] that the [X][X] [X] ||| wir [X][X] alle , daß das [X][X] [X] ||| 0.0182166 1 ||| 1-1 4-6 ||| 0.0384615
+[X][X] that the courts have [X] ||| wir [X][X] , daß das Gericht [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0384615
+[X][X] that [X][X] have [X] ||| wir [X][X] , daß [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-4 ||| 0.0384615
+[X][X] that the [X][X] [X] ||| wir [X][X] , daß das [X][X] [X] ||| 0.0182166 1 ||| 0-1 3-5 ||| 0.0384615
+[X][X] the courts have [X] ||| wir [X][X] das Gericht [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0384615
+[X][X] the [X][X] [X] ||| wir [X][X] das [X][X] [X] ||| 0.0182166 1 ||| 0-1 2-3 ||| 0.0384615
+[X][X] courts have [X] ||| wir [X][X] Gericht [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0384615
+[X][X] are pleased [X][X] have [X] ||| wir freuen [X][X] [X][X] [X] ||| 0.0182166 1 ||| 0-2 3-3 ||| 0.0384615
+[X][X] acquitted him [X][X] that [X] ||| [X][X] ihn freigesprochen [X][X] , daß [X] ||| 0.0182166 1 ||| 0-0 3-3 ||| 0.0910973
+courts [X][X] and [X][X] that [X] ||| Gericht [X][X] und [X][X] , daß [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.047619
+courts [X][X] made [X][X] that [X] ||| Gericht [X][X] [X][X] gemacht hat , daß [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.047619
+courts have [X][X] that [X] ||| Gericht [X][X] , daß [X] ||| 0.0182166 1 ||| 2-1 ||| 0.047619
+courts [X][X] that [X] ||| Gericht [X][X] , daß [X] ||| 0.0182166 1 ||| 1-1 ||| 0.047619
+courts [X][X] him [X][X] that [X] ||| Gericht ihn [X][X] [X][X] , daß [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.047619
+and made [X][X] that [X][X] [X] ||| und [X][X] gemacht hat , daß [X][X] [X] ||| 0.0182166 1 ||| 2-1 4-6 ||| 0.133333
+and [X][X] that [X][X] [X] ||| und [X][X] , daß [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-4 ||| 0.133333
+and [X][X] that [X][X] too [X] ||| und [X][X] , daß auch [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-5 ||| 0.0666667
+and [X][X] in Russia [X][X] [X] ||| und [X][X] [X][X] in Rußland [X] ||| 0.0182166 1 ||| 1-1 4-2 ||| 0.133333
+and [X][X] in [X][X] too [X] ||| und [X][X] auch in [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-4 ||| 0.0666667
+and made it clear [X][X] [X] ||| und deutlich gemacht hat [X][X] [X] ||| 0.0182166 1 ||| 4-4 ||| 0.133333
+and [X][X] that [X][X] , [X] ||| und [X][X] , daß [X][X] [X] ||| 0.0182166 1 ||| 1-1 3-4 ||| 0.0666667
+and [X][X] , [X] ||| und [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+that [X][X] , access [X][X] [X] ||| , daß [X][X] der Zugang [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-5 ||| 0.047619
+that [X][X] access [X][X] [X] ||| , daß [X][X] der Zugang [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-5 ||| 0.047619
+that [X][X] access to [X][X] [X] ||| , daß [X][X] der Zugang zu [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-6 ||| 0.047619
+that [X][X] to environmental information [X] ||| , daß [X][X] zu Umweltinformationen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.047619
+that [X][X] to [X][X] [X] ||| , daß [X][X] zu [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.047619
+that [X][X] environmental information [X] ||| , daß [X][X] Umweltinformationen [X] ||| 0.0182166 1 ||| 1-2 ||| 0.047619
+that [X][X] acquitted him [X][X] [X] ||| , daß [X][X] ihn freigesprochen [X][X] [X] ||| 0.0182166 1 ||| 1-2 4-5 ||| 0.0454545
+that [X][X] and made [X][X] [X] ||| , daß [X][X] und [X][X] gemacht hat [X] ||| 0.0182166 1 ||| 1-2 4-4 ||| 0.0454545
+that [X][X] and [X][X] [X] ||| , daß [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 1-2 3-4 ||| 0.0454545
+that [X][X] made it clear [X] ||| , daß [X][X] deutlich gemacht hat [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0454545
+that [X][X] made [X][X] [X] ||| , daß [X][X] [X][X] gemacht hat [X] ||| 0.0182166 1 ||| 1-2 3-3 ||| 0.0454545
+that the [X][X] and [X][X] [X] ||| , daß das [X][X] und [X][X] [X] ||| 0.0182166 1 ||| 2-3 4-5 ||| 0.0454545
+that the [X][X] made [X][X] [X] ||| , daß das [X][X] [X][X] gemacht hat [X] ||| 0.0182166 1 ||| 2-3 4-4 ||| 0.0454545
+[X][X] have [X][X] that [X] ||| [X][X] [X][X] , daß [X] ||| 0.0182166 1 ||| 0-0 2-1 ||| 0.0434783
+the [X][X] and [X][X] that [X] ||| das [X][X] und [X][X] , daß [X] ||| 0.0182166 1 ||| 1-1 3-3 ||| 0.0434783
+the [X][X] made [X][X] that [X] ||| das [X][X] [X][X] gemacht hat , daß [X] ||| 0.0182166 1 ||| 1-1 3-2 ||| 0.0434783
+the [X][X] that [X] ||| das [X][X] , daß [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0434783
+the courts have [X][X] that [X] ||| das Gericht [X][X] , daß [X] ||| 0.0182166 1 ||| 3-2 ||| 0.0434783
+the courts [X][X] that [X] ||| das Gericht [X][X] , daß [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0434783
+made [X][X] that [X][X] access [X] ||| [X][X] gemacht hat , daß [X][X] der Zugang [X] ||| 0.0182166 1 ||| 1-0 3-5 ||| 0.0909091
+[X][X] that [X][X] , access [X] ||| [X][X] , daß [X][X] der Zugang [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0909091
+[X][X] that [X][X] access [X] ||| [X][X] , daß [X][X] der Zugang [X] ||| 0.0182166 1 ||| 0-0 2-3 ||| 0.0909091
+[X][X] in Russia [X][X] access [X] ||| [X][X] [X][X] in Rußland der Zugang [X] ||| 0.0182166 1 ||| 0-0 3-1 ||| 0.0909091
+made it clear [X][X] access [X] ||| deutlich gemacht hat [X][X] der Zugang [X] ||| 0.0182166 1 ||| 3-3 ||| 0.0909091
+now [X] ||| nun [X] ||| 0.0182166 1 ||| ||| 1
+is [X] ||| ist [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| es [X] ||| 0.00910828 1 ||| ||| 2
+, [X] ||| , [X] ||| 0.00910828 1 ||| ||| 2
+he [X] ||| er [X] ||| 0.0182166 1 ||| ||| 1
+once more [X] ||| wieder [X] ||| 0.0182166 1 ||| ||| 1
+courts [X] ||| angeklagt [X] ||| 0.0182166 1 ||| ||| 1
+the courts [X] ||| angeklagt [X] ||| 0.0182166 1 ||| ||| 1
+before the courts [X] ||| angeklagt [X] ||| 0.0182166 1 ||| ||| 1
+go before the courts [X] ||| angeklagt [X] ||| 0.0182166 1 ||| ||| 1
+to [X] ||| soll [X] ||| 0.0182166 1 ||| ||| 1
+to go [X] ||| soll [X] ||| 0.0182166 1 ||| ||| 1
+to go before [X] ||| soll [X] ||| 0.0182166 1 ||| ||| 1
+to go before the [X] ||| soll [X] ||| 0.0182166 1 ||| ||| 1
+because [X] ||| weil [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| der [X] ||| 0.0182166 1 ||| ||| 1
+public prosecutor [X] ||| Staatsanwalt [X] ||| 0.0182166 1 ||| ||| 1
+appealing [X] ||| Berufung [X] ||| 0.0182166 1 ||| ||| 1
+is [X] ||| geht [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+however [X] ||| aber so [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| , daß [X] ||| 0.0182166 1 ||| ||| 1
+he [X] ||| daß er [X] ||| 0.0182166 1 ||| ||| 1
+courts once more [X] ||| wieder angeklagt [X] ||| 0.0182166 1 ||| ||| 0.5
+courts [X][X] [X] ||| [X][X] angeklagt [X] ||| 0.0182166 1 ||| 1-0 ||| 0.5
+the courts once more [X] ||| wieder angeklagt [X] ||| 0.0182166 1 ||| ||| 0.333333
+the courts [X][X] [X] ||| [X][X] angeklagt [X] ||| 0.0182166 1 ||| 2-0 ||| 0.333333
+[X][X] once more [X] ||| wieder [X][X] [X] ||| 0.218091 1 ||| 0-1 ||| 1.45632
+before the courts once more [X] ||| wieder angeklagt [X] ||| 0.0182166 1 ||| ||| 0.25
+before the courts [X][X] [X] ||| [X][X] angeklagt [X] ||| 0.0182166 1 ||| 3-0 ||| 0.25
+before [X][X] once more [X] ||| wieder [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.416667
+go before the courts [X][X] [X] ||| [X][X] angeklagt [X] ||| 0.0182166 1 ||| 4-0 ||| 0.25
+go before [X][X] once more [X] ||| wieder [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.392857
+go [X][X] once more [X] ||| wieder [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.392857
+courts [X] ||| angeklagt werden [X] ||| 0.0182166 1 ||| ||| 1
+the courts [X] ||| angeklagt werden [X] ||| 0.0182166 1 ||| ||| 1
+before the courts [X] ||| angeklagt werden [X] ||| 0.0182166 1 ||| ||| 1
+go before the courts [X] ||| angeklagt werden [X] ||| 0.0182166 1 ||| ||| 1
+to [X] ||| werden soll [X] ||| 0.0182166 1 ||| ||| 1
+to go [X] ||| werden soll [X] ||| 0.0182166 1 ||| ||| 1
+to go before [X] ||| werden soll [X] ||| 0.0182166 1 ||| ||| 1
+to go before the [X] ||| werden soll [X] ||| 0.0182166 1 ||| ||| 1
+to [X] ||| soll , [X] ||| 0.0182166 1 ||| ||| 1
+to go [X] ||| soll , [X] ||| 0.0182166 1 ||| ||| 1
+to go before [X] ||| soll , [X] ||| 0.0182166 1 ||| ||| 1
+to go before the [X] ||| soll , [X] ||| 0.0182166 1 ||| ||| 1
+because [X] ||| , weil [X] ||| 0.0182166 1 ||| ||| 1
+because the [X] ||| weil der [X] ||| 0.0182166 1 ||| ||| 1
+the public prosecutor [X] ||| der Staatsanwalt [X] ||| 0.0182166 1 ||| ||| 0.5
+the [X][X] [X] ||| der [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.04924
+public prosecutor [X] ||| Staatsanwalt in [X] ||| 0.0182166 1 ||| ||| 1
+appealing [X] ||| in Berufung [X] ||| 0.0182166 1 ||| ||| 1
+is appealing [X] ||| Berufung geht [X] ||| 0.0182166 1 ||| ||| 1
+, however [X] ||| es aber so [X] ||| 0.0182166 1 ||| ||| 1
+however , [X] ||| aber so , [X] ||| 0.0182166 1 ||| ||| 1
+, he [X] ||| , daß er [X] ||| 0.0182166 1 ||| ||| 1
+courts once more [X] ||| wieder angeklagt werden [X] ||| 0.0182166 1 ||| ||| 0.5
+courts [X][X] [X] ||| [X][X] angeklagt werden [X] ||| 0.0182166 1 ||| 1-0 ||| 0.5
+the courts once more [X] ||| wieder angeklagt werden [X] ||| 0.0182166 1 ||| ||| 0.25
+the courts [X][X] [X] ||| [X][X] angeklagt werden [X] ||| 0.0182166 1 ||| 2-0 ||| 0.25
+[X][X] once more [X] ||| wieder [X][X] werden [X] ||| 0.0182166 1 ||| 0-1 ||| 0.559524
+before the courts once more [X] ||| wieder angeklagt werden [X] ||| 0.0182166 1 ||| ||| 0.166667
+before the courts [X][X] [X] ||| [X][X] angeklagt werden [X] ||| 0.0182166 1 ||| 3-0 ||| 0.166667
+before [X][X] once more [X] ||| wieder [X][X] werden [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+go before the courts [X][X] [X] ||| [X][X] angeklagt werden [X] ||| 0.0182166 1 ||| 4-0 ||| 0.142857
+go before [X][X] once more [X] ||| wieder [X][X] werden [X] ||| 0.0182166 1 ||| 2-1 ||| 0.142857
+go [X][X] once more [X] ||| wieder [X][X] werden [X] ||| 0.0182166 1 ||| 1-1 ||| 0.142857
+to go before the courts [X] ||| angeklagt werden soll [X] ||| 0.0182166 1 ||| ||| 0.0769231
+to go before [X][X] [X] ||| [X][X] werden soll [X] ||| 0.0182166 1 ||| 3-0 ||| 0.115385
+to go [X][X] [X] ||| [X][X] werden soll [X] ||| 0.0182166 1 ||| 2-0 ||| 0.115385
+to [X][X] [X] ||| [X][X] werden soll [X] ||| 0.0182166 1 ||| 1-0 ||| 0.115385
+to go before [X][X] [X] ||| [X][X] soll [X] ||| 0.0182166 1 ||| 3-0 ||| 0.115385
+to go [X][X] [X] ||| [X][X] soll [X] ||| 0.0182166 1 ||| 2-0 ||| 0.115385
+to [X][X] [X] ||| [X][X] soll [X] ||| 0.0182166 1 ||| 1-0 ||| 0.115385
+[X][X] before the courts [X] ||| angeklagt [X][X] [X] ||| 0.0182166 1 ||| 0-1 ||| 0.129555
+[X][X] the courts [X] ||| angeklagt [X][X] [X] ||| 0.0182166 1 ||| 0-1 ||| 0.129555
+[X][X] courts [X] ||| angeklagt [X][X] [X] ||| 0.0182166 1 ||| 0-1 ||| 0.129555
+[X][X] before the courts [X] ||| angeklagt werden [X][X] [X] ||| 0.0182166 1 ||| 0-2 ||| 0.129555
+[X][X] the courts [X] ||| angeklagt werden [X][X] [X] ||| 0.0182166 1 ||| 0-2 ||| 0.129555
+[X][X] courts [X] ||| angeklagt werden [X][X] [X] ||| 0.0182166 1 ||| 0-2 ||| 0.129555
+to [X] ||| werden soll , [X] ||| 0.0182166 1 ||| ||| 1
+to go [X] ||| werden soll , [X] ||| 0.0182166 1 ||| ||| 1
+to go before [X] ||| werden soll , [X] ||| 0.0182166 1 ||| ||| 1
+to go before the [X] ||| werden soll , [X] ||| 0.0182166 1 ||| ||| 1
+because the [X] ||| , weil der [X] ||| 0.0182166 1 ||| ||| 1
+because the public prosecutor [X] ||| weil der Staatsanwalt [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] public prosecutor [X] ||| [X][X] Staatsanwalt [X] ||| 0.0182166 1 ||| 0-0 ||| 0.45
+because [X][X] [X] ||| weil [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.560256
+because the [X][X] [X] ||| weil der [X][X] [X] ||| 0.0182166 1 ||| 2-2 ||| 0.560256
+the public prosecutor [X] ||| der Staatsanwalt in [X] ||| 0.0182166 1 ||| ||| 0.333333
+the [X][X] [X] ||| der [X][X] in [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+is appealing [X] ||| in Berufung geht [X] ||| 0.0182166 1 ||| ||| 1
+is appealing . [X] ||| Berufung geht . [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] . [X] ||| [X][X] . [X] ||| 0.218091 1 ||| 0-0 ||| 1.16136
+, however , [X] ||| es aber so , [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] , [X] ||| [X][X] , [X] ||| 0.0182166 1 ||| 0-0 ||| 0.333333
+, [X][X] [X] ||| es [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.708333
+however , [X] ||| aber so , daß [X] ||| 0.0182166 1 ||| ||| 1
+[X][X] before the courts [X][X] [X] ||| [X][X] angeklagt [X][X] [X] ||| 0.0182166 1 ||| 4-0 0-2 ||| 0.0634615
+[X][X] the courts [X][X] [X] ||| [X][X] angeklagt [X][X] [X] ||| 0.0182166 1 ||| 3-0 0-2 ||| 0.0634615
+[X][X] courts [X][X] [X] ||| [X][X] angeklagt [X][X] [X] ||| 0.0182166 1 ||| 2-0 0-2 ||| 0.0634615
+[X][X] before the courts [X][X] [X] ||| [X][X] angeklagt werden [X][X] [X] ||| 0.0182166 1 ||| 4-0 0-3 ||| 0.0634615
+[X][X] the courts [X][X] [X] ||| [X][X] angeklagt werden [X][X] [X] ||| 0.0182166 1 ||| 3-0 0-3 ||| 0.0634615
+[X][X] courts [X][X] [X] ||| [X][X] angeklagt werden [X][X] [X] ||| 0.0182166 1 ||| 2-0 0-3 ||| 0.0634615
+to go before the [X][X] [X] ||| [X][X] werden soll [X] ||| 0.00910828 1 ||| 4-0 ||| 0.076923
+to go before the [X][X] [X] ||| [X][X] soll [X] ||| 0.00910828 1 ||| 4-0 ||| 0.076923
+[X][X] before [X][X] once more [X] ||| wieder [X][X] [X][X] [X] ||| 0.0121444 1 ||| 2-1 0-2 ||| 0.190384
+[X][X] before [X][X] once more [X] ||| wieder [X][X] werden [X][X] [X] ||| 0.00607219 1 ||| 2-1 0-3 ||| 0.190384
+to go [X][X] once more [X] ||| wieder [X][X] werden soll [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0384615
+to [X][X] once more [X] ||| wieder [X][X] werden soll [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0384615
+to go [X][X] once more [X] ||| wieder [X][X] soll [X] ||| 0.0182166 1 ||| 2-1 ||| 0.0384615
+to [X][X] once more [X] ||| wieder [X][X] soll [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0384615
+[X][X] the courts once more [X] ||| wieder angeklagt [X][X] [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0634615
+[X][X] courts once more [X] ||| wieder angeklagt [X][X] [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0634615
+[X][X] the courts once more [X] ||| wieder angeklagt werden [X][X] [X] ||| 0.0182166 1 ||| 0-3 ||| 0.0634615
+[X][X] courts once more [X] ||| wieder angeklagt werden [X][X] [X] ||| 0.0182166 1 ||| 0-3 ||| 0.0634615
+to go before the courts [X] ||| angeklagt werden soll , [X] ||| 0.0182166 1 ||| ||| 0.0526316
+to go before [X][X] [X] ||| [X][X] werden soll , [X] ||| 0.0182166 1 ||| 3-0 ||| 0.0776316
+to go [X][X] [X] ||| [X][X] werden soll , [X] ||| 0.0182166 1 ||| 2-0 ||| 0.0776316
+to [X][X] [X] ||| [X][X] werden soll , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0776316
+to go before [X][X] [X] ||| [X][X] soll , [X] ||| 0.0182166 1 ||| 3-0 ||| 0.0776316
+to go [X][X] [X] ||| [X][X] soll , [X] ||| 0.0182166 1 ||| 2-0 ||| 0.0776316
+to [X][X] [X] ||| [X][X] soll , [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0776316
+[X][X] before the courts [X] ||| angeklagt [X][X] , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0526316
+[X][X] the courts [X] ||| angeklagt [X][X] , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0526316
+[X][X] courts [X] ||| angeklagt [X][X] , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0526316
+[X][X] before the courts [X] ||| angeklagt werden [X][X] , [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0526316
+[X][X] the courts [X] ||| angeklagt werden [X][X] , [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0526316
+[X][X] courts [X] ||| angeklagt werden [X][X] , [X] ||| 0.0182166 1 ||| 0-2 ||| 0.0526316
+because the public prosecutor [X] ||| , weil der Staatsanwalt [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] public prosecutor [X] ||| , [X][X] Staatsanwalt [X] ||| 0.0182166 1 ||| 0-1 ||| 0.2
+because [X][X] [X] ||| , weil [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.443867
+because the [X][X] [X] ||| , weil der [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.443867
+because the public prosecutor [X] ||| weil der Staatsanwalt in [X] ||| 0.0182166 1 ||| ||| 0.166667
+[X][X] public prosecutor [X] ||| [X][X] Staatsanwalt in [X] ||| 0.0182166 1 ||| 0-0 ||| 0.309524
+because [X][X] [X] ||| weil [X][X] in [X] ||| 0.0182166 1 ||| 1-1 ||| 0.166667
+because the [X][X] [X] ||| weil der [X][X] in [X] ||| 0.0182166 1 ||| 2-2 ||| 0.166667
+public prosecutor is appealing [X] ||| Staatsanwalt in Berufung geht [X] ||| 0.0182166 1 ||| ||| 0.2
+[X][X] is appealing [X] ||| [X][X] in Berufung geht [X] ||| 0.00910828 1 ||| 0-0 ||| 0.914958
+[X][X] is appealing [X] ||| [X][X] Berufung geht [X] ||| 0.00910828 1 ||| 0-0 ||| 0.914958
+public prosecutor [X][X] [X] ||| Staatsanwalt [X][X] [X] ||| 0.00910828 1 ||| 2-1 ||| 0.65
+public prosecutor [X][X] [X] ||| Staatsanwalt in [X][X] [X] ||| 0.00910828 1 ||| 2-2 ||| 0.65
+is appealing . [X] ||| in Berufung geht . [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] . [X] ||| in [X][X] . [X] ||| 0.0182166 1 ||| 0-1 ||| 0.333333
+, however , [X] ||| es aber so , daß [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] , [X] ||| [X][X] , daß [X] ||| 0.0182166 1 ||| 0-0 ||| 0.25
+, [X][X] [X] ||| es [X][X] daß [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+however , he [X] ||| aber so , daß er [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] he [X] ||| [X][X] daß er [X] ||| 0.00910828 1 ||| 0-0 ||| 0.75
+[X][X] he [X] ||| [X][X] er [X] ||| 0.00910828 1 ||| 0-0 ||| 0.75
+however [X][X] [X] ||| aber so [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.25
+[X][X] before the courts [X][X] [X] ||| [X][X] angeklagt [X][X] , [X] ||| 0.0182166 1 ||| 4-0 0-2 ||| 0.025
+[X][X] the courts [X][X] [X] ||| [X][X] angeklagt [X][X] , [X] ||| 0.0182166 1 ||| 3-0 0-2 ||| 0.025
+[X][X] courts [X][X] [X] ||| [X][X] angeklagt [X][X] , [X] ||| 0.0182166 1 ||| 2-0 0-2 ||| 0.025
+[X][X] before the courts [X][X] [X] ||| [X][X] angeklagt werden [X][X] , [X] ||| 0.0182166 1 ||| 4-0 0-3 ||| 0.025
+[X][X] the courts [X][X] [X] ||| [X][X] angeklagt werden [X][X] , [X] ||| 0.0182166 1 ||| 3-0 0-3 ||| 0.025
+[X][X] courts [X][X] [X] ||| [X][X] angeklagt werden [X][X] , [X] ||| 0.0182166 1 ||| 2-0 0-3 ||| 0.025
+to go before the [X][X] [X] ||| [X][X] werden soll , [X] ||| 0.00910828 1 ||| 4-0 ||| 0.05
+to go before the [X][X] [X] ||| [X][X] soll , [X] ||| 0.00910828 1 ||| 4-0 ||| 0.05
+[X][X] before [X][X] once more [X] ||| wieder [X][X] [X][X] , [X] ||| 0.0121444 1 ||| 2-1 0-2 ||| 0.075
+[X][X] before [X][X] once more [X] ||| wieder [X][X] werden [X][X] , [X] ||| 0.00607219 1 ||| 2-1 0-3 ||| 0.075
+to go [X][X] once more [X] ||| wieder [X][X] werden soll , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.025
+to [X][X] once more [X] ||| wieder [X][X] werden soll , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.025
+to go [X][X] once more [X] ||| wieder [X][X] soll , [X] ||| 0.0182166 1 ||| 2-1 ||| 0.025
+to [X][X] once more [X] ||| wieder [X][X] soll , [X] ||| 0.0182166 1 ||| 1-1 ||| 0.025
+[X][X] once more [X] ||| wieder [X][X] , [X] ||| 0.0182166 1 ||| 0-1 ||| 0.025
+[X][X] the courts once more [X] ||| wieder angeklagt [X][X] , [X] ||| 0.0182166 1 ||| 0-2 ||| 0.025
+[X][X] courts once more [X] ||| wieder angeklagt [X][X] , [X] ||| 0.0182166 1 ||| 0-2 ||| 0.025
+[X][X] the courts once more [X] ||| wieder angeklagt werden [X][X] , [X] ||| 0.0182166 1 ||| 0-3 ||| 0.025
+[X][X] courts once more [X] ||| wieder angeklagt werden [X][X] , [X] ||| 0.0182166 1 ||| 0-3 ||| 0.025
+because the public prosecutor [X] ||| , weil der Staatsanwalt in [X] ||| 0.0182166 1 ||| ||| 0.142857
+[X][X] public prosecutor [X] ||| , [X][X] Staatsanwalt in [X] ||| 0.0182166 1 ||| 0-1 ||| 0.142857
+because [X][X] [X] ||| , weil [X][X] in [X] ||| 0.0182166 1 ||| 1-2 ||| 0.142857
+because the [X][X] [X] ||| , weil der [X][X] in [X] ||| 0.0182166 1 ||| 2-3 ||| 0.142857
+the public prosecutor is appealing [X] ||| der Staatsanwalt in Berufung geht [X] ||| 0.0182166 1 ||| ||| 0.125
+the [X][X] is appealing [X] ||| der [X][X] in Berufung geht [X] ||| 0.00910828 1 ||| 1-1 ||| 0.25
+the [X][X] is appealing [X] ||| der [X][X] Berufung geht [X] ||| 0.00910828 1 ||| 1-1 ||| 0.25
+the public prosecutor [X][X] [X] ||| der Staatsanwalt [X][X] [X] ||| 0.00910828 1 ||| 3-2 ||| 0.431818
+the public prosecutor [X][X] [X] ||| der Staatsanwalt in [X][X] [X] ||| 0.00910828 1 ||| 3-3 ||| 0.431818
+public prosecutor is appealing . [X] ||| Staatsanwalt in Berufung geht . [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] is appealing . [X] ||| [X][X] in Berufung geht . [X] ||| 0.00910828 1 ||| 0-0 ||| 0.65606
+[X][X] is appealing . [X] ||| [X][X] Berufung geht . [X] ||| 0.00910828 1 ||| 0-0 ||| 0.65606
+public prosecutor [X][X] . [X] ||| Staatsanwalt [X][X] . [X] ||| 0.00910828 1 ||| 2-1 ||| 0.25
+public prosecutor [X][X] . [X] ||| Staatsanwalt in [X][X] . [X] ||| 0.00910828 1 ||| 2-2 ||| 0.25
+, however , he [X] ||| es aber so , daß er [X] ||| 0.0182166 1 ||| ||| 0.125
+[X][X] , he [X] ||| [X][X] , daß er [X] ||| 0.0182166 1 ||| 0-0 ||| 0.125
+, [X][X] he [X] ||| es [X][X] daß er [X] ||| 0.00910828 1 ||| 1-1 ||| 0.25
+, [X][X] he [X] ||| es [X][X] er [X] ||| 0.00910828 1 ||| 1-1 ||| 0.25
+, however [X][X] [X] ||| es aber so [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.125
+[X][X] the courts [X][X] because [X] ||| [X][X] angeklagt [X][X] , weil [X] ||| 0.0182166 1 ||| 3-0 0-2 ||| 0.0238095
+[X][X] courts [X][X] because [X] ||| [X][X] angeklagt [X][X] , weil [X] ||| 0.0182166 1 ||| 2-0 0-2 ||| 0.0238095
+[X][X] the courts [X][X] because [X] ||| [X][X] angeklagt [X][X] weil [X] ||| 0.0182166 1 ||| 3-0 0-2 ||| 0.0238095
+[X][X] courts [X][X] because [X] ||| [X][X] angeklagt [X][X] weil [X] ||| 0.0182166 1 ||| 2-0 0-2 ||| 0.0238095
+[X][X] the courts [X][X] because [X] ||| [X][X] angeklagt werden [X][X] , weil [X] ||| 0.0182166 1 ||| 3-0 0-3 ||| 0.0238095
+[X][X] courts [X][X] because [X] ||| [X][X] angeklagt werden [X][X] , weil [X] ||| 0.0182166 1 ||| 2-0 0-3 ||| 0.0238095
+[X][X] the courts [X][X] because [X] ||| [X][X] angeklagt werden [X][X] weil [X] ||| 0.0182166 1 ||| 3-0 0-3 ||| 0.0238095
+[X][X] courts [X][X] because [X] ||| [X][X] angeklagt werden [X][X] weil [X] ||| 0.0182166 1 ||| 2-0 0-3 ||| 0.0238095
+[X][X] before the [X][X] because [X] ||| [X][X] [X][X] , weil [X] ||| 0.0182166 1 ||| 3-0 0-1 ||| 0.047619
+[X][X] the [X][X] because [X] ||| [X][X] [X][X] , weil [X] ||| 0.0182166 1 ||| 2-0 0-1 ||| 0.047619
+[X][X] before the [X][X] because [X] ||| [X][X] [X][X] weil [X] ||| 0.0182166 1 ||| 3-0 0-1 ||| 0.047619
+[X][X] the [X][X] because [X] ||| [X][X] [X][X] weil [X] ||| 0.0182166 1 ||| 2-0 0-1 ||| 0.047619
+[X][X] before the [X][X] because [X] ||| [X][X] werden [X][X] , weil [X] ||| 0.0182166 1 ||| 3-0 0-2 ||| 0.0238095
+[X][X] the [X][X] because [X] ||| [X][X] werden [X][X] , weil [X] ||| 0.0182166 1 ||| 2-0 0-2 ||| 0.0238095
+[X][X] before the [X][X] because [X] ||| [X][X] werden [X][X] weil [X] ||| 0.0182166 1 ||| 3-0 0-2 ||| 0.0238095
+[X][X] the [X][X] because [X] ||| [X][X] werden [X][X] weil [X] ||| 0.0182166 1 ||| 2-0 0-2 ||| 0.0238095
+to go before [X][X] because [X] ||| [X][X] werden soll , weil [X] ||| 0.0182166 1 ||| 3-0 ||| 0.0238095
+[X][X] before [X][X] because [X] ||| [X][X] [X][X] , weil [X] ||| 0.00607219 1 ||| 2-0 0-1 ||| 0.142857
+[X][X] before [X][X] because [X] ||| [X][X] [X][X] weil [X] ||| 0.00607219 1 ||| 2-0 0-1 ||| 0.142857
+[X][X] before [X][X] because [X] ||| [X][X] werden [X][X] , weil [X] ||| 0.00303609 1 ||| 2-0 0-2 ||| 0.142857
+[X][X] before [X][X] because [X] ||| [X][X] werden [X][X] weil [X] ||| 0.00303609 1 ||| 2-0 0-2 ||| 0.142857
+to go [X][X] because [X] ||| [X][X] werden soll , weil [X] ||| 0.0182166 1 ||| 2-0 ||| 0.0238095
+to [X][X] because [X] ||| [X][X] werden soll , weil [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0238095
+to go before [X][X] because [X] ||| [X][X] soll , weil [X] ||| 0.0182166 1 ||| 3-0 ||| 0.0238095
+to go [X][X] because [X] ||| [X][X] soll , weil [X] ||| 0.0182166 1 ||| 2-0 ||| 0.0238095
+to [X][X] because [X] ||| [X][X] soll , weil [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0238095
+[X][X] because [X] ||| [X][X] , weil [X] ||| 0.00910828 1 ||| 0-0 ||| 0.047619
+[X][X] because [X] ||| [X][X] weil [X] ||| 0.00910828 1 ||| 0-0 ||| 0.047619
+to [X][X] once more because [X] ||| wieder [X][X] werden soll , weil [X] ||| 0.00910828 1 ||| 1-1 ||| 0.047619
+to [X][X] once more because [X] ||| wieder [X][X] soll , weil [X] ||| 0.00910828 1 ||| 1-1 ||| 0.047619
+[X][X] once more because [X] ||| wieder [X][X] , weil [X] ||| 0.00910828 1 ||| 0-1 ||| 0.047619
+[X][X] once more because [X] ||| wieder [X][X] weil [X] ||| 0.00910828 1 ||| 0-1 ||| 0.047619
+[X][X] courts once more because [X] ||| wieder angeklagt [X][X] , weil [X] ||| 0.00455414 1 ||| 0-2 ||| 0.095238
+[X][X] courts once more because [X] ||| wieder angeklagt [X][X] weil [X] ||| 0.00455414 1 ||| 0-2 ||| 0.095238
+[X][X] courts once more because [X] ||| wieder angeklagt werden [X][X] , weil [X] ||| 0.00455414 1 ||| 0-3 ||| 0.095238
+[X][X] courts once more because [X] ||| wieder angeklagt werden [X][X] weil [X] ||| 0.00455414 1 ||| 0-3 ||| 0.095238
+[X][X] public prosecutor is appealing [X] ||| [X][X] Staatsanwalt in Berufung geht [X] ||| 0.0182166 1 ||| 0-0 ||| 0.132479
+[X][X] public prosecutor [X][X] [X] ||| [X][X] Staatsanwalt [X][X] [X] ||| 0.00910828 1 ||| 0-0 3-2 ||| 0.4892
+[X][X] public prosecutor [X][X] [X] ||| [X][X] Staatsanwalt in [X][X] [X] ||| 0.00910828 1 ||| 0-0 3-3 ||| 0.4892
+because [X][X] is appealing [X] ||| weil [X][X] in Berufung geht [X] ||| 0.00910828 1 ||| 1-1 ||| 0.153846
+because [X][X] is appealing [X] ||| weil [X][X] Berufung geht [X] ||| 0.00910828 1 ||| 1-1 ||| 0.153846
+because the [X][X] is appealing [X] ||| weil der [X][X] in Berufung geht [X] ||| 0.00910828 1 ||| 2-2 ||| 0.153846
+because the [X][X] is appealing [X] ||| weil der [X][X] Berufung geht [X] ||| 0.00910828 1 ||| 2-2 ||| 0.153846
+because the public prosecutor [X][X] [X] ||| weil der Staatsanwalt [X][X] [X] ||| 0.00910828 1 ||| 4-3 ||| 0.28718
+because the public prosecutor [X][X] [X] ||| weil der Staatsanwalt in [X][X] [X] ||| 0.00910828 1 ||| 4-4 ||| 0.28718
+the [X][X] is appealing . [X] ||| der [X][X] in Berufung geht . [X] ||| 0.00910828 1 ||| 1-1 ||| 0.181818
+the [X][X] is appealing . [X] ||| der [X][X] Berufung geht . [X] ||| 0.00910828 1 ||| 1-1 ||| 0.181818
+the [X][X] . [X] ||| der [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0909091
+the public prosecutor [X][X] . [X] ||| der Staatsanwalt [X][X] . [X] ||| 0.00910828 1 ||| 3-2 ||| 0.181818
+the public prosecutor [X][X] . [X] ||| der Staatsanwalt in [X][X] . [X] ||| 0.00910828 1 ||| 3-3 ||| 0.181818
+, however , he is [X] ||| ist es aber so , daß er [X] ||| 0.0182166 1 ||| ||| 0.111111
+[X][X] , he is [X] ||| ist [X][X] , daß er [X] ||| 0.0182166 1 ||| 0-1 ||| 0.111111
+[X][X] he is [X] ||| ist [X][X] daß er [X] ||| 0.00910828 1 ||| 0-1 ||| 0.222222
+[X][X] he is [X] ||| ist [X][X] er [X] ||| 0.00910828 1 ||| 0-1 ||| 0.222222
+[X][X] is [X] ||| ist [X][X] [X] ||| 0.0182166 1 ||| 0-1 ||| 0.111111
+, [X][X] he is [X] ||| ist es [X][X] daß er [X] ||| 0.00910828 1 ||| 1-2 ||| 0.222222
+, [X][X] he is [X] ||| ist es [X][X] er [X] ||| 0.00910828 1 ||| 1-2 ||| 0.222222
+, [X][X] is [X] ||| ist es [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.111111
+, however [X][X] is [X] ||| ist es aber so [X][X] [X] ||| 0.0182166 1 ||| 2-4 ||| 0.111111
+[X][X] courts [X][X] because the [X] ||| [X][X] angeklagt [X][X] , weil der [X] ||| 0.00455414 1 ||| 2-0 0-2 ||| 0.105263
+[X][X] courts [X][X] because the [X] ||| [X][X] angeklagt [X][X] weil der [X] ||| 0.00455414 1 ||| 2-0 0-2 ||| 0.105263
+[X][X] courts [X][X] because the [X] ||| [X][X] angeklagt werden [X][X] , weil der [X] ||| 0.00455414 1 ||| 2-0 0-3 ||| 0.105263
+[X][X] courts [X][X] because the [X] ||| [X][X] angeklagt werden [X][X] weil der [X] ||| 0.00455414 1 ||| 2-0 0-3 ||| 0.105263
+[X][X] the [X][X] because the [X] ||| [X][X] [X][X] , weil der [X] ||| 0.00607218 1 ||| 2-0 0-1 ||| 0.157895
+[X][X] the [X][X] because the [X] ||| [X][X] [X][X] weil der [X] ||| 0.00607218 1 ||| 2-0 0-1 ||| 0.157895
+[X][X] the [X][X] because the [X] ||| [X][X] werden [X][X] , weil der [X] ||| 0.00303609 1 ||| 2-0 0-2 ||| 0.157895
+[X][X] the [X][X] because the [X] ||| [X][X] werden [X][X] weil der [X] ||| 0.00303609 1 ||| 2-0 0-2 ||| 0.157895
+[X][X] before [X][X] because the [X] ||| [X][X] [X][X] , weil der [X] ||| 0.00607218 1 ||| 2-0 0-1 ||| 0.157895
+[X][X] before [X][X] because the [X] ||| [X][X] [X][X] weil der [X] ||| 0.00607218 1 ||| 2-0 0-1 ||| 0.157895
+[X][X] before [X][X] because the [X] ||| [X][X] werden [X][X] , weil der [X] ||| 0.00303609 1 ||| 2-0 0-2 ||| 0.157895
+[X][X] before [X][X] because the [X] ||| [X][X] werden [X][X] weil der [X] ||| 0.00303609 1 ||| 2-0 0-2 ||| 0.157895
+to go [X][X] because the [X] ||| [X][X] werden soll , weil der [X] ||| 0.0182166 1 ||| 2-0 ||| 0.0263158
+to [X][X] because the [X] ||| [X][X] werden soll , weil der [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0263158
+to go [X][X] because the [X] ||| [X][X] soll , weil der [X] ||| 0.0182166 1 ||| 2-0 ||| 0.0263158
+to [X][X] because the [X] ||| [X][X] soll , weil der [X] ||| 0.0182166 1 ||| 1-0 ||| 0.0263158
+[X][X] because the [X] ||| [X][X] , weil der [X] ||| 0.00910828 1 ||| 0-0 ||| 0.0526316
+[X][X] because the [X] ||| [X][X] weil der [X] ||| 0.00910828 1 ||| 0-0 ||| 0.0526316
+[X][X] the [X] ||| [X][X] der [X] ||| 0.0182166 1 ||| 0-0 ||| 0.0263158
+to [X][X] once more [X][X] [X] ||| wieder [X][X] werden soll [X][X] [X] ||| 0.00455414 1 ||| 1-1 4-4 ||| 0.105263
+to [X][X] once more [X][X] [X] ||| wieder [X][X] werden soll , [X][X] [X] ||| 0.00455414 1 ||| 1-1 4-5 ||| 0.105263
+to [X][X] once more [X][X] [X] ||| wieder [X][X] soll [X][X] [X] ||| 0.00455414 1 ||| 1-1 4-3 ||| 0.105263
+to [X][X] once more [X][X] [X] ||| wieder [X][X] soll , [X][X] [X] ||| 0.00455414 1 ||| 1-1 4-4 ||| 0.105263
+[X][X] once more because the [X] ||| wieder [X][X] , weil der [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0263158
+[X][X] once more [X][X] [X] ||| wieder [X][X] [X][X] [X] ||| 0.0121444 1 ||| 0-1 3-2 ||| 0.0789474
+[X][X] once more [X][X] [X] ||| wieder [X][X] , [X][X] [X] ||| 0.00607219 1 ||| 0-1 3-3 ||| 0.0789474
+[X][X] once more because the [X] ||| wieder [X][X] weil der [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0263158
+[X][X] courts once more [X][X] [X] ||| wieder angeklagt [X][X] [X][X] [X] ||| 0.00607218 1 ||| 0-2 4-3 ||| 0.157895
+[X][X] courts once more [X][X] [X] ||| wieder angeklagt [X][X] , [X][X] [X] ||| 0.00303609 1 ||| 0-2 4-4 ||| 0.157895
+[X][X] courts once more [X][X] [X] ||| wieder angeklagt werden [X][X] [X][X] [X] ||| 0.00607218 1 ||| 0-3 4-4 ||| 0.157895
+[X][X] courts once more [X][X] [X] ||| wieder angeklagt werden [X][X] , [X][X] [X] ||| 0.00303609 1 ||| 0-3 4-5 ||| 0.157895
+[X][X] public prosecutor is appealing [X] ||| , [X][X] Staatsanwalt in Berufung geht [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0555556
+[X][X] public prosecutor [X][X] [X] ||| , [X][X] Staatsanwalt [X][X] [X] ||| 0.00910828 1 ||| 0-1 3-3 ||| 0.20202
+[X][X] public prosecutor [X][X] [X] ||| , [X][X] Staatsanwalt in [X][X] [X] ||| 0.00910828 1 ||| 0-1 3-4 ||| 0.20202
+[X][X] is appealing [X] ||| , [X][X] in Berufung geht [X] ||| 0.00910828 1 ||| 0-1 ||| 0.111111
+[X][X] is appealing [X] ||| , [X][X] Berufung geht [X] ||| 0.00910828 1 ||| 0-1 ||| 0.111111
+because [X][X] is appealing [X] ||| , weil [X][X] in Berufung geht [X] ||| 0.00910828 1 ||| 1-2 ||| 0.111111
+because [X][X] is appealing [X] ||| , weil [X][X] Berufung geht [X] ||| 0.00910828 1 ||| 1-2 ||| 0.111111
+because the [X][X] is appealing [X] ||| , weil der [X][X] in Berufung geht [X] ||| 0.00910828 1 ||| 2-3 ||| 0.111111
+because the [X][X] is appealing [X] ||| , weil der [X][X] Berufung geht [X] ||| 0.00910828 1 ||| 2-3 ||| 0.111111
+because the public prosecutor [X][X] [X] ||| , weil der Staatsanwalt [X][X] [X] ||| 0.00910828 1 ||| 4-4 ||| 0.20202
+because the public prosecutor [X][X] [X] ||| , weil der Staatsanwalt in [X][X] [X] ||| 0.00910828 1 ||| 4-5 ||| 0.20202
+[X][X] public prosecutor [X][X] . [X] ||| [X][X] Staatsanwalt [X][X] . [X] ||| 0.00910828 1 ||| 0-0 3-2 ||| 0.224242
+[X][X] public prosecutor [X][X] . [X] ||| [X][X] Staatsanwalt in [X][X] . [X] ||| 0.00910828 1 ||| 0-0 3-3 ||| 0.224242
+because [X][X] is appealing . [X] ||| weil [X][X] in Berufung geht . [X] ||| 0.00910828 1 ||| 1-1 ||| 0.133333
+because [X][X] is appealing . [X] ||| weil [X][X] Berufung geht . [X] ||| 0.00910828 1 ||| 1-1 ||| 0.133333
+because [X][X] . [X] ||| weil [X][X] . [X] ||| 0.0182166 1 ||| 1-1 ||| 0.0666667
+because the [X][X] . [X] ||| weil der [X][X] . [X] ||| 0.0182166 1 ||| 2-2 ||| 0.0666667
+now [X][X] [X] ||| nun [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.111111
+now [X][X] , he is [X] ||| nun ist [X][X] , daß er [X] ||| 0.0182166 1 ||| 1-2 ||| 0.111111
+now [X][X] he is [X] ||| nun ist [X][X] daß er [X] ||| 0.00910828 1 ||| 1-2 ||| 0.222222
+now [X][X] he is [X] ||| nun ist [X][X] er [X] ||| 0.00910828 1 ||| 1-2 ||| 0.222222
+now [X][X] is [X] ||| nun ist [X][X] [X] ||| 0.0182166 1 ||| 1-2 ||| 0.111111
+now , [X][X] he is [X] ||| nun ist es [X][X] daß er [X] ||| 0.00910828 1 ||| 2-3 ||| 0.222222
+now , [X][X] he is [X] ||| nun ist es [X][X] er [X] ||| 0.00910828 1 ||| 2-3 ||| 0.222222
+now , [X][X] is [X] ||| nun ist es [X][X] [X] ||| 0.0182166 1 ||| 2-3 ||| 0.111111
+now , however [X][X] is [X] ||| nun ist es aber so [X][X] [X] ||| 0.0182166 1 ||| 3-5 ||| 0.111111
+[X][X] public prosecutor [X][X] . [X] ||| , [X][X] Staatsanwalt [X][X] . [X] ||| 0.00910828 1 ||| 0-1 3-3 ||| 0.090909
+[X][X] public prosecutor [X][X] . [X] ||| , [X][X] Staatsanwalt in [X][X] . [X] ||| 0.00910828 1 ||| 0-1 3-4 ||| 0.090909
+[X][X] is appealing . [X] ||| , [X][X] in Berufung geht . [X] ||| 0.00910828 1 ||| 0-1 ||| 0.090909
+[X][X] is appealing . [X] ||| , [X][X] Berufung geht . [X] ||| 0.00910828 1 ||| 0-1 ||| 0.090909
+[X][X] . [X] ||| , [X][X] . [X] ||| 0.0182166 1 ||| 0-1 ||| 0.0454545
+because [X][X] is appealing . [X] ||| , weil [X][X] in Berufung geht . [X] ||| 0.00910828 1 ||| 1-2 ||| 0.090909
+because [X][X] is appealing . [X] ||| , weil [X][X] Berufung geht . [X] ||| 0.00910828 1 ||| 1-2 ||| 0.090909
+because [X][X] . [X] ||| , weil [X][X] . [X] ||| 0.0182166 1 ||| 1-2 ||| 0.0454545
+because the [X][X] . [X] ||| , weil der [X][X] . [X] ||| 0.0182166 1 ||| 2-3 ||| 0.0454545
+we [X] ||| wir [X] ||| 0.218091 1 ||| ||| 2
+know [X] ||| wissen [X] ||| 0.0182166 1 ||| ||| 1
+know , [X] ||| wissen [X] ||| 0.0182166 1 ||| ||| 1
+and [X] ||| und [X] ||| 0.315522 1 ||| ||| 3
+, and [X] ||| und [X] ||| 0.0182166 1 ||| ||| 1
+have [X] ||| haben [X] ||| 0.0182166 1 ||| ||| 1
+in [X] ||| in [X] ||| 0.0182166 1 ||| ||| 1
+very [X] ||| sehr [X] ||| 0.0182166 1 ||| ||| 1
+many [X] ||| vielen [X] ||| 0.0182166 1 ||| ||| 1
+resolutions [X] ||| Entschließungen [X] ||| 0.0182166 1 ||| ||| 1
+stated [X] ||| festgestellt [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| - [X] ||| 0.0182166 1 ||| ||| 1
+, including [X] ||| - [X] ||| 0.0182166 1 ||| ||| 1
+during [X] ||| während [X] ||| 0.0182166 1 ||| ||| 1
+the [X] ||| der [X] ||| 0.0182166 1 ||| ||| 1
+last [X] ||| letzten [X] ||| 0.0182166 1 ||| ||| 1
+plenary part-session [X] ||| Plenartagung [X] ||| 0.0182166 1 ||| ||| 1
+of [X] ||| des [X] ||| 0.0182166 1 ||| ||| 1
+last [X] ||| vergangenen [X] ||| 0.0182166 1 ||| ||| 1
+year [X] ||| Jahres- [X] ||| 0.0182166 1 ||| ||| 1
+, [X] ||| , [X] ||| 0.0182166 1 ||| ||| 1
+that [X] ||| daß [X] ||| 0.218091 1 ||| ||| 2
+this [X] ||| dies [X] ||| 0.0182166 1 ||| ||| 1
+not [X] ||| nicht [X] ||| 0.0182166 1 ||| ||| 1
+solely [X] ||| nur [X] ||| 0.0182166 1 ||| ||| 1
+a [X] ||| ein [X] ||| 0.0182166 1 ||| ||| 1
+legal [X] ||| juristischer [X] ||| 0.0182166 1 ||| ||| 1
+case [X] ||| Fall [X] ||| 0.0182166 1 ||| ||| 1
+is [X] ||| ist [X] ||| 0.218091 1 ||| ||| 2
+it [X] ||| es [X] ||| 0.0182166 1 ||| ||| 1
+wrong [X] ||| falsch [X] ||| 0.0182166 1 ||| ||| 1
+wrong for [X] ||| falsch [X] ||| 0.0182166 1 ||| ||| 1
+Alexander [X] ||| Alexander [X] ||| 0.0182166 1 ||| ||| 1
+for Alexander [X] ||| Alexander [X] ||| 0.0182166 1 ||| ||| 1
+Nikitin [X] ||| Nikitin [X] ||| 0.0182166 1 ||| ||| 1
+Nikitin to [X] ||| Nikitin [X] ||| 0.0182166 1 ||| ||| 1
+Nikitin to be [X] ||| Nikitin [X] ||| 0.0182166 1 ||| ||| 1
+Nikitin to be accused [X] ||| Nikitin [X] ||| 0.0182166 1 ||| ||| 1
+Nikitin to be accused of [X] ||| Nikitin [X] ||| 0.0182166 1 ||| ||| 1
+criminal activity [X] ||| Kriminalität [X] ||| 0.0182166 1 ||| ||| 1
+of criminal activity [X] ||| Kriminalität [X] ||| 0.0182166 1 ||| ||| 1
+accused of criminal activity [X] ||| Kriminalität [X] ||| 0.0182166 1 ||| ||| 1
+be accused of criminal activity [X] ||| Kriminalität [X] ||| 0.0182166 1 ||| ||| 1
+because [X] ||| weil [X] ||| 0.0182166 1 ||| ||| 1
+because of [X] ||| weil [X] ||| 0.0182166 1 ||| ||| 1
+our [X] ||| wir [X] ||| 0.0182166 1 ||| ||| 1
+of our [X] ||| wir [X] ||| 0.0182166 1 ||| ||| 1
+as the [X] ||| als [X] ||| 0.0182166 1 ||| ||| 1
+of [X] ||| von [X] ||| 0.0182166 1 ||| ||| 1
+his [X] ||| seinen [X] ||| 0.0182166 1 ||| ||| 1
+findings [X] ||| Ergebnissen [X] ||| 0.0182166 1 ||| ||| 1
+. [X] ||| . [X] ||| 0.0182166 1 ||| ||| 1
+we know [X] ||| wir wissen [X] ||| 0.0182166 1 ||| ||| 1
+we know , [X] ||| wir wissen [X] ||| 0.0182166 1 ||| ||| 0.5
+we [X][X] [X] ||| wir [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.965079
+know , and [X] ||| wissen und [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] and [X] ||| [X][X] und [X] ||| 0.315522 1 ||| 0-0 ||| 2.74493
+know [X][X] [X] ||| wissen [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.590909
+and we [X] ||| und wir [X] ||| 0.0182166 1 ||| ||| 1
+, and we [X] ||| und wir [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] we [X] ||| [X][X] wir [X] ||| 0.0182166 1 ||| 0-0 ||| 0.766667
+we have [X] ||| wir haben [X] ||| 0.0182166 1 ||| ||| 1
+very many [X] ||| sehr vielen [X] ||| 0.0182166 1 ||| ||| 1
+many resolutions [X] ||| vielen Entschließungen [X] ||| 0.0182166 1 ||| ||| 1
+indeed , including specifically [X] ||| - gerade [X] ||| 0.0182166 1 ||| ||| 0.5
+indeed [X][X] specifically [X] ||| [X][X] gerade [X] ||| 0.0182166 1 ||| 1-0 ||| 0.5
+during the [X] ||| während der [X] ||| 0.0182166 1 ||| ||| 1
+the last [X] ||| der letzten [X] ||| 0.0182166 1 ||| ||| 1
+last plenary part-session [X] ||| letzten Plenartagung [X] ||| 0.0182166 1 ||| ||| 0.5
+last [X][X] [X] ||| letzten [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.09156
+plenary part-session of [X] ||| Plenartagung des [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] of [X] ||| [X][X] des [X] ||| 0.218091 1 ||| 0-0 ||| 1.03175
+of last [X] ||| des vergangenen [X] ||| 0.0182166 1 ||| ||| 1
+last year [X] ||| vergangenen Jahres- [X] ||| 0.0182166 1 ||| ||| 1
+year , [X] ||| Jahres- , [X] ||| 0.0182166 1 ||| ||| 1
+, that [X] ||| , daß [X] ||| 0.0182166 1 ||| ||| 1
+that this [X] ||| daß dies [X] ||| 0.0182166 1 ||| ||| 1
+not solely [X] ||| nicht nur [X] ||| 0.0182166 1 ||| ||| 1
+solely a [X] ||| nur ein [X] ||| 0.0182166 1 ||| ||| 1
+a legal [X] ||| ein juristischer [X] ||| 0.0182166 1 ||| ||| 1
+legal case [X] ||| juristischer Fall [X] ||| 0.0182166 1 ||| ||| 1
+and that [X] ||| und daß [X] ||| 0.0182166 1 ||| ||| 1
+that it [X] ||| daß es [X] ||| 0.0182166 1 ||| ||| 1
+is wrong [X] ||| falsch ist [X] ||| 0.0182166 1 ||| ||| 1
+is wrong for [X] ||| falsch ist [X] ||| 0.0182166 1 ||| ||| 0.5
+is [X][X] [X] ||| [X][X] ist [X] ||| 0.0182166 1 ||| 1-0 ||| 0.590909
+is [X] ||| ist , [X] ||| 0.0182166 1 ||| ||| 1
+Alexander [X] ||| , Alexander [X] ||| 0.0182166 1 ||| ||| 1
+for Alexander [X] ||| , Alexander [X] ||| 0.0182166 1 ||| ||| 1
+Alexander Nikitin [X] ||| Alexander Nikitin [X] ||| 0.0182166 1 ||| ||| 1
+Alexander Nikitin to [X] ||| Alexander Nikitin [X] ||| 0.0182166 1 ||| ||| 0.5
+Alexander [X][X] [X] ||| Alexander [X][X] [X] ||| 0.218091 1 ||| 1-1 ||| 1.49437
+Alexander Nikitin to be [X] ||| Alexander Nikitin [X] ||| 0.0182166 1 ||| ||| 0.333333
+Alexander [X][X] be [X] ||| Alexander [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.333333
+Alexander Nikitin to be accused [X] ||| Alexander Nikitin [X] ||| 0.0182166 1 ||| ||| 0.25
+Alexander [X][X] be accused [X] ||| Alexander [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+Alexander [X][X] accused [X] ||| Alexander [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+Alexander [X][X] be accused of [X] ||| Alexander [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+Alexander [X][X] accused of [X] ||| Alexander [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+Alexander [X][X] of [X] ||| Alexander [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.25
+for Alexander Nikitin [X] ||| Alexander Nikitin [X] ||| 0.0182166 1 ||| ||| 0.5
+[X][X] Nikitin [X] ||| [X][X] Nikitin [X] ||| 0.218091 1 ||| 0-0 ||| 1.01752
+for Alexander Nikitin to [X] ||| Alexander Nikitin [X] ||| 0.0182166 1 ||| ||| 0.333333
+[X][X] Nikitin to [X] ||| [X][X] Nikitin [X] ||| 0.0182166 1 ||| 0-0 ||| 0.707323
+for Alexander [X][X] [X] ||| Alexander [X][X] [X] ||| 0.218091 1 ||| 2-1 ||| 1.26782
+for Alexander Nikitin to be [X] ||| Alexander Nikitin [X] ||| 0.0182166 1 ||| ||| 0.25
+[X][X] Nikitin to be [X] ||| [X][X] Nikitin [X] ||| 0.0182166 1 ||| 0-0 ||| 0.564334
+for Alexander [X][X] be [X] ||| Alexander [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.25
+[X][X] Nikitin to be accused [X] ||| [X][X] Nikitin [X] ||| 0.0182166 1 ||| 0-0 ||| 0.544334
+for Alexander [X][X] be accused [X] ||| Alexander [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.25
+for Alexander [X][X] accused [X] ||| Alexander [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.25
+for Alexander [X][X] accused of [X] ||| Alexander [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.333333
+for Alexander [X][X] of [X] ||| Alexander [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.333333
+[X][X] accused of criminal activity [X] ||| [X][X] Kriminalität [X] ||| 0.0182166 1 ||| 0-0 ||| 0.383254
+[X][X] of criminal activity [X] ||| [X][X] Kriminalität [X] ||| 0.0182166 1 ||| 0-0 ||| 0.383254
+[X][X] criminal activity [X] ||| [X][X] Kriminalität [X] ||| 0.0182166 1 ||| 0-0 ||| 0.383254
+Nikitin to be accused [X][X] [X] ||| Nikitin [X][X] [X] ||| 0.0182166 1 ||| 4-1 ||| 0.317008
+Nikitin to be [X][X] [X] ||| Nikitin [X][X] [X] ||| 0.0182166 1 ||| 3-1 ||| 0.317008
+Nikitin to [X][X] [X] ||| Nikitin [X][X] [X] ||| 0.0182166 1 ||| 2-1 ||| 0.317008
+Nikitin [X][X] [X] ||| Nikitin [X][X] [X] ||| 0.0182166 1 ||| 1-1 ||| 0.317008
+criminal activity and [X] ||| Kriminalität und [X] ||| 0.0182166 1 ||| ||| 0.5
+of criminal activity and [X] ||| Kriminalität und [X] ||| 0.0182166 1 ||| ||| 0.333333
+of [X][X] and [X] ||| [X][X] und [X] ||| 0.0182166 1 ||| 1-0 ||| 0.333333
+accused of criminal activity and [X] ||| Kriminalität und [X] ||| 0.0182166 1 ||| ||| 0.25
+accused of [X][X] and [X] ||| [X][X] und [X] ||| 0.0182166 1 ||| 2-0 ||| 0.25
+accused [X][X] and [X] ||| [X][X] und [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+be accused of [X][X] and [X] ||| [X][X] und [X] ||| 0.0182166 1 ||| 3-0 ||| 0.25
+be accused [X][X] and [X] ||| [X][X] und [X] ||| 0.0182166 1 ||| 2-0 ||| 0.25
+be [X][X] and [X] ||| [X][X] und [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
+to be accused [X][X] and [X] ||| [X][X] und [X] ||| 0.0182166 1 ||| 3-0 ||| 0.25
+to be [X][X] and [X] ||| [X][X] und [X] ||| 0.0182166 1 ||| 2-0 ||| 0.25
+to [X][X] and [X] ||| [X][X] und [X] ||| 0.0182166 1 ||| 1-0 ||| 0.25
diff --git a/regression-testing/tests/score.phrase-based-inv/args.txt b/regression-testing/tests/score.phrase-based-inv/args.txt
new file mode 100644
index 000000000..b45bbb2d5
--- /dev/null
+++ b/regression-testing/tests/score.phrase-based-inv/args.txt
@@ -0,0 +1 @@
+$data_dir/models/score.phrase-based/extract.inv.sorted $data_dir/models/score.phrase-based/lex.e2f $outPath --Inverse --GoodTuring
diff --git a/regression-testing/tests/score.phrase-based-inv/run-test-scorer.perl b/regression-testing/tests/score.phrase-based-inv/run-test-scorer.perl
new file mode 100755
index 000000000..bdf1fa620
--- /dev/null
+++ b/regression-testing/tests/score.phrase-based-inv/run-test-scorer.perl
@@ -0,0 +1,65 @@
+#!/usr/bin/perl -w
+
+use strict;
+use FindBin qw($Bin);
+use MosesRegressionTesting;
+use Getopt::Long;
+use File::Temp qw ( tempfile );
+use POSIX qw ( strftime );
+
+my $scoreExe;
+my $test_name;
+my $data_dir;
+my $test_dir;
+my $results_dir;
+
+GetOptions("scorer=s" => \$scoreExe,
+ "test=s" => \$test_name,
+ "data-dir=s"=> \$data_dir,
+ "test-dir=s"=> \$test_dir,
+ "results-dir=s"=> \$results_dir,
+ ) or exit 1;
+
+# output dir
+unless (defined $results_dir)
+{
+ my $ts = get_timestamp($scoreExe);
+ $results_dir = "$data_dir/results/$test_name/$ts";
+}
+
+`mkdir -p $results_dir`;
+
+my $outPath = "$results_dir/phrase-table.4.half.e2f";
+
+my $cmdMain = "$scoreExe $test_dir/$test_name/extract.inv.sorted $test_dir/$test_name/lex.e2f $outPath --Inverse --GoodTuring \n";
+`$cmdMain`;
+
+my $truthPath = "$test_dir/$test_name/truth/results.txt";
+my $cmd = "diff $outPath $truthPath | wc -l";
+
+my $numDiff = `$cmd`;
+
+if ($numDiff == 0)
+{
+ # print STDERR "FAILURE. Ran $cmdMain\n";
+ print STDERR "SUCCESS\n";
+ exit 0;
+}
+else
+{
+ print STDERR "FAILURE. Ran $cmdMain\n";
+ exit 1;
+}
+
+sub get_timestamp {
+ my ($file) = @_;
+ my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
+ $atime,$mtime,$ctime,$blksize,$blocks)
+ = stat($file);
+ my $timestamp = strftime("%Y%m%d-%H%M%S", gmtime $mtime);
+ my $timestamp2 = strftime("%Y%m%d-%H%M%S", gmtime);
+ my $username = `whoami`; chomp $username;
+ return "moses.v$timestamp-$username-at-$timestamp2";
+}
+
+
diff --git a/regression-testing/tests/score.phrase-based-inv/truth/results.txt b/regression-testing/tests/score.phrase-based-inv/truth/results.txt
new file mode 100644
index 000000000..55abe2e88
--- /dev/null
+++ b/regression-testing/tests/score.phrase-based-inv/truth/results.txt
@@ -0,0 +1,913 @@
+! ! ! ) bezeichnet wird , ||| ! ! ! ) , ||| 0.0370072 0.689873 ||| ||| 1
+! ! ! ) bezeichnet wird ||| ! ! ! ) ||| 0.00925181 0.689873 ||| ||| 4
+! ! ! ) bezeichnet ||| ! ! ! ) ||| 0.00925181 0.689873 ||| ||| 4
+! ! ! ) ||| ! ! ! ) ||| 0.330745 0.689873 ||| ||| 4
+! ! ! ||| ! ! ! ||| 1 0.689873 ||| ||| 3
+! ! ) bezeichnet wird , hat ||| ! ! ) , has ||| 0.0370072 0.780751 ||| ||| 1
+! ! ) bezeichnet wird , ||| ! ! ) , ||| 0.0370072 0.780751 ||| ||| 1
+! ! ) bezeichnet wird ||| ! ! ) ||| 0.00925181 0.780751 ||| ||| 4
+! ! ) bezeichnet ||| ! ! ) ||| 0.00925181 0.780751 ||| ||| 4
+! ! ) ||| ! ! ) ||| 0.330745 0.780751 ||| ||| 4
+! ! ||| ! ! ||| 0.875 0.780751 ||| ||| 8
+erforderlich ! ||| ! ! ||| 0.0046259 0.883601 ||| ||| 8
+! ) Herr Kollege Ferber , ||| ! " ) Mr Ferber , ||| 0.0370072 0.883601 ||| ||| 1
+! ) Herr Kollege Ferber ||| ! " ) Mr Ferber ||| 0.0370072 0.883601 ||| ||| 1
+! ) Herr ||| ! " ) Mr ||| 0.0370072 0.883601 ||| ||| 1
+! ) ||| ! " ) ||| 0.0370072 0.883601 ||| ||| 1
+! " , schrie der Hirtenjunge ||| ! " , cried the shepherd boy ||| 0.0370072 0.582214 ||| ||| 1
+! " , schrie der ||| ! " , cried the ||| 0.0370072 0.582214 ||| ||| 1
+! " , schrie ||| ! " , cried ||| 0.0370072 0.582214 ||| ||| 1
+! " , ||| ! " , ||| 0.661491 0.582214 ||| ||| 2
+! " ||| ! " . ||| 0.0370072 0.292946 ||| ||| 1
+! " , sagte ich zu ihr ||| ! " I said to her ||| 0.0370072 0.582214 ||| ||| 1
+! " , sagte ich zu ||| ! " I said to ||| 0.0370072 0.582214 ||| ||| 1
+! " , sagte ich ||| ! " I said ||| 0.0370072 0.582214 ||| ||| 1
+! " , doch der ||| ! " but a ||| 0.0185036 0.582214 ||| ||| 2
+vermag ! " , doch der ||| ! " but a ||| 0.0185036 0.582214 ||| ||| 2
+! " , doch ||| ! " but ||| 0.0185036 0.582214 ||| ||| 2
+vermag ! " , doch ||| ! " but ||| 0.0185036 0.582214 ||| ||| 2
+! " geht nicht mehr weiter ||| ! " can no longer continue ||| 0.0370072 0.582214 ||| ||| 1
+! " geht nicht mehr ||| ! " can no longer ||| 0.0370072 0.582214 ||| ||| 1
+! " geht nicht ||| ! " can no ||| 0.0370072 0.582214 ||| ||| 1
+! " geht ||| ! " can ||| 0.0370072 0.582214 ||| ||| 1
+! , war ebenfalls kein Beitrag zur ||| ! " did little to ||| 0.0370072 0.883601 ||| ||| 1
+! , war ebenfalls kein Beitrag ||| ! " did little ||| 0.00616787 0.883601 ||| ||| 6
+! , war ebenfalls kein ||| ! " did little ||| 0.00616787 0.883601 ||| ||| 6
+! , war ebenfalls ||| ! " did little ||| 0.00616787 0.883601 ||| ||| 6
+! , war ||| ! " did little ||| 0.00616787 0.883601 ||| ||| 6
+! , ||| ! " did little ||| 0.00616787 0.883601 ||| ||| 6
+! ||| ! " did little ||| 0.00616787 0.883601 ||| ||| 6
+! , war ebenfalls kein Beitrag ||| ! " did ||| 0.00616787 0.883601 ||| ||| 6
+! , war ebenfalls kein ||| ! " did ||| 0.00616787 0.883601 ||| ||| 6
+! , war ebenfalls ||| ! " did ||| 0.00616787 0.883601 ||| ||| 6
+! , war ||| ! " did ||| 0.00616787 0.883601 ||| ||| 6
+! , ||| ! " did ||| 0.00616787 0.883601 ||| ||| 6
+! ||| ! " did ||| 0.00616787 0.883601 ||| ||| 6
+! " , antwortete der Präsident . ||| ! " replied the President . ||| 0.0370072 0.582214 ||| ||| 1
+! " , antwortete der Präsident ||| ! " replied the President ||| 0.0370072 0.582214 ||| ||| 1
+! " , antwortete der ||| ! " replied the ||| 0.0370072 0.582214 ||| ||| 1
+! " , antwortete ||| ! " replied ||| 0.0370072 0.582214 ||| ||| 1
+auf sein ||| ! " summoned all ||| 0.0185036 1 ||| ||| 2
+sein ||| ! " summoned all ||| 0.0185036 1 ||| ||| 2
+auf sein ||| ! " summoned ||| 0.0185036 1 ||| ||| 2
+sein ||| ! " summoned ||| 0.0185036 1 ||| ||| 2
+! " , ||| ! " ||| 0.0625 0.582214 ||| ||| 48
+! " ? ||| ! " ||| 0.000770984 0.582214 ||| ||| 48
+! " ||| ! " ||| 0.604167 0.582214 ||| ||| 48
+! , war ebenfalls kein Beitrag ||| ! " ||| 0.000770984 0.883601 ||| ||| 48
+! , war ebenfalls kein ||| ! " ||| 0.000770984 0.883601 ||| ||| 48
+! , war ebenfalls ||| ! " ||| 0.000770984 0.883601 ||| ||| 48
+! , war ||| ! " ||| 0.000770984 0.883601 ||| ||| 48
+! , ||| ! " ||| 0.000770984 0.883601 ||| ||| 48
+! ||| ! " ||| 0.0833333 0.883601 ||| ||| 48
+Staatsflagge " ||| ! " ||| 0.000770984 0.65891 ||| ||| 48
+auf sein ||| ! " ||| 0.000770984 1 ||| ||| 48
+sein ||| ! " ||| 0.000770984 1 ||| ||| 48
+serviert ! " ||| ! " ||| 0.000770984 0.582214 ||| ||| 48
+vermag ! " , ||| ! " ||| 0.000770984 0.582214 ||| ||| 48
+vermag ! " ||| ! " ||| 0.000770984 0.582214 ||| ||| 48
+, ||| ! ' ' I know , ||| 0.0370072 1 ||| ||| 1
+! " ||| ! ' ' really ? ' ||| 0.0370072 0.0911499 ||| ||| 1
+! " ) Heute ||| ! ' ) We ||| 0.0370072 0.272342 ||| ||| 1
+! " ) sagte er , die ||| ! ' ) said that the ||| 0.0370072 0.272342 ||| ||| 1
+! " ) sagte er , ||| ! ' ) said that ||| 0.0370072 0.272342 ||| ||| 1
+! " ) sagte er ||| ! ' ) said ||| 0.0185036 0.272342 ||| ||| 2
+! " ) sagte ||| ! ' ) said ||| 0.0185036 0.272342 ||| ||| 2
+! " ) ||| ! ' ) ||| 1 0.272342 ||| ||| 8
+! " hat das Parlament bereits ||| ! ' , Parliament has already ||| 0.0370072 0.272342 ||| ||| 1
+! " hat das Parlament ||| ! ' , Parliament ||| 0.0370072 0.272342 ||| ||| 1
+! " gehört , und denen ||| ! ' , and those ||| 0.0370072 0.272342 ||| ||| 1
+! " oder zu Kollegin Harms ||| ! ' , and to Mrs Harms ||| 0.0370072 0.272342 ||| ||| 1
+! " oder zu Kollegin ||| ! ' , and to Mrs ||| 0.0370072 0.272342 ||| ||| 1
+! " oder zu ||| ! ' , and to ||| 0.0370072 0.272342 ||| ||| 1
+! " gehört , und ||| ! ' , and ||| 0.0123357 0.272342 ||| ||| 3
+! " oder ||| ! ' , and ||| 0.0123357 0.272342 ||| ||| 3
+! ' ||| ! ' , and ||| 0.0123357 0.453737 ||| ||| 3
+! " , sondern damit es ||| ! ' , but so that they ||| 0.0370072 0.272342 ||| ||| 1
+! " , sondern damit ||| ! ' , but so that ||| 0.0370072 0.272342 ||| ||| 1
+aber diese 2,7 % ||| ! ' , but that 2.7 % ||| 0.0370072 1 ||| ||| 1
+aber diese 2,7 ||| ! ' , but that 2.7 ||| 0.0370072 1 ||| ||| 1
+aber diese ||| ! ' , but that ||| 0.0370072 1 ||| ||| 1
+! ' . aber dort gibt ||| ! ' , but there are widely ||| 0.0370072 0.883601 ||| ||| 1
+! ' . aber dort gibt ||| ! ' , but there are ||| 0.0370072 0.883601 ||| ||| 1
+! ' . aber dort ||| ! ' , but there ||| 0.0370072 0.883601 ||| ||| 1
+! " , sondern ||| ! ' , but ||| 0.0123357 0.272342 ||| ||| 3
+! ' . aber ||| ! ' , but ||| 0.0123357 0.883601 ||| ||| 3
+aber ||| ! ' , but ||| 0.0123357 1 ||| ||| 3
+, ||| ! ' , that ||| 0.00925181 1 ||| ||| 4
+Ziel kommen , ||| ! ' , that ||| 0.00925181 1 ||| ||| 4
+kommen , ||| ! ' , that ||| 0.00925181 1 ||| ||| 4
+zum Ziel kommen , ||| ! ' , that ||| 0.00925181 1 ||| ||| 4
+! " , der ||| ! ' , which ||| 0.0370072 0.272342 ||| ||| 1
+! " , ||| ! ' , ||| 0.0944987 0.272342 ||| ||| 14
+! " gehört , ||| ! ' , ||| 0.00264337 0.272342 ||| ||| 14
+! " hat ||| ! ' , ||| 0.00264337 0.272342 ||| ||| 14
+! " ||| ! ' , ||| 0.00264337 0.272342 ||| ||| 14
+! ' , womit ||| ! ' , ||| 0.00264337 0.883601 ||| ||| 14
+! ' , ||| ! ' , ||| 0.00264337 0.883601 ||| ||| 14
+! ' . ||| ! ' , ||| 0.00264337 0.883601 ||| ||| 14
+! ' Stand , ||| ! ' , ||| 0.00264337 0.883601 ||| ||| 14
+! ' ||| ! ' , ||| 0.00264337 0.453737 ||| ||| 14
+, ||| ! ' , ||| 0.00264337 1 ||| ||| 14
+Ziel kommen , ||| ! ' , ||| 0.00264337 1 ||| ||| 14
+kommen , ||| ! ' , ||| 0.00264337 1 ||| ||| 14
+zum Ziel kommen , ||| ! ' , ||| 0.00264337 1 ||| ||| 14
+! " - und dies übrigens ||| ! ' - and what is more ||| 0.0370072 0.272342 ||| ||| 1
+! " - und dies ||| ! ' - and what is ||| 0.0370072 0.272342 ||| ||| 1
+! " - und ||| ! ' - and ||| 0.0370072 0.272342 ||| ||| 1
+! " - ||| ! ' - ||| 0.0370072 0.272342 ||| ||| 1
+! “ ||| ! ' . nevertheless , ||| 0.0370072 0.883601 ||| ||| 1
+! “ ||| ! ' . nevertheless ||| 0.0370072 0.883601 ||| ||| 1
+! " . ||| ! ' . ||| 0.363636 0.272342 ||| ||| 11
+! " ||| ! ' . ||| 0.363636 0.272342 ||| ||| 11
+! ' ||| ! ' . ||| 0.00336429 0.883601 ||| ||| 11
+! ||| ! ' . ||| 0.00336429 0.883601 ||| ||| 11
+! “ ||| ! ' . ||| 0.00336429 0.883601 ||| ||| 11
+! " . und Spinelli , der ||| ! ' ; Spinelli , who ||| 0.0370072 0.272342 ||| ||| 1
+! " . und Spinelli ||| ! ' ; Spinelli ||| 0.0370072 0.272342 ||| ||| 1
+! " . und ||| ! ' ; ||| 0.0370072 0.272342 ||| ||| 1
+! " ? ||| ! ' ? ||| 0.0370072 0.272342 ||| ||| 1
+! " , gab ich zur Antwort ||| ! ' I replied ||| 0.0370072 0.272342 ||| ||| 1
+Parlaments ||| ! ' ] ||| 0.0370072 1 ||| ||| 1
+! " und Nizza II ? ||| ! ' and Nice II ? ||| 0.0370072 0.272342 ||| ||| 1
+! " und Nizza II ||| ! ' and Nice II ||| 0.0370072 0.272342 ||| ||| 1
+! " und Nizza ||| ! ' and Nice ||| 0.0370072 0.272342 ||| ||| 1
+! " und schlagen uns an die ||| ! ' and beat our ||| 0.0123357 0.272342 ||| ||| 3
+! " und schlagen uns an ||| ! ' and beat our ||| 0.0123357 0.272342 ||| ||| 3
+! " und schlagen uns ||| ! ' and beat our ||| 0.0123357 0.272342 ||| ||| 3
+! " und schlagen ||| ! ' and beat ||| 0.0370072 0.272342 ||| ||| 1
+! ' rufen , ||| ! ' and then murder ||| 0.0370072 0.883601 ||| ||| 1
+! ' rufen , ||| ! ' and then ||| 0.0370072 0.883601 ||| ||| 1
+! " , und fuhr fort , ||| ! ' and ||| 0.00528675 0.272342 ||| ||| 7
+! " , und fuhr fort ||| ! ' and ||| 0.00528675 0.272342 ||| ||| 7
+! " , und fuhr ||| ! ' and ||| 0.00528675 0.272342 ||| ||| 7
+! " , und ||| ! ' and ||| 0.00528675 0.272342 ||| ||| 7
+! " und ||| ! ' and ||| 0.188997 0.272342 ||| ||| 7
+! ' rufen , ||| ! ' and ||| 0.00528675 0.883601 ||| ||| 7
+" ! aber ||| ! ' but ||| 0.0370072 0.272342 ||| ||| 1
+! " ) Sie haben vollkommen recht ||| ! ' exactly ||| 0.0185036 0.272342 ||| ||| 2
+! " ) Sie haben vollkommen ||| ! ' exactly ||| 0.0185036 0.272342 ||| ||| 2
+! " rufe vonseiten der IND ||| ! ' from members of the IND ||| 0.0370072 0.272342 ||| ||| 1
+! " rufe vonseiten der ||| ! ' from members of the ||| 0.0370072 0.272342 ||| ||| 1
+! " rufe vonseiten ||| ! ' from members of ||| 0.0370072 0.272342 ||| ||| 1
+! " rufe vonseiten ||| ! ' from members ||| 0.0370072 0.272342 ||| ||| 1
+! " rufe vonseiten ||| ! ' from ||| 0.0370072 0.272342 ||| ||| 1
+! “ Ist sich der amtierende Ratspräsident ||| ! ' is the Presidency-in-Office ||| 0.0370072 0.883601 ||| ||| 1
+! ' , diese Aufforderung ||| ! ' is the message ||| 0.0370072 0.883601 ||| ||| 1
+! ' , diese ||| ! ' is the ||| 0.0185036 0.883601 ||| ||| 2
+! “ Ist sich der ||| ! ' is the ||| 0.0185036 0.883601 ||| ||| 2
+! ' , ||| ! ' is ||| 0.0123357 0.883601 ||| ||| 3
+! ' ||| ! ' is ||| 0.0123357 0.883601 ||| ||| 3
+! “ Ist sich ||| ! ' is ||| 0.0123357 0.883601 ||| ||| 3
+beglückwünschen Sie dazu ! " oder ||| ! ' or alternatively ||| 0.0185036 0.272342 ||| ||| 2
+wir beglückwünschen Sie dazu ! " oder ||| ! ' or alternatively ||| 0.0185036 0.272342 ||| ||| 2
+! " oder ||| ! ' or ||| 0.0123357 0.272342 ||| ||| 3
+Sie dazu ! " oder ||| ! ' or ||| 0.0123357 0.272342 ||| ||| 3
+dazu ! " oder ||| ! ' or ||| 0.0123357 0.272342 ||| ||| 3
+! " rufen die Föderalisten , und ||| ! ' say the federalists , and ||| 0.0370072 0.272342 ||| ||| 1
+! " rufen die Föderalisten , ||| ! ' say the federalists , ||| 0.0370072 0.272342 ||| ||| 1
+! " rufen die Föderalisten ||| ! ' say the federalists ||| 0.0370072 0.272342 ||| ||| 1
+! " rufen die ||| ! ' say the ||| 0.0370072 0.272342 ||| ||| 1
+! " rufen ||| ! ' say ||| 0.0370072 0.272342 ||| ||| 1
+" , schrie sie , " nicht ||| ! ' she shrieked , ' not ||| 0.0370072 0.0949985 ||| ||| 1
+" , schrie sie , " ||| ! ' she shrieked , ' ||| 0.0370072 0.0949985 ||| ||| 1
+" , schrie sie , ||| ! ' she shrieked , ||| 0.0370072 0.308218 ||| ||| 1
+" , schrie sie ||| ! ' she shrieked ||| 0.0370072 0.308218 ||| ||| 1
+" , schrie sie ||| ! ' she ||| 0.0370072 0.308218 ||| ||| 1
+! " zu allen Formen des Protektionismus ||| ! ' to all forms of protectionism ||| 0.0370072 0.272342 ||| ||| 1
+! " zu allen Formen des ||| ! ' to all forms of ||| 0.0370072 0.272342 ||| ||| 1
+! " zu allen Formen ||| ! ' to all forms ||| 0.0370072 0.272342 ||| ||| 1
+! " zu allen ||| ! ' to all ||| 0.0370072 0.272342 ||| ||| 1
+! " zur Offenheit und zum Wettbewerb ||| ! ' to openness and competition ||| 0.0370072 0.272342 ||| ||| 1
+! " zur Offenheit und zum ||| ! ' to openness and ||| 0.0185036 0.272342 ||| ||| 2
+! " zur Offenheit und ||| ! ' to openness and ||| 0.0185036 0.272342 ||| ||| 2
+! " zur Offenheit ||| ! ' to openness ||| 0.0370072 0.272342 ||| ||| 1
+! " zu ||| ! ' to ||| 0.0185036 0.272342 ||| ||| 2
+! " zur ||| ! ' to ||| 0.0185036 0.272342 ||| ||| 2
+" war auch der Ruf der Menschen ||| ! ' was what the communities ||| 0.0370072 0.308218 ||| ||| 1
+" war auch der Ruf der ||| ! ' was what the ||| 0.0370072 0.308218 ||| ||| 1
+" war auch der Ruf ||| ! ' was what ||| 0.0185036 0.308218 ||| ||| 2
+" war auch der ||| ! ' was what ||| 0.0185036 0.308218 ||| ||| 2
+" war auch ||| ! ' was ||| 0.0185036 0.308218 ||| ||| 2
+" war ||| ! ' was ||| 0.0185036 0.308218 ||| ||| 2
+! " ( Europa war gut zu ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " ( Europa war gut ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " ( Europa war ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " ( Europa ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " ( ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " ) Sie haben ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " ) Sie ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " ) ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " , ||| ! ' ||| 0.0137615 0.272342 ||| ||| 218
+! " . ||| ! ' ||| 0.0412844 0.272342 ||| ||| 218
+! " begrüßt ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " gehört ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " rufe ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " steht . ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " steht ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " vereinen ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " ||| ! ' ||| 0.463303 0.272342 ||| ||| 218
+! ' , ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+! ' - wir lassen uns ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+! ' - wir lassen ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+! ' - wir ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+! ' - ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+! ' . ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+! ' Stand ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+! ' rufen ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+! ' ||| ! ' ||| 0.114679 0.883601 ||| ||| 218
+! ||| ! ' ||| 0.0825688 0.883601 ||| ||| 218
+! “ ||| ! ' ||| 0.0137615 0.883601 ||| ||| 218
+" ! ||| ! ' ||| 0.0183486 0.272342 ||| ||| 218
+" , schrie ||| ! ' ||| 0.000169758 0.308218 ||| ||| 218
+" . ||| ! ' ||| 0.000169758 0.308218 ||| ||| 218
+" ||| ! ' ||| 0.000169758 0.308218 ||| ||| 218
+' ||| ! ' ||| 0.000169758 1 ||| ||| 218
+, Rassismus ' ||| ! ' ||| 0.000169758 1 ||| ||| 218
+. " ||| ! ' ||| 0.0229358 0.308218 ||| ||| 218
+. ' ||| ! ' ||| 0.000169758 1 ||| ||| 218
+. ||| ! ' ||| 0.00606872 1 ||| ||| 218
+: " ||| ! ' ||| 0.000169758 0.308218 ||| ||| 218
+? ' ||| ! ' ||| 0.000169758 1 ||| ||| 218
+Ihr müßt ||| ! ' ||| 0.000169758 1 ||| ||| 218
+Parlaments ||| ! ' ||| 0.000169758 1 ||| ||| 218
+Rassismus ' ||| ! ' ||| 0.000169758 1 ||| ||| 218
+Sie dazu ! " ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+Sonnenergie ! ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+aufgreifen . ||| ! ' ||| 0.000169758 1 ||| ||| 218
+befassen ! ' ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+das tun ! " ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+dazu ! " ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+den ||| ! ' ||| 0.000169758 1 ||| ||| 218
+erschaffen ! ' ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+gehabt ! ' ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+geschehen ! " ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+müßt ||| ! ' ||| 0.000169758 1 ||| ||| 218
+stellen ! ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+tun ! " ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+verabschieden ! ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+zu erschaffen ! ' ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+! ) bezeichnet wird , hat ||| ! ) , has ||| 0.0370072 0.883601 ||| ||| 1
+! ) oder ihr Egonet ||| ! ) , or rather their egonet ||| 0.0370072 0.883601 ||| ||| 1
+! ) oder ||| ! ) , or ||| 0.0370072 0.883601 ||| ||| 1
+! ) , Forschung , Wettbewerbsfähigkeit und ||| ! ) , research , competitiveness and ||| 0.0370072 0.883601 ||| ||| 1
+! ) , Forschung , Wettbewerbsfähigkeit ||| ! ) , research , competitiveness ||| 0.0370072 0.883601 ||| ||| 1
+! ) , Forschung , ||| ! ) , research , ||| 0.0370072 0.883601 ||| ||| 1
+! ) , Forschung ||| ! ) , research ||| 0.0370072 0.883601 ||| ||| 1
+! ) , mit der Rodung von ||| ! ) , the grubbing-up of ||| 0.0370072 0.883601 ||| ||| 1
+! ) , mit der Rodung ||| ! ) , the grubbing-up ||| 0.0370072 0.883601 ||| ||| 1
+! ) , mit der ||| ! ) , the ||| 0.0370072 0.883601 ||| ||| 1
+! - , ist zu ersehen ||| ! ) , we see ||| 0.0370072 0.883601 ||| ||| 1
+! - , ist zu ||| ! ) , we ||| 0.0370072 0.883601 ||| ||| 1
+! ) , während über 100 ||| ! ) , while over 100 ||| 0.0185036 0.883601 ||| ||| 2
+aus ! ) , während über 100 ||| ! ) , while over 100 ||| 0.0185036 0.883601 ||| ||| 2
+! ) , während über ||| ! ) , while over ||| 0.0123357 0.883601 ||| ||| 3
+aus ! ) , während über ||| ! ) , while over ||| 0.0123357 0.883601 ||| ||| 3
+leer aus ! ) , während über ||| ! ) , while over ||| 0.0123357 0.883601 ||| ||| 3
+! ) , während ||| ! ) , while ||| 0.00925181 0.883601 ||| ||| 4
+aus ! ) , während ||| ! ) , while ||| 0.00925181 0.883601 ||| ||| 4
+leer aus ! ) , während ||| ! ) , while ||| 0.00925181 0.883601 ||| ||| 4
+völlig leer aus ! ) , während ||| ! ) , while ||| 0.00925181 0.883601 ||| ||| 4
+! ) , mit ||| ! ) , ||| 0.00284671 0.883601 ||| ||| 13
+! ) , ||| ! ) , ||| 0.307692 0.883601 ||| ||| 13
+! ) bezeichnet wird , ||| ! ) , ||| 0.00284671 0.883601 ||| ||| 13
+! ) ||| ! ) , ||| 0.00284671 0.883601 ||| ||| 13
+! - , ist ||| ! ) , ||| 0.00284671 0.883601 ||| ||| 13
+! - , ||| ! ) , ||| 0.00284671 0.883601 ||| ||| 13
+aus ! ) , ||| ! ) , ||| 0.00284671 0.883601 ||| ||| 13
+ging völlig leer aus ! ) , ||| ! ) , ||| 0.00284671 0.883601 ||| ||| 13
+leer aus ! ) , ||| ! ) , ||| 0.00284671 0.883601 ||| ||| 13
+völlig leer aus ! ) , ||| ! ) , ||| 0.00284671 0.883601 ||| ||| 13
+durch ||| ! ) - in fact neither is ||| 0.0370072 1 ||| ||| 1
+durch ||| ! ) - in fact neither ||| 0.0370072 1 ||| ||| 1
+durch ||| ! ) - in fact ||| 0.0370072 1 ||| ||| 1
+durch ||| ! ) - in ||| 0.0370072 1 ||| ||| 1
+! ) . ||| ! ) . ||| 0.661491 0.883601 ||| ||| 2
+Berichtigungshaushalts im laufenden ||| ! ) amending budget in the current ||| 0.0370072 1 ||| ||| 1
+Berichtigungshaushalts im ||| ! ) amending budget in the ||| 0.0370072 1 ||| ||| 1
+Berichtigungshaushalts ||| ! ) amending budget ||| 0.0370072 1 ||| ||| 1
+! ) , und schließlich ||| ! ) and , finally , ||| 0.0370072 0.883601 ||| ||| 1
+! ) , und ||| ! ) and , ||| 0.0370072 0.883601 ||| ||| 1
+! ) und die Schaffung nationaler Finanzmärkte ||| ! ) and create national financial markets ||| 0.0370072 0.883601 ||| ||| 1
+! ) und die Schaffung nationaler ||| ! ) and create national ||| 0.0370072 0.883601 ||| ||| 1
+! ) und die Schaffung ||| ! ) and create ||| 0.0370072 0.883601 ||| ||| 1
+! ) und häufig unverständliche ||| ! ) and often unreadable ||| 0.0185036 0.883601 ||| ||| 2
+ankündigen ! ) und häufig unverständliche ||| ! ) and often unreadable ||| 0.0185036 0.883601 ||| ||| 2
+! ) und häufig unverständliche ||| ! ) and often unreadable – ||| 0.0185036 0.883601 ||| ||| 2
+ankündigen ! ) und häufig unverständliche ||| ! ) and often unreadable – ||| 0.0185036 0.883601 ||| ||| 2
+! ) und häufig ||| ! ) and often ||| 0.0185036 0.883601 ||| ||| 2
+ankündigen ! ) und häufig ||| ! ) and often ||| 0.0185036 0.883601 ||| ||| 2
+! ) und die ||| ! ) and ||| 0.00925181 0.883601 ||| ||| 4
+! ) und ||| ! ) and ||| 0.330745 0.883601 ||| ||| 4
+ankündigen ! ) und ||| ! ) and ||| 0.00925181 0.883601 ||| ||| 4
+! ) für die Umsetzung der ||| ! ) before they apply the ||| 0.0370072 0.883601 ||| ||| 1
+! ) für die Umsetzung ||| ! ) before they apply ||| 0.0370072 0.883601 ||| ||| 1
+! ) für die ||| ! ) before they ||| 0.0370072 0.883601 ||| ||| 1
+! ) für ||| ! ) before ||| 0.0185036 0.883601 ||| ||| 2
+! ) ||| ! ) before ||| 0.0185036 0.883601 ||| ||| 2
+! ||| ! ) can ||| 0.0370072 0.442597 ||| ||| 1
+! ) dürfen nicht verwendet ( missbraucht ||| ! ) cannot be used ( misused ||| 0.0370072 0.883601 ||| ||| 1
+! ) dürfen nicht verwendet ( ||| ! ) cannot be used ( ||| 0.0370072 0.883601 ||| ||| 1
+! ) dürfen nicht verwendet ||| ! ) cannot be used ||| 0.0370072 0.883601 ||| ||| 1
+! ) dürfen nicht ||| ! ) cannot be ||| 0.0370072 0.883601 ||| ||| 1
+! ) großen Not ||| ! ) high level of need ||| 0.0370072 0.883601 ||| ||| 1
+! ) großen ||| ! ) high ||| 0.0370072 0.883601 ||| ||| 1
+) fiktiven Holocaust an den Juden im ||| ! ) holocaust of the Jews ||| 0.0185036 1 ||| ||| 2
+) fiktiven Holocaust an den Juden ||| ! ) holocaust of the Jews ||| 0.0185036 1 ||| ||| 2
+) fiktiven Holocaust an den ||| ! ) holocaust of the ||| 0.0370072 1 ||| ||| 1
+) fiktiven Holocaust an ||| ! ) holocaust of ||| 0.0370072 1 ||| ||| 1
+) fiktiven Holocaust ||| ! ) holocaust ||| 0.0370072 1 ||| ||| 1
+! ) für den Fall der ||| ! ) in the event that we ||| 0.0370072 0.883601 ||| ||| 1
+! ) für den Fall ||| ! ) in the event that ||| 0.0370072 0.883601 ||| ||| 1
+! ) für den Fall ||| ! ) in the event ||| 0.0370072 0.883601 ||| ||| 1
+! ) für den ||| ! ) in the ||| 0.0370072 0.883601 ||| ||| 1
+! ) für ||| ! ) in ||| 0.0370072 0.883601 ||| ||| 1
+! ) allein für ||| ! ) just for ||| 0.0370072 0.883601 ||| ||| 1
+! ) allein ||| ! ) just ||| 0.0370072 0.883601 ||| ||| 1
+! ) Marktwirtschaft , die von einem ||| ! ) market economy ||| 0.00740145 0.883601 ||| ||| 5
+! ) Marktwirtschaft , die von ||| ! ) market economy ||| 0.00740145 0.883601 ||| ||| 5
+! ) Marktwirtschaft , die ||| ! ) market economy ||| 0.00740145 0.883601 ||| ||| 5
+! ) Marktwirtschaft , ||| ! ) market economy ||| 0.00740145 0.883601 ||| ||| 5
+! ) Marktwirtschaft ||| ! ) market economy ||| 0.00740145 0.883601 ||| ||| 5
+! - Kernkraftwerke errichtet werden ||| ! ) nuclear power stations built ||| 0.00925181 0.883601 ||| ||| 4
+! - Kernkraftwerke errichtet ||| ! ) nuclear power stations built ||| 0.00925181 0.883601 ||| ||| 4
+sichere ! - Kernkraftwerke errichtet werden ||| ! ) nuclear power stations built ||| 0.00925181 0.883601 ||| ||| 4
+sichere ! - Kernkraftwerke errichtet ||| ! ) nuclear power stations built ||| 0.00925181 0.883601 ||| ||| 4
+! - Kernkraftwerke ||| ! ) nuclear power stations ||| 0.0185036 0.883601 ||| ||| 2
+sichere ! - Kernkraftwerke ||| ! ) nuclear power stations ||| 0.0185036 0.883601 ||| ||| 2
+! ) über die Änderung der ||| ! ) on the amendment of ||| 0.0370072 0.883601 ||| ||| 1
+! ) über die Änderung ||| ! ) on the amendment ||| 0.0370072 0.883601 ||| ||| 1
+! ) über die ||| ! ) on the ||| 0.0370072 0.883601 ||| ||| 1
+! ) über ||| ! ) on ||| 0.0370072 0.883601 ||| ||| 1
+klug . ||| ! ) to be wise enough ||| 0.0370072 1 ||| ||| 1
+. ||| ! ) to be ||| 0.0370072 1 ||| ||| 1
+. ||| ! ) to ||| 0.0370072 1 ||| ||| 1
+! ) , die die Arbeitslosenunterstützung ||| ! ) which unemployment benefit ||| 0.0370072 0.883601 ||| ||| 1
+! ! ! ) ||| ! ) ||| 0.000521229 0.689873 ||| ||| 71
+! ) , geht . ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+! ) , geht ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+! ) , ||| ! ) ||| 0.0186335 0.883601 ||| ||| 71
+! ) . ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+! ) bezeichnet wird ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+! ) bezeichnet ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+! ) für ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+! ) vertritt ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+! ) ||| ! ) ||| 0.633803 0.883601 ||| ||| 71
+! - ||| ! ) ||| 0.0186335 0.883601 ||| ||| 71
+! ||| ! ) ||| 0.000521229 0.442597 ||| ||| 71
+) fiktiven ||| ! ) ||| 0.000521229 1 ||| ||| 71
+) ||| ! ) ||| 0.000521229 1 ||| ||| 71
+, ging völlig leer aus ! ) ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+- ||| ! ) ||| 0.000521229 1 ||| ||| 71
+. ||| ! ) ||| 0.0186335 1 ||| ||| 71
+? ) ||| ! ) ||| 0.000521229 1 ||| ||| 71
+ankündigen ! ) ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+aus ! ) ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+ging völlig leer aus ! ) ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+leer aus ! ) ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+sichere ! - ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+völlig leer aus ! ) ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+, er hatte überhaupt nicht zur Kenntnis ||| ! , he was entirely unaware ||| 0.0123357 1 ||| ||| 3
+, er hatte überhaupt nicht zur ||| ! , he was entirely unaware ||| 0.0123357 1 ||| ||| 3
+, er hatte überhaupt nicht ||| ! , he was entirely unaware ||| 0.0123357 1 ||| ||| 3
+, er hatte ||| ! , he was entirely ||| 0.0185036 1 ||| ||| 2
+, er hatte überhaupt ||| ! , he was entirely ||| 0.0185036 1 ||| ||| 2
+, er hatte ||| ! , he was ||| 0.0185036 1 ||| ||| 2
+, er hatte überhaupt ||| ! , he was ||| 0.0185036 1 ||| ||| 2
+, er ||| ! , he ||| 0.0370072 1 ||| ||| 1
+! , dem Gewinner des Sacharow-Preises in ||| ! , the Sakharov Prize winner in ||| 0.0370072 0.883601 ||| ||| 1
+! , dem Gewinner des Sacharow-Preises ||| ! , the Sakharov Prize winner ||| 0.0370072 0.883601 ||| ||| 1
+! , dem ||| ! , the ||| 0.0370072 0.883601 ||| ||| 1
+! , ||| ! , ||| 0.0185036 0.883601 ||| ||| 2
+, ||| ! , ||| 0.0185036 1 ||| ||| 2
+! - ' Es reicht ' ||| ! - ' Enough is enough ' ||| 0.0370072 0.883601 ||| ||| 1
+! - ' Es reicht ||| ! - ' Enough is enough ||| 0.0370072 0.883601 ||| ||| 1
+! - ' Es ||| ! - ' Enough ||| 0.0370072 0.883601 ||| ||| 1
+! - ' ||| ! - ' ||| 0.0370072 0.883601 ||| ||| 1
+! ich kann auch mitteilen ||| ! - I can also tell you ||| 0.0370072 0.442845 ||| ||| 1
+! ich kann auch ||| ! - I can also ||| 0.0370072 0.442845 ||| ||| 1
+! ich kann ||| ! - I can ||| 0.0370072 0.442845 ||| ||| 1
+ja auch tun ! warum sollte ||| ! - I do not see ||| 0.0370072 0.442845 ||| ||| 1
+ja auch tun ! warum sollte ||| ! - I do not ||| 0.0370072 0.442845 ||| ||| 1
+! - ||| ! - I do ||| 0.0185036 0.883601 ||| ||| 2
+ja auch tun ! warum ||| ! - I do ||| 0.0185036 0.442845 ||| ||| 2
+! - räume ich ein , ||| ! - I recognise ||| 0.0185036 0.883601 ||| ||| 2
+! - räume ich ein ||| ! - I recognise ||| 0.0185036 0.883601 ||| ||| 2
+! - , möchte ich meinerseits ||| ! - I would like to ||| 0.0185036 0.883601 ||| ||| 2
+! - , möchte ich ||| ! - I would like to ||| 0.0185036 0.883601 ||| ||| 2
+! - sage ich ||| ! - I would say ||| 0.0370072 0.883601 ||| ||| 1
+! - ||| ! - I ||| 0.0185036 0.883601 ||| ||| 2
+! ich ||| ! - I ||| 0.0185036 0.442845 ||| ||| 2
+! - Frau Präsidentin , ich wurde ||| ! - Madam President , I was ||| 0.0370072 0.883601 ||| ||| 1
+! - Frau Präsidentin , ich ||| ! - Madam President , I ||| 0.0370072 0.883601 ||| ||| 1
+! - Frau Präsidentin , ||| ! - Madam President , ||| 0.0370072 0.883601 ||| ||| 1
+! - Frau Präsidentin ||| ! - Madam President ||| 0.0370072 0.883601 ||| ||| 1
+! - Frau ||| ! - Madam ||| 0.0370072 0.883601 ||| ||| 1
+! ein Statut mit einem großen ||| ! - a statute with a capital ||| 0.0370072 0.442845 ||| ||| 1
+! ein Statut mit einem ||| ! - a statute with a ||| 0.0370072 0.442845 ||| ||| 1
+! ein Statut mit ||| ! - a statute with ||| 0.0370072 0.442845 ||| ||| 1
+! ein Statut ||| ! - a statute ||| 0.0370072 0.442845 ||| ||| 1
+! ein ||| ! - a ||| 0.0370072 0.442845 ||| ||| 1
+! - quer durch alle Fraktionen , ||| ! - all , ||| 0.0370072 0.883601 ||| ||| 1
+! - quer durch alle Fraktionen ||| ! - all ||| 0.0185036 0.883601 ||| ||| 2
+! - quer durch alle ||| ! - all ||| 0.0185036 0.883601 ||| ||| 2
+! - und ideologischer Manipulation ||| ! - and borders on ideological manipulation ||| 0.0370072 0.883601 ||| ||| 1
+! - und ideologischer ||| ! - and borders on ideological ||| 0.0370072 0.883601 ||| ||| 1
+! - und zum ersten ||| ! - and we saw the first ||| 0.0370072 0.883601 ||| ||| 1
+! - und zum ||| ! - and we saw the ||| 0.0370072 0.883601 ||| ||| 1
+! - und ||| ! - and we saw ||| 0.0370072 0.883601 ||| ||| 1
+! - und ||| ! - and we ||| 0.0370072 0.883601 ||| ||| 1
+! - und ||| ! - and ||| 0.661491 0.883601 ||| ||| 2
+! - um zu bekräftigen , daß ||| ! - as a reaffirmation of ||| 0.0123357 0.883601 ||| ||| 3
+! - um zu bekräftigen , ||| ! - as a reaffirmation of ||| 0.0123357 0.883601 ||| ||| 3
+! - um zu bekräftigen ||| ! - as a reaffirmation of ||| 0.0123357 0.883601 ||| ||| 3
+! - um zu bekräftigen , daß ||| ! - as a reaffirmation ||| 0.0123357 0.883601 ||| ||| 3
+! - um zu bekräftigen , ||| ! - as a reaffirmation ||| 0.0123357 0.883601 ||| ||| 3
+! - um zu bekräftigen ||| ! - as a reaffirmation ||| 0.0123357 0.883601 ||| ||| 3
+! - um zu ||| ! - as a ||| 0.0185036 0.883601 ||| ||| 2
+! - um ||| ! - as a ||| 0.0185036 0.883601 ||| ||| 2
+! aber ||| ! - but , ||| 0.0370072 0.303187 ||| ||| 1
+! - , doch die britische Regierung ||| ! - but the British Government ||| 0.0370072 0.883601 ||| ||| 1
+! - , doch die britische ||| ! - but the British ||| 0.0370072 0.883601 ||| ||| 1
+! - , doch die ||| ! - but the ||| 0.0370072 0.883601 ||| ||| 1
+! - , doch ||| ! - but ||| 0.0370072 0.883601 ||| ||| 1
+! - , von dem ||| ! - in favour ||| 0.0185036 0.883601 ||| ||| 2
+! - , von ||| ! - in favour ||| 0.0185036 0.883601 ||| ||| 2
+! - , von dem ||| ! - in ||| 0.0185036 0.883601 ||| ||| 2
+! - , von ||| ! - in ||| 0.0185036 0.883601 ||| ||| 2
+. ||| ! - is for the troops ||| 0.0370072 1 ||| ||| 1
+. ||| ! - is for the ||| 0.0370072 1 ||| ||| 1
+. ||| ! - is for ||| 0.0370072 1 ||| ||| 1
+. ||| ! - is ||| 0.0370072 1 ||| ||| 1
+! ebenso wie die anvisierte bessere ||| ! - just as planned and improved ||| 0.0370072 0.883601 ||| ||| 1
+! ebenso wie die anvisierte ||| ! - just as planned and ||| 0.0370072 0.883601 ||| ||| 1
+! ebenso wie die anvisierte ||| ! - just as planned ||| 0.0370072 0.883601 ||| ||| 1
+! ebenso wie die ||| ! - just as ||| 0.0185036 0.883601 ||| ||| 2
+! ebenso wie ||| ! - just as ||| 0.0185036 0.883601 ||| ||| 2
+! ebenso ||| ! - just ||| 0.0370072 0.883601 ||| ||| 1
+! - der operativen Ausgaben werden ||| ! - of operational expenses are managed ||| 0.0185036 0.883601 ||| ||| 2
+Herren ! - der operativen Ausgaben werden ||| ! - of operational expenses are managed ||| 0.0185036 0.883601 ||| ||| 2
+! - der operativen Ausgaben werden ||| ! - of operational expenses are ||| 0.0185036 0.883601 ||| ||| 2
+Herren ! - der operativen Ausgaben werden ||| ! - of operational expenses are ||| 0.0185036 0.883601 ||| ||| 2
+! - der operativen Ausgaben ||| ! - of operational expenses ||| 0.0123357 0.883601 ||| ||| 3
+Herren ! - der operativen Ausgaben ||| ! - of operational expenses ||| 0.0123357 0.883601 ||| ||| 3
+und Herren ! - der operativen Ausgaben ||| ! - of operational expenses ||| 0.0123357 0.883601 ||| ||| 3
+! - der operativen ||| ! - of operational ||| 0.00925181 0.883601 ||| ||| 4
+Damen und Herren ! - der operativen ||| ! - of operational ||| 0.00925181 0.883601 ||| ||| 4
+Herren ! - der operativen ||| ! - of operational ||| 0.00925181 0.883601 ||| ||| 4
+und Herren ! - der operativen ||| ! - of operational ||| 0.00925181 0.883601 ||| ||| 4
+! - Referenden und Volksinitiativen zu stellen ||| ! - of referendums and popular initiatives ||| 0.0123357 0.883601 ||| ||| 3
+! - Referenden und Volksinitiativen zu ||| ! - of referendums and popular initiatives ||| 0.0123357 0.883601 ||| ||| 3
+! - Referenden und Volksinitiativen ||| ! - of referendums and popular initiatives ||| 0.0123357 0.883601 ||| ||| 3
+! - Referenden und ||| ! - of referendums and ||| 0.0370072 0.883601 ||| ||| 1
+! - Referenden ||| ! - of referendums ||| 0.0370072 0.883601 ||| ||| 1
+! - der Energie vergeudet , bevor ||| ! - of the energy before ||| 0.0370072 0.883601 ||| ||| 1
+! - der Energie vergeudet , ||| ! - of the energy ||| 0.0123357 0.883601 ||| ||| 3
+! - der Energie vergeudet ||| ! - of the energy ||| 0.0123357 0.883601 ||| ||| 3
+! - der Energie ||| ! - of the energy ||| 0.0123357 0.883601 ||| ||| 3
+! - der ||| ! - of the ||| 0.0370072 0.883601 ||| ||| 1
+! - der ||| ! - of ||| 0.00308394 0.883601 ||| ||| 12
+! - ||| ! - of ||| 0.00308394 0.883601 ||| ||| 12
+Damen und Herren ! - der ||| ! - of ||| 0.00308394 0.883601 ||| ||| 12
+Herren ! - der ||| ! - of ||| 0.00308394 0.883601 ||| ||| 12
+Höhepunkt ist - , ||| ! - of ||| 0.00308394 1 ||| ||| 12
+Höhepunkt ist - ||| ! - of ||| 0.00308394 1 ||| ||| 12
+der Höhepunkt ist - , ||| ! - of ||| 0.00308394 1 ||| ||| 12
+der Höhepunkt ist - ||| ! - of ||| 0.00308394 1 ||| ||| 12
+ist - , ||| ! - of ||| 0.00308394 1 ||| ||| 12
+ist - ||| ! - of ||| 0.00308394 1 ||| ||| 12
+meine Damen und Herren ! - der ||| ! - of ||| 0.00308394 0.883601 ||| ||| 12
+und Herren ! - der ||| ! - of ||| 0.00308394 0.883601 ||| ||| 12
+! oder zugunsten der Rückkehr auf den ||| ! - or return to ||| 0.0370072 0.442845 ||| ||| 1
+! oder zugunsten der Rückkehr ||| ! - or return ||| 0.0370072 0.442845 ||| ||| 1
+! oder zugunsten der ||| ! - or ||| 0.0123357 0.442845 ||| ||| 3
+! oder zugunsten ||| ! - or ||| 0.0123357 0.442845 ||| ||| 3
+! oder ||| ! - or ||| 0.0123357 0.442845 ||| ||| 3
+! - energische Maßnahmen vorgeschlagen hat , ||| ! - proposing powerful measures ||| 0.0123357 0.883601 ||| ||| 3
+! - energische Maßnahmen vorgeschlagen hat ||| ! - proposing powerful measures ||| 0.0123357 0.883601 ||| ||| 3
+! - energische Maßnahmen vorgeschlagen ||| ! - proposing powerful measures ||| 0.0123357 0.883601 ||| ||| 3
+sage ich Dank ||| ! - say ' thank you ||| 0.0370072 1 ||| ||| 1
+sage ich ||| ! - say ' ||| 0.0370072 1 ||| ||| 1
+! - besagen , dass der Zugang ||| ! - stipulate that access ||| 0.0370072 0.883601 ||| ||| 1
+! - besagen , dass ||| ! - stipulate that ||| 0.0370072 0.883601 ||| ||| 1
+! - besagen ||| ! - stipulate ||| 0.0370072 0.883601 ||| ||| 1
+! - , die mit ||| ! - that have been treated with ||| 0.0123357 0.883601 ||| ||| 3
+Munde zusammen ! - , die mit ||| ! - that have been treated with ||| 0.0123357 0.883601 ||| ||| 3
+zusammen ! - , die mit ||| ! - that have been treated with ||| 0.0123357 0.883601 ||| ||| 3
+! - , die ||| ! - that have been ||| 0.00925181 0.883601 ||| ||| 4
+Munde zusammen ! - , die ||| ! - that have been ||| 0.00925181 0.883601 ||| ||| 4
+im Munde zusammen ! - , die ||| ! - that have been ||| 0.00925181 0.883601 ||| ||| 4
+zusammen ! - , die ||| ! - that have been ||| 0.00925181 0.883601 ||| ||| 4
+! - , die ||| ! - that have ||| 0.00925181 0.883601 ||| ||| 4
+Munde zusammen ! - , die ||| ! - that have ||| 0.00925181 0.883601 ||| ||| 4
+im Munde zusammen ! - , die ||| ! - that have ||| 0.00925181 0.883601 ||| ||| 4
+zusammen ! - , die ||| ! - that have ||| 0.00925181 0.883601 ||| ||| 4
+! - scheint die Europäische Union jetzt ||| ! - the EU seems ||| 0.0185036 0.883601 ||| ||| 2
+! - scheint die Europäische Union ||| ! - the EU seems ||| 0.0185036 0.883601 ||| ||| 2
+! - und begrenzt somit die ||| ! - thereby restricting the ||| 0.0370072 0.883601 ||| ||| 1
+! - rechtzeitig reagiert : sie hat ||| ! - took timely action : it ||| 0.0185036 0.883601 ||| ||| 2
+! - rechtzeitig reagiert : sie ||| ! - took timely action : it ||| 0.0185036 0.883601 ||| ||| 2
+! - rechtzeitig reagiert : ||| ! - took timely action : ||| 0.0370072 0.883601 ||| ||| 1
+! - rechtzeitig reagiert ||| ! - took timely action ||| 0.0370072 0.883601 ||| ||| 1
+! - rechtzeitig ||| ! - took timely ||| 0.0370072 0.883601 ||| ||| 1
+! - , wohingegen man ||| ! - whereas one ||| 0.0370072 0.883601 ||| ||| 1
+! - , wohingegen ||| ! - whereas ||| 0.0370072 0.883601 ||| ||| 1
+! - , die ||| ! - which ||| 0.0370072 0.883601 ||| ||| 1
+! - , während diejenigen , die ||| ! - while those responsible for the ||| 0.0370072 0.883601 ||| ||| 1
+! - , während diejenigen , ||| ! - while those responsible for ||| 0.0185036 0.883601 ||| ||| 2
+! - , während diejenigen ||| ! - while those responsible for ||| 0.0185036 0.883601 ||| ||| 2
+! - , während diejenigen , ||| ! - while those responsible ||| 0.0185036 0.883601 ||| ||| 2
+! - , während diejenigen ||| ! - while those responsible ||| 0.0185036 0.883601 ||| ||| 2
+! - , während ||| ! - while ||| 0.0370072 0.883601 ||| ||| 1
+- , so frage ||| ! - who would ||| 0.0370072 1 ||| ||| 1
+! - , die ||| ! - who ||| 0.0185036 0.883601 ||| ||| 2
+- , so ||| ! - who ||| 0.0185036 1 ||| ||| 2
+hinsichtlich des ||| ! - why the rules on the ||| 0.0370072 1 ||| ||| 1
+hinsichtlich ||| ! - why the rules on ||| 0.0370072 1 ||| ||| 1
+aufbewahren - müssen ||| ! - will have ||| 0.0370072 1 ||| ||| 1
+aufbewahren - ||| ! - will ||| 0.0370072 1 ||| ||| 1
+! ) ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+! - , die ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+! - , ||| ! - ||| 0.104478 0.883601 ||| ||| 67
+! - quer durch ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+! - quer ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+! - ||| ! - ||| 0.507463 0.883601 ||| ||| 67
+! ||| ! - ||| 0.0597015 0.442845 ||| ||| 67
+, meine Damen und Herren ! - ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+. ||| ! - ||| 0.019746 1 ||| ||| 67
+Damen und Herren ! - ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+Herren ! - ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+Höhepunkt ist - , ||| ! - ||| 0.000552347 1 ||| ||| 67
+Höhepunkt ist - ||| ! - ||| 0.000552347 1 ||| ||| 67
+Munde zusammen ! - ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+aufbewahren - ||| ! - ||| 0.000552347 1 ||| ||| 67
+bleibt - ||| ! - ||| 0.000552347 1 ||| ||| 67
+der Höhepunkt ist - , ||| ! - ||| 0.000552347 1 ||| ||| 67
+der Höhepunkt ist - ||| ! - ||| 0.000552347 1 ||| ||| 67
+im Munde zusammen ! - ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+ist - , ||| ! - ||| 0.000552347 1 ||| ||| 67
+ist - ||| ! - ||| 0.000552347 1 ||| ||| 67
+meine Damen und Herren ! - ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+und Herren ! - ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+zusammen ! - ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+! " . ||| ! . ||| 0.0185036 0.00130746 ||| ||| 2
+! ||| ! . ||| 0.0185036 0.444592 ||| ||| 2
+! ... und , hier war ich ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+! ... und , hier war ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+! ... und , hier ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+! ... und , ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+! ... und ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+! ... ||| ! ... ||| 0.176471 0.883601 ||| ||| 17
+Ausnahme machen ! ... und , hier ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+Ausnahme machen ! ... und , ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+Ausnahme machen ! ... und ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+Ausnahme machen ! ... ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+machen ! ... und , hier war ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+machen ! ... und , hier ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+machen ! ... und , ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+machen ! ... und ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+machen ! ... ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+! " ||| ! .... ' ||| 0.0370072 0.272342 ||| ||| 1
+! ||| ! .... ||| 0.0370072 0.883601 ||| ||| 1
+! 14,5 % Feuchte ist ||| ! 14.5 % is ||| 0.0370072 0.883601 ||| ||| 1
+! 14,5 % Feuchte ||| ! 14.5 % ||| 0.0370072 0.883601 ||| ||| 1
+! 173 Auftragsmorde seit 1990 ||| ! 173 contract killings since 1990 ||| 0.0370072 0.883601 ||| ||| 1
+! 173 Auftragsmorde seit 1990 – ||| ! 173 contract killings since 1990 – ||| 0.0370072 0.883601 ||| ||| 1
+! 173 Auftragsmorde seit ||| ! 173 contract killings since ||| 0.0370072 0.883601 ||| ||| 1
+! 173 Auftragsmorde ||| ! 173 contract killings ||| 0.0370072 0.883601 ||| ||| 1
+! 173 ||| ! 173 ||| 0.0370072 0.883601 ||| ||| 1
+! 2004 ||| ! 2004 may ||| 0.0370072 0.883601 ||| ||| 1
+! 2004 ||| ! 2004 ||| 0.0370072 0.883601 ||| ||| 1
+! ; und aus Angola , Dom ||| ! ; and from Angola , Dom ||| 0.0370072 0.883601 ||| ||| 1
+! ; und aus Angola , ||| ! ; and from Angola , ||| 0.0370072 0.883601 ||| ||| 1
+! ; und aus Angola ||| ! ; and from Angola ||| 0.0370072 0.883601 ||| ||| 1
+! ; und aus ||| ! ; and from ||| 0.0370072 0.883601 ||| ||| 1
+! ; und ||| ! ; and ||| 0.0370072 0.883601 ||| ||| 1
+! ; ||| ! ; ||| 0.0370072 0.883601 ||| ||| 1
+! 100 Mio. ECU ||| ! ECU 100 m ||| 0.0185036 0.883601 ||| ||| 2
+so ! 100 Mio. ECU ||| ! ECU 100 m ||| 0.0185036 0.883601 ||| ||| 2
+wie ich es bereits ||| ! I have been ||| 0.0370072 1 ||| ||| 1
+wie ich es ||| ! I have ||| 0.0370072 1 ||| ||| 1
+ich nicht einer Meinung mit ||| ! I may not agree with ||| 0.0370072 1 ||| ||| 1
+ich nicht einer Meinung ||| ! I may not agree ||| 0.0370072 1 ||| ||| 1
+ich nicht ||| ! I may not ||| 0.0370072 1 ||| ||| 1
+ich ||| ! I may ||| 0.0370072 1 ||| ||| 1
+das meines Erachtens ||| ! I think that ||| 0.0370072 1 ||| ||| 1
+und möchte zu ||| ! I want it ||| 0.0185036 1 ||| ||| 2
+und möchte ||| ! I want it ||| 0.0185036 1 ||| ||| 2
+und möchte zu ||| ! I want ||| 0.0185036 1 ||| ||| 2
+und möchte ||| ! I want ||| 0.0185036 1 ||| ||| 2
+! ||| ! I ||| 0.00740145 0.883601 ||| ||| 5
+das meines ||| ! I ||| 0.00740145 1 ||| ||| 5
+ich ||| ! I ||| 0.00740145 1 ||| ||| 5
+und ||| ! I ||| 0.00740145 1 ||| ||| 5
+wie ich ||| ! I ||| 0.00740145 1 ||| ||| 5
+! schottisches Rindfleisch ist ||| ! Scotch beef is ||| 0.0370072 0.883601 ||| ||| 1
+! schottisches Rindfleisch ||| ! Scotch beef ||| 0.0370072 0.883601 ||| ||| 1
+! schottisches ||| ! Scotch ||| 0.0370072 0.883601 ||| ||| 1
+dies ist der Wahlspruch ||| ! ] This is the relevant phrase ||| 0.0370072 1 ||| ||| 1
+dies ist der ||| ! ] This is the relevant ||| 0.0370072 1 ||| ||| 1
+dies ist der ||| ! ] This is the ||| 0.0370072 1 ||| ||| 1
+dies ist ||| ! ] This is ||| 0.0370072 1 ||| ||| 1
+dies ||| ! ] This ||| 0.0370072 1 ||| ||| 1
+! ) ||| ! ] ||| 0.0370072 0.883601 ||| ||| 1
+alle unsere Länder , wenn auch in ||| ! all our countries , to ||| 0.0370072 1 ||| ||| 1
+alle unsere Länder , wenn auch ||| ! all our countries , ||| 0.0123357 1 ||| ||| 3
+alle unsere Länder , wenn ||| ! all our countries , ||| 0.0123357 1 ||| ||| 3
+alle unsere Länder , ||| ! all our countries , ||| 0.0123357 1 ||| ||| 3
+alle unsere Länder ||| ! all our countries ||| 0.0370072 1 ||| ||| 1
+alle unsere ||| ! all our ||| 0.0370072 1 ||| ||| 1
+all ||| ! all this ||| 0.0370072 1 ||| ||| 1
+, denn alle nehmen ||| ! all ||| 0.00616787 1 ||| ||| 6
+, denn alle ||| ! all ||| 0.00616787 1 ||| ||| 6
+all ||| ! all ||| 0.00616787 1 ||| ||| 6
+alle ||| ! all ||| 0.00616787 1 ||| ||| 6
+denn alle nehmen ||| ! all ||| 0.00616787 1 ||| ||| 6
+denn alle ||| ! all ||| 0.00616787 1 ||| ||| 6
+und traut euch doch , etwa die ||| ! and dare to adopt the ||| 0.0370072 1 ||| ||| 1
+und traut euch doch , etwa ||| ! and dare to adopt ||| 0.0185036 1 ||| ||| 2
+und traut euch doch , ||| ! and dare to adopt ||| 0.0185036 1 ||| ||| 2
+und traut euch doch , etwa ||| ! and dare to ||| 0.0185036 1 ||| ||| 2
+und traut euch doch , ||| ! and dare to ||| 0.0185036 1 ||| ||| 2
+und traut euch doch ||| ! and dare ||| 0.0370072 1 ||| ||| 1
+anderes Beispiel : wenn ich ||| ! another example : when I ||| 0.0370072 1 ||| ||| 1
+anderes Beispiel : wenn ||| ! another example : when ||| 0.0370072 1 ||| ||| 1
+anderes Beispiel : ||| ! another example : ||| 0.0370072 1 ||| ||| 1
+anderes Beispiel ||| ! another example ||| 0.0370072 1 ||| ||| 1
+anderes ||| ! another ||| 0.0370072 1 ||| ||| 1
+werden Sie hart , oder seien Sie ||| ! be firm , or be ||| 0.0370072 1 ||| ||| 1
+hat der Rat so ||| ! can the Council even begin to ||| 0.0370072 1 ||| ||| 1
+hat der Rat so ||| ! can the Council even begin ||| 0.0370072 1 ||| ||| 1
+hat der Rat so ||| ! can the Council even ||| 0.0370072 1 ||| ||| 1
+hat der Rat ||| ! can the Council ||| 0.0370072 1 ||| ||| 1
+hat der ||| ! can the ||| 0.0370072 1 ||| ||| 1
+hat ||| ! can ||| 0.0370072 1 ||| ||| 1
+so ||| ! create ||| 0.0370072 1 ||| ||| 1
+jeder Staat versucht ||| ! each state tries ||| 0.0370072 1 ||| ||| 1
+jeder Staat ||| ! each state ||| 0.0370072 1 ||| ||| 1
+jeder ||| ! each ||| 0.0370072 1 ||| ||| 1
+immer nur zu reden und zu ||| ! enough of words ||| 0.0123357 1 ||| ||| 3
+immer nur zu reden und ||| ! enough of words ||| 0.0123357 1 ||| ||| 3
+immer nur zu reden ||| ! enough of words ||| 0.0123357 1 ||| ||| 3
+immer nur zu ||| ! enough of ||| 0.0185036 1 ||| ||| 2
+immer nur ||| ! enough of ||| 0.0185036 1 ||| ||| 2
+immer nur zu ||| ! enough ||| 0.0185036 1 ||| ||| 2
+immer nur ||| ! enough ||| 0.0185036 1 ||| ||| 2
+für viele von Ihnen - Sie ||| ! for many of you - you ||| 0.0370072 1 ||| ||| 1
+für viele von Ihnen - ||| ! for many of you - ||| 0.0370072 1 ||| ||| 1
+für viele von Ihnen ||| ! for many of you ||| 0.0370072 1 ||| ||| 1
+für viele von ||| ! for many of ||| 0.0370072 1 ||| ||| 1
+für viele ||| ! for many ||| 0.0370072 1 ||| ||| 1
+für ||| ! for ||| 0.0370072 1 ||| ||| 1
+tun vom Rinderwahn bis zu Bioziden , ||| ! from mad cow disease to biocides ||| 0.00925181 1 ||| ||| 4
+tun vom Rinderwahn bis zu Bioziden ||| ! from mad cow disease to biocides ||| 0.00925181 1 ||| ||| 4
+vom Rinderwahn bis zu Bioziden , ||| ! from mad cow disease to biocides ||| 0.00925181 1 ||| ||| 4
+vom Rinderwahn bis zu Bioziden ||| ! from mad cow disease to biocides ||| 0.00925181 1 ||| ||| 4
+tun vom Rinderwahn bis zu ||| ! from mad cow disease to ||| 0.0185036 1 ||| ||| 2
+vom Rinderwahn bis zu ||| ! from mad cow disease to ||| 0.0185036 1 ||| ||| 2
+: gute Rechtsvorschriften sind schön und gut ||| ! good legislation is fine ||| 0.0370072 1 ||| ||| 1
+: gute Rechtsvorschriften sind ||| ! good legislation is ||| 0.0370072 1 ||| ||| 1
+: gute Rechtsvorschriften ||| ! good legislation ||| 0.0370072 1 ||| ||| 1
+: gute ||| ! good ||| 0.0370072 1 ||| ||| 1
+Probleme anzupacken : wir müssen hier ||| ! here , we have to ||| 0.0185036 1 ||| ||| 2
+anzupacken : wir müssen hier ||| ! here , we have to ||| 0.0185036 1 ||| ||| 2
+: wir müssen hier ||| ! here , we have ||| 0.0370072 1 ||| ||| 1
+hier ||| ! here ||| 0.0370072 1 ||| ||| 1
+- all diese Möglichkeiten werden derzeit ||| ! however , these solutions are being ||| 0.0370072 1 ||| ||| 1
+- all diese Möglichkeiten werden ||| ! however , these solutions are ||| 0.0370072 1 ||| ||| 1
+- all diese Möglichkeiten ||| ! however , these solutions ||| 0.0370072 1 ||| ||| 1
+- all diese ||| ! however , these ||| 0.0370072 1 ||| ||| 1
+- ||| ! however , ||| 0.0370072 1 ||| ||| 1
+wenn diese Untersuchung ||| ! if this inquiry ||| 0.0370072 1 ||| ||| 1
+wenn diese ||| ! if this ||| 0.0370072 1 ||| ||| 1
+wirklich : wenn es ||| ! if we ||| 0.0370072 1 ||| ||| 1
+wenn ||| ! if ||| 0.0185036 1 ||| ||| 2
+wirklich : wenn ||| ! if ||| 0.0185036 1 ||| ||| 2
+! 1962 haben sie dies ||| ! in 1962 , did they not ||| 0.0185036 0.883601 ||| ||| 2
+! 1962 haben sie ||| ! in 1962 , did they not ||| 0.0185036 0.883601 ||| ||| 2
+! 1962 haben sie dies ||| ! in 1962 , did they ||| 0.0185036 0.883601 ||| ||| 2
+! 1962 haben sie ||| ! in 1962 , did they ||| 0.0185036 0.883601 ||| ||| 2
+! 1962 haben ||| ! in 1962 , did ||| 0.0370072 0.883601 ||| ||| 1
+! 1962 ||| ! in 1962 , ||| 0.0370072 0.883601 ||| ||| 1
+! 1962 ||| ! in 1962 ||| 0.0370072 0.883601 ||| ||| 1
+! 1996 haben vier Millionen Menschen ||| ! in 1996 , four million people ||| 0.0370072 0.883601 ||| ||| 1
+! 1996 haben vier Millionen ||| ! in 1996 , four million ||| 0.0370072 0.883601 ||| ||| 1
+! 1996 haben vier ||| ! in 1996 , four ||| 0.0370072 0.883601 ||| ||| 1
+! 1996 haben ||| ! in 1996 , ||| 0.0370072 0.883601 ||| ||| 1
+! 1996 ||| ! in 1996 ||| 0.0370072 0.883601 ||| ||| 1
+dies einfach ||| ! in ||| 0.0370072 1 ||| ||| 1
+wirklich ||| ! instead , because we ||| 0.0370072 1 ||| ||| 1
+wirklich ||| ! instead , because ||| 0.0370072 1 ||| ||| 1
+wirklich ||| ! instead , ||| 0.0370072 1 ||| ||| 1
+wirklich ||| ! instead ||| 0.0370072 1 ||| ||| 1
+wurde ! ||| ! it has ||| 0.0370072 0.883601 ||| ||| 1
+, und befürworte ein ||| ! let us say yes to a ||| 0.0370072 1 ||| ||| 1
+, und befürworte ||| ! let us say yes to ||| 0.0370072 1 ||| ||| 1
+befürworte ||| ! let us say yes ||| 0.0185036 1 ||| ||| 2
+und befürworte ||| ! let us say yes ||| 0.0185036 1 ||| ||| 2
+befürworte ||| ! let us say ||| 0.0185036 1 ||| ||| 2
+und befürworte ||| ! let us say ||| 0.0185036 1 ||| ||| 2
+befürworte ||| ! let us ||| 0.00925181 1 ||| ||| 4
+tun wir doch um ||| ! let us ||| 0.00925181 1 ||| ||| 4
+tun wir doch ||| ! let us ||| 0.00925181 1 ||| ||| 4
+und befürworte ||| ! let us ||| 0.00925181 1 ||| ||| 4
+befürworte ||| ! let ||| 0.0185036 1 ||| ||| 2
+und befürworte ||| ! let ||| 0.0185036 1 ||| ||| 2
+! Malaria und Tuberkulose sind heilbar ||| ! malaria and tuberculosis can be cured ||| 0.0370072 0.883601 ||| ||| 1
+! Malaria und Tuberkulose sind ||| ! malaria and tuberculosis can ||| 0.0370072 0.883601 ||| ||| 1
+! Malaria und Tuberkulose ||| ! malaria and tuberculosis ||| 0.0370072 0.883601 ||| ||| 1
+! Malaria und ||| ! malaria and ||| 0.0370072 0.883601 ||| ||| 1
+! Malaria ||| ! malaria ||| 0.0370072 0.883601 ||| ||| 1
+vielleicht können Sie mich ja berichtigen ||| ! maybe you will put me right ||| 0.0370072 1 ||| ||| 1
+, und ||| ! moreover , it ||| 0.0370072 1 ||| ||| 1
+Kollegin , man könnte ||| ! my dear colleague , we could ||| 0.0370072 1 ||| ||| 1
+Kollegin , man ||| ! my dear colleague , we ||| 0.0370072 1 ||| ||| 1
+Kollegin , ||| ! my dear colleague , ||| 0.0370072 1 ||| ||| 1
+Kollegin ||| ! my dear colleague ||| 0.0370072 1 ||| ||| 1
+und nochmals Nein ! ||| ! no ! ||| 0.0370072 0.883601 ||| ||| 1
+und nochmals Nein ! “ , denn ||| ! no ! ’ , because , ||| 0.0370072 0.883601 ||| ||| 1
+und nochmals Nein ! “ , denn ||| ! no ! ’ , because ||| 0.0370072 0.883601 ||| ||| 1
+und nochmals Nein ! “ , ||| ! no ! ’ , ||| 0.0370072 0.883601 ||| ||| 1
+und nochmals Nein ! “ ||| ! no ! ’ ||| 0.0370072 0.883601 ||| ||| 1
+und nochmals Nein ||| ! no ||| 0.0370072 1 ||| ||| 1
+auch im Namen der Fraktion Die Grünen ||| ! on behalf of the Green Group ||| 0.0185036 1 ||| ||| 2
+im Namen der Fraktion Die Grünen ||| ! on behalf of the Green Group ||| 0.0185036 1 ||| ||| 2
+Vorredner auch im Namen der ||| ! on behalf of the ||| 0.0123357 1 ||| ||| 3
+auch im Namen der ||| ! on behalf of the ||| 0.0123357 1 ||| ||| 3
+im Namen der ||| ! on behalf of the ||| 0.0123357 1 ||| ||| 3
+Vorredner auch im Namen ||| ! on behalf ||| 0.0123357 1 ||| ||| 3
+auch im Namen ||| ! on behalf ||| 0.0123357 1 ||| ||| 3
+im Namen ||| ! on behalf ||| 0.0123357 1 ||| ||| 3
+Vorredner auch im ||| ! on ||| 0.0123357 1 ||| ||| 3
+auch im ||| ! on ||| 0.0123357 1 ||| ||| 3
+im ||| ! on ||| 0.0123357 1 ||| ||| 3
+wenn das alles ||| ! once everything that ||| 0.0370072 1 ||| ||| 1
+wenn ||| ! once ||| 0.0370072 1 ||| ||| 1
+ein politisch und wirtschaftlich vereintes ||| ! politically and economically united ||| 0.0370072 1 ||| ||| 1
+ein politisch und wirtschaftlich ||| ! politically and economically ||| 0.0370072 1 ||| ||| 1
+ein politisch und ||| ! politically and ||| 0.0370072 1 ||| ||| 1
+ein politisch ||| ! politically ||| 0.0370072 1 ||| ||| 1
+aber sollen wir darüber erfreut sein ? ||| ! should we rejoice at this ? ||| 0.0185036 1 ||| ||| 2
+sollen wir darüber erfreut sein ? ||| ! should we rejoice at this ? ||| 0.0185036 1 ||| ||| 2
+, aber sollen wir darüber erfreut sein ||| ! should we rejoice at this ||| 0.0123357 1 ||| ||| 3
+aber sollen wir darüber erfreut sein ||| ! should we rejoice at this ||| 0.0123357 1 ||| ||| 3
+sollen wir darüber erfreut sein ||| ! should we rejoice at this ||| 0.0123357 1 ||| ||| 3
+, aber sollen wir ||| ! should we ||| 0.00925181 1 ||| ||| 4
+aber sollen wir ||| ! should we ||| 0.00925181 1 ||| ||| 4
+sein , aber sollen wir ||| ! should we ||| 0.00925181 1 ||| ||| 4
+sollen wir ||| ! should we ||| 0.00925181 1 ||| ||| 4
+, aber sollen ||| ! should ||| 0.00925181 1 ||| ||| 4
+aber sollen ||| ! should ||| 0.00925181 1 ||| ||| 4
+sein , aber sollen ||| ! should ||| 0.00925181 1 ||| ||| 4
+sollen ||| ! should ||| 0.00925181 1 ||| ||| 4
+Elementen ||| ! social coherence ||| 0.0370072 1 ||| ||| 1
+Margaret Thatcher ||| ! sometimes I really miss Margaret Thatcher ||| 0.0370072 1 ||| ||| 1
+das ist wunderbar , und ich bin ||| ! that is extraordinary and I am ||| 0.0370072 1 ||| ||| 1
+das ist wunderbar , und ich ||| ! that is extraordinary and I ||| 0.0370072 1 ||| ||| 1
+das ist wunderbar , und ||| ! that is extraordinary and ||| 0.0370072 1 ||| ||| 1
+das ist wunderbar , ||| ! that is extraordinary ||| 0.0185036 1 ||| ||| 2
+das ist wunderbar ||| ! that is extraordinary ||| 0.0185036 1 ||| ||| 2
+das ist ||| ! that is ||| 0.0370072 1 ||| ||| 1
+das ||| ! that ||| 0.0370072 1 ||| ||| 1
+der Kommission bewirken wird , denn dies ||| ! the Commission can accept all the ||| 0.0370072 1 ||| ||| 1
+der Kommission bewirken wird , denn ||| ! the Commission can accept all ||| 0.0370072 1 ||| ||| 1
+der Kommission bewirken wird , ||| ! the Commission can accept ||| 0.0185036 1 ||| ||| 2
+der Kommission bewirken wird ||| ! the Commission can accept ||| 0.0185036 1 ||| ||| 2
+der Kommission bewirken wird , ||| ! the Commission can ||| 0.0185036 1 ||| ||| 2
+der Kommission bewirken wird ||| ! the Commission can ||| 0.0185036 1 ||| ||| 2
+der Kommission bewirken ||| ! the Commission ||| 0.0185036 1 ||| ||| 2
+der Kommission ||| ! the Commission ||| 0.0185036 1 ||| ||| 2
+! “ Die EU , die ||| ! the EU , the ||| 0.0370072 0.883601 ||| ||| 1
+! “ Die EU , ||| ! the EU , ||| 0.0370072 0.883601 ||| ||| 1
+! “ Die EU ||| ! the EU ||| 0.0370072 0.883601 ||| ||| 1
+, die ||| ! the European ||| 0.0185036 1 ||| ||| 2
+die ||| ! the European ||| 0.0185036 1 ||| ||| 2
+, und ||| ! the truth is that ||| 0.0185036 1 ||| ||| 2
+, ||| ! the truth is that ||| 0.0185036 1 ||| ||| 2
+! “ Die ||| ! the ||| 0.00925181 0.883601 ||| ||| 4
+, die ||| ! the ||| 0.00925181 1 ||| ||| 4
+der ||| ! the ||| 0.00925181 1 ||| ||| 4
+die ||| ! the ||| 0.00925181 1 ||| ||| 4
+ich doch eine große Flagge ||| ! there is a great big flag ||| 0.0123357 1 ||| ||| 3
+mir sehe ich doch eine große Flagge ||| ! there is a great big flag ||| 0.0123357 1 ||| ||| 3
+sehe ich doch eine große Flagge ||| ! there is a great big flag ||| 0.0123357 1 ||| ||| 3
+ich doch eine große ||| ! there is a great big ||| 0.0123357 1 ||| ||| 3
+mir sehe ich doch eine große ||| ! there is a great big ||| 0.0123357 1 ||| ||| 3
+sehe ich doch eine große ||| ! there is a great big ||| 0.0123357 1 ||| ||| 3
+ich doch eine ||| ! there is a ||| 0.0123357 1 ||| ||| 3
+mir sehe ich doch eine ||| ! there is a ||| 0.0123357 1 ||| ||| 3
+sehe ich doch eine ||| ! there is a ||| 0.0123357 1 ||| ||| 3
+ich doch ||| ! there is ||| 0.0123357 1 ||| ||| 3
+mir sehe ich doch ||| ! there is ||| 0.0123357 1 ||| ||| 3
+sehe ich doch ||| ! there is ||| 0.0123357 1 ||| ||| 3
+ich ||| ! there ||| 0.0123357 1 ||| ||| 3
+mir sehe ich ||| ! there ||| 0.0123357 1 ||| ||| 3
+sehe ich ||| ! there ||| 0.0123357 1 ||| ||| 3
+, denn das ist unsere Pflicht ||| ! this is our duty ||| 0.0123357 1 ||| ||| 3
+denn das ist unsere Pflicht ||| ! this is our duty ||| 0.0123357 1 ||| ||| 3
+nehmen , denn das ist unsere Pflicht ||| ! this is our duty ||| 0.0123357 1 ||| ||| 3
+, denn das ist unsere ||| ! this is our ||| 0.00925181 1 ||| ||| 4
+Angriff nehmen , denn das ist unsere ||| ! this is our ||| 0.00925181 1 ||| ||| 4
+denn das ist unsere ||| ! this is our ||| 0.00925181 1 ||| ||| 4
+nehmen , denn das ist unsere ||| ! this is our ||| 0.00925181 1 ||| ||| 4
+, denn das ist ||| ! this is ||| 0.00740145 1 ||| ||| 5
+Angriff nehmen , denn das ist ||| ! this is ||| 0.00740145 1 ||| ||| 5
+denn das ist ||| ! this is ||| 0.00740145 1 ||| ||| 5
+in Angriff nehmen , denn das ist ||| ! this is ||| 0.00740145 1 ||| ||| 5
+nehmen , denn das ist ||| ! this is ||| 0.00740145 1 ||| ||| 5
+, denn das ||| ! this ||| 0.00740145 1 ||| ||| 5
+Angriff nehmen , denn das ||| ! this ||| 0.00740145 1 ||| ||| 5
+denn das ||| ! this ||| 0.00740145 1 ||| ||| 5
+in Angriff nehmen , denn das ||| ! this ||| 0.00740145 1 ||| ||| 5
+nehmen , denn das ||| ! this ||| 0.00740145 1 ||| ||| 5
+! – dieses Mal leider flankiert ||| ! unfortunately accompanied , this time , ||| 0.0370072 0.883601 ||| ||| 1
+! – dieses Mal leider flankiert ||| ! unfortunately accompanied , this time ||| 0.0370072 0.883601 ||| ||| 1
+leider ||| ! unfortunately ||| 0.0370072 1 ||| ||| 1
+, und hier kommen wir nur weiter ||| ! we can only make progress here ||| 0.00740145 1 ||| ||| 5
+hier kommen wir nur weiter , ||| ! we can only make progress here ||| 0.00740145 1 ||| ||| 5
+hier kommen wir nur weiter ||| ! we can only make progress here ||| 0.00740145 1 ||| ||| 5
+und hier kommen wir nur weiter , ||| ! we can only make progress here ||| 0.00740145 1 ||| ||| 5
+und hier kommen wir nur weiter ||| ! we can only make progress here ||| 0.00740145 1 ||| ||| 5
+kommen wir nur weiter , ||| ! we can only make progress ||| 0.0185036 1 ||| ||| 2
+kommen wir nur weiter ||| ! we can only make progress ||| 0.0185036 1 ||| ||| 2
+kommen wir nur ||| ! we can only ||| 0.0370072 1 ||| ||| 1
+kommen wir ||| ! we can ||| 0.0370072 1 ||| ||| 1
+, und wir wissen genau , dass ||| ! we know quite well that ||| 0.0185036 1 ||| ||| 2
+und wir wissen genau , dass ||| ! we know quite well that ||| 0.0185036 1 ||| ||| 2
+, und wir wissen genau ||| ! we know quite well ||| 0.0185036 1 ||| ||| 2
+und wir wissen genau ||| ! we know quite well ||| 0.0185036 1 ||| ||| 2
+, und wir wissen ||| ! we know ||| 0.0185036 1 ||| ||| 2
+und wir wissen ||| ! we know ||| 0.0185036 1 ||| ||| 2
+! - , dass wir mehr wollen ||| ! we want more ||| 0.0370072 0.883601 ||| ||| 1
+, und wir ||| ! we ||| 0.00411192 1 ||| ||| 9
+ebenfalls mangelnde Vorsicht ||| ! we ||| 0.00411192 1 ||| ||| 9
+eine größere ||| ! we ||| 0.00411192 1 ||| ||| 9
+eine ||| ! we ||| 0.00411192 1 ||| ||| 9
+ist ebenfalls mangelnde Vorsicht ||| ! we ||| 0.00411192 1 ||| ||| 9
+oh Gott , wir ||| ! we ||| 0.00411192 1 ||| ||| 9
+und wir ||| ! we ||| 0.00411192 1 ||| ||| 9
+wird eine größere ||| ! we ||| 0.00411192 1 ||| ||| 9
+wird eine ||| ! we ||| 0.00411192 1 ||| ||| 9
+. ||| ! well ! ||| 0.0370072 1 ||| ||| 1
+. ||| ! well ||| 0.0370072 1 ||| ||| 1
+eben solch eine ||| ! what ||| 0.0185036 1 ||| ||| 2
+eben solch ||| ! what ||| 0.0185036 1 ||| ||| 2
+wann wollen Sie endlich ||| ! when are you finally going ||| 0.0370072 1 ||| ||| 1
+wann wollen Sie endlich ||| ! when are you finally ||| 0.0370072 1 ||| ||| 1
+wann wollen Sie ||| ! when are you ||| 0.0370072 1 ||| ||| 1
+wann wollen ||| ! when are ||| 0.0370072 1 ||| ||| 1
+wann ||| ! when ||| 0.0370072 1 ||| ||| 1
+. ||| ! why ? ||| 0.0370072 1 ||| ||| 1
+! den Sacharow-Preis , ||| ! won the Sakharov Prize ||| 0.0185036 0.883601 ||| ||| 2
+! den Sacharow-Preis ||| ! won the Sakharov Prize ||| 0.0185036 0.883601 ||| ||| 2
+! den ||| ! won the ||| 0.0370072 0.883601 ||| ||| 1
+! ||| ! won ||| 0.0370072 0.883601 ||| ||| 1
+es steht in Ihrer Macht ! ||| ! you have the power to do ||| 0.0370072 0.883601 ||| ||| 1
+es steht in Ihrer Macht ! ||| ! you have the power to ||| 0.0370072 0.883601 ||| ||| 1
+es steht in Ihrer Macht ! ||| ! you have the power ||| 0.0370072 0.883601 ||| ||| 1
+sie werden nie eine frei gewählte Abgeordnete ||| ! you will never be ||| 0.0123357 1 ||| ||| 3
+sie werden nie eine frei gewählte ||| ! you will never be ||| 0.0123357 1 ||| ||| 3
+sie werden nie eine frei ||| ! you will never be ||| 0.0123357 1 ||| ||| 3
+sie werden nie eine ||| ! you will never ||| 0.0185036 1 ||| ||| 2
+sie werden nie ||| ! you will never ||| 0.0185036 1 ||| ||| 2
+sie werden ||| ! you will ||| 0.0370072 1 ||| ||| 1
+sie ||| ! you ||| 0.0370072 1 ||| ||| 1
+! ! ! ||| ! ||| 0.00485437 0.689873 ||| ||| 1030
+! ! ||| ! ||| 0.00128445 0.780751 ||| ||| 1030
+! " ||| ! ||| 0.00679612 0.00130746 ||| ||| 1030
+! ) . ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! ) ||| ! ||| 0.00128445 0.883601 ||| ||| 1030
+! , war ebenfalls kein Beitrag ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! , war ebenfalls kein ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! , war ebenfalls ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! , war ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! , ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! - , ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! - ||| ! ||| 0.00128445 0.883601 ||| ||| 1030
+! . ||| ! ||| 0.00291262 0.883601 ||| ||| 1030
+! 2004 war die UKIP die einzige ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! 2004 war die UKIP die ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! 2004 war die UKIP ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! 2004 war die ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! 2004 war ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! 2004 ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! ? ? ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! die Opfer der Kriminalität in Europa ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! die Opfer der Kriminalität in ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! die Opfer der Kriminalität ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! die Opfer der ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! die Opfer ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! die ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! es ist nicht ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! es ist ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! es ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! ich weiß , ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! ich weiß ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! ich ||| ! ||| 0.00291262 0.883601 ||| ||| 1030
+! und deshalb halte ich den Vorschlag ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! und deshalb halte ich den ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! und deshalb halte ich ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! und deshalb halte ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! und deshalb ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! und ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! ||| ! ||| 0.946602 0.883601 ||| ||| 1030
diff --git a/regression-testing/tests/score.phrase-based-with-alignment-inv/args.txt b/regression-testing/tests/score.phrase-based-with-alignment-inv/args.txt
new file mode 100644
index 000000000..1897ceccf
--- /dev/null
+++ b/regression-testing/tests/score.phrase-based-with-alignment-inv/args.txt
@@ -0,0 +1 @@
+$data_dir/models/score.phrase-based/extract.inv.sorted $data_dir/models/score.phrase-based/lex.e2f $outPath --Inverse --GoodTuring --WordAlignment
diff --git a/regression-testing/tests/score.phrase-based-with-alignment-inv/run-test-scorer.perl b/regression-testing/tests/score.phrase-based-with-alignment-inv/run-test-scorer.perl
new file mode 100755
index 000000000..bdf1fa620
--- /dev/null
+++ b/regression-testing/tests/score.phrase-based-with-alignment-inv/run-test-scorer.perl
@@ -0,0 +1,65 @@
+#!/usr/bin/perl -w
+
+use strict;
+use FindBin qw($Bin);
+use MosesRegressionTesting;
+use Getopt::Long;
+use File::Temp qw ( tempfile );
+use POSIX qw ( strftime );
+
+my $scoreExe;
+my $test_name;
+my $data_dir;
+my $test_dir;
+my $results_dir;
+
+GetOptions("scorer=s" => \$scoreExe,
+ "test=s" => \$test_name,
+ "data-dir=s"=> \$data_dir,
+ "test-dir=s"=> \$test_dir,
+ "results-dir=s"=> \$results_dir,
+ ) or exit 1;
+
+# output dir
+unless (defined $results_dir)
+{
+ my $ts = get_timestamp($scoreExe);
+ $results_dir = "$data_dir/results/$test_name/$ts";
+}
+
+`mkdir -p $results_dir`;
+
+my $outPath = "$results_dir/phrase-table.4.half.e2f";
+
+my $cmdMain = "$scoreExe $test_dir/$test_name/extract.inv.sorted $test_dir/$test_name/lex.e2f $outPath --Inverse --GoodTuring \n";
+`$cmdMain`;
+
+my $truthPath = "$test_dir/$test_name/truth/results.txt";
+my $cmd = "diff $outPath $truthPath | wc -l";
+
+my $numDiff = `$cmd`;
+
+if ($numDiff == 0)
+{
+ # print STDERR "FAILURE. Ran $cmdMain\n";
+ print STDERR "SUCCESS\n";
+ exit 0;
+}
+else
+{
+ print STDERR "FAILURE. Ran $cmdMain\n";
+ exit 1;
+}
+
+sub get_timestamp {
+ my ($file) = @_;
+ my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
+ $atime,$mtime,$ctime,$blksize,$blocks)
+ = stat($file);
+ my $timestamp = strftime("%Y%m%d-%H%M%S", gmtime $mtime);
+ my $timestamp2 = strftime("%Y%m%d-%H%M%S", gmtime);
+ my $username = `whoami`; chomp $username;
+ return "moses.v$timestamp-$username-at-$timestamp2";
+}
+
+
diff --git a/regression-testing/tests/score.phrase-based-with-alignment-inv/truth/results.txt b/regression-testing/tests/score.phrase-based-with-alignment-inv/truth/results.txt
new file mode 100644
index 000000000..55abe2e88
--- /dev/null
+++ b/regression-testing/tests/score.phrase-based-with-alignment-inv/truth/results.txt
@@ -0,0 +1,913 @@
+! ! ! ) bezeichnet wird , ||| ! ! ! ) , ||| 0.0370072 0.689873 ||| ||| 1
+! ! ! ) bezeichnet wird ||| ! ! ! ) ||| 0.00925181 0.689873 ||| ||| 4
+! ! ! ) bezeichnet ||| ! ! ! ) ||| 0.00925181 0.689873 ||| ||| 4
+! ! ! ) ||| ! ! ! ) ||| 0.330745 0.689873 ||| ||| 4
+! ! ! ||| ! ! ! ||| 1 0.689873 ||| ||| 3
+! ! ) bezeichnet wird , hat ||| ! ! ) , has ||| 0.0370072 0.780751 ||| ||| 1
+! ! ) bezeichnet wird , ||| ! ! ) , ||| 0.0370072 0.780751 ||| ||| 1
+! ! ) bezeichnet wird ||| ! ! ) ||| 0.00925181 0.780751 ||| ||| 4
+! ! ) bezeichnet ||| ! ! ) ||| 0.00925181 0.780751 ||| ||| 4
+! ! ) ||| ! ! ) ||| 0.330745 0.780751 ||| ||| 4
+! ! ||| ! ! ||| 0.875 0.780751 ||| ||| 8
+erforderlich ! ||| ! ! ||| 0.0046259 0.883601 ||| ||| 8
+! ) Herr Kollege Ferber , ||| ! " ) Mr Ferber , ||| 0.0370072 0.883601 ||| ||| 1
+! ) Herr Kollege Ferber ||| ! " ) Mr Ferber ||| 0.0370072 0.883601 ||| ||| 1
+! ) Herr ||| ! " ) Mr ||| 0.0370072 0.883601 ||| ||| 1
+! ) ||| ! " ) ||| 0.0370072 0.883601 ||| ||| 1
+! " , schrie der Hirtenjunge ||| ! " , cried the shepherd boy ||| 0.0370072 0.582214 ||| ||| 1
+! " , schrie der ||| ! " , cried the ||| 0.0370072 0.582214 ||| ||| 1
+! " , schrie ||| ! " , cried ||| 0.0370072 0.582214 ||| ||| 1
+! " , ||| ! " , ||| 0.661491 0.582214 ||| ||| 2
+! " ||| ! " . ||| 0.0370072 0.292946 ||| ||| 1
+! " , sagte ich zu ihr ||| ! " I said to her ||| 0.0370072 0.582214 ||| ||| 1
+! " , sagte ich zu ||| ! " I said to ||| 0.0370072 0.582214 ||| ||| 1
+! " , sagte ich ||| ! " I said ||| 0.0370072 0.582214 ||| ||| 1
+! " , doch der ||| ! " but a ||| 0.0185036 0.582214 ||| ||| 2
+vermag ! " , doch der ||| ! " but a ||| 0.0185036 0.582214 ||| ||| 2
+! " , doch ||| ! " but ||| 0.0185036 0.582214 ||| ||| 2
+vermag ! " , doch ||| ! " but ||| 0.0185036 0.582214 ||| ||| 2
+! " geht nicht mehr weiter ||| ! " can no longer continue ||| 0.0370072 0.582214 ||| ||| 1
+! " geht nicht mehr ||| ! " can no longer ||| 0.0370072 0.582214 ||| ||| 1
+! " geht nicht ||| ! " can no ||| 0.0370072 0.582214 ||| ||| 1
+! " geht ||| ! " can ||| 0.0370072 0.582214 ||| ||| 1
+! , war ebenfalls kein Beitrag zur ||| ! " did little to ||| 0.0370072 0.883601 ||| ||| 1
+! , war ebenfalls kein Beitrag ||| ! " did little ||| 0.00616787 0.883601 ||| ||| 6
+! , war ebenfalls kein ||| ! " did little ||| 0.00616787 0.883601 ||| ||| 6
+! , war ebenfalls ||| ! " did little ||| 0.00616787 0.883601 ||| ||| 6
+! , war ||| ! " did little ||| 0.00616787 0.883601 ||| ||| 6
+! , ||| ! " did little ||| 0.00616787 0.883601 ||| ||| 6
+! ||| ! " did little ||| 0.00616787 0.883601 ||| ||| 6
+! , war ebenfalls kein Beitrag ||| ! " did ||| 0.00616787 0.883601 ||| ||| 6
+! , war ebenfalls kein ||| ! " did ||| 0.00616787 0.883601 ||| ||| 6
+! , war ebenfalls ||| ! " did ||| 0.00616787 0.883601 ||| ||| 6
+! , war ||| ! " did ||| 0.00616787 0.883601 ||| ||| 6
+! , ||| ! " did ||| 0.00616787 0.883601 ||| ||| 6
+! ||| ! " did ||| 0.00616787 0.883601 ||| ||| 6
+! " , antwortete der Präsident . ||| ! " replied the President . ||| 0.0370072 0.582214 ||| ||| 1
+! " , antwortete der Präsident ||| ! " replied the President ||| 0.0370072 0.582214 ||| ||| 1
+! " , antwortete der ||| ! " replied the ||| 0.0370072 0.582214 ||| ||| 1
+! " , antwortete ||| ! " replied ||| 0.0370072 0.582214 ||| ||| 1
+auf sein ||| ! " summoned all ||| 0.0185036 1 ||| ||| 2
+sein ||| ! " summoned all ||| 0.0185036 1 ||| ||| 2
+auf sein ||| ! " summoned ||| 0.0185036 1 ||| ||| 2
+sein ||| ! " summoned ||| 0.0185036 1 ||| ||| 2
+! " , ||| ! " ||| 0.0625 0.582214 ||| ||| 48
+! " ? ||| ! " ||| 0.000770984 0.582214 ||| ||| 48
+! " ||| ! " ||| 0.604167 0.582214 ||| ||| 48
+! , war ebenfalls kein Beitrag ||| ! " ||| 0.000770984 0.883601 ||| ||| 48
+! , war ebenfalls kein ||| ! " ||| 0.000770984 0.883601 ||| ||| 48
+! , war ebenfalls ||| ! " ||| 0.000770984 0.883601 ||| ||| 48
+! , war ||| ! " ||| 0.000770984 0.883601 ||| ||| 48
+! , ||| ! " ||| 0.000770984 0.883601 ||| ||| 48
+! ||| ! " ||| 0.0833333 0.883601 ||| ||| 48
+Staatsflagge " ||| ! " ||| 0.000770984 0.65891 ||| ||| 48
+auf sein ||| ! " ||| 0.000770984 1 ||| ||| 48
+sein ||| ! " ||| 0.000770984 1 ||| ||| 48
+serviert ! " ||| ! " ||| 0.000770984 0.582214 ||| ||| 48
+vermag ! " , ||| ! " ||| 0.000770984 0.582214 ||| ||| 48
+vermag ! " ||| ! " ||| 0.000770984 0.582214 ||| ||| 48
+, ||| ! ' ' I know , ||| 0.0370072 1 ||| ||| 1
+! " ||| ! ' ' really ? ' ||| 0.0370072 0.0911499 ||| ||| 1
+! " ) Heute ||| ! ' ) We ||| 0.0370072 0.272342 ||| ||| 1
+! " ) sagte er , die ||| ! ' ) said that the ||| 0.0370072 0.272342 ||| ||| 1
+! " ) sagte er , ||| ! ' ) said that ||| 0.0370072 0.272342 ||| ||| 1
+! " ) sagte er ||| ! ' ) said ||| 0.0185036 0.272342 ||| ||| 2
+! " ) sagte ||| ! ' ) said ||| 0.0185036 0.272342 ||| ||| 2
+! " ) ||| ! ' ) ||| 1 0.272342 ||| ||| 8
+! " hat das Parlament bereits ||| ! ' , Parliament has already ||| 0.0370072 0.272342 ||| ||| 1
+! " hat das Parlament ||| ! ' , Parliament ||| 0.0370072 0.272342 ||| ||| 1
+! " gehört , und denen ||| ! ' , and those ||| 0.0370072 0.272342 ||| ||| 1
+! " oder zu Kollegin Harms ||| ! ' , and to Mrs Harms ||| 0.0370072 0.272342 ||| ||| 1
+! " oder zu Kollegin ||| ! ' , and to Mrs ||| 0.0370072 0.272342 ||| ||| 1
+! " oder zu ||| ! ' , and to ||| 0.0370072 0.272342 ||| ||| 1
+! " gehört , und ||| ! ' , and ||| 0.0123357 0.272342 ||| ||| 3
+! " oder ||| ! ' , and ||| 0.0123357 0.272342 ||| ||| 3
+! ' ||| ! ' , and ||| 0.0123357 0.453737 ||| ||| 3
+! " , sondern damit es ||| ! ' , but so that they ||| 0.0370072 0.272342 ||| ||| 1
+! " , sondern damit ||| ! ' , but so that ||| 0.0370072 0.272342 ||| ||| 1
+aber diese 2,7 % ||| ! ' , but that 2.7 % ||| 0.0370072 1 ||| ||| 1
+aber diese 2,7 ||| ! ' , but that 2.7 ||| 0.0370072 1 ||| ||| 1
+aber diese ||| ! ' , but that ||| 0.0370072 1 ||| ||| 1
+! ' . aber dort gibt ||| ! ' , but there are widely ||| 0.0370072 0.883601 ||| ||| 1
+! ' . aber dort gibt ||| ! ' , but there are ||| 0.0370072 0.883601 ||| ||| 1
+! ' . aber dort ||| ! ' , but there ||| 0.0370072 0.883601 ||| ||| 1
+! " , sondern ||| ! ' , but ||| 0.0123357 0.272342 ||| ||| 3
+! ' . aber ||| ! ' , but ||| 0.0123357 0.883601 ||| ||| 3
+aber ||| ! ' , but ||| 0.0123357 1 ||| ||| 3
+, ||| ! ' , that ||| 0.00925181 1 ||| ||| 4
+Ziel kommen , ||| ! ' , that ||| 0.00925181 1 ||| ||| 4
+kommen , ||| ! ' , that ||| 0.00925181 1 ||| ||| 4
+zum Ziel kommen , ||| ! ' , that ||| 0.00925181 1 ||| ||| 4
+! " , der ||| ! ' , which ||| 0.0370072 0.272342 ||| ||| 1
+! " , ||| ! ' , ||| 0.0944987 0.272342 ||| ||| 14
+! " gehört , ||| ! ' , ||| 0.00264337 0.272342 ||| ||| 14
+! " hat ||| ! ' , ||| 0.00264337 0.272342 ||| ||| 14
+! " ||| ! ' , ||| 0.00264337 0.272342 ||| ||| 14
+! ' , womit ||| ! ' , ||| 0.00264337 0.883601 ||| ||| 14
+! ' , ||| ! ' , ||| 0.00264337 0.883601 ||| ||| 14
+! ' . ||| ! ' , ||| 0.00264337 0.883601 ||| ||| 14
+! ' Stand , ||| ! ' , ||| 0.00264337 0.883601 ||| ||| 14
+! ' ||| ! ' , ||| 0.00264337 0.453737 ||| ||| 14
+, ||| ! ' , ||| 0.00264337 1 ||| ||| 14
+Ziel kommen , ||| ! ' , ||| 0.00264337 1 ||| ||| 14
+kommen , ||| ! ' , ||| 0.00264337 1 ||| ||| 14
+zum Ziel kommen , ||| ! ' , ||| 0.00264337 1 ||| ||| 14
+! " - und dies übrigens ||| ! ' - and what is more ||| 0.0370072 0.272342 ||| ||| 1
+! " - und dies ||| ! ' - and what is ||| 0.0370072 0.272342 ||| ||| 1
+! " - und ||| ! ' - and ||| 0.0370072 0.272342 ||| ||| 1
+! " - ||| ! ' - ||| 0.0370072 0.272342 ||| ||| 1
+! “ ||| ! ' . nevertheless , ||| 0.0370072 0.883601 ||| ||| 1
+! “ ||| ! ' . nevertheless ||| 0.0370072 0.883601 ||| ||| 1
+! " . ||| ! ' . ||| 0.363636 0.272342 ||| ||| 11
+! " ||| ! ' . ||| 0.363636 0.272342 ||| ||| 11
+! ' ||| ! ' . ||| 0.00336429 0.883601 ||| ||| 11
+! ||| ! ' . ||| 0.00336429 0.883601 ||| ||| 11
+! “ ||| ! ' . ||| 0.00336429 0.883601 ||| ||| 11
+! " . und Spinelli , der ||| ! ' ; Spinelli , who ||| 0.0370072 0.272342 ||| ||| 1
+! " . und Spinelli ||| ! ' ; Spinelli ||| 0.0370072 0.272342 ||| ||| 1
+! " . und ||| ! ' ; ||| 0.0370072 0.272342 ||| ||| 1
+! " ? ||| ! ' ? ||| 0.0370072 0.272342 ||| ||| 1
+! " , gab ich zur Antwort ||| ! ' I replied ||| 0.0370072 0.272342 ||| ||| 1
+Parlaments ||| ! ' ] ||| 0.0370072 1 ||| ||| 1
+! " und Nizza II ? ||| ! ' and Nice II ? ||| 0.0370072 0.272342 ||| ||| 1
+! " und Nizza II ||| ! ' and Nice II ||| 0.0370072 0.272342 ||| ||| 1
+! " und Nizza ||| ! ' and Nice ||| 0.0370072 0.272342 ||| ||| 1
+! " und schlagen uns an die ||| ! ' and beat our ||| 0.0123357 0.272342 ||| ||| 3
+! " und schlagen uns an ||| ! ' and beat our ||| 0.0123357 0.272342 ||| ||| 3
+! " und schlagen uns ||| ! ' and beat our ||| 0.0123357 0.272342 ||| ||| 3
+! " und schlagen ||| ! ' and beat ||| 0.0370072 0.272342 ||| ||| 1
+! ' rufen , ||| ! ' and then murder ||| 0.0370072 0.883601 ||| ||| 1
+! ' rufen , ||| ! ' and then ||| 0.0370072 0.883601 ||| ||| 1
+! " , und fuhr fort , ||| ! ' and ||| 0.00528675 0.272342 ||| ||| 7
+! " , und fuhr fort ||| ! ' and ||| 0.00528675 0.272342 ||| ||| 7
+! " , und fuhr ||| ! ' and ||| 0.00528675 0.272342 ||| ||| 7
+! " , und ||| ! ' and ||| 0.00528675 0.272342 ||| ||| 7
+! " und ||| ! ' and ||| 0.188997 0.272342 ||| ||| 7
+! ' rufen , ||| ! ' and ||| 0.00528675 0.883601 ||| ||| 7
+" ! aber ||| ! ' but ||| 0.0370072 0.272342 ||| ||| 1
+! " ) Sie haben vollkommen recht ||| ! ' exactly ||| 0.0185036 0.272342 ||| ||| 2
+! " ) Sie haben vollkommen ||| ! ' exactly ||| 0.0185036 0.272342 ||| ||| 2
+! " rufe vonseiten der IND ||| ! ' from members of the IND ||| 0.0370072 0.272342 ||| ||| 1
+! " rufe vonseiten der ||| ! ' from members of the ||| 0.0370072 0.272342 ||| ||| 1
+! " rufe vonseiten ||| ! ' from members of ||| 0.0370072 0.272342 ||| ||| 1
+! " rufe vonseiten ||| ! ' from members ||| 0.0370072 0.272342 ||| ||| 1
+! " rufe vonseiten ||| ! ' from ||| 0.0370072 0.272342 ||| ||| 1
+! “ Ist sich der amtierende Ratspräsident ||| ! ' is the Presidency-in-Office ||| 0.0370072 0.883601 ||| ||| 1
+! ' , diese Aufforderung ||| ! ' is the message ||| 0.0370072 0.883601 ||| ||| 1
+! ' , diese ||| ! ' is the ||| 0.0185036 0.883601 ||| ||| 2
+! “ Ist sich der ||| ! ' is the ||| 0.0185036 0.883601 ||| ||| 2
+! ' , ||| ! ' is ||| 0.0123357 0.883601 ||| ||| 3
+! ' ||| ! ' is ||| 0.0123357 0.883601 ||| ||| 3
+! “ Ist sich ||| ! ' is ||| 0.0123357 0.883601 ||| ||| 3
+beglückwünschen Sie dazu ! " oder ||| ! ' or alternatively ||| 0.0185036 0.272342 ||| ||| 2
+wir beglückwünschen Sie dazu ! " oder ||| ! ' or alternatively ||| 0.0185036 0.272342 ||| ||| 2
+! " oder ||| ! ' or ||| 0.0123357 0.272342 ||| ||| 3
+Sie dazu ! " oder ||| ! ' or ||| 0.0123357 0.272342 ||| ||| 3
+dazu ! " oder ||| ! ' or ||| 0.0123357 0.272342 ||| ||| 3
+! " rufen die Föderalisten , und ||| ! ' say the federalists , and ||| 0.0370072 0.272342 ||| ||| 1
+! " rufen die Föderalisten , ||| ! ' say the federalists , ||| 0.0370072 0.272342 ||| ||| 1
+! " rufen die Föderalisten ||| ! ' say the federalists ||| 0.0370072 0.272342 ||| ||| 1
+! " rufen die ||| ! ' say the ||| 0.0370072 0.272342 ||| ||| 1
+! " rufen ||| ! ' say ||| 0.0370072 0.272342 ||| ||| 1
+" , schrie sie , " nicht ||| ! ' she shrieked , ' not ||| 0.0370072 0.0949985 ||| ||| 1
+" , schrie sie , " ||| ! ' she shrieked , ' ||| 0.0370072 0.0949985 ||| ||| 1
+" , schrie sie , ||| ! ' she shrieked , ||| 0.0370072 0.308218 ||| ||| 1
+" , schrie sie ||| ! ' she shrieked ||| 0.0370072 0.308218 ||| ||| 1
+" , schrie sie ||| ! ' she ||| 0.0370072 0.308218 ||| ||| 1
+! " zu allen Formen des Protektionismus ||| ! ' to all forms of protectionism ||| 0.0370072 0.272342 ||| ||| 1
+! " zu allen Formen des ||| ! ' to all forms of ||| 0.0370072 0.272342 ||| ||| 1
+! " zu allen Formen ||| ! ' to all forms ||| 0.0370072 0.272342 ||| ||| 1
+! " zu allen ||| ! ' to all ||| 0.0370072 0.272342 ||| ||| 1
+! " zur Offenheit und zum Wettbewerb ||| ! ' to openness and competition ||| 0.0370072 0.272342 ||| ||| 1
+! " zur Offenheit und zum ||| ! ' to openness and ||| 0.0185036 0.272342 ||| ||| 2
+! " zur Offenheit und ||| ! ' to openness and ||| 0.0185036 0.272342 ||| ||| 2
+! " zur Offenheit ||| ! ' to openness ||| 0.0370072 0.272342 ||| ||| 1
+! " zu ||| ! ' to ||| 0.0185036 0.272342 ||| ||| 2
+! " zur ||| ! ' to ||| 0.0185036 0.272342 ||| ||| 2
+" war auch der Ruf der Menschen ||| ! ' was what the communities ||| 0.0370072 0.308218 ||| ||| 1
+" war auch der Ruf der ||| ! ' was what the ||| 0.0370072 0.308218 ||| ||| 1
+" war auch der Ruf ||| ! ' was what ||| 0.0185036 0.308218 ||| ||| 2
+" war auch der ||| ! ' was what ||| 0.0185036 0.308218 ||| ||| 2
+" war auch ||| ! ' was ||| 0.0185036 0.308218 ||| ||| 2
+" war ||| ! ' was ||| 0.0185036 0.308218 ||| ||| 2
+! " ( Europa war gut zu ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " ( Europa war gut ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " ( Europa war ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " ( Europa ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " ( ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " ) Sie haben ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " ) Sie ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " ) ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " , ||| ! ' ||| 0.0137615 0.272342 ||| ||| 218
+! " . ||| ! ' ||| 0.0412844 0.272342 ||| ||| 218
+! " begrüßt ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " gehört ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " rufe ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " steht . ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " steht ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " vereinen ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+! " ||| ! ' ||| 0.463303 0.272342 ||| ||| 218
+! ' , ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+! ' - wir lassen uns ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+! ' - wir lassen ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+! ' - wir ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+! ' - ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+! ' . ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+! ' Stand ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+! ' rufen ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+! ' ||| ! ' ||| 0.114679 0.883601 ||| ||| 218
+! ||| ! ' ||| 0.0825688 0.883601 ||| ||| 218
+! “ ||| ! ' ||| 0.0137615 0.883601 ||| ||| 218
+" ! ||| ! ' ||| 0.0183486 0.272342 ||| ||| 218
+" , schrie ||| ! ' ||| 0.000169758 0.308218 ||| ||| 218
+" . ||| ! ' ||| 0.000169758 0.308218 ||| ||| 218
+" ||| ! ' ||| 0.000169758 0.308218 ||| ||| 218
+' ||| ! ' ||| 0.000169758 1 ||| ||| 218
+, Rassismus ' ||| ! ' ||| 0.000169758 1 ||| ||| 218
+. " ||| ! ' ||| 0.0229358 0.308218 ||| ||| 218
+. ' ||| ! ' ||| 0.000169758 1 ||| ||| 218
+. ||| ! ' ||| 0.00606872 1 ||| ||| 218
+: " ||| ! ' ||| 0.000169758 0.308218 ||| ||| 218
+? ' ||| ! ' ||| 0.000169758 1 ||| ||| 218
+Ihr müßt ||| ! ' ||| 0.000169758 1 ||| ||| 218
+Parlaments ||| ! ' ||| 0.000169758 1 ||| ||| 218
+Rassismus ' ||| ! ' ||| 0.000169758 1 ||| ||| 218
+Sie dazu ! " ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+Sonnenergie ! ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+aufgreifen . ||| ! ' ||| 0.000169758 1 ||| ||| 218
+befassen ! ' ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+das tun ! " ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+dazu ! " ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+den ||| ! ' ||| 0.000169758 1 ||| ||| 218
+erschaffen ! ' ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+gehabt ! ' ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+geschehen ! " ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+müßt ||| ! ' ||| 0.000169758 1 ||| ||| 218
+stellen ! ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+tun ! " ||| ! ' ||| 0.000169758 0.272342 ||| ||| 218
+verabschieden ! ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+zu erschaffen ! ' ||| ! ' ||| 0.000169758 0.883601 ||| ||| 218
+! ) bezeichnet wird , hat ||| ! ) , has ||| 0.0370072 0.883601 ||| ||| 1
+! ) oder ihr Egonet ||| ! ) , or rather their egonet ||| 0.0370072 0.883601 ||| ||| 1
+! ) oder ||| ! ) , or ||| 0.0370072 0.883601 ||| ||| 1
+! ) , Forschung , Wettbewerbsfähigkeit und ||| ! ) , research , competitiveness and ||| 0.0370072 0.883601 ||| ||| 1
+! ) , Forschung , Wettbewerbsfähigkeit ||| ! ) , research , competitiveness ||| 0.0370072 0.883601 ||| ||| 1
+! ) , Forschung , ||| ! ) , research , ||| 0.0370072 0.883601 ||| ||| 1
+! ) , Forschung ||| ! ) , research ||| 0.0370072 0.883601 ||| ||| 1
+! ) , mit der Rodung von ||| ! ) , the grubbing-up of ||| 0.0370072 0.883601 ||| ||| 1
+! ) , mit der Rodung ||| ! ) , the grubbing-up ||| 0.0370072 0.883601 ||| ||| 1
+! ) , mit der ||| ! ) , the ||| 0.0370072 0.883601 ||| ||| 1
+! - , ist zu ersehen ||| ! ) , we see ||| 0.0370072 0.883601 ||| ||| 1
+! - , ist zu ||| ! ) , we ||| 0.0370072 0.883601 ||| ||| 1
+! ) , während über 100 ||| ! ) , while over 100 ||| 0.0185036 0.883601 ||| ||| 2
+aus ! ) , während über 100 ||| ! ) , while over 100 ||| 0.0185036 0.883601 ||| ||| 2
+! ) , während über ||| ! ) , while over ||| 0.0123357 0.883601 ||| ||| 3
+aus ! ) , während über ||| ! ) , while over ||| 0.0123357 0.883601 ||| ||| 3
+leer aus ! ) , während über ||| ! ) , while over ||| 0.0123357 0.883601 ||| ||| 3
+! ) , während ||| ! ) , while ||| 0.00925181 0.883601 ||| ||| 4
+aus ! ) , während ||| ! ) , while ||| 0.00925181 0.883601 ||| ||| 4
+leer aus ! ) , während ||| ! ) , while ||| 0.00925181 0.883601 ||| ||| 4
+völlig leer aus ! ) , während ||| ! ) , while ||| 0.00925181 0.883601 ||| ||| 4
+! ) , mit ||| ! ) , ||| 0.00284671 0.883601 ||| ||| 13
+! ) , ||| ! ) , ||| 0.307692 0.883601 ||| ||| 13
+! ) bezeichnet wird , ||| ! ) , ||| 0.00284671 0.883601 ||| ||| 13
+! ) ||| ! ) , ||| 0.00284671 0.883601 ||| ||| 13
+! - , ist ||| ! ) , ||| 0.00284671 0.883601 ||| ||| 13
+! - , ||| ! ) , ||| 0.00284671 0.883601 ||| ||| 13
+aus ! ) , ||| ! ) , ||| 0.00284671 0.883601 ||| ||| 13
+ging völlig leer aus ! ) , ||| ! ) , ||| 0.00284671 0.883601 ||| ||| 13
+leer aus ! ) , ||| ! ) , ||| 0.00284671 0.883601 ||| ||| 13
+völlig leer aus ! ) , ||| ! ) , ||| 0.00284671 0.883601 ||| ||| 13
+durch ||| ! ) - in fact neither is ||| 0.0370072 1 ||| ||| 1
+durch ||| ! ) - in fact neither ||| 0.0370072 1 ||| ||| 1
+durch ||| ! ) - in fact ||| 0.0370072 1 ||| ||| 1
+durch ||| ! ) - in ||| 0.0370072 1 ||| ||| 1
+! ) . ||| ! ) . ||| 0.661491 0.883601 ||| ||| 2
+Berichtigungshaushalts im laufenden ||| ! ) amending budget in the current ||| 0.0370072 1 ||| ||| 1
+Berichtigungshaushalts im ||| ! ) amending budget in the ||| 0.0370072 1 ||| ||| 1
+Berichtigungshaushalts ||| ! ) amending budget ||| 0.0370072 1 ||| ||| 1
+! ) , und schließlich ||| ! ) and , finally , ||| 0.0370072 0.883601 ||| ||| 1
+! ) , und ||| ! ) and , ||| 0.0370072 0.883601 ||| ||| 1
+! ) und die Schaffung nationaler Finanzmärkte ||| ! ) and create national financial markets ||| 0.0370072 0.883601 ||| ||| 1
+! ) und die Schaffung nationaler ||| ! ) and create national ||| 0.0370072 0.883601 ||| ||| 1
+! ) und die Schaffung ||| ! ) and create ||| 0.0370072 0.883601 ||| ||| 1
+! ) und häufig unverständliche ||| ! ) and often unreadable ||| 0.0185036 0.883601 ||| ||| 2
+ankündigen ! ) und häufig unverständliche ||| ! ) and often unreadable ||| 0.0185036 0.883601 ||| ||| 2
+! ) und häufig unverständliche ||| ! ) and often unreadable – ||| 0.0185036 0.883601 ||| ||| 2
+ankündigen ! ) und häufig unverständliche ||| ! ) and often unreadable – ||| 0.0185036 0.883601 ||| ||| 2
+! ) und häufig ||| ! ) and often ||| 0.0185036 0.883601 ||| ||| 2
+ankündigen ! ) und häufig ||| ! ) and often ||| 0.0185036 0.883601 ||| ||| 2
+! ) und die ||| ! ) and ||| 0.00925181 0.883601 ||| ||| 4
+! ) und ||| ! ) and ||| 0.330745 0.883601 ||| ||| 4
+ankündigen ! ) und ||| ! ) and ||| 0.00925181 0.883601 ||| ||| 4
+! ) für die Umsetzung der ||| ! ) before they apply the ||| 0.0370072 0.883601 ||| ||| 1
+! ) für die Umsetzung ||| ! ) before they apply ||| 0.0370072 0.883601 ||| ||| 1
+! ) für die ||| ! ) before they ||| 0.0370072 0.883601 ||| ||| 1
+! ) für ||| ! ) before ||| 0.0185036 0.883601 ||| ||| 2
+! ) ||| ! ) before ||| 0.0185036 0.883601 ||| ||| 2
+! ||| ! ) can ||| 0.0370072 0.442597 ||| ||| 1
+! ) dürfen nicht verwendet ( missbraucht ||| ! ) cannot be used ( misused ||| 0.0370072 0.883601 ||| ||| 1
+! ) dürfen nicht verwendet ( ||| ! ) cannot be used ( ||| 0.0370072 0.883601 ||| ||| 1
+! ) dürfen nicht verwendet ||| ! ) cannot be used ||| 0.0370072 0.883601 ||| ||| 1
+! ) dürfen nicht ||| ! ) cannot be ||| 0.0370072 0.883601 ||| ||| 1
+! ) großen Not ||| ! ) high level of need ||| 0.0370072 0.883601 ||| ||| 1
+! ) großen ||| ! ) high ||| 0.0370072 0.883601 ||| ||| 1
+) fiktiven Holocaust an den Juden im ||| ! ) holocaust of the Jews ||| 0.0185036 1 ||| ||| 2
+) fiktiven Holocaust an den Juden ||| ! ) holocaust of the Jews ||| 0.0185036 1 ||| ||| 2
+) fiktiven Holocaust an den ||| ! ) holocaust of the ||| 0.0370072 1 ||| ||| 1
+) fiktiven Holocaust an ||| ! ) holocaust of ||| 0.0370072 1 ||| ||| 1
+) fiktiven Holocaust ||| ! ) holocaust ||| 0.0370072 1 ||| ||| 1
+! ) für den Fall der ||| ! ) in the event that we ||| 0.0370072 0.883601 ||| ||| 1
+! ) für den Fall ||| ! ) in the event that ||| 0.0370072 0.883601 ||| ||| 1
+! ) für den Fall ||| ! ) in the event ||| 0.0370072 0.883601 ||| ||| 1
+! ) für den ||| ! ) in the ||| 0.0370072 0.883601 ||| ||| 1
+! ) für ||| ! ) in ||| 0.0370072 0.883601 ||| ||| 1
+! ) allein für ||| ! ) just for ||| 0.0370072 0.883601 ||| ||| 1
+! ) allein ||| ! ) just ||| 0.0370072 0.883601 ||| ||| 1
+! ) Marktwirtschaft , die von einem ||| ! ) market economy ||| 0.00740145 0.883601 ||| ||| 5
+! ) Marktwirtschaft , die von ||| ! ) market economy ||| 0.00740145 0.883601 ||| ||| 5
+! ) Marktwirtschaft , die ||| ! ) market economy ||| 0.00740145 0.883601 ||| ||| 5
+! ) Marktwirtschaft , ||| ! ) market economy ||| 0.00740145 0.883601 ||| ||| 5
+! ) Marktwirtschaft ||| ! ) market economy ||| 0.00740145 0.883601 ||| ||| 5
+! - Kernkraftwerke errichtet werden ||| ! ) nuclear power stations built ||| 0.00925181 0.883601 ||| ||| 4
+! - Kernkraftwerke errichtet ||| ! ) nuclear power stations built ||| 0.00925181 0.883601 ||| ||| 4
+sichere ! - Kernkraftwerke errichtet werden ||| ! ) nuclear power stations built ||| 0.00925181 0.883601 ||| ||| 4
+sichere ! - Kernkraftwerke errichtet ||| ! ) nuclear power stations built ||| 0.00925181 0.883601 ||| ||| 4
+! - Kernkraftwerke ||| ! ) nuclear power stations ||| 0.0185036 0.883601 ||| ||| 2
+sichere ! - Kernkraftwerke ||| ! ) nuclear power stations ||| 0.0185036 0.883601 ||| ||| 2
+! ) über die Änderung der ||| ! ) on the amendment of ||| 0.0370072 0.883601 ||| ||| 1
+! ) über die Änderung ||| ! ) on the amendment ||| 0.0370072 0.883601 ||| ||| 1
+! ) über die ||| ! ) on the ||| 0.0370072 0.883601 ||| ||| 1
+! ) über ||| ! ) on ||| 0.0370072 0.883601 ||| ||| 1
+klug . ||| ! ) to be wise enough ||| 0.0370072 1 ||| ||| 1
+. ||| ! ) to be ||| 0.0370072 1 ||| ||| 1
+. ||| ! ) to ||| 0.0370072 1 ||| ||| 1
+! ) , die die Arbeitslosenunterstützung ||| ! ) which unemployment benefit ||| 0.0370072 0.883601 ||| ||| 1
+! ! ! ) ||| ! ) ||| 0.000521229 0.689873 ||| ||| 71
+! ) , geht . ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+! ) , geht ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+! ) , ||| ! ) ||| 0.0186335 0.883601 ||| ||| 71
+! ) . ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+! ) bezeichnet wird ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+! ) bezeichnet ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+! ) für ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+! ) vertritt ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+! ) ||| ! ) ||| 0.633803 0.883601 ||| ||| 71
+! - ||| ! ) ||| 0.0186335 0.883601 ||| ||| 71
+! ||| ! ) ||| 0.000521229 0.442597 ||| ||| 71
+) fiktiven ||| ! ) ||| 0.000521229 1 ||| ||| 71
+) ||| ! ) ||| 0.000521229 1 ||| ||| 71
+, ging völlig leer aus ! ) ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+- ||| ! ) ||| 0.000521229 1 ||| ||| 71
+. ||| ! ) ||| 0.0186335 1 ||| ||| 71
+? ) ||| ! ) ||| 0.000521229 1 ||| ||| 71
+ankündigen ! ) ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+aus ! ) ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+ging völlig leer aus ! ) ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+leer aus ! ) ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+sichere ! - ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+völlig leer aus ! ) ||| ! ) ||| 0.000521229 0.883601 ||| ||| 71
+, er hatte überhaupt nicht zur Kenntnis ||| ! , he was entirely unaware ||| 0.0123357 1 ||| ||| 3
+, er hatte überhaupt nicht zur ||| ! , he was entirely unaware ||| 0.0123357 1 ||| ||| 3
+, er hatte überhaupt nicht ||| ! , he was entirely unaware ||| 0.0123357 1 ||| ||| 3
+, er hatte ||| ! , he was entirely ||| 0.0185036 1 ||| ||| 2
+, er hatte überhaupt ||| ! , he was entirely ||| 0.0185036 1 ||| ||| 2
+, er hatte ||| ! , he was ||| 0.0185036 1 ||| ||| 2
+, er hatte überhaupt ||| ! , he was ||| 0.0185036 1 ||| ||| 2
+, er ||| ! , he ||| 0.0370072 1 ||| ||| 1
+! , dem Gewinner des Sacharow-Preises in ||| ! , the Sakharov Prize winner in ||| 0.0370072 0.883601 ||| ||| 1
+! , dem Gewinner des Sacharow-Preises ||| ! , the Sakharov Prize winner ||| 0.0370072 0.883601 ||| ||| 1
+! , dem ||| ! , the ||| 0.0370072 0.883601 ||| ||| 1
+! , ||| ! , ||| 0.0185036 0.883601 ||| ||| 2
+, ||| ! , ||| 0.0185036 1 ||| ||| 2
+! - ' Es reicht ' ||| ! - ' Enough is enough ' ||| 0.0370072 0.883601 ||| ||| 1
+! - ' Es reicht ||| ! - ' Enough is enough ||| 0.0370072 0.883601 ||| ||| 1
+! - ' Es ||| ! - ' Enough ||| 0.0370072 0.883601 ||| ||| 1
+! - ' ||| ! - ' ||| 0.0370072 0.883601 ||| ||| 1
+! ich kann auch mitteilen ||| ! - I can also tell you ||| 0.0370072 0.442845 ||| ||| 1
+! ich kann auch ||| ! - I can also ||| 0.0370072 0.442845 ||| ||| 1
+! ich kann ||| ! - I can ||| 0.0370072 0.442845 ||| ||| 1
+ja auch tun ! warum sollte ||| ! - I do not see ||| 0.0370072 0.442845 ||| ||| 1
+ja auch tun ! warum sollte ||| ! - I do not ||| 0.0370072 0.442845 ||| ||| 1
+! - ||| ! - I do ||| 0.0185036 0.883601 ||| ||| 2
+ja auch tun ! warum ||| ! - I do ||| 0.0185036 0.442845 ||| ||| 2
+! - räume ich ein , ||| ! - I recognise ||| 0.0185036 0.883601 ||| ||| 2
+! - räume ich ein ||| ! - I recognise ||| 0.0185036 0.883601 ||| ||| 2
+! - , möchte ich meinerseits ||| ! - I would like to ||| 0.0185036 0.883601 ||| ||| 2
+! - , möchte ich ||| ! - I would like to ||| 0.0185036 0.883601 ||| ||| 2
+! - sage ich ||| ! - I would say ||| 0.0370072 0.883601 ||| ||| 1
+! - ||| ! - I ||| 0.0185036 0.883601 ||| ||| 2
+! ich ||| ! - I ||| 0.0185036 0.442845 ||| ||| 2
+! - Frau Präsidentin , ich wurde ||| ! - Madam President , I was ||| 0.0370072 0.883601 ||| ||| 1
+! - Frau Präsidentin , ich ||| ! - Madam President , I ||| 0.0370072 0.883601 ||| ||| 1
+! - Frau Präsidentin , ||| ! - Madam President , ||| 0.0370072 0.883601 ||| ||| 1
+! - Frau Präsidentin ||| ! - Madam President ||| 0.0370072 0.883601 ||| ||| 1
+! - Frau ||| ! - Madam ||| 0.0370072 0.883601 ||| ||| 1
+! ein Statut mit einem großen ||| ! - a statute with a capital ||| 0.0370072 0.442845 ||| ||| 1
+! ein Statut mit einem ||| ! - a statute with a ||| 0.0370072 0.442845 ||| ||| 1
+! ein Statut mit ||| ! - a statute with ||| 0.0370072 0.442845 ||| ||| 1
+! ein Statut ||| ! - a statute ||| 0.0370072 0.442845 ||| ||| 1
+! ein ||| ! - a ||| 0.0370072 0.442845 ||| ||| 1
+! - quer durch alle Fraktionen , ||| ! - all , ||| 0.0370072 0.883601 ||| ||| 1
+! - quer durch alle Fraktionen ||| ! - all ||| 0.0185036 0.883601 ||| ||| 2
+! - quer durch alle ||| ! - all ||| 0.0185036 0.883601 ||| ||| 2
+! - und ideologischer Manipulation ||| ! - and borders on ideological manipulation ||| 0.0370072 0.883601 ||| ||| 1
+! - und ideologischer ||| ! - and borders on ideological ||| 0.0370072 0.883601 ||| ||| 1
+! - und zum ersten ||| ! - and we saw the first ||| 0.0370072 0.883601 ||| ||| 1
+! - und zum ||| ! - and we saw the ||| 0.0370072 0.883601 ||| ||| 1
+! - und ||| ! - and we saw ||| 0.0370072 0.883601 ||| ||| 1
+! - und ||| ! - and we ||| 0.0370072 0.883601 ||| ||| 1
+! - und ||| ! - and ||| 0.661491 0.883601 ||| ||| 2
+! - um zu bekräftigen , daß ||| ! - as a reaffirmation of ||| 0.0123357 0.883601 ||| ||| 3
+! - um zu bekräftigen , ||| ! - as a reaffirmation of ||| 0.0123357 0.883601 ||| ||| 3
+! - um zu bekräftigen ||| ! - as a reaffirmation of ||| 0.0123357 0.883601 ||| ||| 3
+! - um zu bekräftigen , daß ||| ! - as a reaffirmation ||| 0.0123357 0.883601 ||| ||| 3
+! - um zu bekräftigen , ||| ! - as a reaffirmation ||| 0.0123357 0.883601 ||| ||| 3
+! - um zu bekräftigen ||| ! - as a reaffirmation ||| 0.0123357 0.883601 ||| ||| 3
+! - um zu ||| ! - as a ||| 0.0185036 0.883601 ||| ||| 2
+! - um ||| ! - as a ||| 0.0185036 0.883601 ||| ||| 2
+! aber ||| ! - but , ||| 0.0370072 0.303187 ||| ||| 1
+! - , doch die britische Regierung ||| ! - but the British Government ||| 0.0370072 0.883601 ||| ||| 1
+! - , doch die britische ||| ! - but the British ||| 0.0370072 0.883601 ||| ||| 1
+! - , doch die ||| ! - but the ||| 0.0370072 0.883601 ||| ||| 1
+! - , doch ||| ! - but ||| 0.0370072 0.883601 ||| ||| 1
+! - , von dem ||| ! - in favour ||| 0.0185036 0.883601 ||| ||| 2
+! - , von ||| ! - in favour ||| 0.0185036 0.883601 ||| ||| 2
+! - , von dem ||| ! - in ||| 0.0185036 0.883601 ||| ||| 2
+! - , von ||| ! - in ||| 0.0185036 0.883601 ||| ||| 2
+. ||| ! - is for the troops ||| 0.0370072 1 ||| ||| 1
+. ||| ! - is for the ||| 0.0370072 1 ||| ||| 1
+. ||| ! - is for ||| 0.0370072 1 ||| ||| 1
+. ||| ! - is ||| 0.0370072 1 ||| ||| 1
+! ebenso wie die anvisierte bessere ||| ! - just as planned and improved ||| 0.0370072 0.883601 ||| ||| 1
+! ebenso wie die anvisierte ||| ! - just as planned and ||| 0.0370072 0.883601 ||| ||| 1
+! ebenso wie die anvisierte ||| ! - just as planned ||| 0.0370072 0.883601 ||| ||| 1
+! ebenso wie die ||| ! - just as ||| 0.0185036 0.883601 ||| ||| 2
+! ebenso wie ||| ! - just as ||| 0.0185036 0.883601 ||| ||| 2
+! ebenso ||| ! - just ||| 0.0370072 0.883601 ||| ||| 1
+! - der operativen Ausgaben werden ||| ! - of operational expenses are managed ||| 0.0185036 0.883601 ||| ||| 2
+Herren ! - der operativen Ausgaben werden ||| ! - of operational expenses are managed ||| 0.0185036 0.883601 ||| ||| 2
+! - der operativen Ausgaben werden ||| ! - of operational expenses are ||| 0.0185036 0.883601 ||| ||| 2
+Herren ! - der operativen Ausgaben werden ||| ! - of operational expenses are ||| 0.0185036 0.883601 ||| ||| 2
+! - der operativen Ausgaben ||| ! - of operational expenses ||| 0.0123357 0.883601 ||| ||| 3
+Herren ! - der operativen Ausgaben ||| ! - of operational expenses ||| 0.0123357 0.883601 ||| ||| 3
+und Herren ! - der operativen Ausgaben ||| ! - of operational expenses ||| 0.0123357 0.883601 ||| ||| 3
+! - der operativen ||| ! - of operational ||| 0.00925181 0.883601 ||| ||| 4
+Damen und Herren ! - der operativen ||| ! - of operational ||| 0.00925181 0.883601 ||| ||| 4
+Herren ! - der operativen ||| ! - of operational ||| 0.00925181 0.883601 ||| ||| 4
+und Herren ! - der operativen ||| ! - of operational ||| 0.00925181 0.883601 ||| ||| 4
+! - Referenden und Volksinitiativen zu stellen ||| ! - of referendums and popular initiatives ||| 0.0123357 0.883601 ||| ||| 3
+! - Referenden und Volksinitiativen zu ||| ! - of referendums and popular initiatives ||| 0.0123357 0.883601 ||| ||| 3
+! - Referenden und Volksinitiativen ||| ! - of referendums and popular initiatives ||| 0.0123357 0.883601 ||| ||| 3
+! - Referenden und ||| ! - of referendums and ||| 0.0370072 0.883601 ||| ||| 1
+! - Referenden ||| ! - of referendums ||| 0.0370072 0.883601 ||| ||| 1
+! - der Energie vergeudet , bevor ||| ! - of the energy before ||| 0.0370072 0.883601 ||| ||| 1
+! - der Energie vergeudet , ||| ! - of the energy ||| 0.0123357 0.883601 ||| ||| 3
+! - der Energie vergeudet ||| ! - of the energy ||| 0.0123357 0.883601 ||| ||| 3
+! - der Energie ||| ! - of the energy ||| 0.0123357 0.883601 ||| ||| 3
+! - der ||| ! - of the ||| 0.0370072 0.883601 ||| ||| 1
+! - der ||| ! - of ||| 0.00308394 0.883601 ||| ||| 12
+! - ||| ! - of ||| 0.00308394 0.883601 ||| ||| 12
+Damen und Herren ! - der ||| ! - of ||| 0.00308394 0.883601 ||| ||| 12
+Herren ! - der ||| ! - of ||| 0.00308394 0.883601 ||| ||| 12
+Höhepunkt ist - , ||| ! - of ||| 0.00308394 1 ||| ||| 12
+Höhepunkt ist - ||| ! - of ||| 0.00308394 1 ||| ||| 12
+der Höhepunkt ist - , ||| ! - of ||| 0.00308394 1 ||| ||| 12
+der Höhepunkt ist - ||| ! - of ||| 0.00308394 1 ||| ||| 12
+ist - , ||| ! - of ||| 0.00308394 1 ||| ||| 12
+ist - ||| ! - of ||| 0.00308394 1 ||| ||| 12
+meine Damen und Herren ! - der ||| ! - of ||| 0.00308394 0.883601 ||| ||| 12
+und Herren ! - der ||| ! - of ||| 0.00308394 0.883601 ||| ||| 12
+! oder zugunsten der Rückkehr auf den ||| ! - or return to ||| 0.0370072 0.442845 ||| ||| 1
+! oder zugunsten der Rückkehr ||| ! - or return ||| 0.0370072 0.442845 ||| ||| 1
+! oder zugunsten der ||| ! - or ||| 0.0123357 0.442845 ||| ||| 3
+! oder zugunsten ||| ! - or ||| 0.0123357 0.442845 ||| ||| 3
+! oder ||| ! - or ||| 0.0123357 0.442845 ||| ||| 3
+! - energische Maßnahmen vorgeschlagen hat , ||| ! - proposing powerful measures ||| 0.0123357 0.883601 ||| ||| 3
+! - energische Maßnahmen vorgeschlagen hat ||| ! - proposing powerful measures ||| 0.0123357 0.883601 ||| ||| 3
+! - energische Maßnahmen vorgeschlagen ||| ! - proposing powerful measures ||| 0.0123357 0.883601 ||| ||| 3
+sage ich Dank ||| ! - say ' thank you ||| 0.0370072 1 ||| ||| 1
+sage ich ||| ! - say ' ||| 0.0370072 1 ||| ||| 1
+! - besagen , dass der Zugang ||| ! - stipulate that access ||| 0.0370072 0.883601 ||| ||| 1
+! - besagen , dass ||| ! - stipulate that ||| 0.0370072 0.883601 ||| ||| 1
+! - besagen ||| ! - stipulate ||| 0.0370072 0.883601 ||| ||| 1
+! - , die mit ||| ! - that have been treated with ||| 0.0123357 0.883601 ||| ||| 3
+Munde zusammen ! - , die mit ||| ! - that have been treated with ||| 0.0123357 0.883601 ||| ||| 3
+zusammen ! - , die mit ||| ! - that have been treated with ||| 0.0123357 0.883601 ||| ||| 3
+! - , die ||| ! - that have been ||| 0.00925181 0.883601 ||| ||| 4
+Munde zusammen ! - , die ||| ! - that have been ||| 0.00925181 0.883601 ||| ||| 4
+im Munde zusammen ! - , die ||| ! - that have been ||| 0.00925181 0.883601 ||| ||| 4
+zusammen ! - , die ||| ! - that have been ||| 0.00925181 0.883601 ||| ||| 4
+! - , die ||| ! - that have ||| 0.00925181 0.883601 ||| ||| 4
+Munde zusammen ! - , die ||| ! - that have ||| 0.00925181 0.883601 ||| ||| 4
+im Munde zusammen ! - , die ||| ! - that have ||| 0.00925181 0.883601 ||| ||| 4
+zusammen ! - , die ||| ! - that have ||| 0.00925181 0.883601 ||| ||| 4
+! - scheint die Europäische Union jetzt ||| ! - the EU seems ||| 0.0185036 0.883601 ||| ||| 2
+! - scheint die Europäische Union ||| ! - the EU seems ||| 0.0185036 0.883601 ||| ||| 2
+! - und begrenzt somit die ||| ! - thereby restricting the ||| 0.0370072 0.883601 ||| ||| 1
+! - rechtzeitig reagiert : sie hat ||| ! - took timely action : it ||| 0.0185036 0.883601 ||| ||| 2
+! - rechtzeitig reagiert : sie ||| ! - took timely action : it ||| 0.0185036 0.883601 ||| ||| 2
+! - rechtzeitig reagiert : ||| ! - took timely action : ||| 0.0370072 0.883601 ||| ||| 1
+! - rechtzeitig reagiert ||| ! - took timely action ||| 0.0370072 0.883601 ||| ||| 1
+! - rechtzeitig ||| ! - took timely ||| 0.0370072 0.883601 ||| ||| 1
+! - , wohingegen man ||| ! - whereas one ||| 0.0370072 0.883601 ||| ||| 1
+! - , wohingegen ||| ! - whereas ||| 0.0370072 0.883601 ||| ||| 1
+! - , die ||| ! - which ||| 0.0370072 0.883601 ||| ||| 1
+! - , während diejenigen , die ||| ! - while those responsible for the ||| 0.0370072 0.883601 ||| ||| 1
+! - , während diejenigen , ||| ! - while those responsible for ||| 0.0185036 0.883601 ||| ||| 2
+! - , während diejenigen ||| ! - while those responsible for ||| 0.0185036 0.883601 ||| ||| 2
+! - , während diejenigen , ||| ! - while those responsible ||| 0.0185036 0.883601 ||| ||| 2
+! - , während diejenigen ||| ! - while those responsible ||| 0.0185036 0.883601 ||| ||| 2
+! - , während ||| ! - while ||| 0.0370072 0.883601 ||| ||| 1
+- , so frage ||| ! - who would ||| 0.0370072 1 ||| ||| 1
+! - , die ||| ! - who ||| 0.0185036 0.883601 ||| ||| 2
+- , so ||| ! - who ||| 0.0185036 1 ||| ||| 2
+hinsichtlich des ||| ! - why the rules on the ||| 0.0370072 1 ||| ||| 1
+hinsichtlich ||| ! - why the rules on ||| 0.0370072 1 ||| ||| 1
+aufbewahren - müssen ||| ! - will have ||| 0.0370072 1 ||| ||| 1
+aufbewahren - ||| ! - will ||| 0.0370072 1 ||| ||| 1
+! ) ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+! - , die ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+! - , ||| ! - ||| 0.104478 0.883601 ||| ||| 67
+! - quer durch ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+! - quer ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+! - ||| ! - ||| 0.507463 0.883601 ||| ||| 67
+! ||| ! - ||| 0.0597015 0.442845 ||| ||| 67
+, meine Damen und Herren ! - ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+. ||| ! - ||| 0.019746 1 ||| ||| 67
+Damen und Herren ! - ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+Herren ! - ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+Höhepunkt ist - , ||| ! - ||| 0.000552347 1 ||| ||| 67
+Höhepunkt ist - ||| ! - ||| 0.000552347 1 ||| ||| 67
+Munde zusammen ! - ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+aufbewahren - ||| ! - ||| 0.000552347 1 ||| ||| 67
+bleibt - ||| ! - ||| 0.000552347 1 ||| ||| 67
+der Höhepunkt ist - , ||| ! - ||| 0.000552347 1 ||| ||| 67
+der Höhepunkt ist - ||| ! - ||| 0.000552347 1 ||| ||| 67
+im Munde zusammen ! - ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+ist - , ||| ! - ||| 0.000552347 1 ||| ||| 67
+ist - ||| ! - ||| 0.000552347 1 ||| ||| 67
+meine Damen und Herren ! - ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+und Herren ! - ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+zusammen ! - ||| ! - ||| 0.000552347 0.883601 ||| ||| 67
+! " . ||| ! . ||| 0.0185036 0.00130746 ||| ||| 2
+! ||| ! . ||| 0.0185036 0.444592 ||| ||| 2
+! ... und , hier war ich ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+! ... und , hier war ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+! ... und , hier ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+! ... und , ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+! ... und ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+! ... ||| ! ... ||| 0.176471 0.883601 ||| ||| 17
+Ausnahme machen ! ... und , hier ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+Ausnahme machen ! ... und , ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+Ausnahme machen ! ... und ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+Ausnahme machen ! ... ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+machen ! ... und , hier war ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+machen ! ... und , hier ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+machen ! ... und , ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+machen ! ... und ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+machen ! ... ||| ! ... ||| 0.0021769 0.883601 ||| ||| 17
+! " ||| ! .... ' ||| 0.0370072 0.272342 ||| ||| 1
+! ||| ! .... ||| 0.0370072 0.883601 ||| ||| 1
+! 14,5 % Feuchte ist ||| ! 14.5 % is ||| 0.0370072 0.883601 ||| ||| 1
+! 14,5 % Feuchte ||| ! 14.5 % ||| 0.0370072 0.883601 ||| ||| 1
+! 173 Auftragsmorde seit 1990 ||| ! 173 contract killings since 1990 ||| 0.0370072 0.883601 ||| ||| 1
+! 173 Auftragsmorde seit 1990 – ||| ! 173 contract killings since 1990 – ||| 0.0370072 0.883601 ||| ||| 1
+! 173 Auftragsmorde seit ||| ! 173 contract killings since ||| 0.0370072 0.883601 ||| ||| 1
+! 173 Auftragsmorde ||| ! 173 contract killings ||| 0.0370072 0.883601 ||| ||| 1
+! 173 ||| ! 173 ||| 0.0370072 0.883601 ||| ||| 1
+! 2004 ||| ! 2004 may ||| 0.0370072 0.883601 ||| ||| 1
+! 2004 ||| ! 2004 ||| 0.0370072 0.883601 ||| ||| 1
+! ; und aus Angola , Dom ||| ! ; and from Angola , Dom ||| 0.0370072 0.883601 ||| ||| 1
+! ; und aus Angola , ||| ! ; and from Angola , ||| 0.0370072 0.883601 ||| ||| 1
+! ; und aus Angola ||| ! ; and from Angola ||| 0.0370072 0.883601 ||| ||| 1
+! ; und aus ||| ! ; and from ||| 0.0370072 0.883601 ||| ||| 1
+! ; und ||| ! ; and ||| 0.0370072 0.883601 ||| ||| 1
+! ; ||| ! ; ||| 0.0370072 0.883601 ||| ||| 1
+! 100 Mio. ECU ||| ! ECU 100 m ||| 0.0185036 0.883601 ||| ||| 2
+so ! 100 Mio. ECU ||| ! ECU 100 m ||| 0.0185036 0.883601 ||| ||| 2
+wie ich es bereits ||| ! I have been ||| 0.0370072 1 ||| ||| 1
+wie ich es ||| ! I have ||| 0.0370072 1 ||| ||| 1
+ich nicht einer Meinung mit ||| ! I may not agree with ||| 0.0370072 1 ||| ||| 1
+ich nicht einer Meinung ||| ! I may not agree ||| 0.0370072 1 ||| ||| 1
+ich nicht ||| ! I may not ||| 0.0370072 1 ||| ||| 1
+ich ||| ! I may ||| 0.0370072 1 ||| ||| 1
+das meines Erachtens ||| ! I think that ||| 0.0370072 1 ||| ||| 1
+und möchte zu ||| ! I want it ||| 0.0185036 1 ||| ||| 2
+und möchte ||| ! I want it ||| 0.0185036 1 ||| ||| 2
+und möchte zu ||| ! I want ||| 0.0185036 1 ||| ||| 2
+und möchte ||| ! I want ||| 0.0185036 1 ||| ||| 2
+! ||| ! I ||| 0.00740145 0.883601 ||| ||| 5
+das meines ||| ! I ||| 0.00740145 1 ||| ||| 5
+ich ||| ! I ||| 0.00740145 1 ||| ||| 5
+und ||| ! I ||| 0.00740145 1 ||| ||| 5
+wie ich ||| ! I ||| 0.00740145 1 ||| ||| 5
+! schottisches Rindfleisch ist ||| ! Scotch beef is ||| 0.0370072 0.883601 ||| ||| 1
+! schottisches Rindfleisch ||| ! Scotch beef ||| 0.0370072 0.883601 ||| ||| 1
+! schottisches ||| ! Scotch ||| 0.0370072 0.883601 ||| ||| 1
+dies ist der Wahlspruch ||| ! ] This is the relevant phrase ||| 0.0370072 1 ||| ||| 1
+dies ist der ||| ! ] This is the relevant ||| 0.0370072 1 ||| ||| 1
+dies ist der ||| ! ] This is the ||| 0.0370072 1 ||| ||| 1
+dies ist ||| ! ] This is ||| 0.0370072 1 ||| ||| 1
+dies ||| ! ] This ||| 0.0370072 1 ||| ||| 1
+! ) ||| ! ] ||| 0.0370072 0.883601 ||| ||| 1
+alle unsere Länder , wenn auch in ||| ! all our countries , to ||| 0.0370072 1 ||| ||| 1
+alle unsere Länder , wenn auch ||| ! all our countries , ||| 0.0123357 1 ||| ||| 3
+alle unsere Länder , wenn ||| ! all our countries , ||| 0.0123357 1 ||| ||| 3
+alle unsere Länder , ||| ! all our countries , ||| 0.0123357 1 ||| ||| 3
+alle unsere Länder ||| ! all our countries ||| 0.0370072 1 ||| ||| 1
+alle unsere ||| ! all our ||| 0.0370072 1 ||| ||| 1
+all ||| ! all this ||| 0.0370072 1 ||| ||| 1
+, denn alle nehmen ||| ! all ||| 0.00616787 1 ||| ||| 6
+, denn alle ||| ! all ||| 0.00616787 1 ||| ||| 6
+all ||| ! all ||| 0.00616787 1 ||| ||| 6
+alle ||| ! all ||| 0.00616787 1 ||| ||| 6
+denn alle nehmen ||| ! all ||| 0.00616787 1 ||| ||| 6
+denn alle ||| ! all ||| 0.00616787 1 ||| ||| 6
+und traut euch doch , etwa die ||| ! and dare to adopt the ||| 0.0370072 1 ||| ||| 1
+und traut euch doch , etwa ||| ! and dare to adopt ||| 0.0185036 1 ||| ||| 2
+und traut euch doch , ||| ! and dare to adopt ||| 0.0185036 1 ||| ||| 2
+und traut euch doch , etwa ||| ! and dare to ||| 0.0185036 1 ||| ||| 2
+und traut euch doch , ||| ! and dare to ||| 0.0185036 1 ||| ||| 2
+und traut euch doch ||| ! and dare ||| 0.0370072 1 ||| ||| 1
+anderes Beispiel : wenn ich ||| ! another example : when I ||| 0.0370072 1 ||| ||| 1
+anderes Beispiel : wenn ||| ! another example : when ||| 0.0370072 1 ||| ||| 1
+anderes Beispiel : ||| ! another example : ||| 0.0370072 1 ||| ||| 1
+anderes Beispiel ||| ! another example ||| 0.0370072 1 ||| ||| 1
+anderes ||| ! another ||| 0.0370072 1 ||| ||| 1
+werden Sie hart , oder seien Sie ||| ! be firm , or be ||| 0.0370072 1 ||| ||| 1
+hat der Rat so ||| ! can the Council even begin to ||| 0.0370072 1 ||| ||| 1
+hat der Rat so ||| ! can the Council even begin ||| 0.0370072 1 ||| ||| 1
+hat der Rat so ||| ! can the Council even ||| 0.0370072 1 ||| ||| 1
+hat der Rat ||| ! can the Council ||| 0.0370072 1 ||| ||| 1
+hat der ||| ! can the ||| 0.0370072 1 ||| ||| 1
+hat ||| ! can ||| 0.0370072 1 ||| ||| 1
+so ||| ! create ||| 0.0370072 1 ||| ||| 1
+jeder Staat versucht ||| ! each state tries ||| 0.0370072 1 ||| ||| 1
+jeder Staat ||| ! each state ||| 0.0370072 1 ||| ||| 1
+jeder ||| ! each ||| 0.0370072 1 ||| ||| 1
+immer nur zu reden und zu ||| ! enough of words ||| 0.0123357 1 ||| ||| 3
+immer nur zu reden und ||| ! enough of words ||| 0.0123357 1 ||| ||| 3
+immer nur zu reden ||| ! enough of words ||| 0.0123357 1 ||| ||| 3
+immer nur zu ||| ! enough of ||| 0.0185036 1 ||| ||| 2
+immer nur ||| ! enough of ||| 0.0185036 1 ||| ||| 2
+immer nur zu ||| ! enough ||| 0.0185036 1 ||| ||| 2
+immer nur ||| ! enough ||| 0.0185036 1 ||| ||| 2
+für viele von Ihnen - Sie ||| ! for many of you - you ||| 0.0370072 1 ||| ||| 1
+für viele von Ihnen - ||| ! for many of you - ||| 0.0370072 1 ||| ||| 1
+für viele von Ihnen ||| ! for many of you ||| 0.0370072 1 ||| ||| 1
+für viele von ||| ! for many of ||| 0.0370072 1 ||| ||| 1
+für viele ||| ! for many ||| 0.0370072 1 ||| ||| 1
+für ||| ! for ||| 0.0370072 1 ||| ||| 1
+tun vom Rinderwahn bis zu Bioziden , ||| ! from mad cow disease to biocides ||| 0.00925181 1 ||| ||| 4
+tun vom Rinderwahn bis zu Bioziden ||| ! from mad cow disease to biocides ||| 0.00925181 1 ||| ||| 4
+vom Rinderwahn bis zu Bioziden , ||| ! from mad cow disease to biocides ||| 0.00925181 1 ||| ||| 4
+vom Rinderwahn bis zu Bioziden ||| ! from mad cow disease to biocides ||| 0.00925181 1 ||| ||| 4
+tun vom Rinderwahn bis zu ||| ! from mad cow disease to ||| 0.0185036 1 ||| ||| 2
+vom Rinderwahn bis zu ||| ! from mad cow disease to ||| 0.0185036 1 ||| ||| 2
+: gute Rechtsvorschriften sind schön und gut ||| ! good legislation is fine ||| 0.0370072 1 ||| ||| 1
+: gute Rechtsvorschriften sind ||| ! good legislation is ||| 0.0370072 1 ||| ||| 1
+: gute Rechtsvorschriften ||| ! good legislation ||| 0.0370072 1 ||| ||| 1
+: gute ||| ! good ||| 0.0370072 1 ||| ||| 1
+Probleme anzupacken : wir müssen hier ||| ! here , we have to ||| 0.0185036 1 ||| ||| 2
+anzupacken : wir müssen hier ||| ! here , we have to ||| 0.0185036 1 ||| ||| 2
+: wir müssen hier ||| ! here , we have ||| 0.0370072 1 ||| ||| 1
+hier ||| ! here ||| 0.0370072 1 ||| ||| 1
+- all diese Möglichkeiten werden derzeit ||| ! however , these solutions are being ||| 0.0370072 1 ||| ||| 1
+- all diese Möglichkeiten werden ||| ! however , these solutions are ||| 0.0370072 1 ||| ||| 1
+- all diese Möglichkeiten ||| ! however , these solutions ||| 0.0370072 1 ||| ||| 1
+- all diese ||| ! however , these ||| 0.0370072 1 ||| ||| 1
+- ||| ! however , ||| 0.0370072 1 ||| ||| 1
+wenn diese Untersuchung ||| ! if this inquiry ||| 0.0370072 1 ||| ||| 1
+wenn diese ||| ! if this ||| 0.0370072 1 ||| ||| 1
+wirklich : wenn es ||| ! if we ||| 0.0370072 1 ||| ||| 1
+wenn ||| ! if ||| 0.0185036 1 ||| ||| 2
+wirklich : wenn ||| ! if ||| 0.0185036 1 ||| ||| 2
+! 1962 haben sie dies ||| ! in 1962 , did they not ||| 0.0185036 0.883601 ||| ||| 2
+! 1962 haben sie ||| ! in 1962 , did they not ||| 0.0185036 0.883601 ||| ||| 2
+! 1962 haben sie dies ||| ! in 1962 , did they ||| 0.0185036 0.883601 ||| ||| 2
+! 1962 haben sie ||| ! in 1962 , did they ||| 0.0185036 0.883601 ||| ||| 2
+! 1962 haben ||| ! in 1962 , did ||| 0.0370072 0.883601 ||| ||| 1
+! 1962 ||| ! in 1962 , ||| 0.0370072 0.883601 ||| ||| 1
+! 1962 ||| ! in 1962 ||| 0.0370072 0.883601 ||| ||| 1
+! 1996 haben vier Millionen Menschen ||| ! in 1996 , four million people ||| 0.0370072 0.883601 ||| ||| 1
+! 1996 haben vier Millionen ||| ! in 1996 , four million ||| 0.0370072 0.883601 ||| ||| 1
+! 1996 haben vier ||| ! in 1996 , four ||| 0.0370072 0.883601 ||| ||| 1
+! 1996 haben ||| ! in 1996 , ||| 0.0370072 0.883601 ||| ||| 1
+! 1996 ||| ! in 1996 ||| 0.0370072 0.883601 ||| ||| 1
+dies einfach ||| ! in ||| 0.0370072 1 ||| ||| 1
+wirklich ||| ! instead , because we ||| 0.0370072 1 ||| ||| 1
+wirklich ||| ! instead , because ||| 0.0370072 1 ||| ||| 1
+wirklich ||| ! instead , ||| 0.0370072 1 ||| ||| 1
+wirklich ||| ! instead ||| 0.0370072 1 ||| ||| 1
+wurde ! ||| ! it has ||| 0.0370072 0.883601 ||| ||| 1
+, und befürworte ein ||| ! let us say yes to a ||| 0.0370072 1 ||| ||| 1
+, und befürworte ||| ! let us say yes to ||| 0.0370072 1 ||| ||| 1
+befürworte ||| ! let us say yes ||| 0.0185036 1 ||| ||| 2
+und befürworte ||| ! let us say yes ||| 0.0185036 1 ||| ||| 2
+befürworte ||| ! let us say ||| 0.0185036 1 ||| ||| 2
+und befürworte ||| ! let us say ||| 0.0185036 1 ||| ||| 2
+befürworte ||| ! let us ||| 0.00925181 1 ||| ||| 4
+tun wir doch um ||| ! let us ||| 0.00925181 1 ||| ||| 4
+tun wir doch ||| ! let us ||| 0.00925181 1 ||| ||| 4
+und befürworte ||| ! let us ||| 0.00925181 1 ||| ||| 4
+befürworte ||| ! let ||| 0.0185036 1 ||| ||| 2
+und befürworte ||| ! let ||| 0.0185036 1 ||| ||| 2
+! Malaria und Tuberkulose sind heilbar ||| ! malaria and tuberculosis can be cured ||| 0.0370072 0.883601 ||| ||| 1
+! Malaria und Tuberkulose sind ||| ! malaria and tuberculosis can ||| 0.0370072 0.883601 ||| ||| 1
+! Malaria und Tuberkulose ||| ! malaria and tuberculosis ||| 0.0370072 0.883601 ||| ||| 1
+! Malaria und ||| ! malaria and ||| 0.0370072 0.883601 ||| ||| 1
+! Malaria ||| ! malaria ||| 0.0370072 0.883601 ||| ||| 1
+vielleicht können Sie mich ja berichtigen ||| ! maybe you will put me right ||| 0.0370072 1 ||| ||| 1
+, und ||| ! moreover , it ||| 0.0370072 1 ||| ||| 1
+Kollegin , man könnte ||| ! my dear colleague , we could ||| 0.0370072 1 ||| ||| 1
+Kollegin , man ||| ! my dear colleague , we ||| 0.0370072 1 ||| ||| 1
+Kollegin , ||| ! my dear colleague , ||| 0.0370072 1 ||| ||| 1
+Kollegin ||| ! my dear colleague ||| 0.0370072 1 ||| ||| 1
+und nochmals Nein ! ||| ! no ! ||| 0.0370072 0.883601 ||| ||| 1
+und nochmals Nein ! “ , denn ||| ! no ! ’ , because , ||| 0.0370072 0.883601 ||| ||| 1
+und nochmals Nein ! “ , denn ||| ! no ! ’ , because ||| 0.0370072 0.883601 ||| ||| 1
+und nochmals Nein ! “ , ||| ! no ! ’ , ||| 0.0370072 0.883601 ||| ||| 1
+und nochmals Nein ! “ ||| ! no ! ’ ||| 0.0370072 0.883601 ||| ||| 1
+und nochmals Nein ||| ! no ||| 0.0370072 1 ||| ||| 1
+auch im Namen der Fraktion Die Grünen ||| ! on behalf of the Green Group ||| 0.0185036 1 ||| ||| 2
+im Namen der Fraktion Die Grünen ||| ! on behalf of the Green Group ||| 0.0185036 1 ||| ||| 2
+Vorredner auch im Namen der ||| ! on behalf of the ||| 0.0123357 1 ||| ||| 3
+auch im Namen der ||| ! on behalf of the ||| 0.0123357 1 ||| ||| 3
+im Namen der ||| ! on behalf of the ||| 0.0123357 1 ||| ||| 3
+Vorredner auch im Namen ||| ! on behalf ||| 0.0123357 1 ||| ||| 3
+auch im Namen ||| ! on behalf ||| 0.0123357 1 ||| ||| 3
+im Namen ||| ! on behalf ||| 0.0123357 1 ||| ||| 3
+Vorredner auch im ||| ! on ||| 0.0123357 1 ||| ||| 3
+auch im ||| ! on ||| 0.0123357 1 ||| ||| 3
+im ||| ! on ||| 0.0123357 1 ||| ||| 3
+wenn das alles ||| ! once everything that ||| 0.0370072 1 ||| ||| 1
+wenn ||| ! once ||| 0.0370072 1 ||| ||| 1
+ein politisch und wirtschaftlich vereintes ||| ! politically and economically united ||| 0.0370072 1 ||| ||| 1
+ein politisch und wirtschaftlich ||| ! politically and economically ||| 0.0370072 1 ||| ||| 1
+ein politisch und ||| ! politically and ||| 0.0370072 1 ||| ||| 1
+ein politisch ||| ! politically ||| 0.0370072 1 ||| ||| 1
+aber sollen wir darüber erfreut sein ? ||| ! should we rejoice at this ? ||| 0.0185036 1 ||| ||| 2
+sollen wir darüber erfreut sein ? ||| ! should we rejoice at this ? ||| 0.0185036 1 ||| ||| 2
+, aber sollen wir darüber erfreut sein ||| ! should we rejoice at this ||| 0.0123357 1 ||| ||| 3
+aber sollen wir darüber erfreut sein ||| ! should we rejoice at this ||| 0.0123357 1 ||| ||| 3
+sollen wir darüber erfreut sein ||| ! should we rejoice at this ||| 0.0123357 1 ||| ||| 3
+, aber sollen wir ||| ! should we ||| 0.00925181 1 ||| ||| 4
+aber sollen wir ||| ! should we ||| 0.00925181 1 ||| ||| 4
+sein , aber sollen wir ||| ! should we ||| 0.00925181 1 ||| ||| 4
+sollen wir ||| ! should we ||| 0.00925181 1 ||| ||| 4
+, aber sollen ||| ! should ||| 0.00925181 1 ||| ||| 4
+aber sollen ||| ! should ||| 0.00925181 1 ||| ||| 4
+sein , aber sollen ||| ! should ||| 0.00925181 1 ||| ||| 4
+sollen ||| ! should ||| 0.00925181 1 ||| ||| 4
+Elementen ||| ! social coherence ||| 0.0370072 1 ||| ||| 1
+Margaret Thatcher ||| ! sometimes I really miss Margaret Thatcher ||| 0.0370072 1 ||| ||| 1
+das ist wunderbar , und ich bin ||| ! that is extraordinary and I am ||| 0.0370072 1 ||| ||| 1
+das ist wunderbar , und ich ||| ! that is extraordinary and I ||| 0.0370072 1 ||| ||| 1
+das ist wunderbar , und ||| ! that is extraordinary and ||| 0.0370072 1 ||| ||| 1
+das ist wunderbar , ||| ! that is extraordinary ||| 0.0185036 1 ||| ||| 2
+das ist wunderbar ||| ! that is extraordinary ||| 0.0185036 1 ||| ||| 2
+das ist ||| ! that is ||| 0.0370072 1 ||| ||| 1
+das ||| ! that ||| 0.0370072 1 ||| ||| 1
+der Kommission bewirken wird , denn dies ||| ! the Commission can accept all the ||| 0.0370072 1 ||| ||| 1
+der Kommission bewirken wird , denn ||| ! the Commission can accept all ||| 0.0370072 1 ||| ||| 1
+der Kommission bewirken wird , ||| ! the Commission can accept ||| 0.0185036 1 ||| ||| 2
+der Kommission bewirken wird ||| ! the Commission can accept ||| 0.0185036 1 ||| ||| 2
+der Kommission bewirken wird , ||| ! the Commission can ||| 0.0185036 1 ||| ||| 2
+der Kommission bewirken wird ||| ! the Commission can ||| 0.0185036 1 ||| ||| 2
+der Kommission bewirken ||| ! the Commission ||| 0.0185036 1 ||| ||| 2
+der Kommission ||| ! the Commission ||| 0.0185036 1 ||| ||| 2
+! “ Die EU , die ||| ! the EU , the ||| 0.0370072 0.883601 ||| ||| 1
+! “ Die EU , ||| ! the EU , ||| 0.0370072 0.883601 ||| ||| 1
+! “ Die EU ||| ! the EU ||| 0.0370072 0.883601 ||| ||| 1
+, die ||| ! the European ||| 0.0185036 1 ||| ||| 2
+die ||| ! the European ||| 0.0185036 1 ||| ||| 2
+, und ||| ! the truth is that ||| 0.0185036 1 ||| ||| 2
+, ||| ! the truth is that ||| 0.0185036 1 ||| ||| 2
+! “ Die ||| ! the ||| 0.00925181 0.883601 ||| ||| 4
+, die ||| ! the ||| 0.00925181 1 ||| ||| 4
+der ||| ! the ||| 0.00925181 1 ||| ||| 4
+die ||| ! the ||| 0.00925181 1 ||| ||| 4
+ich doch eine große Flagge ||| ! there is a great big flag ||| 0.0123357 1 ||| ||| 3
+mir sehe ich doch eine große Flagge ||| ! there is a great big flag ||| 0.0123357 1 ||| ||| 3
+sehe ich doch eine große Flagge ||| ! there is a great big flag ||| 0.0123357 1 ||| ||| 3
+ich doch eine große ||| ! there is a great big ||| 0.0123357 1 ||| ||| 3
+mir sehe ich doch eine große ||| ! there is a great big ||| 0.0123357 1 ||| ||| 3
+sehe ich doch eine große ||| ! there is a great big ||| 0.0123357 1 ||| ||| 3
+ich doch eine ||| ! there is a ||| 0.0123357 1 ||| ||| 3
+mir sehe ich doch eine ||| ! there is a ||| 0.0123357 1 ||| ||| 3
+sehe ich doch eine ||| ! there is a ||| 0.0123357 1 ||| ||| 3
+ich doch ||| ! there is ||| 0.0123357 1 ||| ||| 3
+mir sehe ich doch ||| ! there is ||| 0.0123357 1 ||| ||| 3
+sehe ich doch ||| ! there is ||| 0.0123357 1 ||| ||| 3
+ich ||| ! there ||| 0.0123357 1 ||| ||| 3
+mir sehe ich ||| ! there ||| 0.0123357 1 ||| ||| 3
+sehe ich ||| ! there ||| 0.0123357 1 ||| ||| 3
+, denn das ist unsere Pflicht ||| ! this is our duty ||| 0.0123357 1 ||| ||| 3
+denn das ist unsere Pflicht ||| ! this is our duty ||| 0.0123357 1 ||| ||| 3
+nehmen , denn das ist unsere Pflicht ||| ! this is our duty ||| 0.0123357 1 ||| ||| 3
+, denn das ist unsere ||| ! this is our ||| 0.00925181 1 ||| ||| 4
+Angriff nehmen , denn das ist unsere ||| ! this is our ||| 0.00925181 1 ||| ||| 4
+denn das ist unsere ||| ! this is our ||| 0.00925181 1 ||| ||| 4
+nehmen , denn das ist unsere ||| ! this is our ||| 0.00925181 1 ||| ||| 4
+, denn das ist ||| ! this is ||| 0.00740145 1 ||| ||| 5
+Angriff nehmen , denn das ist ||| ! this is ||| 0.00740145 1 ||| ||| 5
+denn das ist ||| ! this is ||| 0.00740145 1 ||| ||| 5
+in Angriff nehmen , denn das ist ||| ! this is ||| 0.00740145 1 ||| ||| 5
+nehmen , denn das ist ||| ! this is ||| 0.00740145 1 ||| ||| 5
+, denn das ||| ! this ||| 0.00740145 1 ||| ||| 5
+Angriff nehmen , denn das ||| ! this ||| 0.00740145 1 ||| ||| 5
+denn das ||| ! this ||| 0.00740145 1 ||| ||| 5
+in Angriff nehmen , denn das ||| ! this ||| 0.00740145 1 ||| ||| 5
+nehmen , denn das ||| ! this ||| 0.00740145 1 ||| ||| 5
+! – dieses Mal leider flankiert ||| ! unfortunately accompanied , this time , ||| 0.0370072 0.883601 ||| ||| 1
+! – dieses Mal leider flankiert ||| ! unfortunately accompanied , this time ||| 0.0370072 0.883601 ||| ||| 1
+leider ||| ! unfortunately ||| 0.0370072 1 ||| ||| 1
+, und hier kommen wir nur weiter ||| ! we can only make progress here ||| 0.00740145 1 ||| ||| 5
+hier kommen wir nur weiter , ||| ! we can only make progress here ||| 0.00740145 1 ||| ||| 5
+hier kommen wir nur weiter ||| ! we can only make progress here ||| 0.00740145 1 ||| ||| 5
+und hier kommen wir nur weiter , ||| ! we can only make progress here ||| 0.00740145 1 ||| ||| 5
+und hier kommen wir nur weiter ||| ! we can only make progress here ||| 0.00740145 1 ||| ||| 5
+kommen wir nur weiter , ||| ! we can only make progress ||| 0.0185036 1 ||| ||| 2
+kommen wir nur weiter ||| ! we can only make progress ||| 0.0185036 1 ||| ||| 2
+kommen wir nur ||| ! we can only ||| 0.0370072 1 ||| ||| 1
+kommen wir ||| ! we can ||| 0.0370072 1 ||| ||| 1
+, und wir wissen genau , dass ||| ! we know quite well that ||| 0.0185036 1 ||| ||| 2
+und wir wissen genau , dass ||| ! we know quite well that ||| 0.0185036 1 ||| ||| 2
+, und wir wissen genau ||| ! we know quite well ||| 0.0185036 1 ||| ||| 2
+und wir wissen genau ||| ! we know quite well ||| 0.0185036 1 ||| ||| 2
+, und wir wissen ||| ! we know ||| 0.0185036 1 ||| ||| 2
+und wir wissen ||| ! we know ||| 0.0185036 1 ||| ||| 2
+! - , dass wir mehr wollen ||| ! we want more ||| 0.0370072 0.883601 ||| ||| 1
+, und wir ||| ! we ||| 0.00411192 1 ||| ||| 9
+ebenfalls mangelnde Vorsicht ||| ! we ||| 0.00411192 1 ||| ||| 9
+eine größere ||| ! we ||| 0.00411192 1 ||| ||| 9
+eine ||| ! we ||| 0.00411192 1 ||| ||| 9
+ist ebenfalls mangelnde Vorsicht ||| ! we ||| 0.00411192 1 ||| ||| 9
+oh Gott , wir ||| ! we ||| 0.00411192 1 ||| ||| 9
+und wir ||| ! we ||| 0.00411192 1 ||| ||| 9
+wird eine größere ||| ! we ||| 0.00411192 1 ||| ||| 9
+wird eine ||| ! we ||| 0.00411192 1 ||| ||| 9
+. ||| ! well ! ||| 0.0370072 1 ||| ||| 1
+. ||| ! well ||| 0.0370072 1 ||| ||| 1
+eben solch eine ||| ! what ||| 0.0185036 1 ||| ||| 2
+eben solch ||| ! what ||| 0.0185036 1 ||| ||| 2
+wann wollen Sie endlich ||| ! when are you finally going ||| 0.0370072 1 ||| ||| 1
+wann wollen Sie endlich ||| ! when are you finally ||| 0.0370072 1 ||| ||| 1
+wann wollen Sie ||| ! when are you ||| 0.0370072 1 ||| ||| 1
+wann wollen ||| ! when are ||| 0.0370072 1 ||| ||| 1
+wann ||| ! when ||| 0.0370072 1 ||| ||| 1
+. ||| ! why ? ||| 0.0370072 1 ||| ||| 1
+! den Sacharow-Preis , ||| ! won the Sakharov Prize ||| 0.0185036 0.883601 ||| ||| 2
+! den Sacharow-Preis ||| ! won the Sakharov Prize ||| 0.0185036 0.883601 ||| ||| 2
+! den ||| ! won the ||| 0.0370072 0.883601 ||| ||| 1
+! ||| ! won ||| 0.0370072 0.883601 ||| ||| 1
+es steht in Ihrer Macht ! ||| ! you have the power to do ||| 0.0370072 0.883601 ||| ||| 1
+es steht in Ihrer Macht ! ||| ! you have the power to ||| 0.0370072 0.883601 ||| ||| 1
+es steht in Ihrer Macht ! ||| ! you have the power ||| 0.0370072 0.883601 ||| ||| 1
+sie werden nie eine frei gewählte Abgeordnete ||| ! you will never be ||| 0.0123357 1 ||| ||| 3
+sie werden nie eine frei gewählte ||| ! you will never be ||| 0.0123357 1 ||| ||| 3
+sie werden nie eine frei ||| ! you will never be ||| 0.0123357 1 ||| ||| 3
+sie werden nie eine ||| ! you will never ||| 0.0185036 1 ||| ||| 2
+sie werden nie ||| ! you will never ||| 0.0185036 1 ||| ||| 2
+sie werden ||| ! you will ||| 0.0370072 1 ||| ||| 1
+sie ||| ! you ||| 0.0370072 1 ||| ||| 1
+! ! ! ||| ! ||| 0.00485437 0.689873 ||| ||| 1030
+! ! ||| ! ||| 0.00128445 0.780751 ||| ||| 1030
+! " ||| ! ||| 0.00679612 0.00130746 ||| ||| 1030
+! ) . ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! ) ||| ! ||| 0.00128445 0.883601 ||| ||| 1030
+! , war ebenfalls kein Beitrag ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! , war ebenfalls kein ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! , war ebenfalls ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! , war ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! , ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! - , ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! - ||| ! ||| 0.00128445 0.883601 ||| ||| 1030
+! . ||| ! ||| 0.00291262 0.883601 ||| ||| 1030
+! 2004 war die UKIP die einzige ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! 2004 war die UKIP die ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! 2004 war die UKIP ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! 2004 war die ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! 2004 war ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! 2004 ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! ? ? ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! die Opfer der Kriminalität in Europa ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! die Opfer der Kriminalität in ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! die Opfer der Kriminalität ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! die Opfer der ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! die Opfer ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! die ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! es ist nicht ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! es ist ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! es ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! ich weiß , ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! ich weiß ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! ich ||| ! ||| 0.00291262 0.883601 ||| ||| 1030
+! und deshalb halte ich den Vorschlag ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! und deshalb halte ich den ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! und deshalb halte ich ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! und deshalb halte ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! und deshalb ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! und ||| ! ||| 3.59294e-05 0.883601 ||| ||| 1030
+! ||| ! ||| 0.946602 0.883601 ||| ||| 1030
diff --git a/regression-testing/tests/score.phrase-based-with-alignment/truth/results.txt b/regression-testing/tests/score.phrase-based-with-alignment/truth/results.txt
new file mode 100644
index 000000000..a8ddc776c
--- /dev/null
+++ b/regression-testing/tests/score.phrase-based-with-alignment/truth/results.txt
@@ -0,0 +1,1739 @@
+! ! ! ) bezeichnet wird , ||| ! ! ! ) , ||| 0.0571221 0.000466119 ||| 0-0 1-1 2-2 3-3 6-4 ||| 1
+! ! ! ) bezeichnet wird ||| ! ! ! ) ||| 0.0571221 0.000466119 ||| 0-0 1-1 2-2 3-3 ||| 1
+! ! ! ) bezeichnet ||| ! ! ! ) ||| 0.0571221 0.000466119 ||| 0-0 1-1 2-2 3-3 ||| 1
+! ! ! ) ||| ! ! ! ) ||| 0.2569 0.000466119 ||| 0-0 1-1 2-2 3-3 ||| 3
+! ! ! ) ||| ! ) ||| 0.0190407 0.0775352 ||| 0-0 1-0 2-0 3-1 ||| 3
+! ! ! ||| ! ! ! ||| 0.252066 0.000466119 ||| 0-0 1-1 2-2 ||| 8
+! ! ! ||| ! ||| 0.625 0.0775352 ||| 0-0 1-0 2-0 ||| 8
+! ! ) bezeichnet wird , hat ||| ! ! ) , has ||| 0.0571221 0.00601171 ||| 0-0 1-1 2-2 5-3 6-4 ||| 1
+! ! ) bezeichnet wird , ||| ! ! ) , ||| 0.0571221 0.00601171 ||| 0-0 1-1 2-2 5-3 ||| 1
+! ! ) bezeichnet wird ||| ! ! ) ||| 0.0571221 0.00601171 ||| 0-0 1-1 2-2 ||| 1
+! ! ) bezeichnet ||| ! ! ) ||| 0.0571221 0.00601171 ||| 0-0 1-1 2-2 ||| 1
+! ! ) ||| ! ! ) ||| 0.38535 0.00601171 ||| 0-0 1-1 2-2 ||| 2
+! ! die Bilanz , die wir ||| and we ||| 0.0571221 1 ||| 4-0 6-1 ||| 1
+! ! die Bilanz , die ||| and ||| 0.0571221 1 ||| 4-0 ||| 1
+! ! die Bilanz , ||| and ||| 0.0571221 1 ||| 4-0 ||| 1
+! ! ||| ! ! ||| 0.636364 0.00601171 ||| 0-0 1-1 ||| 11
+! ! ||| ! ||| 0.0700637 0.0775352 ||| 0-0 1-0 ||| 11
+! ! ||| . ||| 0.00519291 1 ||| 0-0 1-0 ||| 11
+! ! ||| unemployment ! ||| 0.00519291 0.0775352 ||| 0-1 1-1 ||| 11
+! " ( Europa war gut zu ||| ! ' ||| 0.0571221 0.022535 ||| 0-0 1-1 2-1 ||| 1
+! " ( Europa war gut ||| ! ' ||| 0.0571221 0.022535 ||| 0-0 1-1 2-1 ||| 1
+! " ( Europa war ||| ! ' ||| 0.0571221 0.022535 ||| 0-0 1-1 2-1 ||| 1
+! " ( Europa ||| ! ' ||| 0.0571221 0.022535 ||| 0-0 1-1 2-1 ||| 1
+! " ( es ist die Sonne ||| the sun ||| 0.0571221 1 ||| 5-0 6-1 ||| 1
+! " ( es ist die ||| the ||| 0.0571221 1 ||| 5-0 ||| 1
+! " ( ||| ! ' ||| 0.0571221 0.022535 ||| 0-0 1-1 2-1 ||| 1
+! " ) Heute ||| ! ' ) We ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 ||| 1
+! " ) Sie haben vollkommen recht ||| ! ' exactly ||| 0.0571221 0.0449274 ||| 0-0 1-1 5-2 ||| 1
+! " ) Sie haben vollkommen ||| ! ' exactly ||| 0.0571221 0.0449274 ||| 0-0 1-1 5-2 ||| 1
+! " ) Sie haben ||| ! ' ||| 0.0571221 0.0449274 ||| 0-0 1-1 ||| 1
+! " ) Sie ||| ! ' ||| 0.0571221 0.0449274 ||| 0-0 1-1 ||| 1
+! " ) sagte er , die ||| ! ' ) said that the ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 5-4 6-5 ||| 1
+! " ) sagte er , ||| ! ' ) said that ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 5-4 ||| 1
+! " ) sagte er ||| ! ' ) said ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 ||| 1
+! " ) sagte ||| ! ' ) said ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 ||| 1
+! " ) ||| ! ' ) ||| 0.727273 0.0449274 ||| 0-0 1-1 2-2 ||| 11
+! " ) ||| ! ' ||| 0.00519291 0.0449274 ||| 0-0 1-1 ||| 11
+! " ) ||| common ||| 0.00519291 1 ||| 0-0 ||| 11
+! " ) ||| more common ||| 0.00519291 1 ||| 0-1 ||| 11
+! " , aber natürlich unter der ||| ' , but of course on ||| 0.0571221 0.289866 ||| 0-0 1-0 2-1 3-2 4-3 4-4 5-5 ||| 1
+! " , aber natürlich unter ||| ' , but of course on ||| 0.0571221 0.289866 ||| 0-0 1-0 2-1 3-2 4-3 4-4 5-5 ||| 1
+! " , aber natürlich ||| ' , but of course ||| 0.0571221 0.289866 ||| 0-0 1-0 2-1 3-2 4-3 4-4 ||| 1
+! " , aber ||| ' , but ||| 0.0571221 0.289866 ||| 0-0 1-0 2-1 3-2 ||| 1
+! " , also ||| ' , i.e. , ||| 0.0571221 0.579445 ||| 1-0 2-1 3-2 0-3 ||| 1
+! " , antwortete der Präsident . ||| ! " replied the President . ||| 0.0571221 0.00917533 ||| 0-0 1-1 3-2 4-3 5-4 6-5 ||| 1
+! " , antwortete der Präsident ||| ! " replied the President ||| 0.0571221 0.00917533 ||| 0-0 1-1 3-2 4-3 5-4 ||| 1
+! " , antwortete der ||| ! " replied the ||| 0.0571221 0.00917533 ||| 0-0 1-1 3-2 4-3 ||| 1
+! " , antwortete ||| ! " replied ||| 0.0571221 0.00917533 ||| 0-0 1-1 3-2 ||| 1
+! " , der ||| ! ' , which ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 ||| 1
+! " , doch der ||| ! " but a ||| 0.0571221 0.00917533 ||| 0-0 1-1 3-2 4-3 ||| 1
+! " , doch ||| ! " but ||| 0.0571221 0.00917533 ||| 0-0 1-1 3-2 ||| 1
+! " , entgegnete der Pilot ||| ' flying is the safest form of ||| 0.028561 0.526578 ||| 0-0 1-0 4-0 3-1 4-3 5-4 5-5 ||| 2
+! " , entgegnete der Pilot ||| ' flying is the safest form ||| 0.028561 0.526578 ||| 0-0 1-0 4-0 3-1 4-3 5-4 5-5 ||| 2
+! " , entgegnete der ||| ' flying is the ||| 0.0571221 0.526578 ||| 0-0 1-0 4-0 3-1 4-3 ||| 1
+! " , gab ich zur Antwort ||| ! ' I replied ||| 0.0571221 0.0449274 ||| 0-0 1-1 4-2 3-3 5-3 6-3 ||| 1
+! " , muss ||| is ! ' ||| 0.0571221 0.0449274 ||| 3-0 0-1 1-2 ||| 1
+! " , rief Alice ' . ||| ! †cried Alice ' . ||| 0.0571221 0.042258 ||| 0-0 1-1 3-2 4-3 5-4 6-5 ||| 1
+! " , rief Alice ' ||| ! †cried Alice ' ||| 0.0571221 0.042258 ||| 0-0 1-1 3-2 4-3 5-4 ||| 1
+! " , rief Alice ||| ! †cried Alice ||| 0.0571221 0.0775352 ||| 0-0 1-1 3-2 4-3 ||| 1
+! " , rief ich aus , ||| , ||| 0.028561 1 ||| 0-0 ||| 2
+! " , rief ich aus , ||| done , ||| 0.028561 1 ||| 0-1 ||| 2
+! " , rief ich aus ||| , ||| 0.028561 1 ||| 0-0 ||| 2
+! " , rief ich aus ||| done , ||| 0.028561 1 ||| 0-1 ||| 2
+! " , rief ich ||| , ||| 0.028561 1 ||| 0-0 ||| 2
+! " , rief ich ||| done , ||| 0.028561 1 ||| 0-1 ||| 2
+! " , rief ||| ! †cried ||| 0.0190407 0.0775352 ||| 0-0 1-1 3-2 ||| 3
+! " , rief ||| , ||| 0.0190407 1 ||| 0-0 ||| 3
+! " , rief ||| done , ||| 0.0190407 1 ||| 0-1 ||| 3
+! " , sagte die andere Kuh ||| , " replied the other cow ||| 0.0571221 0.118338 ||| 0-0 1-1 3-2 4-3 5-4 6-5 ||| 1
+! " , sagte die andere ||| , " replied the other ||| 0.0571221 0.118338 ||| 0-0 1-1 3-2 4-3 5-4 ||| 1
+! " , sagte die ||| , " replied the ||| 0.0571221 0.118338 ||| 0-0 1-1 3-2 4-3 ||| 1
+! " , sagte ich zu ihr ||| ! " I said to her ||| 0.0571221 0.00917533 ||| 0-0 1-1 4-2 3-3 5-4 6-5 ||| 1
+! " , sagte ich zu ||| ! " I said to ||| 0.0571221 0.00917533 ||| 0-0 1-1 4-2 3-3 5-4 ||| 1
+! " , sagte ich ||| ! " I said ||| 0.0571221 0.00917533 ||| 0-0 1-1 4-2 3-3 ||| 1
+! " , sagte ||| , " replied ||| 0.0571221 0.118338 ||| 0-0 1-1 3-2 ||| 1
+! " , schrie der Hirtenjunge ||| ! " , cried the shepherd boy ||| 0.0571221 0.00917533 ||| 0-0 1-1 2-2 3-3 4-4 5-5 5-6 ||| 1
+! " , schrie der ||| ! " , cried the ||| 0.0571221 0.00917533 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! " , schrie ||| ! " , cried ||| 0.0571221 0.00917533 ||| 0-0 1-1 2-2 3-3 ||| 1
+! " , sondern damit es ||| ! ' , but so that they ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 4-4 4-5 5-6 ||| 1
+! " , sondern damit ||| ! ' , but so that ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 4-4 4-5 ||| 1
+! " , sondern ||| ! ' , but ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 ||| 1
+! " , und fuhr fort , ||| ! ' and ||| 0.0571221 0.0449274 ||| 0-0 1-1 3-2 ||| 1
+! " , und fuhr fort ||| ! ' and ||| 0.0571221 0.0449274 ||| 0-0 1-1 3-2 ||| 1
+! " , und fuhr ||| ! ' and ||| 0.0571221 0.0449274 ||| 0-0 1-1 3-2 ||| 1
+! " , und ||| ! ' and ||| 0.0571221 0.0449274 ||| 0-0 1-1 3-2 ||| 1
+! " , weil insgesamt fünf Kollegen ||| , " because altogether five colleagues ||| 0.0571221 0.118338 ||| 0-0 1-1 3-2 4-3 5-4 6-5 ||| 1
+! " , weil insgesamt fünf ||| , " because altogether five ||| 0.0571221 0.118338 ||| 0-0 1-1 3-2 4-3 5-4 ||| 1
+! " , weil insgesamt ||| , " because altogether ||| 0.0571221 0.118338 ||| 0-0 1-1 3-2 4-3 ||| 1
+! " , weil ||| , " because ||| 0.0571221 0.118338 ||| 0-0 1-1 3-2 ||| 1
+! " , worauf Eric antwortet : ||| , ' and Eric says , ||| 0.0571221 0.579445 ||| 0-0 1-1 2-2 3-2 4-3 5-3 5-4 6-4 6-5 ||| 1
+! " , worauf ||| , ' and ||| 0.0571221 0.579445 ||| 0-0 1-1 2-2 3-2 ||| 1
+! " , ||| ! " , ||| 0.0350318 0.00917533 ||| 0-0 1-1 2-2 ||| 22
+! " , ||| ! " ||| 0.0916604 0.00917533 ||| 0-0 1-1 ||| 22
+! " , ||| ! ' , ||| 0.0350318 0.0449274 ||| 0-0 1-1 2-2 ||| 22
+! " , ||| ! ' ||| 0.0916604 0.0449274 ||| 0-0 1-1 ||| 22
+! " , ||| ! †||| 0.00259646 0.0775352 ||| 0-0 1-1 ||| 22
+! " , ||| ' , ||| 0.00259646 0.289866 ||| 0-0 1-0 2-1 ||| 22
+! " , ||| , " ||| 0.0350318 0.118338 ||| 0-0 1-1 ||| 22
+! " , ||| , ||| 0.00259646 1 ||| 0-0 ||| 22
+! " , ||| ? ' ||| 0.00259646 0.579445 ||| 0-0 1-1 ||| 22
+! " , ||| any fish ? ' ||| 0.00259646 0.579445 ||| 0-2 1-3 ||| 22
+! " , ||| done , ||| 0.00259646 1 ||| 0-1 ||| 22
+! " , ||| fish ? ' ||| 0.00259646 0.579445 ||| 0-1 1-2 ||| 22
+! " , ||| give you " , ||| 0.00259646 0.118338 ||| 0-1 1-2 2-3 ||| 22
+! " , ||| to give you " , ||| 0.00259646 0.118338 ||| 0-2 1-3 2-4 ||| 22
+! " , ||| you " , ||| 0.00259646 0.118338 ||| 0-0 1-1 2-2 ||| 22
+! " - obwohl wir doch wissen ||| ' . whereas we know ||| 0.0571221 0.289866 ||| 0-0 1-0 2-1 3-2 4-3 5-4 6-4 ||| 1
+! " - obwohl wir ||| ' . whereas we ||| 0.0571221 0.289866 ||| 0-0 1-0 2-1 3-2 4-3 ||| 1
+! " - obwohl ||| ' . whereas ||| 0.0571221 0.289866 ||| 0-0 1-0 2-1 3-2 ||| 1
+! " - und dies ||| ! ' - and what is ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 4-4 4-5 ||| 1
+! " - und dies übrigens ||| ! ' - and what is more ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 4-4 4-5 5-6 ||| 1
+! " - und ||| ! ' - and ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 ||| 1
+! " - ||| ! ' - ||| 0.028561 0.0449274 ||| 0-0 1-1 2-2 ||| 2
+! " - ||| ' . ||| 0.028561 0.289866 ||| 0-0 1-0 2-1 ||| 2
+! " . und Spinelli , der ||| ! ' ; Spinelli , who ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-2 4-3 5-4 5-5 6-5 ||| 1
+! " . und Spinelli ||| ! ' ; Spinelli ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-2 4-3 ||| 1
+! " . und ||| ! ' ; ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-2 ||| 1
+! " . ||| ! ' . ||| 0.222222 0.0449274 ||| 0-0 1-1 2-2 ||| 18
+! " . ||| ! ' ||| 0.5 0.0224666 ||| 0-0 1-1 2-1 ||| 18
+! " . ||| ! . ||| 0.00317345 0.0775352 ||| 0-0 2-1 ||| 18
+! " . ||| ' . ||| 0.00317345 0.579445 ||| 1-0 2-1 ||| 18
+! " . ||| . †||| 0.00317345 1 ||| 2-0 0-1 1-1 ||| 18
+! " . ||| a living ! ' . ||| 0.00317345 0.0449274 ||| 0-2 1-3 2-4 ||| 18
+! " . ||| living ! ' . ||| 0.00317345 0.0449274 ||| 0-1 1-2 2-3 ||| 18
+! " : mit der linken Hand ||| ' - ||| 0.0571221 0.289866 ||| 0-0 1-0 2-1 ||| 1
+! " : mit der linken ||| ' - ||| 0.0571221 0.289866 ||| 0-0 1-0 2-1 ||| 1
+! " : mit der ||| ' - ||| 0.0571221 0.289866 ||| 0-0 1-0 2-1 ||| 1
+! " : mit ||| ' - ||| 0.0571221 0.289866 ||| 0-0 1-0 2-1 ||| 1
+! " : ||| ' - ||| 0.0571221 0.289866 ||| 0-0 1-0 2-1 ||| 1
+! " ? ||| ! " ||| 0.028561 0.00461275 ||| 0-0 1-1 2-1 ||| 2
+! " ? ||| ! ' ? ||| 0.028561 0.0449274 ||| 0-0 1-1 2-2 ||| 2
+! " Europa gelingt gemeinsam ! " ||| . ||| 0.0571221 1 ||| 0-0 ||| 1
+! " Europa gelingt gemeinsam ! ||| . ||| 0.0571221 1 ||| 0-0 ||| 1
+! " Europa gelingt gemeinsam ||| . ||| 0.0571221 1 ||| 0-0 ||| 1
+! " Europa gelingt ||| . ||| 0.0571221 1 ||| 0-0 ||| 1
+! " Europa ||| . ||| 0.0571221 1 ||| 0-0 ||| 1
+! " Le nationalisme , c ||| : ' Le nationalisme , c ||| 0.0571221 0.579445 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! " Le nationalisme , ||| : ' Le nationalisme , ||| 0.0571221 0.579445 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! " Le nationalisme ||| : ' Le nationalisme ||| 0.0571221 0.579445 ||| 0-0 1-1 2-2 3-3 ||| 1
+! " Le ||| : ' Le ||| 0.0571221 0.579445 ||| 0-0 1-1 2-2 ||| 1
+! " an die Eurokraten in Brüssel ||| ' to the Brussels Eurocrats ||| 0.0571221 0.289866 ||| 0-0 1-0 2-1 3-2 6-3 4-4 ||| 1
+! " an die ||| ' to the ||| 0.0571221 0.289866 ||| 0-0 1-0 2-1 3-2 ||| 1
+! " an ||| ' to ||| 0.0571221 0.289866 ||| 0-0 1-0 2-1 ||| 1
+! " begrüßt ||| ! ' ||| 0.0571221 0.0449274 ||| 0-0 1-1 ||| 1
+! " das war die Antwort ||| their reply was that ||| 0.0571221 1 ||| 4-0 5-1 3-2 2-3 ||| 1
+! " das war ||| was that ||| 0.0571221 1 ||| 3-0 2-1 ||| 1
+! " das ||| that ||| 0.0571221 1 ||| 2-0 ||| 1
+! " die Milch macht ' s ||| , ' milk is good for you ||| 0.0571221 0.579445 ||| 0-0 1-1 3-2 4-3 4-4 6-6 ||| 1
+! " die Milch macht ' ||| , ' milk is good for ||| 0.028561 0.579445 ||| 0-0 1-1 3-2 4-3 4-4 ||| 2
+! " die Milch macht ' ||| , ' milk is good ||| 0.028561 0.579445 ||| 0-0 1-1 3-2 4-3 4-4 ||| 2
+! " die Milch macht ||| , ' milk is good for ||| 0.028561 0.579445 ||| 0-0 1-1 3-2 4-3 4-4 ||| 2
+! " die Milch macht ||| , ' milk is good ||| 0.028561 0.579445 ||| 0-0 1-1 3-2 4-3 4-4 ||| 2
+! " die Milch ||| , ' milk ||| 0.0571221 0.579445 ||| 0-0 1-1 3-2 ||| 1
+! " die ||| , ' ||| 0.0571221 0.579445 ||| 0-0 1-1 ||| 1
+! " diese Botschaft ||| a message ||| 0.0571221 1 ||| 2-0 3-1 ||| 1
+! " diese ||| a ||| 0.0571221 1 ||| 2-0 ||| 1
+! " geht nicht mehr weiter ||| ! " can no longer continue ||| 0.0571221 0.00917533 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! " geht nicht mehr ||| ! " can no longer ||| 0.0571221 0.00917533 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! " geht nicht ||| ! " can no ||| 0.0571221 0.00917533 ||| 0-0 1-1 2-2 3-3 ||| 1
+! " geht ||| ! " can ||| 0.0571221 0.00917533 ||| 0-0 1-1 2-2 ||| 1
+! " gehört , und denen ||| ! ' , and those ||| 0.028561 0.0449274 ||| 0-0 1-1 3-2 4-3 5-4 ||| 2
+! " gehört , und denen ||| kill ! ' , and those ||| 0.028561 0.0449274 ||| 0-1 1-2 3-3 4-4 5-5 ||| 2
+! " gehört , und ||| ! ' , and ||| 0.028561 0.0449274 ||| 0-0 1-1 3-2 4-3 ||| 2
+! " gehört , und ||| kill ! ' , and ||| 0.028561 0.0449274 ||| 0-1 1-2 3-3 4-4 ||| 2
+! " gehört , ||| ! ' , ||| 0.028561 0.0449274 ||| 0-0 1-1 3-2 ||| 2
+! " gehört , ||| kill ! ' , ||| 0.028561 0.0449274 ||| 0-1 1-2 3-3 ||| 2
+! " gehört ||| ! ' ||| 0.028561 0.0449274 ||| 0-0 1-1 ||| 2
+! " gehört ||| kill ! ' ||| 0.028561 0.0449274 ||| 0-1 1-2 ||| 2
+! " hat das Parlament bereits ||| ! ' , Parliament has already ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 4-3 5-4 5-5 ||| 1
+! " hat das Parlament ||| ! ' , Parliament ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 4-3 ||| 1
+! " hat ||| ! ' , ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 ||| 1
+! " kommen ||| " ||| 0.0571221 0.0592024 ||| 0-0 1-0 ||| 1
+! " mögen ||| ' , may ||| 0.0571221 0.579445 ||| 1-0 0-1 2-2 ||| 1
+! " nicht nur in bezug ||| ' does not just ||| 0.0571221 0.579445 ||| 1-0 2-1 2-2 3-3 ||| 1
+! " nicht nur in ||| ' does not just ||| 0.0571221 0.579445 ||| 1-0 2-1 2-2 3-3 ||| 1
+! " nicht nur ||| ' does not just ||| 0.0571221 0.579445 ||| 1-0 2-1 2-2 3-3 ||| 1
+! " nicht ||| ' does not ||| 0.0571221 0.579445 ||| 1-0 2-1 2-2 ||| 1
+! " oder zu Kollegin Harms ||| ! ' , and to Mrs Harms ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-3 3-4 4-5 5-6 ||| 1
+! " oder zu Kollegin ||| ! ' , and to Mrs ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-3 3-4 4-5 ||| 1
+! " oder zu ||| ! ' , and to ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-3 3-4 ||| 1
+! " oder ||| ! ' , and ||| 0.028561 0.0449274 ||| 0-0 1-1 2-3 ||| 2
+! " oder ||| ! ' or ||| 0.028561 0.0449274 ||| 0-0 1-1 2-2 ||| 2
+! " rufe vonseiten der IND ||| ! ' from members of the IND ||| 0.0571221 0.0449274 ||| 0-0 1-1 3-2 4-5 5-6 ||| 1
+! " rufe vonseiten der ||| ! ' from members of the ||| 0.0571221 0.0449274 ||| 0-0 1-1 3-2 4-5 ||| 1
+! " rufe vonseiten ||| ! ' from members of ||| 0.0190407 0.0449274 ||| 0-0 1-1 3-2 ||| 3
+! " rufe vonseiten ||| ! ' from members ||| 0.0190407 0.0449274 ||| 0-0 1-1 3-2 ||| 3
+! " rufe vonseiten ||| ! ' from ||| 0.0190407 0.0449274 ||| 0-0 1-1 3-2 ||| 3
+! " rufe ||| ! ' ||| 0.0571221 0.0449274 ||| 0-0 1-1 ||| 1
+! " rufen , würden wir ||| ' , we would ||| 0.0571221 0.579445 ||| 1-0 3-1 5-2 4-3 ||| 1
+! " rufen , ||| ' , ||| 0.0571221 0.579445 ||| 1-0 3-1 ||| 1
+! " rufen die Föderalisten , und ||| ! ' say the federalists , and ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! " rufen die Föderalisten , ||| ! ' say the federalists , ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! " rufen die Föderalisten ||| ! ' say the federalists ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! " rufen die ||| ! ' say the ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 ||| 1
+! " rufen ||| ! ' say ||| 0.028561 0.0449274 ||| 0-0 1-1 2-2 ||| 2
+! " rufen ||| ' ||| 0.028561 0.579445 ||| 1-0 ||| 2
+! " sagen die ||| , ' say the people on the ||| 0.0571221 0.579445 ||| 0-0 1-1 2-2 3-6 ||| 1
+! " sagen ||| , ' say the people on ||| 0.0142805 0.579445 ||| 0-0 1-1 2-2 ||| 4
+! " sagen ||| , ' say the people ||| 0.0142805 0.579445 ||| 0-0 1-1 2-2 ||| 4
+! " sagen ||| , ' say the ||| 0.0142805 0.579445 ||| 0-0 1-1 2-2 ||| 4
+! " sagen ||| , ' say ||| 0.0142805 0.579445 ||| 0-0 1-1 2-2 ||| 4
+! " steht . ||| ! ' ||| 0.0571221 0.0449274 ||| 0-0 1-1 ||| 1
+! " steht ||| ! ' ||| 0.0571221 0.0449274 ||| 0-0 1-1 ||| 1
+! " und Nizza II ? ||| ! ' and Nice II ? ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! " und Nizza II ||| ! ' and Nice II ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! " und Nizza ||| ! ' and Nice ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 ||| 1
+! " und schlagen uns an die ||| ! ' and beat our ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! " und schlagen uns an ||| ! ' and beat our ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! " und schlagen uns ||| ! ' and beat our ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! " und schlagen ||| ! ' and beat ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 ||| 1
+! " und ||| ! ' and ||| 0.38535 0.0449274 ||| 0-0 1-1 2-2 ||| 2
+! " vereinen ||| ! ' ||| 0.0571221 0.0449274 ||| 0-0 1-1 ||| 1
+! " zu allen Formen des Protektionismus ||| ! ' to all forms of protectionism ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! " zu allen Formen des ||| ! ' to all forms of ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! " zu allen Formen ||| ! ' to all forms ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! " zu allen ||| ! ' to all ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 ||| 1
+! " zu ||| ! ' to ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 ||| 1
+! " zur Offenheit und zum Wettbewerb ||| ! ' to openness and competition ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 4-4 6-5 ||| 1
+! " zur Offenheit und zum ||| ! ' to openness and ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! " zur Offenheit und ||| ! ' to openness and ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! " zur Offenheit ||| ! ' to openness ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 3-3 ||| 1
+! " zur ||| ! ' to ||| 0.0571221 0.0449274 ||| 0-0 1-1 2-2 ||| 1
+! " ||| ! " . ||| 0.000245159 0.00917533 ||| 0-0 1-1 0-2 ||| 233
+! " ||| ! " ||| 0.124464 0.00917533 ||| 0-0 1-1 ||| 233
+! " ||| ! ' ' really ? ' ||| 0.000245159 0.0150846 ||| 0-0 1-1 1-2 0-3 0-4 1-5 ||| 233
+! " ||| ! ' , ||| 0.000245159 0.0449274 ||| 0-0 1-1 ||| 233
+! " ||| ! ' . ||| 0.0171674 0.0449274 ||| 0-0 1-1 ||| 233
+! " ||| ! ' ||| 0.433476 0.0449274 ||| 0-0 1-1 ||| 233
+! " ||| ! .... ' ||| 0.000245159 0.0449274 ||| 0-0 1-2 ||| 233
+! " ||| ! ||| 0.0300429 0.0775352 ||| 0-0 ||| 233
+! " ||| ! †||| 0.00330773 0.0775352 ||| 0-0 1-1 ||| 233
+! " ||| " . ||| 0.00330773 0.118338 ||| 1-0 0-1 ||| 233
+! " ||| " ||| 0.00330773 0.0592024 ||| 0-0 1-0 ||| 233
+! " ||| ' ! ||| 0.00330773 0.0449274 ||| 1-0 0-1 ||| 233
+! " ||| ' , ||| 0.000245159 0.579445 ||| 1-0 0-1 ||| 233
+! " ||| ' . ||| 0.0515021 0.579445 ||| 1-0 0-1 ||| 233
+! " ||| ' ||| 0.0343348 0.289866 ||| 0-0 1-0 ||| 233
+! " ||| , " ||| 0.00330773 0.118338 ||| 0-0 1-1 ||| 233
+! " ||| , ' ||| 0.0171674 0.579445 ||| 0-0 1-1 ||| 233
+! " ||| , that ||| 0.000245159 1 ||| 0-0 ||| 233
+! " ||| , ||| 0.0214592 1 ||| 0-0 ||| 233
+! " ||| . " ! ||| 0.000245159 0.00917533 ||| 0-0 1-1 0-2 ||| 233
+! " ||| . " ||| 0.00865463 0.118338 ||| 0-0 1-1 ||| 233
+! " ||| . ' ||| 0.00330773 0.579445 ||| 0-0 1-1 ||| 233
+! " ||| . ||| 0.0429185 1 ||| 0-0 ||| 233
+! " ||| : ' ||| 0.000245159 0.579445 ||| 0-0 1-1 ||| 233
+! " ||| ? ' ||| 0.00330773 0.579445 ||| 0-0 1-1 ||| 233
+! " ||| Commission to ||| 0.000245159 1 ||| 0-0 ||| 233
+! " ||| Commission ||| 0.000245159 1 ||| 0-0 ||| 233
+! " ||| a living ! ' ||| 0.000245159 0.0449274 ||| 0-2 1-3 ||| 233
+! " ||| any fish ? ' ||| 0.000245159 0.579445 ||| 0-2 1-3 ||| 233
+! " ||| asked the Commission to ||| 0.000245159 1 ||| 0-2 ||| 233
+! " ||| asked the Commission ||| 0.000245159 1 ||| 0-2 ||| 233
+! " ||| bearing the ||| 0.000245159 1 ||| 0-1 ||| 233
+! " ||| common ||| 0.000245159 1 ||| 0-0 ||| 233
+! " ||| done , ||| 0.000245159 1 ||| 0-1 ||| 233
+! " ||| face ! " ||| 0.000245159 0.00917533 ||| 0-1 1-2 ||| 233
+! " ||| fish ? ' ||| 0.000245159 0.579445 ||| 0-1 1-2 ||| 233
+! " ||| give you " ||| 0.000245159 0.118338 ||| 0-1 1-2 ||| 233
+! " ||| kill ! ' ||| 0.000245159 0.0449274 ||| 0-1 1-2 ||| 233
+! " ||| living ! ' ||| 0.000245159 0.0449274 ||| 0-1 1-2 ||| 233
+! " ||| may ||| 0.000245159 1 ||| 0-0 ||| 233
+! " ||| more common ||| 0.000245159 1 ||| 0-1 ||| 233
+! " ||| of products bearing the ||| 0.000245159 1 ||| 0-3 ||| 233
+! " ||| one ' . ||| 0.000245159 0.579445 ||| 0-0 1-1 0-2 ||| 233
+! " ||| products bearing the ||| 0.000245159 1 ||| 0-2 ||| 233
+! " ||| term , ' ||| 0.000245159 0.579445 ||| 0-1 1-2 ||| 233
+! " ||| the Commission to ||| 0.000245159 1 ||| 0-1 ||| 233
+! " ||| the Commission ||| 0.000245159 1 ||| 0-1 ||| 233
+! " ||| the ||| 0.00330773 1 ||| 0-0 ||| 233
+! " ||| to give you " ||| 0.000245159 0.118338 ||| 0-2 1-3 ||| 233
+! " ||| uneven ' . ||| 0.000245159 0.579445 ||| 1-1 0-2 ||| 233
+! " ||| you " ||| 0.000245159 0.118338 ||| 0-0 1-1 ||| 233
+! " ||| †||| 0.000245159 1 ||| 0-0 1-0 ||| 233
+! ' , dann sage ich ||| ' . I would ||| 0.0571221 0.545017 ||| 1-0 0-1 5-2 4-3 ||| 1
+! ' , dann ||| ' . ||| 0.0571221 0.545017 ||| 1-0 0-1 ||| 1
+! ' , diese Aufforderung ||| ! ' is the message ||| 0.0571221 0.042258 ||| 0-0 1-1 3-3 4-4 ||| 1
+! ' , diese ||| ! ' is the ||| 0.0571221 0.042258 ||| 0-0 1-1 3-3 ||| 1
+! ' , sollte Gegenstand von ||| ' , should ||| 0.0571221 0.272653 ||| 0-0 1-0 2-1 3-2 ||| 1
+! ' , sollte Gegenstand ||| ' , should ||| 0.0571221 0.272653 ||| 0-0 1-0 2-1 3-2 ||| 1
+! ' , sollte ||| ' , should ||| 0.0571221 0.272653 ||| 0-0 1-0 2-1 3-2 ||| 1
+! ' , womit ||| ! ' , ||| 0.0571221 0.042258 ||| 0-0 1-1 2-2 ||| 1
+! ' , ||| ! ' , ||| 0.0114244 0.042258 ||| 0-0 1-1 2-2 ||| 5
+! ' , ||| ! ' is ||| 0.0114244 0.042258 ||| 0-0 1-1 ||| 5
+! ' , ||| ! ' ||| 0.0114244 0.042258 ||| 0-0 1-1 ||| 5
+! ' , ||| ' , ||| 0.0114244 0.272653 ||| 0-0 1-0 2-1 ||| 5
+! ' , ||| ' . ||| 0.0114244 0.545017 ||| 1-0 0-1 ||| 5
+! ' - wir lassen uns ||| ! ' ||| 0.0571221 0.042258 ||| 0-0 1-1 ||| 1
+! ' - wir lassen ||| ! ' ||| 0.0571221 0.042258 ||| 0-0 1-1 ||| 1
+! ' - wir ||| ! ' ||| 0.0571221 0.042258 ||| 0-0 1-1 ||| 1
+! ' - ||| ! ' ||| 0.0571221 0.042258 ||| 0-0 1-1 ||| 1
+! ' . aber dort gibt ||| ! ' , but there are widely ||| 0.028561 0.042258 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 2
+! ' . aber dort gibt ||| ! ' , but there are ||| 0.028561 0.042258 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 2
+! ' . aber dort ||| ! ' , but there ||| 0.0571221 0.042258 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! ' . aber ||| ! ' , but ||| 0.0571221 0.042258 ||| 0-0 1-1 2-2 3-3 ||| 1
+! ' . ||| ! ' , ||| 0.0190407 0.042258 ||| 0-0 1-1 2-2 ||| 3
+! ' . ||| ! ' ||| 0.0190407 0.0211319 ||| 0-0 1-1 2-1 ||| 3
+! ' . ||| . ||| 0.0190407 1 ||| 2-0 ||| 3
+! ' Stand , ||| ! ' , ||| 0.0571221 0.042258 ||| 0-0 1-1 3-2 ||| 1
+! ' Stand ||| ! ' ||| 0.0571221 0.042258 ||| 0-0 1-1 ||| 1
+! ' rufen , ||| ! ' and then murder ||| 0.0190407 0.042258 ||| 0-0 1-1 3-2 ||| 3
+! ' rufen , ||| ! ' and then ||| 0.0190407 0.042258 ||| 0-0 1-1 3-2 ||| 3
+! ' rufen , ||| ! ' and ||| 0.0190407 0.042258 ||| 0-0 1-1 3-2 ||| 3
+! ' rufen ||| ! ' ||| 0.0571221 0.042258 ||| 0-0 1-1 ||| 1
+! ' ||| ! ' , and ||| 0.00112004 0.042258 ||| 0-0 1-1 0-2 ||| 51
+! ' ||| ! ' , ||| 0.00112004 0.042258 ||| 0-0 1-1 0-2 ||| 51
+! ' ||| ! ' . ||| 0.00112004 0.042258 ||| 0-0 1-1 ||| 51
+! ' ||| ! ' is ||| 0.00112004 0.042258 ||| 0-0 1-1 ||| 51
+! ' ||| ! ' ||| 0.490196 0.042258 ||| 0-0 1-1 ||| 51
+! ' ||| ' ! ||| 0.00112004 0.042258 ||| 1-0 0-1 ||| 51
+! ' ||| ' , and ||| 0.00112004 0.545017 ||| 1-0 0-1 ||| 51
+! ' ||| ' , ||| 0.00112004 0.545017 ||| 1-0 0-1 ||| 51
+! ' ||| ' . ||| 0.0784314 0.545017 ||| 1-0 0-1 ||| 51
+! ' ||| ' ||| 0.0151118 0.272653 ||| 0-0 1-0 ||| 51
+! ' ||| 't . ' ||| 0.00112004 0.545017 ||| 0-1 1-2 ||| 51
+! ' ||| . ' ||| 0.0784314 0.545017 ||| 0-0 1-1 ||| 51
+! ' ||| . ||| 0.00112004 1 ||| 0-0 ||| 51
+! ' ||| ? " ||| 0.00112004 0.0291059 ||| 0-0 1-1 ||| 51
+! ' ||| ? ' ||| 0.00112004 0.545017 ||| 0-0 1-1 ||| 51
+! ' ||| ? ||| 0.00112004 1 ||| 0-0 ||| 51
+! ' ||| hook ' ! ||| 0.00112004 0.042258 ||| 1-1 0-2 ||| 51
+! ' ||| in 't . ' ||| 0.00112004 0.545017 ||| 0-2 1-3 ||| 51
+! ' ||| luck ! ' ||| 0.00112004 0.042258 ||| 0-1 1-2 ||| 51
+! ' ||| of . ' ||| 0.00112004 0.545017 ||| 0-1 1-2 ||| 51
+! ( 1 ) ||| . ( 1 ) ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! ( 1 ||| . ( 1 ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! ( ||| . ( ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! ) , Forschung , Wettbewerbsfähigkeit und ||| ! ) , research , competitiveness and ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! ) , Forschung , Wettbewerbsfähigkeit ||| ! ) , research , competitiveness ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! ) , Forschung , ||| ! ) , research , ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! ) , Forschung ||| ! ) , research ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 ||| 1
+! ) , die die Arbeitslosenunterstützung ||| ! ) which unemployment benefit ||| 0.0571221 0.0775352 ||| 0-0 1-1 3-2 4-2 4-3 5-3 5-4 ||| 1
+! ) , geht . ||| ! ) ||| 0.0571221 0.0775352 ||| 0-0 1-1 ||| 1
+! ) , geht ||| ! ) ||| 0.0571221 0.0775352 ||| 0-0 1-1 ||| 1
+! ) , mit der Rodung von ||| ! ) , the grubbing-up of ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 4-3 5-4 6-5 ||| 1
+! ) , mit der Rodung ||| ! ) , the grubbing-up ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 4-3 5-4 ||| 1
+! ) , mit der ||| ! ) , the ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 4-3 ||| 1
+! ) , mit ||| ! ) , ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 ||| 1
+! ) , und schließlich ||| ! ) and , finally , ||| 0.0571221 0.0775352 ||| 0-0 1-1 3-2 2-3 4-4 4-5 ||| 1
+! ) , und ||| ! ) and , ||| 0.0571221 0.0775352 ||| 0-0 1-1 3-2 2-3 ||| 1
+! ) , während ||| ! ) , while ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 ||| 1
+! ) , während über 100 ||| ! ) , while over 100 ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! ) , während über ||| ! ) , while over ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! ) , ||| ! ) , ||| 0.666667 0.0775352 ||| 0-0 1-1 2-2 ||| 6
+! ) , ||| ! ) ||| 0.12845 0.0775352 ||| 0-0 1-1 ||| 6
+! ) . seit einigen Jahren ||| , and for a number of years ||| 0.38535 1 ||| 0-0 2-1 3-2 4-3 4-4 5-6 ||| 2
+! ) . seit einigen ||| , and for a number of ||| 0.0963376 1 ||| 0-0 2-1 3-2 4-3 4-4 ||| 8
+! ) . seit einigen ||| , and for a number ||| 0.0963376 1 ||| 0-0 2-1 3-2 4-3 4-4 ||| 8
+! ) . seit einigen ||| recycled , and for a number of ||| 0.0963376 1 ||| 0-1 2-2 3-3 4-4 4-5 ||| 8
+! ) . seit einigen ||| recycled , and for a number ||| 0.0963376 1 ||| 0-1 2-2 3-3 4-4 4-5 ||| 8
+! ) . seit ||| , and for ||| 0.192675 1 ||| 0-0 2-1 3-2 ||| 4
+! ) . seit ||| recycled , and for ||| 0.192675 1 ||| 0-1 2-2 3-3 ||| 4
+! ) . ||| ! ) . ||| 0.0856334 0.0775352 ||| 0-0 1-1 2-2 ||| 9
+! ) . ||| ! ) ||| 0.0063469 0.0775352 ||| 0-0 1-1 2-1 ||| 9
+! ) . ||| ! ||| 0.0063469 0.0775352 ||| 0-0 ||| 9
+! ) . ||| ) . ||| 0.0063469 1 ||| 1-0 0-1 2-1 ||| 9
+! ) . ||| , and ||| 0.0856334 1 ||| 0-0 2-1 ||| 9
+! ) . ||| recycled , and ||| 0.0856334 1 ||| 0-1 2-2 ||| 9
+! ) Herr Kollege Ferber , ||| ! " ) Mr Ferber , ||| 0.0571221 1.7585e-05 ||| 0-0 1-2 2-3 3-4 4-4 5-5 ||| 1
+! ) Herr Kollege Ferber ||| ! " ) Mr Ferber ||| 0.0571221 1.7585e-05 ||| 0-0 1-2 2-3 3-4 4-4 ||| 1
+! ) Herr ||| ! " ) Mr ||| 0.0571221 1.7585e-05 ||| 0-0 1-2 2-3 ||| 1
+! ) Marktwirtschaft , die von einem ||| ! ) market economy ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 ||| 1
+! ) Marktwirtschaft , die von ||| ! ) market economy ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 ||| 1
+! ) Marktwirtschaft , die ||| ! ) market economy ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 ||| 1
+! ) Marktwirtschaft , ||| ! ) market economy ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 ||| 1
+! ) Marktwirtschaft ||| ! ) market economy ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 ||| 1
+! ) allein für ||| ! ) just for ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 ||| 1
+! ) allein ||| ! ) just ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 ||| 1
+! ) bei . ||| ) . ||| 0.0571221 1 ||| 1-0 3-1 ||| 1
+! ) bei ||| ) ||| 0.0571221 1 ||| 1-0 ||| 1
+! ) bezeichnet wird , hat ||| ! ) , has ||| 0.0571221 0.0775352 ||| 0-0 1-1 4-2 5-3 ||| 1
+! ) bezeichnet wird , ||| ! ) , ||| 0.0571221 0.0775352 ||| 0-0 1-1 4-2 ||| 1
+! ) bezeichnet wird ||| ! ) ||| 0.0571221 0.0775352 ||| 0-0 1-1 ||| 1
+! ) bezeichnet ||| ! ) ||| 0.0571221 0.0775352 ||| 0-0 1-1 ||| 1
+! ) das ||| the ||| 0.0571221 1 ||| 2-0 ||| 1
+! ) dürfen nicht verwendet ( missbraucht ||| ! ) cannot be used ( misused ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-2 3-3 4-4 5-5 6-6 ||| 1
+! ) dürfen nicht verwendet ( ||| ! ) cannot be used ( ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-2 3-3 4-4 5-5 ||| 1
+! ) dürfen nicht verwendet ||| ! ) cannot be used ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-2 3-3 4-4 ||| 1
+! ) dürfen nicht ||| ! ) cannot be ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-2 3-3 ||| 1
+! ) für den Fall der ||| ! ) in the event that we ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 5-6 ||| 1
+! ) für den Fall ||| ! ) in the event that ||| 0.028561 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 ||| 2
+! ) für den Fall ||| ! ) in the event ||| 0.028561 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 ||| 2
+! ) für den ||| ! ) in the ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 ||| 1
+! ) für die Umsetzung der ||| ! ) before they apply the ||| 0.0571221 0.0775352 ||| 0-0 1-1 3-3 4-4 5-5 ||| 1
+! ) für die Umsetzung ||| ! ) before they apply ||| 0.0571221 0.0775352 ||| 0-0 1-1 3-3 4-4 ||| 1
+! ) für die ||| ! ) before they ||| 0.0571221 0.0775352 ||| 0-0 1-1 3-3 ||| 1
+! ) für ||| ! ) before ||| 0.0190407 0.0775352 ||| 0-0 1-1 ||| 3
+! ) für ||| ! ) in ||| 0.0190407 0.0775352 ||| 0-0 1-1 2-2 ||| 3
+! ) für ||| ! ) ||| 0.0190407 0.0775352 ||| 0-0 1-1 ||| 3
+! ) großen Not ||| ! ) high level of need ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 3-5 ||| 1
+! ) großen ||| ! ) high ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 ||| 1
+! ) oder ihr Egonet ||| ! ) , or rather their egonet ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-3 4-4 3-5 4-6 ||| 1
+! ) oder ||| ! ) , or ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-3 ||| 1
+! ) und die Schaffung nationaler Finanzmärkte ||| ! ) and create national financial markets ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 4-3 5-4 6-5 6-6 ||| 1
+! ) und die Schaffung nationaler ||| ! ) and create national ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 4-3 5-4 ||| 1
+! ) und die Schaffung ||| ! ) and create ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 4-3 ||| 1
+! ) und die ||| ! ) and ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 ||| 1
+! ) und häufig unverständliche ||| ! ) and often unreadable ||| 0.028561 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 ||| 2
+! ) und häufig unverständliche ||| ! ) and often unreadable – ||| 0.028561 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 ||| 2
+! ) und häufig ||| ! ) and often ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 ||| 1
+! ) und ||| ! ) and ||| 0.38535 0.0775352 ||| 0-0 1-1 2-2 ||| 2
+! ) vertritt ||| ! ) ||| 0.0571221 0.0775352 ||| 0-0 1-1 ||| 1
+! ) ||| ! " ) ||| 0.000906699 1.7585e-05 ||| 0-0 1-2 ||| 63
+! ) ||| ! ) , ||| 0.000906699 0.0775352 ||| 0-0 1-1 ||| 63
+! ) ||| ! ) before ||| 0.000906699 0.0775352 ||| 0-0 1-1 ||| 63
+! ) ||| ! ) ||| 0.714286 0.0775352 ||| 0-0 1-1 ||| 63
+! ) ||| ! - ||| 0.000906699 0.0775352 ||| 0-0 1-1 ||| 63
+! ) ||| ! ] ||| 0.000906699 0.0775352 ||| 0-0 1-1 ||| 63
+! ) ||| ! ||| 0.0122333 0.0775352 ||| 0-0 ||| 63
+! ) ||| ) ||| 0.000906699 1 ||| 1-0 ||| 63
+! ) ||| , ||| 0.0793651 1 ||| 0-0 ||| 63
+! ) ||| Latin ! ) ||| 0.000906699 0.0775352 ||| 0-1 1-2 ||| 63
+! ) ||| arrival ! ) ||| 0.000906699 0.0775352 ||| 0-1 1-2 ||| 63
+! ) ||| recycled , ||| 0.0122333 1 ||| 0-1 ||| 63
+! ) ||| the ||| 0.000906699 1 ||| 0-0 ||| 63
+! ) über die ||| ! ) on the ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 ||| 1
+! ) über die Änderung der ||| ! ) on the amendment of ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! ) über die Änderung ||| ! ) on the amendment ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! ) über ||| ! ) on ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 ||| 1
+! , dem Gewinner des Sacharow-Preises in ||| ! , the Sakharov Prize winner in ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 5-3 4-4 5-4 3-5 6-6 ||| 1
+! , dem Gewinner des Sacharow-Preises ||| ! , the Sakharov Prize winner ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 5-3 4-4 5-4 3-5 ||| 1
+! , dem ||| ! , the ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 ||| 1
+! , war ebenfalls kein Beitrag zur ||| ! " did little to ||| 0.0571221 1.7585e-05 ||| 0-0 6-4 ||| 1
+! , war ebenfalls kein Beitrag ||| ! " did little ||| 0.0142805 1.7585e-05 ||| 0-0 ||| 4
+! , war ebenfalls kein Beitrag ||| ! " did ||| 0.0142805 1.7585e-05 ||| 0-0 ||| 4
+! , war ebenfalls kein Beitrag ||| ! " ||| 0.0142805 1.7585e-05 ||| 0-0 ||| 4
+! , war ebenfalls kein Beitrag ||| ! ||| 0.0142805 0.0775352 ||| 0-0 ||| 4
+! , war ebenfalls kein ||| ! " did little ||| 0.0142805 1.7585e-05 ||| 0-0 ||| 4
+! , war ebenfalls kein ||| ! " did ||| 0.0142805 1.7585e-05 ||| 0-0 ||| 4
+! , war ebenfalls kein ||| ! " ||| 0.0142805 1.7585e-05 ||| 0-0 ||| 4
+! , war ebenfalls kein ||| ! ||| 0.0142805 0.0775352 ||| 0-0 ||| 4
+! , war ebenfalls ||| ! " did little ||| 0.0142805 1.7585e-05 ||| 0-0 ||| 4
+! , war ebenfalls ||| ! " did ||| 0.0142805 1.7585e-05 ||| 0-0 ||| 4
+! , war ebenfalls ||| ! " ||| 0.0142805 1.7585e-05 ||| 0-0 ||| 4
+! , war ebenfalls ||| ! ||| 0.0142805 0.0775352 ||| 0-0 ||| 4
+! , war ||| ! " did little ||| 0.0142805 1.7585e-05 ||| 0-0 ||| 4
+! , war ||| ! " did ||| 0.0142805 1.7585e-05 ||| 0-0 ||| 4
+! , war ||| ! " ||| 0.0142805 1.7585e-05 ||| 0-0 ||| 4
+! , war ||| ! ||| 0.0142805 0.0775352 ||| 0-0 ||| 4
+! , ||| ! " did little ||| 0.00952034 1.7585e-05 ||| 0-0 ||| 6
+! , ||| ! " did ||| 0.00952034 1.7585e-05 ||| 0-0 ||| 6
+! , ||| ! " ||| 0.00952034 1.7585e-05 ||| 0-0 ||| 6
+! , ||| ! , ||| 0.00952034 0.0775352 ||| 0-0 1-1 ||| 6
+! , ||| ! ||| 0.00952034 0.0775352 ||| 0-0 ||| 6
+! , ||| , ||| 0.00952034 1 ||| 0-0 ||| 6
+! - ' Es reicht ' ||| ! - ' Enough is enough ' ||| 0.0571221 0.0230313 ||| 0-0 1-1 2-2 3-3 4-4 4-5 5-6 ||| 1
+! - ' Es reicht ||| ! - ' Enough is enough ||| 0.0571221 0.042258 ||| 0-0 1-1 2-2 3-3 4-4 4-5 ||| 1
+! - ' Es ||| ! - ' Enough ||| 0.0571221 0.042258 ||| 0-0 1-1 2-2 3-3 ||| 1
+! - ' ||| ! - ' ||| 0.0571221 0.042258 ||| 0-0 1-1 2-2 ||| 1
+! - , dass wir mehr wollen ||| ! we want more ||| 0.0571221 0.0775352 ||| 0-0 4-1 3-2 6-2 5-3 ||| 1
+! - , die mit ||| ! - that have been treated with ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-2 3-3 4-5 4-6 ||| 1
+! - , die ||| ! - that have been ||| 0.0114244 0.0775352 ||| 0-0 1-1 2-2 3-2 3-3 ||| 5
+! - , die ||| ! - that have ||| 0.0114244 0.0775352 ||| 0-0 1-1 2-2 3-2 3-3 ||| 5
+! - , die ||| ! - which ||| 0.0114244 0.0775352 ||| 0-0 1-1 2-2 3-2 ||| 5
+! - , die ||| ! - who ||| 0.0114244 0.0775352 ||| 0-0 1-1 2-2 3-2 ||| 5
+! - , die ||| ! - ||| 0.0114244 0.0775352 ||| 0-0 1-1 ||| 5
+! - , doch die britische Regierung ||| ! - but the British Government ||| 0.0571221 0.0775352 ||| 0-0 1-1 3-2 4-3 5-4 6-5 ||| 1
+! - , doch die britische ||| ! - but the British ||| 0.0571221 0.0775352 ||| 0-0 1-1 3-2 4-3 5-4 ||| 1
+! - , doch die ||| ! - but the ||| 0.0571221 0.0775352 ||| 0-0 1-1 3-2 4-3 ||| 1
+! - , doch ||| ! - but ||| 0.0571221 0.0775352 ||| 0-0 1-1 3-2 ||| 1
+! - , ist zu ersehen ||| ! ) , we see ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 4-3 5-4 ||| 1
+! - , ist zu ||| ! ) , we ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 4-3 ||| 1
+! - , ist ||| ! ) , ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 ||| 1
+! - , möchte ich meinerseits ||| ! - I would like to ||| 0.028561 0.0775352 ||| 0-0 1-1 4-2 3-3 3-4 3-5 ||| 2
+! - , möchte ich meinerseits ||| surprise ! - I would like to ||| 0.028561 0.0775352 ||| 0-1 1-2 4-3 3-4 3-5 3-6 ||| 2
+! - , möchte ich ||| ! - I would like to ||| 0.028561 0.0775352 ||| 0-0 1-1 4-2 3-3 3-4 3-5 ||| 2
+! - , möchte ich ||| surprise ! - I would like to ||| 0.028561 0.0775352 ||| 0-1 1-2 4-3 3-4 3-5 3-6 ||| 2
+! - , so wie es ja ||| . this is ||| 0.028561 1 ||| 0-0 5-1 6-2 ||| 2
+! - , so wie es ja ||| indeed . this is ||| 0.028561 1 ||| 0-1 5-2 6-3 ||| 2
+! - , so wie es ||| . this ||| 0.028561 1 ||| 0-0 5-1 ||| 2
+! - , so wie es ||| indeed . this ||| 0.028561 1 ||| 0-1 5-2 ||| 2
+! - , so wie ||| . ||| 0.028561 1 ||| 0-0 ||| 2
+! - , so wie ||| indeed . ||| 0.028561 1 ||| 0-1 ||| 2
+! - , so ||| . ||| 0.028561 1 ||| 0-0 ||| 2
+! - , so ||| indeed . ||| 0.028561 1 ||| 0-1 ||| 2
+! - , sondern daß sogar geradezu ||| ? - but that ||| 0.0571221 1 ||| 0-0 1-1 3-2 2-3 4-3 ||| 1
+! - , sondern daß sogar ||| ? - but that ||| 0.0571221 1 ||| 0-0 1-1 3-2 2-3 4-3 ||| 1
+! - , sondern daß ||| ? - but that ||| 0.0571221 1 ||| 0-0 1-1 3-2 2-3 4-3 ||| 1
+! - , um uns dann , ||| it - and then , ||| 0.0571221 1 ||| 0-0 1-1 2-2 5-3 6-4 ||| 1
+! - , um uns dann ||| it - and then ||| 0.0571221 1 ||| 0-0 1-1 2-2 5-3 ||| 1
+! - , um uns ||| it - and ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! - , um ||| it - and ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! - , von dem ||| ! - in favour ||| 0.028561 0.0775352 ||| 0-0 1-1 3-2 ||| 2
+! - , von dem ||| ! - in ||| 0.028561 0.0775352 ||| 0-0 1-1 3-2 ||| 2
+! - , von ||| ! - in favour ||| 0.028561 0.0775352 ||| 0-0 1-1 3-2 ||| 2
+! - , von ||| ! - in ||| 0.028561 0.0775352 ||| 0-0 1-1 3-2 ||| 2
+! - , wohingegen man ||| ! - whereas one ||| 0.0571221 0.0775352 ||| 0-0 1-1 3-2 4-3 ||| 1
+! - , wohingegen ||| ! - whereas ||| 0.0571221 0.0775352 ||| 0-0 1-1 3-2 ||| 1
+! - , während diejenigen , die ||| ! - while those responsible for the ||| 0.0571221 0.0775352 ||| 0-0 1-1 3-2 4-3 4-4 6-6 ||| 1
+! - , während diejenigen , ||| ! - while those responsible for ||| 0.028561 0.0775352 ||| 0-0 1-1 3-2 4-3 4-4 ||| 2
+! - , während diejenigen , ||| ! - while those responsible ||| 0.028561 0.0775352 ||| 0-0 1-1 3-2 4-3 4-4 ||| 2
+! - , während diejenigen ||| ! - while those responsible for ||| 0.028561 0.0775352 ||| 0-0 1-1 3-2 4-3 4-4 ||| 2
+! - , während diejenigen ||| ! - while those responsible ||| 0.028561 0.0775352 ||| 0-0 1-1 3-2 4-3 4-4 ||| 2
+! - , während ||| ! - while ||| 0.0571221 0.0775352 ||| 0-0 1-1 3-2 ||| 1
+! - , ||| ! ) , ||| 0.00357013 0.0775352 ||| 0-0 1-1 2-2 ||| 16
+! - , ||| ! - ||| 0.4375 0.0775352 ||| 0-0 1-1 ||| 16
+! - , ||| ! ||| 0.00357013 0.0775352 ||| 0-0 ||| 16
+! - , ||| - which ||| 0.00357013 1 ||| 1-0 2-1 ||| 16
+! - , ||| - ||| 0.00357013 1 ||| 0-0 1-0 ||| 16
+! - , ||| . ||| 0.00357013 1 ||| 0-0 ||| 16
+! - , ||| indeed . ||| 0.00357013 1 ||| 0-1 ||| 16
+! - , ||| it - and ||| 0.00357013 1 ||| 0-0 1-1 2-2 ||| 16
+! - , ||| surprise ! - ||| 0.00357013 0.0775352 ||| 0-1 1-2 ||| 16
+! - , ||| we ||| 0.00357013 1 ||| 0-0 ||| 16
+! - Die ||| - the United Nations ||| 0.0190407 1 ||| 0-0 1-0 2-1 ||| 3
+! - Die ||| - the United ||| 0.0190407 1 ||| 0-0 1-0 2-1 ||| 3
+! - Die ||| - the ||| 0.0190407 1 ||| 0-0 1-0 2-1 ||| 3
+! - Es sind ||| the two draftsmen have presented ||| 0.0571221 1 ||| 0-0 2-1 2-2 3-3 2-4 ||| 1
+! - Frage von Unvereinbarkeiten ||| ! – incompatibilities arise ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 4-2 4-3 ||| 1
+! - Frau Präsidentin , ich wurde ||| ! - Madam President , I was ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! - Frau Präsidentin , ich ||| ! - Madam President , I ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! - Frau Präsidentin , ||| ! - Madam President , ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! - Frau Präsidentin ||| ! - Madam President ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 ||| 1
+! - Frau ||| ! - Madam ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 ||| 1
+! - Kernkraftwerke errichtet werden ||| ! ) nuclear power stations built ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 2-4 3-5 ||| 1
+! - Kernkraftwerke errichtet ||| ! ) nuclear power stations built ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 2-4 3-5 ||| 1
+! - Kernkraftwerke ||| ! ) nuclear power stations ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 2-4 ||| 1
+! - Referenden und Volksinitiativen zu stellen ||| ! - of referendums and popular initiatives ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-3 3-4 4-5 4-6 ||| 1
+! - Referenden und Volksinitiativen zu ||| ! - of referendums and popular initiatives ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-3 3-4 4-5 4-6 ||| 1
+! - Referenden und Volksinitiativen ||| ! - of referendums and popular initiatives ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-3 3-4 4-5 4-6 ||| 1
+! - Referenden und ||| ! - of referendums and ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-3 3-4 ||| 1
+! - Referenden ||| ! - of referendums ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-3 ||| 1
+! - Rücksicht ||| into consideration ||| 0.0571221 1 ||| 2-0 2-1 ||| 1
+! - bedeutet eine derart anmaßende ||| , such an arrogant ||| 0.0571221 1 ||| 0-0 1-0 4-1 3-2 4-2 2-3 4-3 5-3 ||| 1
+! - besagen , dass der Zugang ||| ! - stipulate that access ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 4-3 5-4 6-4 ||| 1
+! - besagen , dass ||| ! - stipulate that ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 4-3 ||| 1
+! - besagen ||| ! - stipulate ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 ||| 1
+! - besteht , wie ||| , via ||| 0.0571221 1 ||| 0-0 1-0 2-1 ||| 1
+! - besteht , ||| , via ||| 0.0571221 1 ||| 0-0 1-0 2-1 ||| 1
+! - besteht ||| , via ||| 0.0571221 1 ||| 0-0 1-0 2-1 ||| 1
+! - der Energie vergeudet , bevor ||| ! - of the energy before ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 3-4 6-5 ||| 1
+! - der Energie vergeudet , ||| ! - of the energy ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 3-4 ||| 1
+! - der Energie vergeudet ||| ! - of the energy ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 3-4 ||| 1
+! - der Energie ||| ! - of the energy ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 3-4 ||| 1
+! - der betreffenden Minderheiten ||| , - of the relevant minorities ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-4 4-5 ||| 1
+! - der betreffenden ||| , - of the relevant ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-4 ||| 1
+! - der operativen Ausgaben werden ||| ! - of operational expenses are managed ||| 0.028561 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 2
+! - der operativen Ausgaben werden ||| ! - of operational expenses are ||| 0.028561 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 2
+! - der operativen Ausgaben ||| ! - of operational expenses ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! - der operativen ||| ! - of operational ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 ||| 1
+! - der ||| ! - of the ||| 0.0190407 0.0775352 ||| 0-0 1-1 2-2 2-3 ||| 3
+! - der ||| ! - of ||| 0.0190407 0.0775352 ||| 0-0 1-1 2-2 ||| 3
+! - der ||| , - of the ||| 0.0190407 1 ||| 0-0 1-1 2-2 2-3 ||| 3
+! - die ||| , ||| 0.0571221 1 ||| 0-0 ||| 1
+! - direkte ||| - direct ||| 0.0571221 1 ||| 1-0 2-1 ||| 1
+! - direkte Ãœbertragung , aber auch ||| - direct transmission but also ||| 0.0571221 1 ||| 1-0 2-1 3-2 5-3 6-4 ||| 1
+! - direkte Ãœbertragung , aber ||| - direct transmission but ||| 0.0571221 1 ||| 1-0 2-1 3-2 5-3 ||| 1
+! - direkte Ãœbertragung , ||| - direct transmission ||| 0.0571221 1 ||| 1-0 2-1 3-2 ||| 1
+! - direkte Ãœbertragung ||| - direct transmission ||| 0.0571221 1 ||| 1-0 2-1 3-2 ||| 1
+! - energische Maßnahmen vorgeschlagen hat , ||| ! - proposing powerful measures ||| 0.0571221 0.0775352 ||| 0-0 1-1 4-2 2-3 3-4 ||| 1
+! - energische Maßnahmen vorgeschlagen hat ||| ! - proposing powerful measures ||| 0.0571221 0.0775352 ||| 0-0 1-1 4-2 2-3 3-4 ||| 1
+! - energische Maßnahmen vorgeschlagen ||| ! - proposing powerful measures ||| 0.0571221 0.0775352 ||| 0-0 1-1 4-2 2-3 3-4 ||| 1
+! - im Lauf dieser Woche begonnen ||| - set in motion this week ||| 0.0571221 1 ||| 1-0 6-1 2-2 3-3 4-4 5-5 ||| 1
+! - ist ein klares und durchsichtiges ||| - is a clear , transparent ||| 0.0571221 1 ||| 1-0 2-1 3-2 4-3 5-4 6-5 ||| 1
+! - ist ein klares und ||| - is a clear , ||| 0.0571221 1 ||| 1-0 2-1 3-2 4-3 5-4 ||| 1
+! - ist ein klares ||| - is a clear ||| 0.0571221 1 ||| 1-0 2-1 3-2 4-3 ||| 1
+! - ist ein ||| - is a ||| 0.0571221 1 ||| 1-0 2-1 3-2 ||| 1
+! - ist ||| - is ||| 0.0571221 1 ||| 1-0 2-1 ||| 1
+! - mit beeindruckender Hellsichtigkeit den ||| - with ||| 0.0571221 1 ||| 1-0 2-1 ||| 1
+! - mit beeindruckender Hellsichtigkeit ||| - with ||| 0.0571221 1 ||| 1-0 2-1 ||| 1
+! - mit beeindruckender ||| - with ||| 0.0571221 1 ||| 1-0 2-1 ||| 1
+! - mit ||| - with ||| 0.0571221 1 ||| 1-0 2-1 ||| 1
+! - quer durch alle Fraktionen , ||| ! - all , ||| 0.0571221 0.0775352 ||| 0-0 1-1 4-2 6-3 ||| 1
+! - quer durch alle Fraktionen ||| ! - all ||| 0.0571221 0.0775352 ||| 0-0 1-1 4-2 ||| 1
+! - quer durch alle ||| ! - all ||| 0.0571221 0.0775352 ||| 0-0 1-1 4-2 ||| 1
+! - quer durch ||| ! - ||| 0.0571221 0.0775352 ||| 0-0 1-1 ||| 1
+! - quer ||| ! - ||| 0.0571221 0.0775352 ||| 0-0 1-1 ||| 1
+! - rechtzeitig reagiert : sie hat ||| ! - took timely action : it ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 3-4 4-5 5-6 ||| 1
+! - rechtzeitig reagiert : sie ||| ! - took timely action : it ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 3-4 4-5 5-6 ||| 1
+! - rechtzeitig reagiert : ||| ! - took timely action : ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 3-4 4-5 ||| 1
+! - rechtzeitig reagiert ||| ! - took timely action ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 3-4 ||| 1
+! - rechtzeitig ||| ! - took timely ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 ||| 1
+! - räume ich ein , ||| ! - I recognise ||| 0.0571221 0.0775352 ||| 0-0 1-1 3-2 2-3 4-3 ||| 1
+! - räume ich ein ||| ! - I recognise ||| 0.0571221 0.0775352 ||| 0-0 1-1 3-2 2-3 4-3 ||| 1
+! - sage ich ||| ! - I would say ||| 0.0571221 0.0775352 ||| 0-0 1-1 3-2 2-3 2-4 ||| 1
+! - scheint die Europäische Union jetzt ||| ! - the EU seems ||| 0.0571221 0.0775352 ||| 0-0 1-1 3-2 4-3 5-3 2-4 ||| 1
+! - scheint die Europäische Union ||| ! - the EU seems ||| 0.0571221 0.0775352 ||| 0-0 1-1 3-2 4-3 5-3 2-4 ||| 1
+! - um zu bekräftigen , daß ||| ! - as a reaffirmation of ||| 0.028561 0.0775352 ||| 0-0 1-1 2-2 2-3 4-4 ||| 2
+! - um zu bekräftigen , daß ||| ! - as a reaffirmation ||| 0.028561 0.0775352 ||| 0-0 1-1 2-2 2-3 4-4 ||| 2
+! - um zu bekräftigen , ||| ! - as a reaffirmation of ||| 0.028561 0.0775352 ||| 0-0 1-1 2-2 2-3 4-4 ||| 2
+! - um zu bekräftigen , ||| ! - as a reaffirmation ||| 0.028561 0.0775352 ||| 0-0 1-1 2-2 2-3 4-4 ||| 2
+! - um zu bekräftigen ||| ! - as a reaffirmation of ||| 0.028561 0.0775352 ||| 0-0 1-1 2-2 2-3 4-4 ||| 2
+! - um zu bekräftigen ||| ! - as a reaffirmation ||| 0.028561 0.0775352 ||| 0-0 1-1 2-2 2-3 4-4 ||| 2
+! - um zu ||| ! - as a ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 ||| 1
+! - um ||| ! - as a ||| 0.028561 0.0775352 ||| 0-0 1-1 2-2 2-3 ||| 2
+! - um ||| , ||| 0.028561 1 ||| 0-0 ||| 2
+! - und begrenzt somit die ||| ! - thereby restricting the ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 4-2 3-3 5-3 5-4 ||| 1
+! - und dass die landwirtschaftliche Produktivität ||| - and that agricultural productivity ||| 0.0571221 1 ||| 0-0 1-0 2-1 3-2 4-2 5-3 6-4 ||| 1
+! - und dass die landwirtschaftliche ||| - and that agricultural ||| 0.0571221 1 ||| 0-0 1-0 2-1 3-2 4-2 5-3 ||| 1
+! - und dass die ||| - and that ||| 0.0571221 1 ||| 0-0 1-0 2-1 3-2 4-2 ||| 1
+! - und ideologischer Manipulation ||| ! - and borders on ideological manipulation ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 3-4 3-5 4-6 ||| 1
+! - und ideologischer ||| ! - and borders on ideological ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 3-4 3-5 ||| 1
+! - und nationale Präferenz entschieden ||| - and national preference ||| 0.0571221 1 ||| 0-0 1-0 2-1 3-2 4-3 5-3 ||| 1
+! - und nationale ||| - and national ||| 0.0571221 1 ||| 0-0 1-0 2-1 3-2 ||| 1
+! - und zum ersten ||| ! - and we saw the first ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-5 4-6 ||| 1
+! - und zum ||| ! - and we saw the ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-5 ||| 1
+! - und ||| ! - and we saw ||| 0.00952034 0.0775352 ||| 0-0 1-1 2-2 ||| 6
+! - und ||| ! - and we ||| 0.00952034 0.0775352 ||| 0-0 1-1 2-2 ||| 6
+! - und ||| ! - and ||| 0.12845 0.0775352 ||| 0-0 1-1 2-2 ||| 6
+! - und ||| - and ||| 0.12845 1 ||| 0-0 1-0 2-1 ||| 6
+! - ungefähr 18 Millionen Arbeitslose . ||| , some 18 million unemployed . ||| 0.0571221 1 ||| 0-0 1-0 2-1 3-2 4-3 5-4 6-5 ||| 1
+! - ungefähr 18 Millionen Arbeitslose ||| , some 18 million unemployed ||| 0.0571221 1 ||| 0-0 1-0 2-1 3-2 4-3 5-4 ||| 1
+! - ungefähr 18 Millionen ||| , some 18 million ||| 0.0571221 1 ||| 0-0 1-0 2-1 3-2 4-3 ||| 1
+! - ungefähr 18 ||| , some 18 ||| 0.0571221 1 ||| 0-0 1-0 2-1 3-2 ||| 1
+! - ungefähr ||| , some ||| 0.0571221 1 ||| 0-0 1-0 2-1 ||| 1
+! - unter Anlegung objektiver Maßstäbe erfolgen ||| emphasize , from an objective viewpoint ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-5 ||| 2
+! - unter Anlegung objektiver Maßstäbe erfolgen ||| would emphasize , from an objective viewpoint ||| 0.028561 1 ||| 0-1 1-2 2-3 3-4 4-5 5-6 6-6 ||| 2
+! - unter Anlegung objektiver ||| emphasize , from an objective ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 2
+! - unter Anlegung objektiver ||| would emphasize , from an objective ||| 0.028561 1 ||| 0-1 1-2 2-3 3-4 4-5 ||| 2
+! - unter Anlegung ||| emphasize , from an ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 ||| 2
+! - unter Anlegung ||| would emphasize , from an ||| 0.028561 1 ||| 0-1 1-2 2-3 3-4 ||| 2
+! - unter vielen anderen . ||| , one among many others . ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! - unter vielen anderen ||| , one among many others ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! - unter vielen ||| , one among many ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! - unter ||| , one among ||| 0.0190407 1 ||| 0-0 1-1 2-2 ||| 3
+! - unter ||| emphasize , from ||| 0.0190407 1 ||| 0-0 1-1 2-2 ||| 3
+! - unter ||| would emphasize , from ||| 0.0190407 1 ||| 0-1 1-2 2-3 ||| 3
+! - weiß ich nicht , ||| - I do not know , but ||| 0.028561 1 ||| 0-0 1-0 3-1 2-2 4-3 2-4 5-5 ||| 2
+! - weiß ich nicht , ||| - I do not know , ||| 0.028561 1 ||| 0-0 1-0 3-1 2-2 4-3 2-4 5-5 ||| 2
+! - weiß ich nicht ||| - I do not know ||| 0.0571221 1 ||| 0-0 1-0 3-1 2-2 4-3 2-4 ||| 1
+! - zugab ||| saying something – admitted ||| 0.0571221 1 ||| 2-0 2-1 0-2 1-2 2-2 2-3 ||| 1
+! - zur Koordination im ||| - relating to applying coordination in the ||| 0.0571221 1 ||| 0-0 1-0 2-1 2-2 3-3 3-4 4-5 4-6 ||| 1
+! - zur Koordination ||| - relating to applying coordination ||| 0.0571221 1 ||| 0-0 1-0 2-1 2-2 3-3 3-4 ||| 1
+! - zur ||| - relating to ||| 0.0571221 1 ||| 0-0 1-0 2-1 2-2 ||| 1
+! - ||| ! ) ||| 0.00819894 0.0775352 ||| 0-0 1-1 ||| 94
+! - ||| ! - I do ||| 0.000607682 0.0775352 ||| 0-0 1-1 ||| 94
+! - ||| ! - I ||| 0.000607682 0.0775352 ||| 0-0 1-1 ||| 94
+! - ||| ! - of ||| 0.000607682 0.0775352 ||| 0-0 1-1 ||| 94
+! - ||| ! - ||| 0.361702 0.0775352 ||| 0-0 1-1 ||| 94
+! - ||| ! ||| 0.00819894 0.0775352 ||| 0-0 ||| 94
+! - ||| ! – ||| 0.000607682 0.0775352 ||| 0-0 1-1 ||| 94
+! - ||| , - ||| 0.000607682 1 ||| 0-0 1-1 ||| 94
+! - ||| , and ||| 0.00819894 1 ||| 0-0 1-1 ||| 94
+! - ||| , mind you - ||| 0.000607682 1 ||| 0-0 1-3 ||| 94
+! - ||| , one ||| 0.000607682 1 ||| 0-0 1-1 ||| 94
+! - ||| , ||| 0.0744681 1 ||| 0-0 1-0 ||| 94
+! - ||| - ||| 0.212766 1 ||| 0-0 1-0 ||| 94
+! - ||| . at ||| 0.000607682 1 ||| 0-0 1-1 ||| 94
+! - ||| . indeed ||| 0.000607682 1 ||| 0-0 ||| 94
+! - ||| . ||| 0.0214524 1 ||| 0-0 ||| 94
+! - ||| ? - ||| 0.000607682 1 ||| 0-0 1-1 ||| 94
+! - ||| emphasize , ||| 0.000607682 1 ||| 0-0 1-1 ||| 94
+! - ||| indeed . ||| 0.000607682 1 ||| 0-1 ||| 94
+! - ||| is , ||| 0.000607682 1 ||| 0-1 1-1 ||| 94
+! - ||| it - ||| 0.000607682 1 ||| 0-0 1-1 ||| 94
+! - ||| it everybody - ||| 0.000607682 1 ||| 0-0 1-2 ||| 94
+! - ||| one ||| 0.000607682 1 ||| 0-0 ||| 94
+! - ||| sake , ||| 0.000607682 1 ||| 0-1 1-1 ||| 94
+! - ||| surprise ! - ||| 0.000607682 0.0775352 ||| 0-1 1-2 ||| 94
+! - ||| the ||| 0.000607682 1 ||| 0-0 ||| 94
+! - ||| want . ||| 0.000607682 1 ||| 0-1 ||| 94
+! - ||| we ||| 0.000607682 1 ||| 0-0 ||| 94
+! - ||| would be ||| 0.000607682 1 ||| 0-0 ||| 94
+! - ||| would emphasize , ||| 0.000607682 1 ||| 0-1 1-2 ||| 94
+! - ||| would ||| 0.000607682 1 ||| 0-0 ||| 94
+! - über 10 Milliarden dänische ||| it everybody - over 10 billion Danish ||| 0.0571221 1 ||| 0-0 1-2 2-3 3-4 4-5 5-6 ||| 1
+! - über 10 Milliarden ||| it everybody - over 10 billion ||| 0.0571221 1 ||| 0-0 1-2 2-3 3-4 4-5 ||| 1
+! - über 10 ||| it everybody - over 10 ||| 0.0571221 1 ||| 0-0 1-2 2-3 3-4 ||| 1
+! - über ||| it everybody - over ||| 0.0571221 1 ||| 0-0 1-2 2-3 ||| 1
+! . ||| ! ||| 0.224059 0.0390177 ||| 0-0 1-0 ||| 9
+! . ||| . ||| 0.0856334 1 ||| 0-0 1-0 ||| 9
+! . ||| in this . ||| 0.0063469 1 ||| 0-1 0-2 1-2 ||| 9
+! . ||| misunderstandings . ||| 0.0063469 1 ||| 0-0 1-1 ||| 9
+! . ||| point . ||| 0.0063469 1 ||| 0-0 0-1 1-1 ||| 9
+! . ||| this . ||| 0.0063469 1 ||| 0-0 0-1 1-1 ||| 9
+! ... und , hier war ich ||| ! ... ||| 0.0571221 0.0775352 ||| 0-0 1-1 ||| 1
+! ... und , hier war ||| ! ... ||| 0.0571221 0.0775352 ||| 0-0 1-1 ||| 1
+! ... und , hier ||| ! ... ||| 0.0571221 0.0775352 ||| 0-0 1-1 ||| 1
+! ... und , ||| ! ... ||| 0.0571221 0.0775352 ||| 0-0 1-1 ||| 1
+! ... und ||| ! ... ||| 0.0571221 0.0775352 ||| 0-0 1-1 ||| 1
+! ... ||| ! ... ||| 0.672176 0.0775352 ||| 0-0 1-1 ||| 3
+! 100 Mio. ECU ||| ! ECU 100 m ||| 0.0571221 0.0775352 ||| 0-0 3-1 1-2 2-3 ||| 1
+! 14,5 % Feuchte ist ||| ! 14.5 % is ||| 0.0571221 0.0733998 ||| 0-0 1-1 3-1 2-2 4-3 ||| 1
+! 14,5 % Feuchte ||| ! 14.5 % ||| 0.0571221 0.0733998 ||| 0-0 1-1 3-1 2-2 ||| 1
+! 173 Auftragsmorde seit 1990 ||| ! 173 contract killings since 1990 ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 3-4 4-5 ||| 1
+! 173 Auftragsmorde seit 1990 – ||| ! 173 contract killings since 1990 – ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 3-4 4-5 5-6 ||| 1
+! 173 Auftragsmorde seit ||| ! 173 contract killings since ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 3-4 ||| 1
+! 173 Auftragsmorde ||| ! 173 contract killings ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 2-3 ||| 1
+! 173 ||| ! 173 ||| 0.0571221 0.0775352 ||| 0-0 1-1 ||| 1
+! 1962 haben sie dies ||| ! in 1962 , did they not ||| 0.028561 0.0775352 ||| 0-0 1-1 1-2 2-4 3-5 ||| 2
+! 1962 haben sie dies ||| ! in 1962 , did they ||| 0.028561 0.0775352 ||| 0-0 1-1 1-2 2-4 3-5 ||| 2
+! 1962 haben sie ||| ! in 1962 , did they not ||| 0.028561 0.0775352 ||| 0-0 1-1 1-2 2-4 3-5 ||| 2
+! 1962 haben sie ||| ! in 1962 , did they ||| 0.028561 0.0775352 ||| 0-0 1-1 1-2 2-4 3-5 ||| 2
+! 1962 haben ||| ! in 1962 , did ||| 0.0571221 0.0775352 ||| 0-0 1-1 1-2 2-4 ||| 1
+! 1962 ||| ! in 1962 , ||| 0.028561 0.0775352 ||| 0-0 1-1 1-2 ||| 2
+! 1962 ||| ! in 1962 ||| 0.028561 0.0775352 ||| 0-0 1-1 1-2 ||| 2
+! 1991 habe ich ||| , in 1991 , I joined ||| 0.0571221 1 ||| 0-0 1-1 1-2 3-4 2-5 ||| 1
+! 1991 ||| , in 1991 , ||| 0.028561 1 ||| 0-0 1-1 1-2 ||| 2
+! 1991 ||| , in 1991 ||| 0.028561 1 ||| 0-0 1-1 1-2 ||| 2
+! 1996 haben vier Millionen Menschen ||| ! in 1996 , four million people ||| 0.0571221 0.0775352 ||| 0-0 1-1 1-2 2-3 3-4 4-5 5-6 ||| 1
+! 1996 haben vier Millionen ||| ! in 1996 , four million ||| 0.0571221 0.0775352 ||| 0-0 1-1 1-2 2-3 3-4 4-5 ||| 1
+! 1996 haben vier ||| ! in 1996 , four ||| 0.0571221 0.0775352 ||| 0-0 1-1 1-2 2-3 3-4 ||| 1
+! 1996 haben ||| ! in 1996 , ||| 0.0571221 0.0775352 ||| 0-0 1-1 1-2 2-3 ||| 1
+! 1996 ||| ! in 1996 ||| 0.0571221 0.0775352 ||| 0-0 1-1 1-2 ||| 1
+! 20 % des ||| . twenty per cent of the territory ||| 0.028561 1 ||| 0-0 1-1 2-2 2-3 3-4 3-5 ||| 2
+! 20 % des ||| . twenty per cent of the ||| 0.028561 1 ||| 0-0 1-1 2-2 2-3 3-4 3-5 ||| 2
+! 20 % ||| . twenty per cent ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 ||| 1
+! 20 Prozent der jungen Frauen ||| . 20 % of young women ||| 0.0571221 0.529412 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! 20 Prozent der jungen ||| . 20 % of young ||| 0.0571221 0.529412 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! 20 Prozent der ||| . 20 % of ||| 0.0571221 0.529412 ||| 0-0 1-1 2-2 3-3 ||| 1
+! 20 Prozent ||| . 20 % ||| 0.0571221 0.529412 ||| 0-0 1-1 2-2 ||| 1
+! 20 ||| . 20 ||| 0.028561 1 ||| 0-0 1-1 ||| 2
+! 20 ||| . twenty ||| 0.028561 1 ||| 0-0 1-1 ||| 2
+! 2002 wird ein entscheidendes Jahr ||| , 2002 will be a crucial year ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-4 4-5 5-6 ||| 1
+! 2002 wird ein entscheidendes ||| , 2002 will be a crucial ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-4 4-5 ||| 1
+! 2002 wird ein ||| , 2002 will be a ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-4 ||| 1
+! 2002 wird ||| , 2002 will be ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 ||| 1
+! 2002 ||| , 2002 ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! 2003 ||| 2003 ||| 0.0571221 1 ||| 1-0 ||| 1
+! 2004 war die UKIP die einzige ||| ! ||| 0.0571221 0.0388843 ||| 0-0 1-0 ||| 1
+! 2004 war die UKIP die ||| ! ||| 0.0571221 0.0388843 ||| 0-0 1-0 ||| 1
+! 2004 war die UKIP ||| ! ||| 0.0571221 0.0388843 ||| 0-0 1-0 ||| 1
+! 2004 war die ||| ! ||| 0.0571221 0.0388843 ||| 0-0 1-0 ||| 1
+! 2004 war ||| ! ||| 0.028561 0.0388843 ||| 0-0 1-0 ||| 2
+! 2004 war ||| , 2004 was ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! 2004 ||| ! 2004 may ||| 0.0142805 0.0775352 ||| 0-0 1-1 ||| 4
+! 2004 ||| ! 2004 ||| 0.0142805 0.0775352 ||| 0-0 1-1 ||| 4
+! 2004 ||| ! ||| 0.0142805 0.0388843 ||| 0-0 1-0 ||| 4
+! 2004 ||| , 2004 ||| 0.0142805 1 ||| 0-0 1-1 ||| 4
+! 2005 war ||| , 2005 has ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! 2005 wird ||| , 2005 will ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! 2005 ||| , 2005 ||| 0.38535 1 ||| 0-0 1-1 ||| 2
+! 2010 ist eigentlich schon morgen ||| , 2010 is just round the corner ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-3 4-4 5-6 ||| 1
+! 2010 ist eigentlich schon ||| , 2010 is just round the ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 4-3 4-4 ||| 2
+! 2010 ist eigentlich schon ||| , 2010 is just round ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 4-3 4-4 ||| 2
+! 2010 ist ||| , 2010 is ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! 2010 ||| , 2010 ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! 91 % gehen an Rechtsinhaber , ||| the other 91 % goes to holders ||| 0.0571221 0.946664 ||| 0-0 1-2 2-3 3-4 4-5 5-6 ||| 1
+! 91 % gehen an Rechtsinhaber ||| the other 91 % goes to holders ||| 0.0571221 0.946664 ||| 0-0 1-2 2-3 3-4 4-5 5-6 ||| 1
+! 91 % gehen an ||| the other 91 % goes to ||| 0.0571221 0.946664 ||| 0-0 1-2 2-3 3-4 4-5 ||| 1
+! 91 % gehen ||| the other 91 % goes ||| 0.0571221 0.946664 ||| 0-0 1-2 2-3 3-4 ||| 1
+! 91 % ||| the other 91 % ||| 0.0571221 0.946664 ||| 0-0 1-2 2-3 ||| 1
+! 91 ||| the other 91 ||| 0.0571221 1 ||| 0-0 1-2 ||| 1
+! 99 % ||| 99 % ||| 0.0571221 0.946664 ||| 1-0 2-1 ||| 1
+! 99 ||| 99 ||| 0.0571221 1 ||| 1-0 ||| 1
+! ; und aus Angola , Dom ||| ! ; and from Angola , Dom ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! ; und aus Angola , ||| ! ; and from Angola , ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! ; und aus Angola ||| ! ; and from Angola ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! ; und aus ||| ! ; and from ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 ||| 1
+! ; und ||| ! ; and ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 ||| 1
+! ; ||| ! ; ||| 0.0571221 0.0775352 ||| 0-0 1-1 ||| 1
+! ? " ||| ? " ||| 0.0571221 0.118338 ||| 1-0 2-1 ||| 1
+! ? ? ||| ! ||| 0.028561 0.0265065 ||| 0-0 1-0 2-0 ||| 2
+! ? ? ||| ! ’ ||| 0.028561 0.0265065 ||| 0-0 1-0 2-0 ||| 2
+! ? Inshaallah . ' ||| , ' inshallah ' . ||| 0.0571221 0.545017 ||| 0-0 2-1 1-2 2-2 4-3 3-4 ||| 1
+! ? Inshaallah ||| , ' inshallah ||| 0.0571221 1 ||| 0-0 2-1 1-2 2-2 ||| 1
+! ? ||| . ' ||| 0.0190407 0.0032785 ||| 0-0 1-1 ||| 3
+! ? ||| ? ! ||| 0.0190407 0.0775352 ||| 1-0 0-1 ||| 3
+! ? ||| ? ||| 0.0190407 1 ||| 1-0 ||| 3
+! Airbus ist eine europäische Erfolgsgeschichte ||| , Airbus is a European success story ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 5-6 ||| 1
+! Airbus ist eine europäische ||| , Airbus is a European ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Airbus ist eine ||| , Airbus is a ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Airbus ist ||| , Airbus is ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Airbus ||| , Airbus ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Algerien ist schwerkrank ||| , Algeria is a very ill country ||| 0.0190407 1 ||| 0-0 1-1 2-2 3-4 ||| 3
+! Algerien ist schwerkrank ||| , Algeria is a very ill ||| 0.0190407 1 ||| 0-0 1-1 2-2 3-4 ||| 3
+! Algerien ist schwerkrank ||| , Algeria is a very ||| 0.0190407 1 ||| 0-0 1-1 2-2 3-4 ||| 3
+! Algerien ist ||| , Algeria is a ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! Algerien ist ||| , Algeria is ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! Algerien ||| , Algeria ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Alkoholkonsum ist eine Gewohnheit , die ||| , alcohol consumption is a habit ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 4-5 ||| 1
+! Alkoholkonsum ist eine Gewohnheit , ||| , alcohol consumption is a habit ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 4-5 ||| 1
+! Alkoholkonsum ist eine Gewohnheit ||| , alcohol consumption is a habit ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 4-5 ||| 1
+! Alkoholkonsum ist eine ||| , alcohol consumption is a ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 ||| 1
+! Alkoholkonsum ist ||| , alcohol consumption is ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! Alkoholkonsum ||| , alcohol consumption ||| 0.0571221 1 ||| 0-0 1-1 1-2 ||| 1
+! Anfang Juli hat sich Filip ||| , at the beginning of July Filip ||| 0.0571221 1 ||| 0-0 1-1 1-2 1-3 2-5 5-6 ||| 1
+! Anfang Juli hat sich ||| , at the beginning of July ||| 0.0571221 1 ||| 0-0 1-1 1-2 1-3 2-5 ||| 1
+! Anfang Juli hat ||| , at the beginning of July ||| 0.0571221 1 ||| 0-0 1-1 1-2 1-3 2-5 ||| 1
+! Anfang Juli ||| , at the beginning of July ||| 0.0571221 1 ||| 0-0 1-1 1-2 1-3 2-5 ||| 1
+! Anfang dieses Jahres haben sich die ||| , earlier this year the ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 6-4 ||| 1
+! Anfang dieses Jahres haben sich ||| , earlier this year ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Anfang dieses Jahres haben ||| , earlier this year ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Anfang dieses Jahres ||| , earlier this year ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Anfang dieses ||| , earlier this ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Anfang ||| , at the beginning of ||| 0.0190407 1 ||| 0-0 1-1 1-2 1-3 ||| 3
+! Anfang ||| , at the beginning ||| 0.0190407 1 ||| 0-0 1-1 1-2 1-3 ||| 3
+! Anfang ||| , earlier ||| 0.0190407 1 ||| 0-0 1-1 ||| 3
+! Anlass ||| , the occasion ||| 0.0571221 1 ||| 0-0 1-1 1-2 ||| 1
+! Armut hat ||| , poverty has ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Armut und soziale Ausgrenzung ||| , poverty and social exclusion ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Armut und soziale ||| , poverty and social ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Armut und ||| , poverty and ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Armut ||| , poverty ||| 0.38535 1 ||| 0-0 1-1 ||| 2
+! Aufgabe der Konferenz von Bali ||| , the remit of the Bali Conference ||| 0.0571221 1 ||| 0-0 1-2 2-3 2-4 4-5 5-5 3-6 ||| 1
+! Aufgabe der ||| , the remit of the ||| 0.0571221 1 ||| 0-0 1-2 2-3 2-4 ||| 1
+! Aufgabe ||| , the remit ||| 0.0571221 1 ||| 0-0 1-2 ||| 1
+! Aus- und Fortbildung wird ||| , training and education will be a ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 4-4 4-5 ||| 2
+! Aus- und Fortbildung wird ||| , training and education will be ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 4-4 4-5 ||| 2
+! Aus- und Fortbildung ||| , training and education ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Aus- und ||| , training and ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Aus- ||| , training ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Außenpolitik muß ||| and gentlemen , foreign policy needs to ||| 0.028561 1 ||| 0-1 0-2 1-3 1-4 2-5 2-6 ||| 2
+! Außenpolitik muß ||| gentlemen , foreign policy needs to ||| 0.028561 1 ||| 0-0 0-1 1-2 1-3 2-4 2-5 ||| 2
+! Außenpolitik ||| , ladies and gentlemen , foreign policy ||| 0.0142805 1 ||| 0-3 0-4 1-5 1-6 ||| 4
+! Außenpolitik ||| and gentlemen , foreign policy ||| 0.0142805 1 ||| 0-1 0-2 1-3 1-4 ||| 4
+! Außenpolitik ||| gentlemen , foreign policy ||| 0.0142805 1 ||| 0-0 0-1 1-2 1-3 ||| 4
+! Außenpolitik ||| ladies and gentlemen , foreign policy ||| 0.0142805 1 ||| 0-2 0-3 1-4 1-5 ||| 4
+! Beifall an den tschechischen ||| , let us applaud the Czech ||| 0.0571221 1 ||| 0-0 0-1 0-2 1-3 3-4 4-5 ||| 1
+! Beifall an den ||| , let us applaud the ||| 0.0571221 1 ||| 0-0 0-1 0-2 1-3 3-4 ||| 1
+! Beifall an ||| , let us applaud ||| 0.0571221 1 ||| 0-0 0-1 0-2 1-3 ||| 1
+! Beifall ||| , let us applaud ||| 0.0571221 1 ||| 0-0 0-1 0-2 1-3 ||| 1
+! Belarus gehörte im Laufe der Geschichte ||| , throughout history , Belarus has belonged ||| 0.028561 1 ||| 3-1 4-1 6-2 0-3 1-4 2-5 2-6 ||| 2
+! Belarus gehörte im Laufe der Geschichte ||| throughout history , Belarus has belonged ||| 0.028561 1 ||| 3-0 4-0 6-1 0-2 1-3 2-4 2-5 ||| 2
+! Belarus gehörte ||| , Belarus has belonged ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 ||| 1
+! Belarus ||| , Belarus ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Belgien hat offenbar ||| , it does seem that Belgium has ||| 0.0571221 1 ||| 0-0 3-1 3-2 3-3 3-4 1-5 2-6 ||| 1
+! Beschäftigungspolitik und soziale Sicherheit gehören ||| , employment policy and social security go ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 4-5 5-6 ||| 1
+! Beschäftigungspolitik und soziale Sicherheit ||| , employment policy and social security ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 4-5 ||| 1
+! Beschäftigungspolitik und soziale ||| , employment policy and social ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 ||| 1
+! Beschäftigungspolitik und ||| , employment policy and ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! Beschäftigungspolitik ||| , employment policy ||| 0.0571221 1 ||| 0-0 1-1 1-2 ||| 1
+! Betriebsstilllegungen wie jetzt in ||| , plant closures like this one in ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 4-6 ||| 1
+! Betriebsstilllegungen wie jetzt ||| , plant closures like this one ||| 0.028561 1 ||| 0-0 1-1 1-2 2-3 3-4 ||| 2
+! Betriebsstilllegungen wie jetzt ||| , plant closures like this ||| 0.028561 1 ||| 0-0 1-1 1-2 2-3 3-4 ||| 2
+! Betriebsstilllegungen wie ||| , plant closures like ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! Betriebsstilllegungen ||| , plant closures ||| 0.0571221 1 ||| 0-0 1-1 1-2 ||| 1
+! Beziehungen zu Nachbarn sind ||| , links with neighbours are ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Beziehungen zu Nachbarn ||| , links with neighbours ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Beziehungen zu ||| , links with ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Beziehungen ||| , links ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Bezug ||| the ||| 0.0571221 1 ||| 0-0 ||| 1
+! Biozide , das sind Produkte , ||| , biocides are products that ||| 0.0571221 1 ||| 0-0 2-0 1-1 4-2 5-3 6-4 ||| 1
+! Biozide , das sind Produkte ||| , biocides are products ||| 0.0571221 1 ||| 0-0 2-0 1-1 4-2 5-3 ||| 1
+! Biozide , das sind ||| , biocides are ||| 0.0571221 1 ||| 0-0 2-0 1-1 4-2 ||| 1
+! Biozide , das ||| , biocides ||| 0.0571221 1 ||| 0-0 2-0 1-1 ||| 1
+! Biozide , ||| , biocides ||| 0.0571221 1 ||| 0-0 2-0 1-1 ||| 1
+! Birma ||| , Burma ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Bosnien-Herzegowina ist im Grunde ||| , Bosnia-Herzegovina is , in fact , ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-4 4-5 4-6 ||| 1
+! Bosnien-Herzegowina ist im ||| , Bosnia-Herzegovina is , in ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-4 ||| 1
+! Bosnien-Herzegowina ist ||| , Bosnia-Herzegovina is , ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! Bosnien-Herzegowina ist ||| , Bosnia-Herzegovina is ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! Bosnien-Herzegowina ||| , Bosnia-Herzegovina ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Bovine spongiforme Enzephalopathie , Dioxin , ||| , bovine spongiform encephalopathy , dioxin , ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! Bovine spongiforme Enzephalopathie , Dioxin ||| , bovine spongiform encephalopathy , dioxin ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Bovine spongiforme Enzephalopathie , ||| , bovine spongiform encephalopathy , ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Bovine spongiforme Enzephalopathie ||| , bovine spongiform encephalopathy ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Bovine spongiforme ||| , bovine spongiform ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Bovine ||| , bovine ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Burma taucht regelmäßig als Thema ||| , Burma is a regular theme ||| 0.0571221 1 ||| 0-0 1-1 2-2 4-3 3-4 5-5 ||| 1
+! Burma taucht regelmäßig als ||| , Burma is a regular ||| 0.0571221 1 ||| 0-0 1-1 2-2 4-3 3-4 ||| 1
+! Burma taucht ||| , Burma is ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Burma ||| , Burma ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Bücher sind ein wichtiges Medium ||| , books are an important instrument ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Bücher sind ein wichtiges ||| , books are an important ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Bücher sind ein ||| , books are an ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Bücher sind ||| , books are ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Bücher ||| , books ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Cancún ist ebenso ein Misserfolg wie ||| , Cancún was a failure just like ||| 0.0571221 1 ||| 0-0 1-1 2-2 4-3 5-4 6-5 6-6 ||| 1
+! Cancún ist ebenso ein Misserfolg ||| , Cancún was a failure ||| 0.0571221 1 ||| 0-0 1-1 2-2 4-3 5-4 ||| 1
+! Cancún ist ebenso ein ||| , Cancún was a ||| 0.0571221 1 ||| 0-0 1-1 2-2 4-3 ||| 1
+! Cancún ist ebenso ||| , Cancún was ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Cancún ist ||| , Cancún was ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Cancún ||| , Cancún ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Chaos , wie es vom ||| ' to the chaos that the ||| 0.0142805 1 ||| 0-2 1-3 2-4 4-4 5-5 ||| 4
+! Chaos , wie es vom ||| no ' to the chaos that the ||| 0.0142805 1 ||| 0-3 1-4 2-5 4-5 5-6 ||| 4
+! Chaos , wie es vom ||| the chaos that the ||| 0.0142805 1 ||| 0-0 1-1 2-2 4-2 5-3 ||| 4
+! Chaos , wie es vom ||| to the chaos that the ||| 0.0142805 1 ||| 0-1 1-2 2-3 4-3 5-4 ||| 4
+! Chaos , wie es ||| ' no ' to the chaos that ||| 0.0114244 1 ||| 0-4 1-5 2-6 4-6 ||| 5
+! Chaos , wie es ||| ' to the chaos that ||| 0.0114244 1 ||| 0-2 1-3 2-4 4-4 ||| 5
+! Chaos , wie es ||| no ' to the chaos that ||| 0.0114244 1 ||| 0-3 1-4 2-5 4-5 ||| 5
+! Chaos , wie es ||| the chaos that ||| 0.0114244 1 ||| 0-0 1-1 2-2 4-2 ||| 5
+! Chaos , wie es ||| to the chaos that ||| 0.0114244 1 ||| 0-1 1-2 2-3 4-3 ||| 5
+! Chaos ||| ' no ' to the chaos ||| 0.0114244 1 ||| 0-4 1-5 ||| 5
+! Chaos ||| ' to the chaos ||| 0.0114244 1 ||| 0-2 1-3 ||| 5
+! Chaos ||| no ' to the chaos ||| 0.0114244 1 ||| 0-3 1-4 ||| 5
+! Chaos ||| the chaos ||| 0.0114244 1 ||| 0-0 1-1 ||| 5
+! Chaos ||| to the chaos ||| 0.0114244 1 ||| 0-1 1-2 ||| 5
+! Clearing und Abrechnung sind ein wesentliches ||| , clearing and settlement are an essential ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! Clearing und Abrechnung sind ein ||| , clearing and settlement are an ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Clearing und Abrechnung sind ||| , clearing and settlement are ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Clearing und Abrechnung ||| , clearing and settlement ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Clearing und ||| , clearing and ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Clearing ||| , clearing ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Dank an Constanze ||| I am obliged to ||| 0.0571221 1 ||| 0-0 1-1 1-2 3-2 2-3 ||| 1
+! Dank der Arbeit Ihres ||| , thanks to the work of your ||| 0.0571221 1 ||| 0-0 1-1 2-3 3-4 4-5 4-6 ||| 1
+! Dank der Arbeit ||| , thanks to the work ||| 0.0571221 1 ||| 0-0 1-1 2-3 3-4 ||| 1
+! Dank der ||| , thanks to the ||| 0.0571221 1 ||| 0-0 1-1 2-3 ||| 1
+! Dank ||| , thanks to ||| 0.028561 1 ||| 0-0 1-1 ||| 2
+! Dank ||| , thanks ||| 0.028561 1 ||| 0-0 1-1 ||| 2
+! Dogan gehört zu den Köpfen ||| , Dogan is one of the heads ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-3 4-5 5-6 ||| 1
+! Dogan gehört zu den ||| , Dogan is one of the ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-3 4-5 ||| 1
+! Dogan gehört zu ||| , Dogan is one of ||| 0.028561 1 ||| 0-0 1-1 2-2 2-3 3-3 ||| 2
+! Dogan gehört zu ||| , Dogan is one ||| 0.028561 1 ||| 0-0 1-1 2-2 2-3 3-3 ||| 2
+! Dogan ||| , Dogan ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Doris Pack hat ||| , Mrs Pack has ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Doris Pack ||| , Mrs Pack ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Doris ||| , Mrs ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Echelon existiert ||| , ECHELON exists , as has already ||| 0.0114244 1 ||| 0-0 1-1 2-2 ||| 5
+! Echelon existiert ||| , ECHELON exists , as has ||| 0.0114244 1 ||| 0-0 1-1 2-2 ||| 5
+! Echelon existiert ||| , ECHELON exists , as ||| 0.0114244 1 ||| 0-0 1-1 2-2 ||| 5
+! Echelon existiert ||| , ECHELON exists , ||| 0.0114244 1 ||| 0-0 1-1 2-2 ||| 5
+! Echelon existiert ||| , ECHELON exists ||| 0.0114244 1 ||| 0-0 1-1 2-2 ||| 5
+! Echelon ||| , ECHELON ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Emissionsrechte sind keine ||| , emission allowances are not ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 ||| 1
+! Emissionsrechte sind ||| , emission allowances are ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! Emissionsrechte ||| , emission allowances ||| 0.0571221 1 ||| 0-0 1-1 1-2 ||| 1
+! Energie stellt einen entscheidenden Faktor in ||| , energy is a crucial factor as ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! Energie stellt einen entscheidenden Faktor ||| , energy is a crucial factor ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Energie stellt einen entscheidenden ||| , energy is a crucial ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Energie stellt einen ||| , energy is a ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Energie stellt ||| , energy is ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Energie ||| , energy ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Energieabhängigkeit ist das Thema Nummer eins ||| , energy dependence is priority number one ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 4-4 5-4 5-5 6-6 ||| 1
+! Energieabhängigkeit ist das Thema Nummer ||| , energy dependence is priority number ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 4-4 5-4 5-5 ||| 1
+! Energieabhängigkeit ist das ||| , energy dependence is ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! Energieabhängigkeit ist ||| , energy dependence is ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! Energieabhängigkeit ||| , energy dependence ||| 0.0571221 1 ||| 0-0 1-1 1-2 ||| 1
+! Entschuldigung , ||| , and I apologise ||| 0.0142805 1 ||| 0-0 1-3 ||| 4
+! Entschuldigung , ||| of the tongue , and I apologise ||| 0.0142805 1 ||| 0-3 1-6 ||| 4
+! Entschuldigung , ||| the tongue , and I apologise ||| 0.0142805 1 ||| 0-2 1-5 ||| 4
+! Entschuldigung , ||| tongue , and I apologise ||| 0.0142805 1 ||| 0-1 1-4 ||| 4
+! Entschuldigung ||| , and I apologise ||| 0.0142805 1 ||| 0-0 1-3 ||| 4
+! Entschuldigung ||| of the tongue , and I apologise ||| 0.0142805 1 ||| 0-3 1-6 ||| 4
+! Entschuldigung ||| the tongue , and I apologise ||| 0.0142805 1 ||| 0-2 1-5 ||| 4
+! Entschuldigung ||| tongue , and I apologise ||| 0.0142805 1 ||| 0-1 1-4 ||| 4
+! Entwicklungszusammenarbeit und Handel sind ||| , development cooperation and trade are ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 4-5 ||| 1
+! Entwicklungszusammenarbeit und Handel ||| , development cooperation and trade ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 ||| 1
+! Entwicklungszusammenarbeit und ||| , development cooperation and ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! Entwicklungszusammenarbeit ||| , development cooperation ||| 0.0571221 1 ||| 0-0 1-1 1-2 ||| 1
+! Erfahrungen sind nicht wirklichkeitsfremd ||| , there is nothing fanciful about experience ||| 0.0571221 1 ||| 0-0 2-2 3-3 4-4 4-5 1-6 ||| 1
+! Erzeugnisse aus den besetzten Gebieten sind ||| , products from the Occupied Territories are ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! Erzeugnisse aus den besetzten Gebieten ||| , products from the Occupied Territories ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Erzeugnisse aus den besetzten ||| , products from the Occupied ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Erzeugnisse aus den ||| , products from the ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Erzeugnisse aus ||| , products from ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Erzeugnisse ||| , products ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Europa befindet sich gegenwärtig in einer ||| , Europe is currently going through a ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 4-3 5-5 6-6 ||| 1
+! Europa befindet sich gegenwärtig in ||| , Europe is currently going through ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 4-3 5-5 ||| 1
+! Europa befindet sich gegenwärtig ||| , Europe is currently going ||| 0.028561 1 ||| 0-0 1-1 2-2 3-2 4-3 ||| 2
+! Europa befindet sich gegenwärtig ||| , Europe is currently ||| 0.028561 1 ||| 0-0 1-1 2-2 3-2 4-3 ||| 2
+! Europa befindet sich ||| , Europe is ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 ||| 1
+! Europa hat ||| , Europe has ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Europa ist ein großes Ideal : ||| , Europe is a great ideal : ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! Europa ist ein großes Ideal ||| , Europe is a great ideal ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Europa ist ein großes ||| , Europe is a great ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Europa ist ein ||| , Europe is a ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Europa ist ||| , Europe is ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Europa muss ||| , Europe must ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Europa und das Europäische Parlament ||| , Europe and the European Parliament ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Europa und das Europäische ||| , Europe and the European ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Europa und das ||| , Europe and the ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Europa und ||| , Europe and ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Europa unter Wasser , Europa im ||| , Europe under water , Europe under ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! Europa unter Wasser , Europa ||| , Europe under water , Europe ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Europa unter Wasser , ||| , Europe under water , ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Europa unter Wasser ||| , Europe under water ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Europa unter ||| , Europe under ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Europa verdient Besseres als dieses ||| , Europeans deserve more than the ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 3-3 4-4 5-5 ||| 1
+! Europa verdient Besseres als ||| , Europeans deserve more than ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 3-3 4-4 ||| 1
+! Europa verdient Besseres ||| , Europeans deserve more ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 3-3 ||| 1
+! Europa wurde gebeten ||| , Europe has been asked ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-4 ||| 1
+! Europa wurde ||| , Europe has been ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 ||| 1
+! Europa ||| , Europe ||| 0.875 1 ||| 0-0 1-1 ||| 8
+! Europa ||| , Europeans ||| 0.00714026 1 ||| 0-0 1-1 ||| 8
+! Europas Zukunft ist in hohem Maße ||| that Europe 's future is largely ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 5-5 6-5 ||| 1
+! Europas Zukunft ist in ||| that Europe 's future is ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 ||| 1
+! Europas Zukunft ist ||| that Europe 's future is ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 ||| 1
+! Europas Zukunft ||| that Europe 's future ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! Europas modernisierte Industriepolitik , ||| , Europe 's updated industrial policy , ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 3-5 4-6 ||| 1
+! Europas modernisierte Industriepolitik ||| , Europe 's updated industrial policy ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 3-5 ||| 1
+! Europas modernisierte ||| , Europe 's updated ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! Europas ||| , Europe 's ||| 0.028561 1 ||| 0-0 1-1 1-2 ||| 2
+! Europas ||| that Europe 's ||| 0.028561 1 ||| 0-0 1-1 1-2 ||| 2
+! Europäische Solidarität wird greifbar ||| , European solidarity is within our grasp ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 4-5 4-6 ||| 1
+! Europäische Solidarität wird ||| , European solidarity is ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Europäische Solidarität ||| , European solidarity ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Europäische ||| , European ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Feinstaubemissionen ||| , particulate-matter emissions ||| 0.0142805 1 ||| 0-0 0-1 1-1 1-2 ||| 4
+! Feinstaubemissionen ||| Commission , particulate-matter emissions ||| 0.0142805 1 ||| 0-1 0-2 1-2 1-3 ||| 4
+! Feinstaubemissionen ||| of the Commission , particulate-matter emissions ||| 0.0142805 1 ||| 0-3 0-4 1-4 1-5 ||| 4
+! Feinstaubemissionen ||| the Commission , particulate-matter emissions ||| 0.0142805 1 ||| 0-2 0-3 1-3 1-4 ||| 4
+! Finnland hat ||| , Finland is ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Finnland ||| , Finland ||| 0.38535 1 ||| 0-0 1-1 ||| 2
+! Finnland übernimmt ||| , Finland is taking over ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 2-4 ||| 1
+! Francis Bacon hat gesagt : " ||| , Francis Bacon said that whoever ||| 0.028561 1 ||| 0-0 1-1 2-2 5-2 6-2 3-3 4-3 5-4 ||| 2
+! Francis Bacon hat gesagt : " ||| , Francis Bacon said that ||| 0.028561 1 ||| 0-0 1-1 2-2 5-2 6-2 3-3 4-3 5-4 ||| 2
+! Francis ||| , Francis ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Frau Angelilli führte aus , daß ||| Representative , Mrs Angelilli commented that ||| 0.0571221 1 ||| 0-0 0-1 1-2 2-3 3-3 2-4 5-5 6-5 ||| 1
+! Frau Angelilli führte aus ||| Representative , Mrs Angelilli commented ||| 0.0571221 1 ||| 0-0 0-1 1-2 2-3 3-3 2-4 ||| 1
+! Frau Angelilli führte ||| Representative , Mrs Angelilli commented ||| 0.0571221 1 ||| 0-0 0-1 1-2 2-3 3-3 2-4 ||| 1
+! Frau Doyle hat bei ||| , as Mrs Doyle has ||| 0.0571221 1 ||| 0-0 4-1 1-2 2-3 3-4 ||| 1
+! Frau Ferrero-Waldner kann an ||| , Mrs Ferrero-Waldner is unable to ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-4 4-5 ||| 1
+! Frau Ferrero-Waldner kann ||| , Mrs Ferrero-Waldner is unable ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-4 ||| 1
+! Frau Ferrero-Waldner ||| , Mrs Ferrero-Waldner ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Frau Flautre , ||| , Mrs Flautre ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Frau Flautre ||| , Mrs Flautre ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Frau Kommissarin , ||| ; Commissioner , ||| 0.0571221 1 ||| 0-0 1-1 2-1 3-2 ||| 1
+! Frau Kommissarin Wallström hat am Ende ||| , Commissioner Wallström ended ||| 0.0571221 1 ||| 0-0 1-1 2-1 3-2 4-3 5-3 6-3 ||| 1
+! Frau Kommissarin Wallström ||| , Commissioner Wallström ||| 0.0571221 1 ||| 0-0 1-1 2-1 3-2 ||| 1
+! Frau Kommissarin ||| , Commissioner ||| 0.028561 1 ||| 0-0 1-1 2-1 ||| 2
+! Frau Kommissarin ||| ; Commissioner ||| 0.028561 1 ||| 0-0 1-1 2-1 ||| 2
+! Frau Martens hat ||| , Mrs Martens has ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Frau Martens ||| , Mrs Martens ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Frau Plooij-van Gorsel zeichnet ein ||| , Mrs Plooij-van Gorsel is painting a ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 4-5 5-6 ||| 1
+! Frau Plooij-van Gorsel zeichnet ||| , Mrs Plooij-van Gorsel is painting ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 4-5 ||| 1
+! Frau Plooij-van Gorsel ||| , Mrs Plooij-van Gorsel ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Frau Plooij-van ||| , Mrs Plooij-van ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Frau Torres Marques hat sehr ||| , Mrs Torres Marques has done an ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-6 ||| 1
+! Frau Torres Marques hat ||| , Mrs Torres Marques has done ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 2
+! Frau Torres Marques hat ||| , Mrs Torres Marques has ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 2
+! Frau Torres Marques ||| , Mrs Torres Marques ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Frau Torres ||| , Mrs Torres ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Frau in ' t Veld hat ||| , Mrs in ' t Veld is ||| 0.0571221 0.545017 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! Frau in ' t Veld ||| , Mrs in ' t Veld ||| 0.0571221 0.545017 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Frau in ' t ||| , Mrs in ' t ||| 0.0571221 0.545017 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Frau in ' ||| , Mrs in ' ||| 0.0571221 0.545017 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Frau in ||| , Mrs in ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Frau ||| , Mrs ||| 0.857143 1 ||| 0-0 1-1 ||| 7
+! Frau ||| Representative , Mrs ||| 0.00816029 1 ||| 0-0 0-1 1-2 ||| 7
+! Galileo könnte auch den Untertitel " ||| , Galileo could also be subtitled ' ||| 0.0571221 0.579445 ||| 0-0 1-1 2-2 3-3 5-4 4-5 5-5 6-6 ||| 1
+! Galileo könnte auch den Untertitel ||| , Galileo could also be subtitled ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 5-4 4-5 5-5 ||| 1
+! Galileo könnte auch ||| , Galileo could also ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Galileo könnte ||| , Galileo could ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Galileo ||| , Galileo ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! General de Gaulle sagte ||| , General de Gaulle said ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! General de Gaulle sagte über Valéry ||| , General de Gaulle said of Valéry ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! General de Gaulle sagte über ||| , General de Gaulle said of ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! General de Gaulle ||| , General de Gaulle ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! General de ||| , General de ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! General ||| , General ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Genozid ist auch , wenn ||| : it is also genocide to deprive ||| 0.0571221 1 ||| 0-0 2-2 3-3 1-4 4-5 5-6 ||| 1
+! Genozid ist auch , ||| : it is also genocide to ||| 0.0571221 1 ||| 0-0 2-2 3-3 1-4 4-5 ||| 1
+! Genozid ist auch ||| : it is also genocide ||| 0.0571221 1 ||| 0-0 2-2 3-3 1-4 ||| 1
+! Gesundheit und Verbraucherschutz sind zwei ||| , health and consumer protection are two ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-4 4-5 5-6 ||| 1
+! Gesundheit und Verbraucherschutz sind ||| , health and consumer protection are ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-4 4-5 ||| 1
+! Gesundheit und Verbraucherschutz ||| , health and consumer protection ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-4 ||| 1
+! Gesundheit und ||| , health and ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Gesundheit ||| , health ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Gewissens- ||| , conscience ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Gleichstellung von Frauen und Männern ist ||| , equality between women and men is ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-2 3-3 4-4 5-5 6-6 ||| 1
+! Gleichstellung von Frauen und Männern ||| , equality between women and men ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-2 3-3 4-4 5-5 ||| 1
+! Gleichstellung von Frauen und ||| , equality between women and ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-2 3-3 4-4 ||| 1
+! Gleichstellung von Frauen ||| , equality between women ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-2 3-3 ||| 1
+! Gleichstellung von ||| , equality between ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-2 ||| 1
+! Griechenland hat ||| , Greece was not ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! Griechenland hat ||| , Greece was ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! Griechenland ||| , Greece ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Heizen und Kühlen machen 49 ||| , heating and cooling accounts for 49 ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-4 4-4 4-5 5-6 ||| 1
+! Heizen und Kühlen machen ||| , heating and cooling accounts for ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-4 4-4 4-5 ||| 1
+! Heizen und ||| , heating and ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Heizen ||| , heating ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Herr Blair , Sie haben erklärt ||| , you have , Mr Blair ||| 0.0571221 1 ||| 3-0 4-1 5-2 0-3 1-4 2-5 6-5 ||| 1
+! Herr Bösch , ich ||| , Mr Bösch , I ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Herr Bösch , ||| , Mr Bösch , ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Herr Bösch ||| , Mr Bösch ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Herr Friedrich , eine Staatsbürgerschaft ist ||| , Mr Friedrich , citizenship must ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 5-4 6-5 ||| 1
+! Herr Friedrich , eine Staatsbürgerschaft ||| , Mr Friedrich , citizenship ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 5-4 ||| 1
+! Herr Friedrich , eine ||| , Mr Friedrich , ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Herr Friedrich , ||| , Mr Friedrich , ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Herr Friedrich ||| , Mr Friedrich ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Herr Galeote Quecedo unterstreicht in ||| , Mr Galeote Quecedo emphasises , in ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-6 ||| 1
+! Herr Galeote Quecedo unterstreicht ||| , Mr Galeote Quecedo emphasises , ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 2
+! Herr Galeote Quecedo unterstreicht ||| , Mr Galeote Quecedo emphasises ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 2
+! Herr Galeote Quecedo ||| , Mr Galeote Quecedo ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Herr Galeote ||| , Mr Galeote ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Herr Jarzembowski , ich danke Ihnen ||| , Mr Jarzembowski , thank you ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-4 6-5 ||| 1
+! Herr Jarzembowski , ich danke ||| , Mr Jarzembowski , thank ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-4 ||| 1
+! Herr Jarzembowski , ||| , Mr Jarzembowski , ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Herr Jarzembowski ||| , Mr Jarzembowski ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Herr Kommissar ! ||| . ||| 0.0571221 1 ||| 3-0 ||| 1
+! Herr Kommissar , welche Bereiche ||| , Commissioner , which sectors ||| 0.0571221 1 ||| 0-0 1-1 2-1 3-2 4-3 5-4 ||| 1
+! Herr Kommissar , welche ||| , Commissioner , which ||| 0.0571221 1 ||| 0-0 1-1 2-1 3-2 4-3 ||| 1
+! Herr Kommissar , ||| , Commissioner , ||| 0.0571221 1 ||| 0-0 1-1 2-1 3-2 ||| 1
+! Herr Kommissar Frattini ||| , Commissioner Fratini ||| 0.0571221 1 ||| 0-0 1-1 2-1 3-2 ||| 1
+! Herr Kommissar ||| , Commissioner ||| 0.38535 1 ||| 0-0 1-1 2-1 ||| 2
+! Herr Kommissionspräsident , ||| ) Mr President , ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Herr Kommissionspräsident Romano Prodi erhielt ||| , President Prodi was ||| 0.0571221 1 ||| 0-0 0-1 1-1 2-1 3-2 4-2 5-3 ||| 1
+! Herr Kommissionspräsident Romano Prodi ||| , President Prodi ||| 0.0571221 1 ||| 0-0 0-1 1-1 2-1 3-2 4-2 ||| 1
+! Herr Kommissionspräsident ||| ) Mr President ||| 0.0142805 1 ||| 0-0 1-1 2-2 ||| 4
+! Herr Kommissionspräsident ||| , Mr President of the Commission , ||| 0.0142805 1 ||| 0-0 1-1 1-2 2-2 2-3 2-4 2-5 ||| 4
+! Herr Kommissionspräsident ||| , Mr President of the Commission ||| 0.0142805 1 ||| 0-0 1-1 1-2 2-2 2-3 2-4 2-5 ||| 4
+! Herr Kommissionspräsident ||| , President ||| 0.0142805 1 ||| 0-0 0-1 1-1 2-1 ||| 4
+! Herr Kreissl-Dörfler ging ||| , Mr Kreissl-Dörfler went ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Herr Kreissl-Dörfler ||| , Mr Kreissl-Dörfler ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Herr Lannoye hat soeben gesagt ||| , Mr Lannoye stated a moment ago ||| 0.0571221 1 ||| 0-0 1-1 2-2 5-3 4-4 4-5 3-6 4-6 ||| 1
+! Herr Lannoye ||| , Mr Lannoye ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Herr Morris verdient sicher eine Antwort ||| , Mr Morris certainly deserves an answer ||| 0.0571221 1 ||| 0-0 1-1 2-2 4-3 3-4 5-5 6-6 ||| 1
+! Herr Morris verdient sicher eine ||| , Mr Morris certainly deserves an ||| 0.0571221 1 ||| 0-0 1-1 2-2 4-3 3-4 5-5 ||| 1
+! Herr Morris verdient sicher ||| , Mr Morris certainly deserves ||| 0.0571221 1 ||| 0-0 1-1 2-2 4-3 3-4 ||| 1
+! Herr Morris ||| , Mr Morris ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Herr Nisticò hat ||| , the report Mr Nisticò has ||| 0.0571221 1 ||| 0-0 0-2 1-3 2-4 3-5 ||| 1
+! Herr Nisticò ||| , the report Mr Nisticò ||| 0.0571221 1 ||| 0-0 0-2 1-3 2-4 ||| 1
+! Herr Palko ist ein führender Vertreter ||| , Mr Palko is a senior representative ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! Herr Palko ist ein führender ||| , Mr Palko is a senior ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Herr Palko ist ein ||| , Mr Palko is a ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Herr Palko ist ||| , Mr Palko is ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Herr Palko ||| , Mr Palko ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Herr Peter hat ||| , Mr Peter has ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Herr Peter ||| , Mr Peter ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Herr Piecyk , zunächst mein ||| , Mr Piecyk , I should first ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 5-4 4-6 ||| 1
+! Herr Piecyk , ||| , Mr Piecyk , ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Herr Piecyk ||| , Mr Piecyk ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Herr Pohjamo hat in seinen Entschließungsantrag ||| , Mr Pohjamo ' s resolution included ||| 0.028561 1 ||| 0-0 1-1 2-2 5-4 6-5 ||| 2
+! Herr Pohjamo hat in seinen Entschließungsantrag ||| , Mr Pohjamo ' s resolution ||| 0.028561 1 ||| 0-0 1-1 2-2 5-4 6-5 ||| 2
+! Herr Pohjamo hat in seinen ||| , Mr Pohjamo ' s ||| 0.0571221 1 ||| 0-0 1-1 2-2 5-4 ||| 1
+! Herr Pohjamo hat in ||| , Mr Pohjamo ' ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! Herr Pohjamo hat in ||| , Mr Pohjamo ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! Herr Pohjamo hat ||| , Mr Pohjamo ' ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! Herr Pohjamo hat ||| , Mr Pohjamo ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! Herr Pohjamo ||| , Mr Pohjamo ' ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! Herr Pohjamo ||| , Mr Pohjamo ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! Herr Poignant weist ||| , as Mr Poignant points out ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 3-5 ||| 1
+! Herr Poignant ||| , as Mr Poignant ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! Herr Professor Prodi , Sie stellen ||| , Professor Prodi , you are ||| 0.0571221 1 ||| 0-0 2-1 3-2 4-3 5-4 6-5 ||| 1
+! Herr Professor Prodi , Sie ||| , Professor Prodi , you ||| 0.0571221 1 ||| 0-0 2-1 3-2 4-3 5-4 ||| 1
+! Herr Professor Prodi , ||| , Professor Prodi , ||| 0.0571221 1 ||| 0-0 2-1 3-2 4-3 ||| 1
+! Herr Professor Prodi ||| , Professor Prodi ||| 0.0571221 1 ||| 0-0 2-1 3-2 ||| 1
+! Herr Professor ||| , Professor ||| 0.0571221 1 ||| 0-0 2-1 ||| 1
+! Herr Präsident , leider hat der ||| ) Mr President , unfortunately , the ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! Herr Präsident , leider hat ||| ) Mr President , unfortunately , ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Herr Präsident , leider ||| ) Mr President , unfortunately ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Herr Präsident , ||| ) Mr President , ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Herr Präsident ||| ) Mr President ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! Herr Präsident ||| , Dear Mr. Chairman ||| 0.028561 1 ||| 0-0 0-1 1-2 2-3 ||| 2
+! Herr Ratspräsident ||| , Mr President ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Herr Schmid , ich danke Ihnen ||| , Mr Schmid , thank you ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-4 6-5 ||| 1
+! Herr Schmid , ich danke ||| , Mr Schmid , thank ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-4 ||| 1
+! Herr Schmid , ||| , Mr Schmid , ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Herr Schmid ||| , Mr Schmid ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Herr Schnellhardt hat ||| , Mr Schnellhardt has ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Herr Schnellhardt ||| , Mr Schnellhardt ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Herr Schwab ||| , Mr Schwab 's ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! Herr Schwab ||| , Mr Schwab ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! Herr Swoboda gelangt in seinem Bericht ||| , Mr Swoboda 's report ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 4-3 5-3 6-4 ||| 1
+! Herr Swoboda gelangt in seinem ||| , Mr Swoboda 's ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 4-3 5-3 ||| 1
+! Herr Swoboda gelangt ||| , Mr Swoboda ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 ||| 1
+! Herr Trakatellis und Frau Scheele haben ||| , Mr Trakatellis and Mrs Scheele have ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! Herr Trakatellis und Frau Scheele ||| , Mr Trakatellis and Mrs Scheele ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Herr Trakatellis und Frau ||| , Mr Trakatellis and Mrs ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Herr Trakatellis und ||| , Mr Trakatellis and ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Herr Trakatellis ||| , Mr Trakatellis ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Herr Verheugen , Sie ||| , Mr Verheugen , you ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Herr Verheugen , ||| , Mr Verheugen , ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Herr Verheugen ||| , Mr Verheugen ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Herr Whitehead hat ||| , Mr Whitehead has ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Herr Whitehead ||| , Mr Whitehead ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Herr ||| ) Mr ||| 0.0285445 1 ||| 0-0 1-1 ||| 27
+! Herr ||| , Dear Mr. ||| 0.00211563 1 ||| 0-0 0-1 1-2 ||| 27
+! Herr ||| , Mr ||| 0.777778 1 ||| 0-0 1-1 ||| 27
+! Herr ||| , as Mr ||| 0.00211563 1 ||| 0-0 1-1 1-2 ||| 27
+! Herr ||| , the report Mr ||| 0.00211563 1 ||| 0-0 0-2 1-3 ||| 27
+! Herr ||| , ||| 0.00211563 1 ||| 0-0 ||| 27
+! Herrn Berlatos Bericht befasst sich mit ||| , Mr Berlato 's report deals with ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-4 4-5 5-5 6-6 ||| 1
+! Herrn Berlatos Bericht befasst sich ||| , Mr Berlato 's report deals ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-4 4-5 5-5 ||| 1
+! Herrn Berlatos Bericht ||| , Mr Berlato 's report ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-4 ||| 1
+! Herrn Berlatos ||| , Mr Berlato 's ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 ||| 1
+! Herrn ||| , Mr ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Härte auf der einen Seite , ||| ; rigour on the one hand , ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! Härte auf der einen Seite ||| ; rigour on the one hand ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Härte auf der einen ||| ; rigour on the one ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Härte auf der ||| ; rigour on the ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Härte auf ||| ; rigour on ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Härte ||| ; rigour ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Ihnen allen ist die Sachlage bekannt ||| , you all know the position ||| 0.0571221 1 ||| 0-0 1-1 2-2 6-3 4-4 5-5 ||| 1
+! Ihnen allen ist ||| , you all ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Ihnen allen ||| , you all ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Ihnen dürfte bekannt sein , dass ||| , as you will know , ||| 0.0571221 1 ||| 0-0 1-2 2-3 3-4 5-5 ||| 1
+! Ihnen dürfte bekannt sein , ||| , as you will know , ||| 0.0571221 1 ||| 0-0 1-2 2-3 3-4 5-5 ||| 1
+! Ihnen dürfte bekannt sein ||| , as you will know ||| 0.0571221 1 ||| 0-0 1-2 2-3 3-4 ||| 1
+! Ihnen dürfte bekannt ||| , as you will know ||| 0.0571221 1 ||| 0-0 1-2 2-3 3-4 ||| 1
+! Ihnen dürfte ||| , as you will ||| 0.0571221 1 ||| 0-0 1-2 2-3 ||| 1
+! Ihnen gilt meine Solidarität . ||| and express my solidarity with them . ||| 0.0571221 1 ||| 0-0 1-1 2-1 3-2 4-3 5-6 ||| 1
+! Ihnen gilt meine Solidarität ||| and express my solidarity with them ||| 0.0190407 1 ||| 0-0 1-1 2-1 3-2 4-3 ||| 3
+! Ihnen gilt meine Solidarität ||| and express my solidarity with ||| 0.0190407 1 ||| 0-0 1-1 2-1 3-2 4-3 ||| 3
+! Ihnen gilt meine Solidarität ||| and express my solidarity ||| 0.0190407 1 ||| 0-0 1-1 2-1 3-2 4-3 ||| 3
+! Ihnen gilt meine ||| and express my ||| 0.0571221 1 ||| 0-0 1-1 2-1 3-2 ||| 1
+! Ihnen gilt ||| and express ||| 0.0571221 1 ||| 0-0 1-1 2-1 ||| 1
+! Ihnen ist durchaus bewusst , dass ||| , you are well aware that ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-5 ||| 1
+! Ihnen ist durchaus bewusst ||| , you are well aware ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Ihnen ist durchaus ||| , you are well ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Ihnen ist ||| , you are ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Ihnen werden ||| , you will ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Ihnen ||| , as you ||| 0.0142805 1 ||| 0-0 1-2 ||| 4
+! Ihnen ||| , you ||| 0.504132 1 ||| 0-0 1-1 ||| 4
+! Information und Wissen bilden die Grundlage ||| , knowledge and know-how are the basis ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! Information und Wissen bilden die ||| , knowledge and know-how are the ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Information und Wissen bilden ||| , knowledge and know-how are ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Information und Wissen ||| , knowledge and know-how ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Information und ||| , knowledge and ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Information ||| , knowledge ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Israel hat die militärische Macht und ||| Israel has the military power and ||| 0.0571221 1 ||| 1-0 2-1 3-2 4-3 5-4 6-5 ||| 1
+! Israel hat die militärische Macht ||| Israel has the military power ||| 0.0571221 1 ||| 1-0 2-1 3-2 4-3 5-4 ||| 1
+! Israel hat die militärische ||| Israel has the military ||| 0.0571221 1 ||| 1-0 2-1 3-2 4-3 ||| 1
+! Israel hat die ||| Israel has the ||| 0.0571221 1 ||| 1-0 2-1 3-2 ||| 1
+! Israel hat ||| Israel has ||| 0.0571221 1 ||| 1-0 2-1 ||| 1
+! Israel ||| Israel ||| 0.0571221 1 ||| 1-0 ||| 1
+! Jacques Barrot gehört ja ||| although Mr Barrot belongs ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-2 3-3 4-3 ||| 1
+! Jacques Barrot ||| although Mr Barrot ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-2 ||| 1
+! Joaquim Miranda , vielen Dank ||| , thank you , Mr Miranda , ||| 0.0571221 1 ||| 0-0 4-1 5-1 5-2 0-3 1-4 1-5 2-5 3-6 ||| 1
+! Kleinunternehmen gehören zu ||| , small enterprises ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-2 ||| 1
+! Kleinunternehmen gehören ||| , small enterprises ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-2 ||| 1
+! Kollege Davies sprach von ||| , Mr Davies has been talking about ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-5 4-6 ||| 1
+! Kollege Davies sprach ||| , Mr Davies has been talking ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-5 ||| 1
+! Kollege Davies ||| , Mr Davies ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Kollege Sarlis , ||| , Mr Sarlis , ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Kollege Sarlis ||| , Mr Sarlis ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Kollege ||| , Mr ||| 0.38535 1 ||| 0-0 1-1 ||| 2
+! Kommissar Barroso befand sich kürzlich zu ||| , Commissioner Barroso was on a ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 6-4 5-5 ||| 1
+! Kommissar Barroso befand sich ||| , Commissioner Barroso was ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Kommissar Barroso befand ||| , Commissioner Barroso was ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Kommissar Barroso ||| , Commissioner Barroso ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Kommissar Mandelson ||| , Commissioner Mandelson ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Kommissar Patten hat ||| , Commissioner Patten has ||| 0.0571221 1 ||| 0-0 0-1 1-1 2-2 3-3 ||| 1
+! Kommissar Patten meinte , wir sollten ||| , Commissioner Patten said that we should ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! Kommissar Patten meinte , wir ||| , Commissioner Patten said that we ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Kommissar Patten meinte , ||| , Commissioner Patten said that ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Kommissar Patten meinte ||| , Commissioner Patten said ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Kommissar Patten ||| , Commissioner Patten ||| 0.38535 1 ||| 0-0 0-1 1-1 2-2 ||| 2
+! Kommissar Verheugen hat soeben ||| , Commissioner Verheugen has just ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Kommissar Verheugen hat ||| , Commissioner Verheugen has ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Kommissar Verheugen ||| , Commissioner Verheugen ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Kommissar ||| , Commissioner ||| 1 1 ||| 0-0 1-1 ||| 5
+! Kommissarin Ferrero-Waldner hatte Recht , als ||| , Commissioner Ferrero-Waldner was right at the ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 6-6 ||| 1
+! Kommissarin Ferrero-Waldner hatte Recht , ||| , Commissioner Ferrero-Waldner was right at ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 2
+! Kommissarin Ferrero-Waldner hatte Recht , ||| , Commissioner Ferrero-Waldner was right ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 2
+! Kommissarin Ferrero-Waldner hatte Recht ||| , Commissioner Ferrero-Waldner was right at ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 2
+! Kommissarin Ferrero-Waldner hatte Recht ||| , Commissioner Ferrero-Waldner was right ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 2
+! Kommissarin Ferrero-Waldner hatte ||| , Commissioner Ferrero-Waldner was ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Kommissarin Ferrero-Waldner ||| , Commissioner Ferrero-Waldner ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Kommissarin ||| , Commissioner ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Kommissionspräsident Prodi hat heute vormittag unter ||| , this morning President Prodi , among ||| 0.0571221 1 ||| 0-0 5-1 4-2 5-2 1-3 1-4 2-4 3-5 6-6 ||| 1
+! Kommissionspräsident Prodi hat heute vormittag ||| , this morning President Prodi , ||| 0.0571221 1 ||| 0-0 5-1 4-2 5-2 1-3 1-4 2-4 3-5 ||| 1
+! Kommissionspräsident Prodi hatte ||| , President of the Commission Prodi was ||| 0.0571221 1 ||| 0-0 0-1 1-1 1-2 1-3 1-4 2-5 3-6 ||| 1
+! Kommissionspräsident Prodi ||| , President of the Commission Prodi ||| 0.0571221 1 ||| 0-0 0-1 1-1 1-2 1-3 1-4 2-5 ||| 1
+! Kommissionspräsident ||| , President of the Commission ||| 0.0571221 1 ||| 0-0 0-1 1-1 1-2 1-3 1-4 ||| 1
+! Kyoto ist nicht mehr ||| , this is no longer ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Kyoto ist nicht ||| , this is no ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Kyoto ist ||| , this is ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Kyoto ||| , this ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! LIFE + ||| , the intention is that LIFE + ||| 0.0571221 1 ||| 0-0 1-5 2-6 ||| 1
+! LIFE ||| , the intention is that LIFE ||| 0.0571221 1 ||| 0-0 1-5 ||| 1
+! Leidenschaft und ||| ' passion and ||| 0.0571221 0.000288 ||| 0-0 1-1 2-2 ||| 1
+! Leidenschaft und Ãœberzeugung haben unseren ||| ' passion and conviction have ||| 0.0571221 0.000288 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Leidenschaft und Ãœberzeugung haben ||| ' passion and conviction have ||| 0.0571221 0.000288 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Leidenschaft und Ãœberzeugung ||| ' passion and conviction ||| 0.0571221 0.000288 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Leidenschaft ||| ' passion ||| 0.0571221 0.000288 ||| 0-0 1-1 ||| 1
+! Mahmoud ||| , so far President Mahmoud ||| 0.0571221 1 ||| 0-0 0-3 1-4 ||| 1
+! Mal sehen , was Sie ||| , let us see what you ||| 0.0571221 1 ||| 0-0 3-0 2-1 2-2 2-3 4-4 5-5 ||| 1
+! Mal sehen , was ||| , let us see what ||| 0.0571221 1 ||| 0-0 3-0 2-1 2-2 2-3 4-4 ||| 1
+! Mal sehen , ||| , let us see ||| 0.0571221 1 ||| 0-0 3-0 2-1 2-2 2-3 ||| 1
+! Malaria und Tuberkulose sind heilbar ||| ! malaria and tuberculosis can be cured ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 5-5 5-6 ||| 1
+! Malaria und Tuberkulose sind ||| ! malaria and tuberculosis can ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Malaria und Tuberkulose ||| ! malaria and tuberculosis ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Malaria und ||| ! malaria and ||| 0.0571221 0.0775352 ||| 0-0 1-1 2-2 ||| 1
+! Malaria ||| ! malaria ||| 0.0571221 0.0775352 ||| 0-0 1-1 ||| 1
+! Menschenhandel , wie wir ||| , human trafficking , as we ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 4-5 ||| 1
+! Menschenhandel , wie ||| , human trafficking , as ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 ||| 1
+! Menschenhandel , ||| , human trafficking , ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! Menschenhandel ist ||| , trafficking in human beings is ||| 0.0571221 1 ||| 0-0 1-1 1-2 1-3 1-4 2-5 ||| 1
+! Menschenhandel ||| , human trafficking ||| 0.028561 1 ||| 0-0 1-1 1-2 ||| 2
+! Menschenhandel ||| , trafficking in human beings ||| 0.028561 1 ||| 0-0 1-1 1-2 1-3 1-4 ||| 2
+! Minister Sasi hat soeben ||| , Mr Sasi has just ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Minister Sasi hat ||| , Mr Sasi has ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Minister Sasi ||| , Mr Sasi ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Minister ||| , Mr ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Ministerpräsident Meciar spielt mit dem Feuer ||| , President Meciar is playing with fire ||| 0.0571221 1 ||| 0-0 0-1 1-1 2-2 3-3 3-4 4-5 5-6 6-6 ||| 1
+! Ministerpräsident Meciar spielt mit ||| , President Meciar is playing with ||| 0.0571221 1 ||| 0-0 0-1 1-1 2-2 3-3 3-4 4-5 ||| 1
+! Ministerpräsident Meciar spielt ||| , President Meciar is playing ||| 0.0571221 1 ||| 0-0 0-1 1-1 2-2 3-3 3-4 ||| 1
+! Ministerpräsident Meciar ||| , President Meciar ||| 0.0571221 1 ||| 0-0 0-1 1-1 2-2 ||| 1
+! Ministerpräsident ||| , President ||| 0.0571221 1 ||| 0-0 0-1 1-1 ||| 1
+! Mobiltelefon und Internet ||| , the mobile telephone and the Internet ||| 0.0571221 1 ||| 0-0 0-1 1-2 1-3 2-4 3-6 ||| 1
+! Mobiltelefon und ||| , the mobile telephone and the ||| 0.028561 1 ||| 0-0 0-1 1-2 1-3 2-4 ||| 2
+! Mobiltelefon und ||| , the mobile telephone and ||| 0.028561 1 ||| 0-0 0-1 1-2 1-3 2-4 ||| 2
+! Mobiltelefon ||| , the mobile telephone ||| 0.0571221 1 ||| 0-0 0-1 1-2 1-3 ||| 1
+! Mosambik ist ein junger afrikanischer Staat ||| , Mozambique is a young African country ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! Mosambik ist ein junger afrikanischer ||| , Mozambique is a young African ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Mosambik ist ein junger ||| , Mozambique is a young ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Mosambik ist ein ||| , Mozambique is a ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Mosambik ist ||| , Mozambique is ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Mosambik ||| , Mozambique ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Multiple Sklerose sollte - und muss ||| , multiple sclerosis should - and must ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! Multiple Sklerose sollte - und ||| , multiple sclerosis should - and ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Multiple Sklerose sollte - ||| , multiple sclerosis should - ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Multiple Sklerose sollte ||| , multiple sclerosis should ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Multiple Sklerose ||| , multiple sclerosis ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Multiple ||| , multiple ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Nachahmungen und Produktpiraterie sind eben gerade ||| : counterfeiting and product piracy certainly are ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-4 3-5 5-5 6-5 4-6 ||| 1
+! Nachahmungen und ||| : counterfeiting and ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Nachahmungen ||| : counterfeiting ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Natura 2000 ist eine der ||| , Natura 2000 is one of the ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 5-6 ||| 1
+! Natura 2000 ist eine ||| , Natura 2000 is one ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Natura 2000 ist ||| , Natura 2000 is ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Natura 2000 ||| , Natura 2000 ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Natura ||| , Natura ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Nein , das ||| but no , it is ||| 0.028561 1 ||| 0-0 1-0 1-1 2-2 3-3 ||| 2
+! Nein , das ||| but no , it ||| 0.028561 1 ||| 0-0 1-0 1-1 2-2 3-3 ||| 2
+! Nein , wir wollen keine ||| ; no , we do not want ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 4-6 ||| 1
+! Nein , wir ||| ; no , we ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Nein , ||| ; no , ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! Nein , ||| but no , ||| 0.028561 1 ||| 0-0 1-0 1-1 2-2 ||| 2
+! Nein ||| ; no ||| 0.028561 1 ||| 0-0 1-1 ||| 2
+! Nein ||| but no ||| 0.028561 1 ||| 0-0 1-0 1-1 ||| 2
+! Nepal verdient mehr als eine ||| , Nepal deserves more than ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Nepal verdient mehr als ||| , Nepal deserves more than ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Nepal verdient mehr ||| , Nepal deserves more ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Nepal verdient ||| , Nepal deserves ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Nepal ||| , Nepal ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Olivenöl ist eines der ||| , olive oil is one of the ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 3-5 4-6 ||| 1
+! Olivenöl ist eines ||| , olive oil is one of ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 3-5 ||| 1
+! Olivenöl ist ||| , olive oil is ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! Olivenöl ||| , olive oil ||| 0.0571221 1 ||| 0-0 1-1 1-2 ||| 1
+! Organtransplantationen retten tatsächlich ||| , organ transplants do indeed save ||| 0.0571221 1 ||| 0-0 1-1 1-2 3-3 3-4 2-5 ||| 1
+! Organtransplantationen ||| , organ transplants ||| 0.0571221 1 ||| 0-0 1-1 1-2 ||| 1
+! Ortega y Gasset sagte , daß ||| Ortega y Gasset said that ||| 0.0571221 1 ||| 1-0 2-1 3-2 4-3 5-4 6-4 ||| 1
+! Ortega y Gasset sagte ||| Ortega y Gasset said ||| 0.0571221 1 ||| 1-0 2-1 3-2 4-3 ||| 1
+! Ortega y Gasset ||| Ortega y Gasset ||| 0.0571221 1 ||| 1-0 2-1 3-2 ||| 1
+! Ortega y ||| Ortega y ||| 0.0571221 1 ||| 1-0 2-1 ||| 1
+! Ortega ||| Ortega ||| 0.0571221 1 ||| 1-0 ||| 1
+! Parlament , Rat und ||| , Parliament , the Council and ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-4 4-5 ||| 1
+! Parlament , Rat ||| , Parliament , the Council ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-4 ||| 1
+! Parlament , ||| , Parliament , the ||| 0.0190407 1 ||| 0-0 1-1 2-2 ||| 3
+! Parlament , ||| , Parliament , ||| 0.0190407 1 ||| 0-0 1-1 2-2 ||| 3
+! Parlament , ||| , this House , ||| 0.0190407 1 ||| 0-0 0-1 1-2 2-3 ||| 3
+! Parlament ||| , Parliament ||| 0.028561 1 ||| 0-0 1-1 ||| 2
+! Parlament ||| , this House ||| 0.028561 1 ||| 0-0 0-1 1-2 ||| 2
+! Pascal Lamy und ich ||| , Mr Lamy and I ||| 0.0571221 1 ||| 0-0 1-2 2-2 3-3 4-4 ||| 1
+! Pascal Lamy und ||| , Mr Lamy and ||| 0.0571221 1 ||| 0-0 1-2 2-2 3-3 ||| 1
+! Pascal Lamy ||| , Mr Lamy ||| 0.0571221 1 ||| 0-0 1-2 2-2 ||| 1
+! Patente ||| , ||| 0.0571221 1 ||| 0-0 ||| 1
+! Paul Rübig hat gesagt , ||| , as Mr Rübig said , ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 4-4 5-5 ||| 1
+! Paul Rübig hat gesagt ||| , as Mr Rübig said ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 4-4 ||| 1
+! Paul Rübig ||| , as Mr Rübig ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! Paul ||| , as Mr ||| 0.0571221 1 ||| 0-0 1-1 1-2 ||| 1
+! Postdienste sind ||| , postal services are ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! Postdienste ||| , postal services ||| 0.0571221 1 ||| 0-0 1-1 1-2 ||| 1
+! Professor Ukshin Hoti ist eine von ||| , Professor Ukshin Hoti is one of ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! Professor Ukshin Hoti ist eine ||| , Professor Ukshin Hoti is one ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Professor Ukshin Hoti ist ||| , Professor Ukshin Hoti is ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Professor Ukshin Hoti ||| , Professor Ukshin Hoti ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Professor Ukshin ||| , Professor Ukshin ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Professor ||| , Professor ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Präsident Barroso spricht immer von einem ||| , President Barroso always speaks of a ||| 0.0571221 1 ||| 0-0 1-1 2-2 4-3 3-4 5-5 6-6 ||| 1
+! Präsident Barroso spricht immer von ||| , President Barroso always speaks of ||| 0.0571221 1 ||| 0-0 1-1 2-2 4-3 3-4 5-5 ||| 1
+! Präsident Barroso spricht immer ||| , President Barroso always speaks ||| 0.0571221 1 ||| 0-0 1-1 2-2 4-3 3-4 ||| 1
+! Präsident Barroso ||| , President Barroso ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Präsident Chirac hat sich ||| , President Chirac says he would ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-3 2-4 4-5 ||| 1
+! Präsident Chirac hat ||| , President Chirac says he ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-3 2-4 ||| 1
+! Präsident ||| , President ||| 0.38535 1 ||| 0-0 1-1 ||| 2
+! Rassismus und Fremdenfeindlichkeit haben selbst ||| , racism and xenophobia have even ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Rassismus und Fremdenfeindlichkeit haben ||| , racism and xenophobia have ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Rassismus und Fremdenfeindlichkeit ||| , racism and xenophobia ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Rassismus und ||| , racism and ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Rassismus ||| , racism ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Rat und Kommission sollten ||| the Council and the Commission should ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-4 4-5 ||| 1
+! Rat und Kommission ||| the Council and the Commission ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-4 ||| 1
+! Rat und ||| the Council and the ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! Rat und ||| the Council and ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! Rat ||| the Council ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Rauchen ist schädlich - sowohl für ||| , smoking is dangerous both for ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 5-4 6-5 ||| 1
+! Rauchen ist schädlich - sowohl ||| , smoking is dangerous both ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 5-4 ||| 1
+! Rauchen ist schädlich - ||| , smoking is dangerous ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Rauchen ist schädlich ||| , smoking is dangerous ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Rauchen ist ||| , smoking is ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Rauchen ||| , smoking ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Rentenpolitik , Armutsbekämpfung ||| , pension policy , poverty reduction ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 3-5 ||| 1
+! Rentenpolitik , ||| , pension policy , ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! Rentenpolitik ||| , pension policy ||| 0.0571221 1 ||| 0-0 1-1 1-2 ||| 1
+! Rohöl ist teurer als ||| , crude oil is more expensive than ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 3-5 4-6 ||| 1
+! Rohöl ist teurer ||| , crude oil is more expensive ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 3-5 ||| 1
+! Rohöl ist ||| , crude oil is ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! Rohöl ||| , crude oil ||| 0.0571221 1 ||| 0-0 1-1 1-2 ||| 1
+! Russland verweigert die Unterzeichnung ||| , Russia is refusing to sign up ||| 0.0571221 1 ||| 0-0 1-1 2-3 3-3 2-4 4-5 4-6 ||| 1
+! Russland verweigert die ||| , Russia is refusing to ||| 0.0571221 1 ||| 0-0 1-1 2-3 3-3 2-4 ||| 1
+! Russland ||| , Russia is ||| 0.0190407 1 ||| 0-0 1-1 ||| 3
+! Russland ||| , Russia ||| 0.2569 1 ||| 0-0 1-1 ||| 3
+! Schlepperkriminalität und Menschenhandel ||| , organising illegal immigration and people trafficking ||| 0.0571221 1 ||| 0-0 1-1 1-2 1-3 2-4 3-5 3-6 ||| 1
+! Schlepperkriminalität und ||| , organising illegal immigration and ||| 0.0571221 1 ||| 0-0 1-1 1-2 1-3 2-4 ||| 1
+! Schlepperkriminalität ||| , organising illegal immigration ||| 0.0571221 1 ||| 0-0 1-1 1-2 1-3 ||| 1
+! Schreiben Sie Ihren Blauen Brief , ||| and write your warning letter , ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 4-3 5-4 6-5 ||| 1
+! Schreiben Sie Ihren Blauen Brief ||| and write your warning letter ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 4-3 5-4 ||| 1
+! Schreiben Sie Ihren Blauen ||| and write your warning ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 4-3 ||| 1
+! Schreiben Sie Ihren ||| and write your ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 ||| 1
+! Schreiben ||| and write ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Schule , Gesundheit , Postdienste ||| , education , health , postal services ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 5-6 ||| 1
+! Schule , Gesundheit , ||| , education , health , ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Schule , Gesundheit ||| , education , health ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Schule , ||| , education , ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Schule ||| , education ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Schweden hat ||| , Sweden has ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Schweden ||| , Sweden ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Schwindel , Schwund und Betrügereien und ||| ; fraud , wastage and ||| 0.0571221 1 ||| 0-0 1-1 5-1 2-2 4-2 3-3 6-4 ||| 1
+! Schwindel , Schwund und Betrügereien ||| ; fraud , wastage ||| 0.0571221 1 ||| 0-0 1-1 5-1 2-2 4-2 3-3 ||| 1
+! Sicherheit ist nach wie vor ein ||| , safety remains an ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 4-2 5-2 6-3 ||| 1
+! Sicherheit ist nach wie vor ||| , safety remains ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 4-2 5-2 ||| 1
+! Sicherheit ||| , safety ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Sinn und Zweck der ||| , the purpose of the ||| 0.0571221 1 ||| 0-0 1-1 3-2 4-3 4-4 ||| 1
+! Sinn und Zweck der Ãœberarbeitung ||| , the purpose of the revision ||| 0.0571221 1 ||| 0-0 1-1 3-2 4-3 4-4 5-5 ||| 1
+! Sinn und Zweck ||| , the purpose ||| 0.0571221 1 ||| 0-0 1-1 3-2 ||| 1
+! Sinn und ||| , the ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Sinn ||| , the ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Small is beautiful , vor allem ||| , small is beautiful , especially ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-5 ||| 1
+! Small is beautiful , ||| , small is beautiful , ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Small is beautiful ||| , small is beautiful ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Small is ||| , small is ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Small ||| , small ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Solidarität mit den Opfern der ||| , solidarity with the victims of the ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 5-6 ||| 1
+! Solidarität mit den Opfern ||| , solidarity with the victims ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Solidarität mit den ||| , solidarity with the ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Solidarität mit ||| , solidarity with ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Solidarität ||| , solidarity ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Spanien ||| , Spain ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Spanien übernimmt ||| , Spain will ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Stichwort : Verbraucherkreditrichtlinie ; ||| the Consumer Credit Directive ; ||| 0.028561 1 ||| 0-0 3-1 3-2 3-3 4-4 ||| 2
+! Stichwort : Verbraucherkreditrichtlinie ; ||| with the Consumer Credit Directive ; ||| 0.028561 1 ||| 0-1 3-2 3-3 3-4 4-5 ||| 2
+! Stichwort : Verbraucherkreditrichtlinie ||| the Consumer Credit Directive ||| 0.028561 1 ||| 0-0 3-1 3-2 3-3 ||| 2
+! Stichwort : Verbraucherkreditrichtlinie ||| with the Consumer Credit Directive ||| 0.028561 1 ||| 0-1 3-2 3-3 3-4 ||| 2
+! Stichwort : ||| the ||| 0.028561 1 ||| 0-0 ||| 2
+! Stichwort : ||| with the ||| 0.028561 1 ||| 0-1 ||| 2
+! Stichwort ||| the ||| 0.028561 1 ||| 0-0 ||| 2
+! Stichwort ||| with the ||| 0.028561 1 ||| 0-1 ||| 2
+! Stringenz ist eine Sache , aber ||| , stringency is one thing , but ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! Stringenz ist eine Sache , ||| , stringency is one thing , ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Stringenz ist eine Sache ||| , stringency is one thing ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Stringenz ist eine ||| , stringency is one ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Stringenz ist ||| , stringency is ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Stringenz ||| , stringency ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Tampere ist ||| , Tampere has ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Tampere ||| , Tampere ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Tatsache ist , dass ||| it is true that , ||| 0.0571221 1 ||| 0-0 2-1 1-2 4-3 3-4 ||| 1
+! Tatsache ist ||| it is true ||| 0.0571221 1 ||| 0-0 2-1 1-2 ||| 1
+! Tausende Zivilpersonen sind ||| , thousands of civilians have ||| 0.0571221 1 ||| 0-0 1-1 2-3 3-4 ||| 1
+! Tausende Zivilpersonen ||| , thousands of civilians ||| 0.0571221 1 ||| 0-0 1-1 2-3 ||| 1
+! Tausende ||| , thousands of ||| 0.028561 1 ||| 0-0 1-1 ||| 2
+! Tausende ||| , thousands ||| 0.028561 1 ||| 0-0 1-1 ||| 2
+! Terrorismus ist ein Verbrechen gegen ||| , terrorism is a crime against ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Terrorismus ist ein Verbrechen ||| , terrorism is a crime ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Terrorismus ist ein ||| , terrorism is a ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Terrorismus ist ||| , terrorism is ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Terrorismus ||| , terrorism ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Tierversuche gehören bei ||| , animal experiments in the field of ||| 0.0142805 1 ||| 0-0 1-1 1-2 3-3 ||| 4
+! Tierversuche gehören bei ||| , animal experiments in the field ||| 0.0142805 1 ||| 0-0 1-1 1-2 3-3 ||| 4
+! Tierversuche gehören bei ||| , animal experiments in the ||| 0.0142805 1 ||| 0-0 1-1 1-2 3-3 ||| 4
+! Tierversuche gehören bei ||| , animal experiments in ||| 0.0142805 1 ||| 0-0 1-1 1-2 3-3 ||| 4
+! Tierversuche gehören ||| , animal experiments ||| 0.0571221 1 ||| 0-0 1-1 1-2 ||| 1
+! Tierversuche ||| , animal experiments ||| 0.0571221 1 ||| 0-0 1-1 1-2 ||| 1
+! Tunesien ist ein Land , in ||| , Tunisia is a country in ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 6-5 ||| 1
+! Tunesien ist ein Land , ||| , Tunisia is a country ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Tunesien ist ein Land ||| , Tunisia is a country ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Tunesien ist ein ||| , Tunisia is a ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Tunesien ist ||| , Tunisia is ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Tunesien ||| , Tunisia ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Umwelt- , Sozial- und Steuerrecht ||| , environmental , social and tax legislation ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 5-6 ||| 1
+! Umwelt- , Sozial- und ||| , environmental , social and ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Umwelt- , Sozial- ||| , environmental , social ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Umwelt- , ||| , environmental , ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Umwelt- ||| , environmental ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Umweltfragen werden am besten gelöst , ||| , environmental issues are handled best ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 5-4 3-5 4-5 ||| 1
+! Umweltfragen werden am besten gelöst ||| , environmental issues are handled best ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 5-4 3-5 4-5 ||| 1
+! Umweltfragen werden ||| , environmental issues are ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! Umweltfragen ||| , environmental issues ||| 0.0571221 1 ||| 0-0 1-1 1-2 ||| 1
+! Umweltvereinbarungen in der Europäischen Gemeinschaft ||| , environmental agreements in the European Community ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 4-5 5-6 ||| 1
+! Umweltvereinbarungen in der Europäischen ||| , environmental agreements in the European ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 4-5 ||| 1
+! Umweltvereinbarungen in der ||| , environmental agreements in the ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 ||| 1
+! Umweltvereinbarungen in ||| , environmental agreements in ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! Umweltvereinbarungen ||| , environmental agreements ||| 0.0571221 1 ||| 0-0 1-1 1-2 ||| 1
+! Usted no es una persona loca ||| , usted no es una persona loca ||| 0.0571221 1 ||| 0-0 1-1 2-1 2-2 1-3 3-3 4-4 5-5 6-6 ||| 1
+! Usted no es una persona ||| , usted no es una persona ||| 0.0571221 1 ||| 0-0 1-1 2-1 2-2 1-3 3-3 4-4 5-5 ||| 1
+! Usted no es una ||| , usted no es una ||| 0.0571221 1 ||| 0-0 1-1 2-1 2-2 1-3 3-3 4-4 ||| 1
+! Usted no es ||| , usted no es ||| 0.0571221 1 ||| 0-0 1-1 2-1 2-2 1-3 3-3 ||| 1
+! Verletzungen des Rechts auf geistiges Eigentum ||| , infringements of intellectual property rights ||| 0.0571221 1 ||| 0-0 1-1 2-2 5-3 6-4 6-5 ||| 1
+! Verletzungen des Rechts auf geistiges ||| , infringements of intellectual ||| 0.0571221 1 ||| 0-0 1-1 2-2 5-3 ||| 1
+! Verletzungen des Rechts auf ||| , infringements of ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Verletzungen des Rechts ||| , infringements of ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Verletzungen des ||| , infringements of ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Verletzungen ||| , infringements ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Vertrauen ist gut , Kontrolle ist ||| , trust is good , control is ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! Vertrauen ist gut , Kontrolle ||| , trust is good , control ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! Vertrauen ist gut , ||| , trust is good , ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! Vertrauen ist gut ||| , trust is good ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! Vertrauen ist ||| , trust is ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Vertrauen ||| , trust ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Vietnam ist ||| , both in ||| 0.028561 1 ||| 0-0 1-1 ||| 2
+! Vietnam ist ||| , both ||| 0.028561 1 ||| 0-0 1-1 ||| 2
+! Vietnam ||| , both in ||| 0.028561 1 ||| 0-0 1-1 ||| 2
+! Vietnam ||| , both ||| 0.028561 1 ||| 0-0 1-1 ||| 2
+! Walter ||| , Mr Walter 's ||| 0.0571221 1 ||| 0-0 1-1 1-2 1-3 ||| 1
+! Wechsel ist ||| you are right in ||| 0.0190407 1 ||| 0-0 2-1 ||| 3
+! Wechsel ist ||| you are right ||| 0.0190407 1 ||| 0-0 2-1 ||| 3
+! Wechsel ist ||| you are ||| 0.0190407 1 ||| 0-0 2-1 ||| 3
+! Wechsel ||| you ||| 0.0571221 1 ||| 0-0 ||| 1
+! Wettbewerb ist gut , wenn ||| , competition is a good thing when ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-4 3-5 5-6 ||| 1
+! Wettbewerb ist gut , ||| , competition is a good thing ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-4 3-5 ||| 1
+! Wettbewerb ist gut ||| , competition is a good thing ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-4 3-5 ||| 1
+! Wettbewerb ist ||| , competition is ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! Wettbewerb ||| , competition ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! Wwir beraten heute ||| , this morning we are ||| 0.0571221 1 ||| 0-0 1-1 1-2 1-3 3-4 ||| 1
+! Wwir beraten heute über die ||| , this morning we are examining the ||| 0.0571221 1 ||| 0-0 1-1 1-2 1-3 3-4 4-5 5-6 ||| 1
+! Wwir beraten heute über ||| , this morning we are examining ||| 0.0571221 1 ||| 0-0 1-1 1-2 1-3 3-4 4-5 ||| 1
+! Wwir beraten ||| , this morning we ||| 0.0571221 1 ||| 0-0 1-1 1-2 1-3 ||| 1
+! Wwir ||| , this morning we ||| 0.0571221 1 ||| 0-0 1-1 1-2 1-3 ||| 1
+! Ziel des ||| , the objective of the ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 2-4 ||| 1
+! Ziel ||| , the objective ||| 0.028561 1 ||| 0-0 1-1 1-2 ||| 2
+! Ziel ||| aiming ||| 0.028561 1 ||| 1-0 ||| 2
+! Zypern ist vergangene Woche ||| , last week Cyprus was ||| 0.0571221 1 ||| 0-0 3-1 4-2 1-3 2-4 ||| 1
+! aber - ich bin Ihnen ||| , and I am much ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 4-3 5-4 ||| 1
+! aber - ich bin ||| , and I am ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 4-3 ||| 1
+! aber - ich ||| , and I ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 ||| 1
+! aber - wie ein Humorist sagte ||| , but as the joke goes ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 4-3 5-4 6-4 5-5 ||| 1
+! aber - wie ein ||| , but as the ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 4-3 ||| 1
+! aber - wie ||| , but as ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 ||| 1
+! aber Herr ||| , but I ask you , ||| 0.0142805 1 ||| 0-0 1-1 2-2 ||| 4
+! aber Herr ||| , but I ask you ||| 0.0142805 1 ||| 0-0 1-1 2-2 ||| 4
+! aber Herr ||| , but I ask ||| 0.0142805 1 ||| 0-0 1-1 2-2 ||| 4
+! aber Herr ||| , but I ||| 0.0142805 1 ||| 0-0 1-1 2-2 ||| 4
+! aber Sie werden ||| , but you will ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! aber Sie ||| , but you ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! aber da liegt ein Missverständnis vor ||| , but there is a misunderstanding here ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-5 5-6 ||| 1
+! aber da liegt ein ||| , but there is a ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! aber da liegt ||| , but there is ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! aber da ||| , but there ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! aber dann ||| , but then ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! aber darum geht es eigentlich nicht ||| , but that is not my point ||| 0.0190407 1 ||| 0-0 1-1 2-2 3-3 6-4 ||| 3
+! aber darum geht es eigentlich nicht ||| , but that is not my ||| 0.0190407 1 ||| 0-0 1-1 2-2 3-3 6-4 ||| 3
+! aber darum geht es eigentlich nicht ||| , but that is not ||| 0.0190407 1 ||| 0-0 1-1 2-2 3-3 6-4 ||| 3
+! aber darum geht es eigentlich ||| , but that is ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! aber darum geht es ||| , but that is ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! aber darum geht ||| , but that is ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! aber darum ||| , but that ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! aber das kann man ja schon ||| , but one can ||| 0.0190407 1 ||| 0-0 1-1 2-2 4-2 3-3 ||| 3
+! aber das kann man ja schon ||| control , but one can ||| 0.0190407 1 ||| 0-1 1-2 2-3 4-3 3-4 ||| 3
+! aber das kann man ja schon ||| supervisory control , but one can ||| 0.0190407 1 ||| 0-2 1-3 2-4 4-4 3-5 ||| 3
+! aber das kann man ja ||| , but one can ||| 0.0190407 1 ||| 0-0 1-1 2-2 4-2 3-3 ||| 3
+! aber das kann man ja ||| control , but one can ||| 0.0190407 1 ||| 0-1 1-2 2-3 4-3 3-4 ||| 3
+! aber das kann man ja ||| supervisory control , but one can ||| 0.0190407 1 ||| 0-2 1-3 2-4 4-4 3-5 ||| 3
+! aber das kann man ||| , but one can ||| 0.0190407 1 ||| 0-0 1-1 2-2 4-2 3-3 ||| 3
+! aber das kann man ||| control , but one can ||| 0.0190407 1 ||| 0-1 1-2 2-3 4-3 3-4 ||| 3
+! aber das kann man ||| supervisory control , but one can ||| 0.0190407 1 ||| 0-2 1-3 2-4 4-4 3-5 ||| 3
+! aber die ||| , but the ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! aber diese Freundschaft soll ||| , but this friendship should bear fruit ||| 0.0190407 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 3
+! aber diese Freundschaft soll ||| , but this friendship should bear ||| 0.0190407 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 3
+! aber diese Freundschaft soll ||| , but this friendship should ||| 0.0190407 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 3
+! aber diese Freundschaft ||| , but this friendship ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! aber diese ||| , but this ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! aber dieses Fenster der Gelegenheit ||| , but this window of opportunity ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! aber dieses Fenster der ||| , but this window of ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! aber dieses Fenster ||| , but this window ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! aber dieses ||| , but this ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! aber eine ||| , but there ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! aber eine ||| from , but there ||| 0.028561 1 ||| 0-1 1-2 2-3 ||| 2
+! aber es gilt ||| , but ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! aber es muss ||| , but there need to ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-4 ||| 1
+! aber es ||| , but there ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! aber es ||| , but ||| 0.028561 1 ||| 0-0 1-1 ||| 2
+! aber ich glaube , die Bürger ||| , but I think our citizens ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 5-4 6-5 ||| 1
+! aber ich glaube , die ||| , but I think our ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 5-4 ||| 1
+! aber ich glaube , ||| , but I think ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! aber ich glaube ||| , but I think ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! aber ich ||| , but I ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! aber man muss in Betracht ziehen ||| , but we have to consider the ||| 0.0190407 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-5 ||| 3
+! aber man muss in Betracht ziehen ||| , but we have to consider ||| 0.0190407 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-5 ||| 3
+! aber man muss in Betracht ziehen ||| taken , but we have to consider ||| 0.0190407 1 ||| 0-1 1-2 2-3 3-4 4-5 5-6 6-6 ||| 3
+! aber man muss in ||| , but we have to ||| 0.0190407 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 3
+! aber man muss in ||| been taken , but we have to ||| 0.0190407 1 ||| 0-2 1-3 2-4 3-5 4-6 ||| 3
+! aber man muss in ||| taken , but we have to ||| 0.0190407 1 ||| 0-1 1-2 2-3 3-4 4-5 ||| 3
+! aber man muss ||| , but we have ||| 0.0142805 1 ||| 0-0 1-1 2-2 3-3 ||| 4
+! aber man muss ||| been taken , but we have ||| 0.0142805 1 ||| 0-2 1-3 2-4 3-5 ||| 4
+! aber man muss ||| have been taken , but we have ||| 0.0142805 1 ||| 0-3 1-4 2-5 3-6 ||| 4
+! aber man muss ||| taken , but we have ||| 0.0142805 1 ||| 0-1 1-2 2-3 3-4 ||| 4
+! aber man ||| , but we ||| 0.0142805 1 ||| 0-0 1-1 2-2 ||| 4
+! aber man ||| been taken , but we ||| 0.0142805 1 ||| 0-2 1-3 2-4 ||| 4
+! aber man ||| have been taken , but we ||| 0.0142805 1 ||| 0-3 1-4 2-5 ||| 4
+! aber man ||| taken , but we ||| 0.0142805 1 ||| 0-1 1-2 2-3 ||| 4
+! aber mein besonderer Dank gilt ||| , but I am particularly obliged , ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-4 4-5 5-6 ||| 1
+! aber mein besonderer Dank ||| , but I am particularly obliged ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-4 4-5 ||| 1
+! aber mein besonderer ||| , but I am particularly ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-4 ||| 1
+! aber mein ||| , but I am ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 ||| 1
+! aber meine Antwort wird leider ||| , but my answer is ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! aber meine Antwort wird ||| , but my answer is ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! aber meine Antwort ||| , but my answer ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! aber meine ||| , but my ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! aber wenn Sie ||| , but if you ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! aber wenn ||| , but if ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! aber wer macht sie ||| , but exactly who is making them ||| 0.0571221 1 ||| 0-0 1-1 2-3 3-4 3-5 4-6 ||| 1
+! aber wer macht ||| , but exactly who is making ||| 0.0571221 1 ||| 0-0 1-1 2-3 3-4 3-5 ||| 1
+! aber wer ||| , but exactly who ||| 0.0571221 1 ||| 0-0 1-1 2-3 ||| 1
+! aber wir haben gehört ||| , but we have learned ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-4 4-4 ||| 1
+! aber wir hätten ||| , but we would have preferred ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 3-4 3-5 ||| 2
+! aber wir hätten ||| EU , but we would have preferred ||| 0.028561 1 ||| 0-1 1-2 2-3 3-4 3-5 3-6 ||| 2
+! aber wir sind ||| , but we have great ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 ||| 2
+! aber wir sind ||| , but we have ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 ||| 2
+! aber wir sollten nicht anfangen ||| , but we should not start ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! aber wir sollten nicht ||| , but we should not ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! aber wir sollten ||| , but we should ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! aber wir ||| , but we ||| 0.714286 1 ||| 0-0 1-1 2-2 ||| 7
+! aber wir ||| EU , but we ||| 0.00816029 1 ||| 0-1 1-2 2-3 ||| 7
+! aber wir ||| the EU , but we ||| 0.00816029 1 ||| 0-2 1-3 2-4 ||| 7
+! aber ||| ! - but , ||| 0.00129823 0.0775352 ||| 0-0 0-1 1-2 0-3 ||| 44
+! aber ||| , and ||| 0.00129823 1 ||| 0-0 1-1 ||| 44
+! aber ||| , but exactly ||| 0.00129823 1 ||| 0-0 1-1 ||| 44
+! aber ||| , but its prospects ||| 0.00129823 1 ||| 0-0 1-1 ||| 44
+! aber ||| , but its ||| 0.00129823 1 ||| 0-0 1-1 ||| 44
+! aber ||| , but ||| 0.681818 1 ||| 0-0 1-1 ||| 44
+! aber ||| EU , but ||| 0.00129823 1 ||| 0-1 1-2 ||| 44
+! aber ||| am saying ||| 0.00129823 1 ||| 0-0 1-1 ||| 44
+! aber ||| been taken , but ||| 0.00129823 1 ||| 0-2 1-3 ||| 44
+! aber ||| control , but ||| 0.00129823 1 ||| 0-1 1-2 ||| 44
+! aber ||| from , but ||| 0.00129823 1 ||| 0-1 1-2 ||| 44
+! aber ||| have been taken , but ||| 0.00129823 1 ||| 0-3 1-4 ||| 44
+! aber ||| supervisory control , but ||| 0.00129823 1 ||| 0-2 1-3 ||| 44
+! aber ||| taken , but ||| 0.00129823 1 ||| 0-1 1-2 ||| 44
+! aber ||| the EU , but ||| 0.00129823 1 ||| 0-2 1-3 ||| 44
+! abgesehen von der Technik der Mittelzuweisungen ||| , beyond its technique on envelopes ||| 0.0571221 1 ||| 0-0 1-1 2-1 3-2 4-3 5-4 6-5 ||| 1
+! abgesehen von der Technik der ||| , beyond its technique on ||| 0.0571221 1 ||| 0-0 1-1 2-1 3-2 4-3 5-4 ||| 1
+! abgesehen von der Technik ||| , beyond its technique ||| 0.0571221 1 ||| 0-0 1-1 2-1 3-2 4-3 ||| 1
+! abgesehen von der ||| , beyond its ||| 0.0571221 1 ||| 0-0 1-1 2-1 3-2 ||| 1
+! abgesehen von ||| , beyond ||| 0.0571221 1 ||| 0-0 1-1 2-1 ||| 1
+! abschließend möchte ich noch ||| , I should like to conclude by ||| 0.0571221 1 ||| 0-0 3-1 2-2 2-3 2-4 1-5 1-6 ||| 1
+! abschließend möchte ich ||| , I should like to conclude by ||| 0.028561 1 ||| 0-0 3-1 2-2 2-3 2-4 1-5 1-6 ||| 2
+! abschließend möchte ich ||| to conclude , ||| 0.028561 1 ||| 1-0 1-1 2-1 3-1 0-2 ||| 2
+! abschließend ||| , by way of conclusion , ||| 0.028561 1 ||| 0-0 1-1 1-4 ||| 2
+! abschließend ||| , by way of conclusion ||| 0.028561 1 ||| 0-0 1-1 1-4 ||| 2
+! all dies ist ||| that all these things should ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-4 ||| 1
+! all dies ||| that all these things ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 ||| 1
+! all ||| that all ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! alle , die mich kennen , ||| , those who know me can ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 6-2 5-3 4-4 5-5 ||| 1
+! alle Arten landwirtschaftlicher Tätigkeit und ||| , all types of agricultural activity and ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-4 4-5 5-6 ||| 1
+! alle Arten landwirtschaftlicher Tätigkeit ||| , all types of agricultural activity ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-4 4-5 ||| 1
+! alle Arten landwirtschaftlicher ||| , all types of agricultural ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-4 ||| 1
+! alle Arten ||| , all types ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! alle Mittel aus dem europäischen Haushalt ||| , all funds from the European Budget ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! alle Mittel aus dem europäischen ||| , all funds from the European ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! alle Mittel aus dem ||| , all funds from the ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! alle Mittel aus ||| , all funds from ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! alle Mittel ||| , all funds ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! alle singen heute ||| , everyone is proclaiming today ||| 0.0571221 1 ||| 0-0 1-1 2-3 3-4 ||| 1
+! alle singen ||| , everyone is proclaiming ||| 0.0571221 1 ||| 0-0 1-1 2-3 ||| 1
+! alle wissen um die ||| , no one is unaware of the ||| 0.0571221 1 ||| 0-0 1-1 3-3 2-4 4-6 ||| 1
+! alle wissen um ||| , no one is unaware of ||| 0.028561 1 ||| 0-0 1-1 3-3 2-4 ||| 2
+! alle wissen um ||| , no one is unaware ||| 0.028561 1 ||| 0-0 1-1 3-3 2-4 ||| 2
+! alle ||| , all ||| 0.1101 1 ||| 0-0 1-1 ||| 7
+! alle ||| , everyone is ||| 0.00816029 1 ||| 0-0 1-1 ||| 7
+! alle ||| , everyone ||| 0.00816029 1 ||| 0-0 1-1 ||| 7
+! alle ||| , no one ||| 0.00816029 1 ||| 0-0 1-1 ||| 7
+! alle ||| , no ||| 0.00816029 1 ||| 0-0 1-1 ||| 7
+! alle ||| , those ||| 0.00816029 1 ||| 0-0 1-1 ||| 7
+! allerdings gehört das ||| , but unfortunately that has ||| 0.0571221 1 ||| 0-0 1-1 1-2 3-3 2-4 ||| 1
+! allerdings muss sie mit ||| , but the opinion must accord with ||| 0.0571221 1 ||| 0-0 1-1 3-2 2-4 4-6 ||| 1
+! allerdings muss sie ||| , but the opinion must accord ||| 0.028561 1 ||| 0-0 1-1 3-2 2-4 ||| 2
+! allerdings muss sie ||| , but the opinion must ||| 0.028561 1 ||| 0-0 1-1 3-2 2-4 ||| 2
+! allerdings ||| , but unfortunately ||| 0.028561 1 ||| 0-0 1-1 1-2 ||| 2
+! allerdings ||| , but ||| 0.028561 1 ||| 0-0 1-1 ||| 2
+! alles an diesen Informationen ist in ||| , all of this information is ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! alles an diesen Informationen ist ||| , all of this information is ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! alles an diesen Informationen ||| , all of this information ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! alles an diesen ||| , all of this ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! alles an ||| , all of ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! alles ist bereits gesagt worden . ||| , everything has been said . ||| 0.0571221 1 ||| 0-0 1-1 2-2 5-3 3-4 4-4 6-5 ||| 1
+! alles ist bereits gesagt worden ||| , everything has been said ||| 0.0571221 1 ||| 0-0 1-1 2-2 5-3 3-4 4-4 ||| 1
+! alles ist ||| , everything has ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! alles ||| , all ||| 0.028561 1 ||| 0-0 1-1 ||| 2
+! alles ||| , everything ||| 0.028561 1 ||| 0-0 1-1 ||| 2
+! allgemein gesagt , halte ich diese ||| , generally speaking I consider this ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-2 5-3 4-4 6-5 ||| 1
+! allgemein gesagt , halte ich ||| , generally speaking I consider ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-2 5-3 4-4 ||| 1
+! allgemein gesagt , ||| , generally speaking ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-2 ||| 1
+! allgemein gesagt ||| , generally speaking ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-2 ||| 1
+! allzu viele ||| , there are too many ||| 0.0571221 1 ||| 0-0 0-1 1-3 2-4 ||| 1
+! allzu ||| , there are too ||| 0.0571221 1 ||| 0-0 0-1 1-3 ||| 1
+! als Abgeordneter aus ||| , as a member of parliament from ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 2-5 3-6 ||| 1
+! als Abgeordneter des ||| , as a Member for the ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-4 3-5 ||| 1
+! als Abgeordneter von der französischen ||| , as a Member for the French ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-4 4-5 5-6 ||| 1
+! als Abgeordneter von der ||| , as a Member for the ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-4 4-5 ||| 1
+! als Abgeordneter von ||| , as a Member for ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-4 ||| 1
+! als Abgeordneter ||| , as a Member ||| 0.2569 1 ||| 0-0 1-1 2-2 2-3 ||| 3
+! als Abgeordneter ||| , as a member of parliament ||| 0.0190407 1 ||| 0-0 1-1 2-2 2-3 2-5 ||| 3
+! als Beobachter des Europäischen Parlaments ||| , as European Parliament observers , ||| 0.028561 1 ||| 0-0 1-1 4-2 3-3 5-3 2-4 ||| 2
+! als Beobachter des Europäischen Parlaments ||| , as European Parliament observers ||| 0.028561 1 ||| 0-0 1-1 4-2 3-3 5-3 2-4 ||| 2
+! als Berichterstatter bedaure ich es eigentlich ||| , as rapporteur I regret the fact ||| 0.0571221 1 ||| 0-0 1-1 2-2 4-3 3-4 5-5 6-6 ||| 1
+! als Berichterstatter bedaure ich es ||| , as rapporteur I regret the ||| 0.0571221 1 ||| 0-0 1-1 2-2 4-3 3-4 5-5 ||| 1
+! als Berichterstatter bedaure ich ||| , as rapporteur I regret ||| 0.0571221 1 ||| 0-0 1-1 2-2 4-3 3-4 ||| 1
+! als Berichterstatter für Estland ||| , as rapporteur for Estonia ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! als Berichterstatter für ||| , as rapporteur for ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! als Berichterstatter zu ||| , in the capacity of rapporteur for ||| 0.0571221 1 ||| 0-0 1-1 1-2 1-3 2-5 3-6 ||| 1
+! als Berichterstatter zum Beitritt ||| , as rapporteur for the accession of ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 3-4 4-5 ||| 2
+! als Berichterstatter zum Beitritt ||| , as rapporteur for the accession ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 3-4 4-5 ||| 2
+! als Berichterstatter zum ||| , as rapporteur for the ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-4 ||| 1
+! als Berichterstatter ||| , as rapporteur ||| 0.504132 1 ||| 0-0 1-1 2-2 ||| 4
+! als Berichterstatter ||| , in the capacity of rapporteur ||| 0.0142805 1 ||| 0-0 1-1 1-2 1-3 2-5 ||| 4
+! als Berichterstatterin meiner Fraktion für ||| , as my group 's rapporteur for ||| 0.0571221 1 ||| 0-0 1-1 3-2 4-3 2-5 5-6 ||| 1
+! als Berichterstatterin meiner Fraktion ||| , as my group 's rapporteur ||| 0.0571221 1 ||| 0-0 1-1 3-2 4-3 2-5 ||| 1
+! als Berichterstatterin ||| , as rapporteur ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! als Berichterstatterin über die Entlastung betreffend ||| , as rapporteur on the discharge for ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 6-6 ||| 1
+! als Berichterstatterin über die Entlastung ||| , as rapporteur on the discharge ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 5-5 ||| 1
+! als Berichterstatterin über die ||| , as rapporteur on the ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 4-4 ||| 1
+! als Berichterstatterin über ||| , as rapporteur on ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 ||| 1
+! als Beweis dafür , daß dieses ||| , as proof that this ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 4-3 5-3 6-4 ||| 1
+! als Beweis dafür , daß ||| , as proof that ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 4-3 5-3 ||| 1
+! als Beweis dafür ||| , as proof ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-2 ||| 1
+! als Bürgerbeauftragter vertreten Sie die 450 ||| , as Ombudsman you represent the 450 ||| 0.0571221 1 ||| 0-0 1-1 2-2 4-3 3-4 5-5 6-6 ||| 1
+! als Bürgerbeauftragter vertreten Sie die ||| , as Ombudsman you represent the ||| 0.0571221 1 ||| 0-0 1-1 2-2 4-3 3-4 5-5 ||| 1
+! als Bürgerbeauftragter vertreten Sie ||| , as Ombudsman you represent ||| 0.0571221 1 ||| 0-0 1-1 2-2 4-3 3-4 ||| 1
+! als Bürgerbeauftragter ||| , as Ombudsman ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! als China ||| , when China ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! als Christdemokrat und schwedischer ||| , as a Christian Democrat and Swedish ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 2-4 3-5 4-6 ||| 1
+! als Christdemokrat und ||| , as a Christian Democrat and ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 2-4 3-5 ||| 1
+! als Christdemokrat ||| , as a Christian Democrat ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 2-4 ||| 1
+! als Deutscher ist man hier in ||| , any German in this House will ||| 0.0571221 1 ||| 0-0 1-1 2-1 2-2 6-3 4-4 5-4 5-5 3-6 ||| 1
+! als Deutscher ||| , any German ||| 0.0571221 1 ||| 0-0 1-1 2-1 2-2 ||| 1
+! als Einwohner der ||| , as a resident of the ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 3-5 ||| 1
+! als Einwohner ||| , as a resident ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! als Ergebnis der Beratungen auf ||| , as a result of consultations at ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 4-5 5-6 ||| 1
+! als Ergebnis der Beratungen ||| , as a result of consultations ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 4-5 ||| 1
+! als Ergebnis der ||| , as a result of ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 ||| 1
+! als Ergebnis ||| , as a result ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! als Ergänzung zu meiner ||| , further to the question that I ||| 0.0571221 1 ||| 0-0 2-1 3-2 1-3 4-6 ||| 1
+! als Ergänzung zu ||| , further to the question that ||| 0.0190407 1 ||| 0-0 2-1 3-2 1-3 ||| 3
+! als Ergänzung zu ||| , further to the question ||| 0.0190407 1 ||| 0-0 2-1 3-2 1-3 ||| 3
+! als Ergänzung zu ||| , further to the ||| 0.0190407 1 ||| 0-0 2-1 3-2 1-3 ||| 3
+! als Erstes möchte ich ||| , I should like to start by ||| 0.028561 1 ||| 0-0 4-1 3-2 3-3 3-4 2-5 2-6 ||| 2
+! als Erstes möchte ich ||| , firstly I would like to ||| 0.028561 1 ||| 0-0 1-1 2-1 4-2 3-3 3-4 3-5 ||| 2
+! als Erstes ||| , first of all , ||| 0.00476017 1 ||| 0-0 1-1 2-1 ||| 12
+! als Erstes ||| , first of all ||| 0.168044 1 ||| 0-0 1-1 2-1 ||| 12
+! als Erstes ||| , first of ||| 0.168044 1 ||| 0-0 1-1 2-1 ||| 12
+! als Erstes ||| , first ||| 0.168044 1 ||| 0-0 1-1 2-1 ||| 12
+! als Erstes ||| , firstly ||| 0.00476017 1 ||| 0-0 1-1 2-1 ||| 12
+! als Erstes ||| , the first message ||| 0.00476017 1 ||| 0-0 1-1 2-2 2-3 ||| 12
+! als Föderalisten haben ||| , as a pro-federalist party ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-3 2-4 ||| 1
+! als Grüne bin ich ||| , as a Green I am ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 4-4 3-5 ||| 1
+! als Grüne ||| , as a Green ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! als Leiter der Delegation ||| , as the leader of the delegation ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 3-5 4-6 ||| 1
+! als Leiter der ||| , as the leader of the ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 3-4 3-5 ||| 1
+! als Leiter ||| , as the leader ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
+! als Mitberichterstatter dieser ||| , as co-rapporteur for this , ||| 0.028561 1 ||| 0-0 1-1 2-2 3-4 ||| 2
+! als Mitberichterstatter dieser ||| , as co-rapporteur for this ||| 0.028561 1 ||| 0-0 1-1 2-2 3-4 ||| 2
+! als Mitberichterstatter ||| , as co-rapporteur for ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! als Mitberichterstatter ||| , as co-rapporteur ||| 0.028561 1 ||| 0-0 1-1 2-2 ||| 2
+! als Mitglied des ||| , as a member of the ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 3-4 3-5 ||| 1
+! als Mitglied ||| , as a member ||| 0.0571221 1 ||| 0-0 1-1 2-2 2-3 ||| 1
+! als Präsident der Europäischen Union ||| , as President-in-Office of the European Union ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-4 4-5 5-6 ||| 1
+! als Präsident der Europäischen ||| , as President-in-Office of the European ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-4 4-5 ||| 1
+! als Präsident der ||| , as President-in-Office of the ||| 0.0571221 1 ||| 0-0 1-1 2-2 3-3 3-4 ||| 1
+! als Präsident ||| , as President-in-Office ||| 0.0571221 1 ||| 0-0 1-1 2-2 ||| 1
+! als Schotte und Ihr Landsmann bin ||| , as a fellow Scot , ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 2-4 4-4 5-4 6-4 ||| 2
+! als Schotte und Ihr Landsmann bin ||| , as a fellow Scot ||| 0.028561 1 ||| 0-0 1-1 2-2 3-3 2-4 4-4 5-4 6-4 ||| 2
+! als Sie ||| , when ||| 0.0571221 1 ||| 0-0 1-1 ||| 1
+! als Skandinavierin verwende ich ||| , as a Scandinavian , I ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 4-5 ||| 1
+! als Skandinavierin verwende ||| , as a Scandinavian , ||| 0.028561 1 ||| 0-0 1-1 1-2 2-3 ||| 2
+! als Skandinavierin verwende ||| , as a Scandinavian ||| 0.028561 1 ||| 0-0 1-1 1-2 2-3 ||| 2
+! als Skandinavierin ||| , as a Scandinavian , ||| 0.0571221 1 ||| 0-0 1-1 1-2 2-3 ||| 1
diff --git a/regression-testing/tests/score.phrase-based/args.txt b/regression-testing/tests/score.phrase-based/args.txt
new file mode 100644
index 000000000..ec865152b
--- /dev/null
+++ b/regression-testing/tests/score.phrase-based/args.txt
@@ -0,0 +1 @@
+$data_dir/models/score.phrase-based/extract.sorted $data_dir/models/score.phrase-based/lex.f2e $outPath --GoodTuring
diff --git a/regression-testing/tests/score.phrase-based/truth/results.txt b/regression-testing/tests/score.phrase-based/truth/results.txt
new file mode 100644
index 000000000..8c7fdbe32
--- /dev/null
+++ b/regression-testing/tests/score.phrase-based/truth/results.txt
@@ -0,0 +1,1739 @@
+! ! ! ) bezeichnet wird , ||| ! ! ! ) , ||| 0.0571221 0.000466119 ||| ||| 1
+! ! ! ) bezeichnet wird ||| ! ! ! ) ||| 0.0571221 0.000466119 ||| ||| 1
+! ! ! ) bezeichnet ||| ! ! ! ) ||| 0.0571221 0.000466119 ||| ||| 1
+! ! ! ) ||| ! ! ! ) ||| 0.2569 0.000466119 ||| ||| 3
+! ! ! ) ||| ! ) ||| 0.0190407 0.0775352 ||| ||| 3
+! ! ! ||| ! ! ! ||| 0.252066 0.000466119 ||| ||| 8
+! ! ! ||| ! ||| 0.625 0.0775352 ||| ||| 8
+! ! ) bezeichnet wird , hat ||| ! ! ) , has ||| 0.0571221 0.00601171 ||| ||| 1
+! ! ) bezeichnet wird , ||| ! ! ) , ||| 0.0571221 0.00601171 ||| ||| 1
+! ! ) bezeichnet wird ||| ! ! ) ||| 0.0571221 0.00601171 ||| ||| 1
+! ! ) bezeichnet ||| ! ! ) ||| 0.0571221 0.00601171 ||| ||| 1
+! ! ) ||| ! ! ) ||| 0.38535 0.00601171 ||| ||| 2
+! ! die Bilanz , die wir ||| and we ||| 0.0571221 1 ||| ||| 1
+! ! die Bilanz , die ||| and ||| 0.0571221 1 ||| ||| 1
+! ! die Bilanz , ||| and ||| 0.0571221 1 ||| ||| 1
+! ! ||| ! ! ||| 0.636364 0.00601171 ||| ||| 11
+! ! ||| ! ||| 0.0700637 0.0775352 ||| ||| 11
+! ! ||| . ||| 0.00519291 1 ||| ||| 11
+! ! ||| unemployment ! ||| 0.00519291 0.0775352 ||| ||| 11
+! " ( Europa war gut zu ||| ! ' ||| 0.0571221 0.022535 ||| ||| 1
+! " ( Europa war gut ||| ! ' ||| 0.0571221 0.022535 ||| ||| 1
+! " ( Europa war ||| ! ' ||| 0.0571221 0.022535 ||| ||| 1
+! " ( Europa ||| ! ' ||| 0.0571221 0.022535 ||| ||| 1
+! " ( es ist die Sonne ||| the sun ||| 0.0571221 1 ||| ||| 1
+! " ( es ist die ||| the ||| 0.0571221 1 ||| ||| 1
+! " ( ||| ! ' ||| 0.0571221 0.022535 ||| ||| 1
+! " ) Heute ||| ! ' ) We ||| 0.0571221 0.0449274 ||| ||| 1
+! " ) Sie haben vollkommen recht ||| ! ' exactly ||| 0.0571221 0.0449274 ||| ||| 1
+! " ) Sie haben vollkommen ||| ! ' exactly ||| 0.0571221 0.0449274 ||| ||| 1
+! " ) Sie haben ||| ! ' ||| 0.0571221 0.0449274 ||| ||| 1
+! " ) Sie ||| ! ' ||| 0.0571221 0.0449274 ||| ||| 1
+! " ) sagte er , die ||| ! ' ) said that the ||| 0.0571221 0.0449274 ||| ||| 1
+! " ) sagte er , ||| ! ' ) said that ||| 0.0571221 0.0449274 ||| ||| 1
+! " ) sagte er ||| ! ' ) said ||| 0.0571221 0.0449274 ||| ||| 1
+! " ) sagte ||| ! ' ) said ||| 0.0571221 0.0449274 ||| ||| 1
+! " ) ||| ! ' ) ||| 0.727273 0.0449274 ||| ||| 11
+! " ) ||| ! ' ||| 0.00519291 0.0449274 ||| ||| 11
+! " ) ||| common ||| 0.00519291 1 ||| ||| 11
+! " ) ||| more common ||| 0.00519291 1 ||| ||| 11
+! " , aber natürlich unter der ||| ' , but of course on ||| 0.0571221 0.289866 ||| ||| 1
+! " , aber natürlich unter ||| ' , but of course on ||| 0.0571221 0.289866 ||| ||| 1
+! " , aber natürlich ||| ' , but of course ||| 0.0571221 0.289866 ||| ||| 1
+! " , aber ||| ' , but ||| 0.0571221 0.289866 ||| ||| 1
+! " , also ||| ' , i.e. , ||| 0.0571221 0.579445 ||| ||| 1
+! " , antwortete der Präsident . ||| ! " replied the President . ||| 0.0571221 0.00917533 ||| ||| 1
+! " , antwortete der Präsident ||| ! " replied the President ||| 0.0571221 0.00917533 ||| ||| 1
+! " , antwortete der ||| ! " replied the ||| 0.0571221 0.00917533 ||| ||| 1
+! " , antwortete ||| ! " replied ||| 0.0571221 0.00917533 ||| ||| 1
+! " , der ||| ! ' , which ||| 0.0571221 0.0449274 ||| ||| 1
+! " , doch der ||| ! " but a ||| 0.0571221 0.00917533 ||| ||| 1
+! " , doch ||| ! " but ||| 0.0571221 0.00917533 ||| ||| 1
+! " , entgegnete der Pilot ||| ' flying is the safest form of ||| 0.028561 0.526578 ||| ||| 2
+! " , entgegnete der Pilot ||| ' flying is the safest form ||| 0.028561 0.526578 ||| ||| 2
+! " , entgegnete der ||| ' flying is the ||| 0.0571221 0.526578 ||| ||| 1
+! " , gab ich zur Antwort ||| ! ' I replied ||| 0.0571221 0.0449274 ||| ||| 1
+! " , muss ||| is ! ' ||| 0.0571221 0.0449274 ||| ||| 1
+! " , rief Alice ' . ||| ! †cried Alice ' . ||| 0.0571221 0.042258 ||| ||| 1
+! " , rief Alice ' ||| ! †cried Alice ' ||| 0.0571221 0.042258 ||| ||| 1
+! " , rief Alice ||| ! †cried Alice ||| 0.0571221 0.0775352 ||| ||| 1
+! " , rief ich aus , ||| , ||| 0.028561 1 ||| ||| 2
+! " , rief ich aus , ||| done , ||| 0.028561 1 ||| ||| 2
+! " , rief ich aus ||| , ||| 0.028561 1 ||| ||| 2
+! " , rief ich aus ||| done , ||| 0.028561 1 ||| ||| 2
+! " , rief ich ||| , ||| 0.028561 1 ||| ||| 2
+! " , rief ich ||| done , ||| 0.028561 1 ||| ||| 2
+! " , rief ||| ! †cried ||| 0.0190407 0.0775352 ||| ||| 3
+! " , rief ||| , ||| 0.0190407 1 ||| ||| 3
+! " , rief ||| done , ||| 0.0190407 1 ||| ||| 3
+! " , sagte die andere Kuh ||| , " replied the other cow ||| 0.0571221 0.118338 ||| ||| 1
+! " , sagte die andere ||| , " replied the other ||| 0.0571221 0.118338 ||| ||| 1
+! " , sagte die ||| , " replied the ||| 0.0571221 0.118338 ||| ||| 1
+! " , sagte ich zu ihr ||| ! " I said to her ||| 0.0571221 0.00917533 ||| ||| 1
+! " , sagte ich zu ||| ! " I said to ||| 0.0571221 0.00917533 ||| ||| 1
+! " , sagte ich ||| ! " I said ||| 0.0571221 0.00917533 ||| ||| 1
+! " , sagte ||| , " replied ||| 0.0571221 0.118338 ||| ||| 1
+! " , schrie der Hirtenjunge ||| ! " , cried the shepherd boy ||| 0.0571221 0.00917533 ||| ||| 1
+! " , schrie der ||| ! " , cried the ||| 0.0571221 0.00917533 ||| ||| 1
+! " , schrie ||| ! " , cried ||| 0.0571221 0.00917533 ||| ||| 1
+! " , sondern damit es ||| ! ' , but so that they ||| 0.0571221 0.0449274 ||| ||| 1
+! " , sondern damit ||| ! ' , but so that ||| 0.0571221 0.0449274 ||| ||| 1
+! " , sondern ||| ! ' , but ||| 0.0571221 0.0449274 ||| ||| 1
+! " , und fuhr fort , ||| ! ' and ||| 0.0571221 0.0449274 ||| ||| 1
+! " , und fuhr fort ||| ! ' and ||| 0.0571221 0.0449274 ||| ||| 1
+! " , und fuhr ||| ! ' and ||| 0.0571221 0.0449274 ||| ||| 1
+! " , und ||| ! ' and ||| 0.0571221 0.0449274 ||| ||| 1
+! " , weil insgesamt fünf Kollegen ||| , " because altogether five colleagues ||| 0.0571221 0.118338 ||| ||| 1
+! " , weil insgesamt fünf ||| , " because altogether five ||| 0.0571221 0.118338 ||| ||| 1
+! " , weil insgesamt ||| , " because altogether ||| 0.0571221 0.118338 ||| ||| 1
+! " , weil ||| , " because ||| 0.0571221 0.118338 ||| ||| 1
+! " , worauf Eric antwortet : ||| , ' and Eric says , ||| 0.0571221 0.579445 ||| ||| 1
+! " , worauf ||| , ' and ||| 0.0571221 0.579445 ||| ||| 1
+! " , ||| ! " , ||| 0.0350318 0.00917533 ||| ||| 22
+! " , ||| ! " ||| 0.0916604 0.00917533 ||| ||| 22
+! " , ||| ! ' , ||| 0.0350318 0.0449274 ||| ||| 22
+! " , ||| ! ' ||| 0.0916604 0.0449274 ||| ||| 22
+! " , ||| ! †||| 0.00259646 0.0775352 ||| ||| 22
+! " , ||| ' , ||| 0.00259646 0.289866 ||| ||| 22
+! " , ||| , " ||| 0.0350318 0.118338 ||| ||| 22
+! " , ||| , ||| 0.00259646 1 ||| ||| 22
+! " , ||| ? ' ||| 0.00259646 0.579445 ||| ||| 22
+! " , ||| any fish ? ' ||| 0.00259646 0.579445 ||| ||| 22
+! " , ||| done , ||| 0.00259646 1 ||| ||| 22
+! " , ||| fish ? ' ||| 0.00259646 0.579445 ||| ||| 22
+! " , ||| give you " , ||| 0.00259646 0.118338 ||| ||| 22
+! " , ||| to give you " , ||| 0.00259646 0.118338 ||| ||| 22
+! " , ||| you " , ||| 0.00259646 0.118338 ||| ||| 22
+! " - obwohl wir doch wissen ||| ' . whereas we know ||| 0.0571221 0.289866 ||| ||| 1
+! " - obwohl wir ||| ' . whereas we ||| 0.0571221 0.289866 ||| ||| 1
+! " - obwohl ||| ' . whereas ||| 0.0571221 0.289866 ||| ||| 1
+! " - und dies ||| ! ' - and what is ||| 0.0571221 0.0449274 ||| ||| 1
+! " - und dies übrigens ||| ! ' - and what is more ||| 0.0571221 0.0449274 ||| ||| 1
+! " - und ||| ! ' - and ||| 0.0571221 0.0449274 ||| ||| 1
+! " - ||| ! ' - ||| 0.028561 0.0449274 ||| ||| 2
+! " - ||| ' . ||| 0.028561 0.289866 ||| ||| 2
+! " . und Spinelli , der ||| ! ' ; Spinelli , who ||| 0.0571221 0.0449274 ||| ||| 1
+! " . und Spinelli ||| ! ' ; Spinelli ||| 0.0571221 0.0449274 ||| ||| 1
+! " . und ||| ! ' ; ||| 0.0571221 0.0449274 ||| ||| 1
+! " . ||| ! ' . ||| 0.222222 0.0449274 ||| ||| 18
+! " . ||| ! ' ||| 0.5 0.0224666 ||| ||| 18
+! " . ||| ! . ||| 0.00317345 0.0775352 ||| ||| 18
+! " . ||| ' . ||| 0.00317345 0.579445 ||| ||| 18
+! " . ||| . †||| 0.00317345 1 ||| ||| 18
+! " . ||| a living ! ' . ||| 0.00317345 0.0449274 ||| ||| 18
+! " . ||| living ! ' . ||| 0.00317345 0.0449274 ||| ||| 18
+! " : mit der linken Hand ||| ' - ||| 0.0571221 0.289866 ||| ||| 1
+! " : mit der linken ||| ' - ||| 0.0571221 0.289866 ||| ||| 1
+! " : mit der ||| ' - ||| 0.0571221 0.289866 ||| ||| 1
+! " : mit ||| ' - ||| 0.0571221 0.289866 ||| ||| 1
+! " : ||| ' - ||| 0.0571221 0.289866 ||| ||| 1
+! " ? ||| ! " ||| 0.028561 0.00461275 ||| ||| 2
+! " ? ||| ! ' ? ||| 0.028561 0.0449274 ||| ||| 2
+! " Europa gelingt gemeinsam ! " ||| . ||| 0.0571221 1 ||| ||| 1
+! " Europa gelingt gemeinsam ! ||| . ||| 0.0571221 1 ||| ||| 1
+! " Europa gelingt gemeinsam ||| . ||| 0.0571221 1 ||| ||| 1
+! " Europa gelingt ||| . ||| 0.0571221 1 ||| ||| 1
+! " Europa ||| . ||| 0.0571221 1 ||| ||| 1
+! " Le nationalisme , c ||| : ' Le nationalisme , c ||| 0.0571221 0.579445 ||| ||| 1
+! " Le nationalisme , ||| : ' Le nationalisme , ||| 0.0571221 0.579445 ||| ||| 1
+! " Le nationalisme ||| : ' Le nationalisme ||| 0.0571221 0.579445 ||| ||| 1
+! " Le ||| : ' Le ||| 0.0571221 0.579445 ||| ||| 1
+! " an die Eurokraten in Brüssel ||| ' to the Brussels Eurocrats ||| 0.0571221 0.289866 ||| ||| 1
+! " an die ||| ' to the ||| 0.0571221 0.289866 ||| ||| 1
+! " an ||| ' to ||| 0.0571221 0.289866 ||| ||| 1
+! " begrüßt ||| ! ' ||| 0.0571221 0.0449274 ||| ||| 1
+! " das war die Antwort ||| their reply was that ||| 0.0571221 1 ||| ||| 1
+! " das war ||| was that ||| 0.0571221 1 ||| ||| 1
+! " das ||| that ||| 0.0571221 1 ||| ||| 1
+! " die Milch macht ' s ||| , ' milk is good for you ||| 0.0571221 0.579445 ||| ||| 1
+! " die Milch macht ' ||| , ' milk is good for ||| 0.028561 0.579445 ||| ||| 2
+! " die Milch macht ' ||| , ' milk is good ||| 0.028561 0.579445 ||| ||| 2
+! " die Milch macht ||| , ' milk is good for ||| 0.028561 0.579445 ||| ||| 2
+! " die Milch macht ||| , ' milk is good ||| 0.028561 0.579445 ||| ||| 2
+! " die Milch ||| , ' milk ||| 0.0571221 0.579445 ||| ||| 1
+! " die ||| , ' ||| 0.0571221 0.579445 ||| ||| 1
+! " diese Botschaft ||| a message ||| 0.0571221 1 ||| ||| 1
+! " diese ||| a ||| 0.0571221 1 ||| ||| 1
+! " geht nicht mehr weiter ||| ! " can no longer continue ||| 0.0571221 0.00917533 ||| ||| 1
+! " geht nicht mehr ||| ! " can no longer ||| 0.0571221 0.00917533 ||| ||| 1
+! " geht nicht ||| ! " can no ||| 0.0571221 0.00917533 ||| ||| 1
+! " geht ||| ! " can ||| 0.0571221 0.00917533 ||| ||| 1
+! " gehört , und denen ||| ! ' , and those ||| 0.028561 0.0449274 ||| ||| 2
+! " gehört , und denen ||| kill ! ' , and those ||| 0.028561 0.0449274 ||| ||| 2
+! " gehört , und ||| ! ' , and ||| 0.028561 0.0449274 ||| ||| 2
+! " gehört , und ||| kill ! ' , and ||| 0.028561 0.0449274 ||| ||| 2
+! " gehört , ||| ! ' , ||| 0.028561 0.0449274 ||| ||| 2
+! " gehört , ||| kill ! ' , ||| 0.028561 0.0449274 ||| ||| 2
+! " gehört ||| ! ' ||| 0.028561 0.0449274 ||| ||| 2
+! " gehört ||| kill ! ' ||| 0.028561 0.0449274 ||| ||| 2
+! " hat das Parlament bereits ||| ! ' , Parliament has already ||| 0.0571221 0.0449274 ||| ||| 1
+! " hat das Parlament ||| ! ' , Parliament ||| 0.0571221 0.0449274 ||| ||| 1
+! " hat ||| ! ' , ||| 0.0571221 0.0449274 ||| ||| 1
+! " kommen ||| " ||| 0.0571221 0.0592024 ||| ||| 1
+! " mögen ||| ' , may ||| 0.0571221 0.579445 ||| ||| 1
+! " nicht nur in bezug ||| ' does not just ||| 0.0571221 0.579445 ||| ||| 1
+! " nicht nur in ||| ' does not just ||| 0.0571221 0.579445 ||| ||| 1
+! " nicht nur ||| ' does not just ||| 0.0571221 0.579445 ||| ||| 1
+! " nicht ||| ' does not ||| 0.0571221 0.579445 ||| ||| 1
+! " oder zu Kollegin Harms ||| ! ' , and to Mrs Harms ||| 0.0571221 0.0449274 ||| ||| 1
+! " oder zu Kollegin ||| ! ' , and to Mrs ||| 0.0571221 0.0449274 ||| ||| 1
+! " oder zu ||| ! ' , and to ||| 0.0571221 0.0449274 ||| ||| 1
+! " oder ||| ! ' , and ||| 0.028561 0.0449274 ||| ||| 2
+! " oder ||| ! ' or ||| 0.028561 0.0449274 ||| ||| 2
+! " rufe vonseiten der IND ||| ! ' from members of the IND ||| 0.0571221 0.0449274 ||| ||| 1
+! " rufe vonseiten der ||| ! ' from members of the ||| 0.0571221 0.0449274 ||| ||| 1
+! " rufe vonseiten ||| ! ' from members of ||| 0.0190407 0.0449274 ||| ||| 3
+! " rufe vonseiten ||| ! ' from members ||| 0.0190407 0.0449274 ||| ||| 3
+! " rufe vonseiten ||| ! ' from ||| 0.0190407 0.0449274 ||| ||| 3
+! " rufe ||| ! ' ||| 0.0571221 0.0449274 ||| ||| 1
+! " rufen , würden wir ||| ' , we would ||| 0.0571221 0.579445 ||| ||| 1
+! " rufen , ||| ' , ||| 0.0571221 0.579445 ||| ||| 1
+! " rufen die Föderalisten , und ||| ! ' say the federalists , and ||| 0.0571221 0.0449274 ||| ||| 1
+! " rufen die Föderalisten , ||| ! ' say the federalists , ||| 0.0571221 0.0449274 ||| ||| 1
+! " rufen die Föderalisten ||| ! ' say the federalists ||| 0.0571221 0.0449274 ||| ||| 1
+! " rufen die ||| ! ' say the ||| 0.0571221 0.0449274 ||| ||| 1
+! " rufen ||| ! ' say ||| 0.028561 0.0449274 ||| ||| 2
+! " rufen ||| ' ||| 0.028561 0.579445 ||| ||| 2
+! " sagen die ||| , ' say the people on the ||| 0.0571221 0.579445 ||| ||| 1
+! " sagen ||| , ' say the people on ||| 0.0142805 0.579445 ||| ||| 4
+! " sagen ||| , ' say the people ||| 0.0142805 0.579445 ||| ||| 4
+! " sagen ||| , ' say the ||| 0.0142805 0.579445 ||| ||| 4
+! " sagen ||| , ' say ||| 0.0142805 0.579445 ||| ||| 4
+! " steht . ||| ! ' ||| 0.0571221 0.0449274 ||| ||| 1
+! " steht ||| ! ' ||| 0.0571221 0.0449274 ||| ||| 1
+! " und Nizza II ? ||| ! ' and Nice II ? ||| 0.0571221 0.0449274 ||| ||| 1
+! " und Nizza II ||| ! ' and Nice II ||| 0.0571221 0.0449274 ||| ||| 1
+! " und Nizza ||| ! ' and Nice ||| 0.0571221 0.0449274 ||| ||| 1
+! " und schlagen uns an die ||| ! ' and beat our ||| 0.0571221 0.0449274 ||| ||| 1
+! " und schlagen uns an ||| ! ' and beat our ||| 0.0571221 0.0449274 ||| ||| 1
+! " und schlagen uns ||| ! ' and beat our ||| 0.0571221 0.0449274 ||| ||| 1
+! " und schlagen ||| ! ' and beat ||| 0.0571221 0.0449274 ||| ||| 1
+! " und ||| ! ' and ||| 0.38535 0.0449274 ||| ||| 2
+! " vereinen ||| ! ' ||| 0.0571221 0.0449274 ||| ||| 1
+! " zu allen Formen des Protektionismus ||| ! ' to all forms of protectionism ||| 0.0571221 0.0449274 ||| ||| 1
+! " zu allen Formen des ||| ! ' to all forms of ||| 0.0571221 0.0449274 ||| ||| 1
+! " zu allen Formen ||| ! ' to all forms ||| 0.0571221 0.0449274 ||| ||| 1
+! " zu allen ||| ! ' to all ||| 0.0571221 0.0449274 ||| ||| 1
+! " zu ||| ! ' to ||| 0.0571221 0.0449274 ||| ||| 1
+! " zur Offenheit und zum Wettbewerb ||| ! ' to openness and competition ||| 0.0571221 0.0449274 ||| ||| 1
+! " zur Offenheit und zum ||| ! ' to openness and ||| 0.0571221 0.0449274 ||| ||| 1
+! " zur Offenheit und ||| ! ' to openness and ||| 0.0571221 0.0449274 ||| ||| 1
+! " zur Offenheit ||| ! ' to openness ||| 0.0571221 0.0449274 ||| ||| 1
+! " zur ||| ! ' to ||| 0.0571221 0.0449274 ||| ||| 1
+! " ||| ! " . ||| 0.000245159 0.00917533 ||| ||| 233
+! " ||| ! " ||| 0.124464 0.00917533 ||| ||| 233
+! " ||| ! ' ' really ? ' ||| 0.000245159 0.0150846 ||| ||| 233
+! " ||| ! ' , ||| 0.000245159 0.0449274 ||| ||| 233
+! " ||| ! ' . ||| 0.0171674 0.0449274 ||| ||| 233
+! " ||| ! ' ||| 0.433476 0.0449274 ||| ||| 233
+! " ||| ! .... ' ||| 0.000245159 0.0449274 ||| ||| 233
+! " ||| ! ||| 0.0300429 0.0775352 ||| ||| 233
+! " ||| ! †||| 0.00330773 0.0775352 ||| ||| 233
+! " ||| " . ||| 0.00330773 0.118338 ||| ||| 233
+! " ||| " ||| 0.00330773 0.0592024 ||| ||| 233
+! " ||| ' ! ||| 0.00330773 0.0449274 ||| ||| 233
+! " ||| ' , ||| 0.000245159 0.579445 ||| ||| 233
+! " ||| ' . ||| 0.0515021 0.579445 ||| ||| 233
+! " ||| ' ||| 0.0343348 0.289866 ||| ||| 233
+! " ||| , " ||| 0.00330773 0.118338 ||| ||| 233
+! " ||| , ' ||| 0.0171674 0.579445 ||| ||| 233
+! " ||| , that ||| 0.000245159 1 ||| ||| 233
+! " ||| , ||| 0.0214592 1 ||| ||| 233
+! " ||| . " ! ||| 0.000245159 0.00917533 ||| ||| 233
+! " ||| . " ||| 0.00865463 0.118338 ||| ||| 233
+! " ||| . ' ||| 0.00330773 0.579445 ||| ||| 233
+! " ||| . ||| 0.0429185 1 ||| ||| 233
+! " ||| : ' ||| 0.000245159 0.579445 ||| ||| 233
+! " ||| ? ' ||| 0.00330773 0.579445 ||| ||| 233
+! " ||| Commission to ||| 0.000245159 1 ||| ||| 233
+! " ||| Commission ||| 0.000245159 1 ||| ||| 233
+! " ||| a living ! ' ||| 0.000245159 0.0449274 ||| ||| 233
+! " ||| any fish ? ' ||| 0.000245159 0.579445 ||| ||| 233
+! " ||| asked the Commission to ||| 0.000245159 1 ||| ||| 233
+! " ||| asked the Commission ||| 0.000245159 1 ||| ||| 233
+! " ||| bearing the ||| 0.000245159 1 ||| ||| 233
+! " ||| common ||| 0.000245159 1 ||| ||| 233
+! " ||| done , ||| 0.000245159 1 ||| ||| 233
+! " ||| face ! " ||| 0.000245159 0.00917533 ||| ||| 233
+! " ||| fish ? ' ||| 0.000245159 0.579445 ||| ||| 233
+! " ||| give you " ||| 0.000245159 0.118338 ||| ||| 233
+! " ||| kill ! ' ||| 0.000245159 0.0449274 ||| ||| 233
+! " ||| living ! ' ||| 0.000245159 0.0449274 ||| ||| 233
+! " ||| may ||| 0.000245159 1 ||| ||| 233
+! " ||| more common ||| 0.000245159 1 ||| ||| 233
+! " ||| of products bearing the ||| 0.000245159 1 ||| ||| 233
+! " ||| one ' . ||| 0.000245159 0.579445 ||| ||| 233
+! " ||| products bearing the ||| 0.000245159 1 ||| ||| 233
+! " ||| term , ' ||| 0.000245159 0.579445 ||| ||| 233
+! " ||| the Commission to ||| 0.000245159 1 ||| ||| 233
+! " ||| the Commission ||| 0.000245159 1 ||| ||| 233
+! " ||| the ||| 0.00330773 1 ||| ||| 233
+! " ||| to give you " ||| 0.000245159 0.118338 ||| ||| 233
+! " ||| uneven ' . ||| 0.000245159 0.579445 ||| ||| 233
+! " ||| you " ||| 0.000245159 0.118338 ||| ||| 233
+! " ||| †||| 0.000245159 1 ||| ||| 233
+! ' , dann sage ich ||| ' . I would ||| 0.0571221 0.545017 ||| ||| 1
+! ' , dann ||| ' . ||| 0.0571221 0.545017 ||| ||| 1
+! ' , diese Aufforderung ||| ! ' is the message ||| 0.0571221 0.042258 ||| ||| 1
+! ' , diese ||| ! ' is the ||| 0.0571221 0.042258 ||| ||| 1
+! ' , sollte Gegenstand von ||| ' , should ||| 0.0571221 0.272653 ||| ||| 1
+! ' , sollte Gegenstand ||| ' , should ||| 0.0571221 0.272653 ||| ||| 1
+! ' , sollte ||| ' , should ||| 0.0571221 0.272653 ||| ||| 1
+! ' , womit ||| ! ' , ||| 0.0571221 0.042258 ||| ||| 1
+! ' , ||| ! ' , ||| 0.0114244 0.042258 ||| ||| 5
+! ' , ||| ! ' is ||| 0.0114244 0.042258 ||| ||| 5
+! ' , ||| ! ' ||| 0.0114244 0.042258 ||| ||| 5
+! ' , ||| ' , ||| 0.0114244 0.272653 ||| ||| 5
+! ' , ||| ' . ||| 0.0114244 0.545017 ||| ||| 5
+! ' - wir lassen uns ||| ! ' ||| 0.0571221 0.042258 ||| ||| 1
+! ' - wir lassen ||| ! ' ||| 0.0571221 0.042258 ||| ||| 1
+! ' - wir ||| ! ' ||| 0.0571221 0.042258 ||| ||| 1
+! ' - ||| ! ' ||| 0.0571221 0.042258 ||| ||| 1
+! ' . aber dort gibt ||| ! ' , but there are widely ||| 0.028561 0.042258 ||| ||| 2
+! ' . aber dort gibt ||| ! ' , but there are ||| 0.028561 0.042258 ||| ||| 2
+! ' . aber dort ||| ! ' , but there ||| 0.0571221 0.042258 ||| ||| 1
+! ' . aber ||| ! ' , but ||| 0.0571221 0.042258 ||| ||| 1
+! ' . ||| ! ' , ||| 0.0190407 0.042258 ||| ||| 3
+! ' . ||| ! ' ||| 0.0190407 0.0211319 ||| ||| 3
+! ' . ||| . ||| 0.0190407 1 ||| ||| 3
+! ' Stand , ||| ! ' , ||| 0.0571221 0.042258 ||| ||| 1
+! ' Stand ||| ! ' ||| 0.0571221 0.042258 ||| ||| 1
+! ' rufen , ||| ! ' and then murder ||| 0.0190407 0.042258 ||| ||| 3
+! ' rufen , ||| ! ' and then ||| 0.0190407 0.042258 ||| ||| 3
+! ' rufen , ||| ! ' and ||| 0.0190407 0.042258 ||| ||| 3
+! ' rufen ||| ! ' ||| 0.0571221 0.042258 ||| ||| 1
+! ' ||| ! ' , and ||| 0.00112004 0.042258 ||| ||| 51
+! ' ||| ! ' , ||| 0.00112004 0.042258 ||| ||| 51
+! ' ||| ! ' . ||| 0.00112004 0.042258 ||| ||| 51
+! ' ||| ! ' is ||| 0.00112004 0.042258 ||| ||| 51
+! ' ||| ! ' ||| 0.490196 0.042258 ||| ||| 51
+! ' ||| ' ! ||| 0.00112004 0.042258 ||| ||| 51
+! ' ||| ' , and ||| 0.00112004 0.545017 ||| ||| 51
+! ' ||| ' , ||| 0.00112004 0.545017 ||| ||| 51
+! ' ||| ' . ||| 0.0784314 0.545017 ||| ||| 51
+! ' ||| ' ||| 0.0151118 0.272653 ||| ||| 51
+! ' ||| 't . ' ||| 0.00112004 0.545017 ||| ||| 51
+! ' ||| . ' ||| 0.0784314 0.545017 ||| ||| 51
+! ' ||| . ||| 0.00112004 1 ||| ||| 51
+! ' ||| ? " ||| 0.00112004 0.0291059 ||| ||| 51
+! ' ||| ? ' ||| 0.00112004 0.545017 ||| ||| 51
+! ' ||| ? ||| 0.00112004 1 ||| ||| 51
+! ' ||| hook ' ! ||| 0.00112004 0.042258 ||| ||| 51
+! ' ||| in 't . ' ||| 0.00112004 0.545017 ||| ||| 51
+! ' ||| luck ! ' ||| 0.00112004 0.042258 ||| ||| 51
+! ' ||| of . ' ||| 0.00112004 0.545017 ||| ||| 51
+! ( 1 ) ||| . ( 1 ) ||| 0.0571221 1 ||| ||| 1
+! ( 1 ||| . ( 1 ||| 0.0571221 1 ||| ||| 1
+! ( ||| . ( ||| 0.0571221 1 ||| ||| 1
+! ) , Forschung , Wettbewerbsfähigkeit und ||| ! ) , research , competitiveness and ||| 0.0571221 0.0775352 ||| ||| 1
+! ) , Forschung , Wettbewerbsfähigkeit ||| ! ) , research , competitiveness ||| 0.0571221 0.0775352 ||| ||| 1
+! ) , Forschung , ||| ! ) , research , ||| 0.0571221 0.0775352 ||| ||| 1
+! ) , Forschung ||| ! ) , research ||| 0.0571221 0.0775352 ||| ||| 1
+! ) , die die Arbeitslosenunterstützung ||| ! ) which unemployment benefit ||| 0.0571221 0.0775352 ||| ||| 1
+! ) , geht . ||| ! ) ||| 0.0571221 0.0775352 ||| ||| 1
+! ) , geht ||| ! ) ||| 0.0571221 0.0775352 ||| ||| 1
+! ) , mit der Rodung von ||| ! ) , the grubbing-up of ||| 0.0571221 0.0775352 ||| ||| 1
+! ) , mit der Rodung ||| ! ) , the grubbing-up ||| 0.0571221 0.0775352 ||| ||| 1
+! ) , mit der ||| ! ) , the ||| 0.0571221 0.0775352 ||| ||| 1
+! ) , mit ||| ! ) , ||| 0.0571221 0.0775352 ||| ||| 1
+! ) , und schließlich ||| ! ) and , finally , ||| 0.0571221 0.0775352 ||| ||| 1
+! ) , und ||| ! ) and , ||| 0.0571221 0.0775352 ||| ||| 1
+! ) , während ||| ! ) , while ||| 0.0571221 0.0775352 ||| ||| 1
+! ) , während über 100 ||| ! ) , while over 100 ||| 0.0571221 0.0775352 ||| ||| 1
+! ) , während über ||| ! ) , while over ||| 0.0571221 0.0775352 ||| ||| 1
+! ) , ||| ! ) , ||| 0.666667 0.0775352 ||| ||| 6
+! ) , ||| ! ) ||| 0.12845 0.0775352 ||| ||| 6
+! ) . seit einigen Jahren ||| , and for a number of years ||| 0.38535 1 ||| ||| 2
+! ) . seit einigen ||| , and for a number of ||| 0.0963376 1 ||| ||| 8
+! ) . seit einigen ||| , and for a number ||| 0.0963376 1 ||| ||| 8
+! ) . seit einigen ||| recycled , and for a number of ||| 0.0963376 1 ||| ||| 8
+! ) . seit einigen ||| recycled , and for a number ||| 0.0963376 1 ||| ||| 8
+! ) . seit ||| , and for ||| 0.192675 1 ||| ||| 4
+! ) . seit ||| recycled , and for ||| 0.192675 1 ||| ||| 4
+! ) . ||| ! ) . ||| 0.0856334 0.0775352 ||| ||| 9
+! ) . ||| ! ) ||| 0.0063469 0.0775352 ||| ||| 9
+! ) . ||| ! ||| 0.0063469 0.0775352 ||| ||| 9
+! ) . ||| ) . ||| 0.0063469 1 ||| ||| 9
+! ) . ||| , and ||| 0.0856334 1 ||| ||| 9
+! ) . ||| recycled , and ||| 0.0856334 1 ||| ||| 9
+! ) Herr Kollege Ferber , ||| ! " ) Mr Ferber , ||| 0.0571221 1.7585e-05 ||| ||| 1
+! ) Herr Kollege Ferber ||| ! " ) Mr Ferber ||| 0.0571221 1.7585e-05 ||| ||| 1
+! ) Herr ||| ! " ) Mr ||| 0.0571221 1.7585e-05 ||| ||| 1
+! ) Marktwirtschaft , die von einem ||| ! ) market economy ||| 0.0571221 0.0775352 ||| ||| 1
+! ) Marktwirtschaft , die von ||| ! ) market economy ||| 0.0571221 0.0775352 ||| ||| 1
+! ) Marktwirtschaft , die ||| ! ) market economy ||| 0.0571221 0.0775352 ||| ||| 1
+! ) Marktwirtschaft , ||| ! ) market economy ||| 0.0571221 0.0775352 ||| ||| 1
+! ) Marktwirtschaft ||| ! ) market economy ||| 0.0571221 0.0775352 ||| ||| 1
+! ) allein für ||| ! ) just for ||| 0.0571221 0.0775352 ||| ||| 1
+! ) allein ||| ! ) just ||| 0.0571221 0.0775352 ||| ||| 1
+! ) bei . ||| ) . ||| 0.0571221 1 ||| ||| 1
+! ) bei ||| ) ||| 0.0571221 1 ||| ||| 1
+! ) bezeichnet wird , hat ||| ! ) , has ||| 0.0571221 0.0775352 ||| ||| 1
+! ) bezeichnet wird , ||| ! ) , ||| 0.0571221 0.0775352 ||| ||| 1
+! ) bezeichnet wird ||| ! ) ||| 0.0571221 0.0775352 ||| ||| 1
+! ) bezeichnet ||| ! ) ||| 0.0571221 0.0775352 ||| ||| 1
+! ) das ||| the ||| 0.0571221 1 ||| ||| 1
+! ) dürfen nicht verwendet ( missbraucht ||| ! ) cannot be used ( misused ||| 0.0571221 0.0775352 ||| ||| 1
+! ) dürfen nicht verwendet ( ||| ! ) cannot be used ( ||| 0.0571221 0.0775352 ||| ||| 1
+! ) dürfen nicht verwendet ||| ! ) cannot be used ||| 0.0571221 0.0775352 ||| ||| 1
+! ) dürfen nicht ||| ! ) cannot be ||| 0.0571221 0.0775352 ||| ||| 1
+! ) für den Fall der ||| ! ) in the event that we ||| 0.0571221 0.0775352 ||| ||| 1
+! ) für den Fall ||| ! ) in the event that ||| 0.028561 0.0775352 ||| ||| 2
+! ) für den Fall ||| ! ) in the event ||| 0.028561 0.0775352 ||| ||| 2
+! ) für den ||| ! ) in the ||| 0.0571221 0.0775352 ||| ||| 1
+! ) für die Umsetzung der ||| ! ) before they apply the ||| 0.0571221 0.0775352 ||| ||| 1
+! ) für die Umsetzung ||| ! ) before they apply ||| 0.0571221 0.0775352 ||| ||| 1
+! ) für die ||| ! ) before they ||| 0.0571221 0.0775352 ||| ||| 1
+! ) für ||| ! ) before ||| 0.0190407 0.0775352 ||| ||| 3
+! ) für ||| ! ) in ||| 0.0190407 0.0775352 ||| ||| 3
+! ) für ||| ! ) ||| 0.0190407 0.0775352 ||| ||| 3
+! ) großen Not ||| ! ) high level of need ||| 0.0571221 0.0775352 ||| ||| 1
+! ) großen ||| ! ) high ||| 0.0571221 0.0775352 ||| ||| 1
+! ) oder ihr Egonet ||| ! ) , or rather their egonet ||| 0.0571221 0.0775352 ||| ||| 1
+! ) oder ||| ! ) , or ||| 0.0571221 0.0775352 ||| ||| 1
+! ) und die Schaffung nationaler Finanzmärkte ||| ! ) and create national financial markets ||| 0.0571221 0.0775352 ||| ||| 1
+! ) und die Schaffung nationaler ||| ! ) and create national ||| 0.0571221 0.0775352 ||| ||| 1
+! ) und die Schaffung ||| ! ) and create ||| 0.0571221 0.0775352 ||| ||| 1
+! ) und die ||| ! ) and ||| 0.0571221 0.0775352 ||| ||| 1
+! ) und häufig unverständliche ||| ! ) and often unreadable ||| 0.028561 0.0775352 ||| ||| 2
+! ) und häufig unverständliche ||| ! ) and often unreadable – ||| 0.028561 0.0775352 ||| ||| 2
+! ) und häufig ||| ! ) and often ||| 0.0571221 0.0775352 ||| ||| 1
+! ) und ||| ! ) and ||| 0.38535 0.0775352 ||| ||| 2
+! ) vertritt ||| ! ) ||| 0.0571221 0.0775352 ||| ||| 1
+! ) ||| ! " ) ||| 0.000906699 1.7585e-05 ||| ||| 63
+! ) ||| ! ) , ||| 0.000906699 0.0775352 ||| ||| 63
+! ) ||| ! ) before ||| 0.000906699 0.0775352 ||| ||| 63
+! ) ||| ! ) ||| 0.714286 0.0775352 ||| ||| 63
+! ) ||| ! - ||| 0.000906699 0.0775352 ||| ||| 63
+! ) ||| ! ] ||| 0.000906699 0.0775352 ||| ||| 63
+! ) ||| ! ||| 0.0122333 0.0775352 ||| ||| 63
+! ) ||| ) ||| 0.000906699 1 ||| ||| 63
+! ) ||| , ||| 0.0793651 1 ||| ||| 63
+! ) ||| Latin ! ) ||| 0.000906699 0.0775352 ||| ||| 63
+! ) ||| arrival ! ) ||| 0.000906699 0.0775352 ||| ||| 63
+! ) ||| recycled , ||| 0.0122333 1 ||| ||| 63
+! ) ||| the ||| 0.000906699 1 ||| ||| 63
+! ) über die ||| ! ) on the ||| 0.0571221 0.0775352 ||| ||| 1
+! ) über die Änderung der ||| ! ) on the amendment of ||| 0.0571221 0.0775352 ||| ||| 1
+! ) über die Änderung ||| ! ) on the amendment ||| 0.0571221 0.0775352 ||| ||| 1
+! ) über ||| ! ) on ||| 0.0571221 0.0775352 ||| ||| 1
+! , dem Gewinner des Sacharow-Preises in ||| ! , the Sakharov Prize winner in ||| 0.0571221 0.0775352 ||| ||| 1
+! , dem Gewinner des Sacharow-Preises ||| ! , the Sakharov Prize winner ||| 0.0571221 0.0775352 ||| ||| 1
+! , dem ||| ! , the ||| 0.0571221 0.0775352 ||| ||| 1
+! , war ebenfalls kein Beitrag zur ||| ! " did little to ||| 0.0571221 1.7585e-05 ||| ||| 1
+! , war ebenfalls kein Beitrag ||| ! " did little ||| 0.0142805 1.7585e-05 ||| ||| 4
+! , war ebenfalls kein Beitrag ||| ! " did ||| 0.0142805 1.7585e-05 ||| ||| 4
+! , war ebenfalls kein Beitrag ||| ! " ||| 0.0142805 1.7585e-05 ||| ||| 4
+! , war ebenfalls kein Beitrag ||| ! ||| 0.0142805 0.0775352 ||| ||| 4
+! , war ebenfalls kein ||| ! " did little ||| 0.0142805 1.7585e-05 ||| ||| 4
+! , war ebenfalls kein ||| ! " did ||| 0.0142805 1.7585e-05 ||| ||| 4
+! , war ebenfalls kein ||| ! " ||| 0.0142805 1.7585e-05 ||| ||| 4
+! , war ebenfalls kein ||| ! ||| 0.0142805 0.0775352 ||| ||| 4
+! , war ebenfalls ||| ! " did little ||| 0.0142805 1.7585e-05 ||| ||| 4
+! , war ebenfalls ||| ! " did ||| 0.0142805 1.7585e-05 ||| ||| 4
+! , war ebenfalls ||| ! " ||| 0.0142805 1.7585e-05 ||| ||| 4
+! , war ebenfalls ||| ! ||| 0.0142805 0.0775352 ||| ||| 4
+! , war ||| ! " did little ||| 0.0142805 1.7585e-05 ||| ||| 4
+! , war ||| ! " did ||| 0.0142805 1.7585e-05 ||| ||| 4
+! , war ||| ! " ||| 0.0142805 1.7585e-05 ||| ||| 4
+! , war ||| ! ||| 0.0142805 0.0775352 ||| ||| 4
+! , ||| ! " did little ||| 0.00952034 1.7585e-05 ||| ||| 6
+! , ||| ! " did ||| 0.00952034 1.7585e-05 ||| ||| 6
+! , ||| ! " ||| 0.00952034 1.7585e-05 ||| ||| 6
+! , ||| ! , ||| 0.00952034 0.0775352 ||| ||| 6
+! , ||| ! ||| 0.00952034 0.0775352 ||| ||| 6
+! , ||| , ||| 0.00952034 1 ||| ||| 6
+! - ' Es reicht ' ||| ! - ' Enough is enough ' ||| 0.0571221 0.0230313 ||| ||| 1
+! - ' Es reicht ||| ! - ' Enough is enough ||| 0.0571221 0.042258 ||| ||| 1
+! - ' Es ||| ! - ' Enough ||| 0.0571221 0.042258 ||| ||| 1
+! - ' ||| ! - ' ||| 0.0571221 0.042258 ||| ||| 1
+! - , dass wir mehr wollen ||| ! we want more ||| 0.0571221 0.0775352 ||| ||| 1
+! - , die mit ||| ! - that have been treated with ||| 0.0571221 0.0775352 ||| ||| 1
+! - , die ||| ! - that have been ||| 0.0114244 0.0775352 ||| ||| 5
+! - , die ||| ! - that have ||| 0.0114244 0.0775352 ||| ||| 5
+! - , die ||| ! - which ||| 0.0114244 0.0775352 ||| ||| 5
+! - , die ||| ! - who ||| 0.0114244 0.0775352 ||| ||| 5
+! - , die ||| ! - ||| 0.0114244 0.0775352 ||| ||| 5
+! - , doch die britische Regierung ||| ! - but the British Government ||| 0.0571221 0.0775352 ||| ||| 1
+! - , doch die britische ||| ! - but the British ||| 0.0571221 0.0775352 ||| ||| 1
+! - , doch die ||| ! - but the ||| 0.0571221 0.0775352 ||| ||| 1
+! - , doch ||| ! - but ||| 0.0571221 0.0775352 ||| ||| 1
+! - , ist zu ersehen ||| ! ) , we see ||| 0.0571221 0.0775352 ||| ||| 1
+! - , ist zu ||| ! ) , we ||| 0.0571221 0.0775352 ||| ||| 1
+! - , ist ||| ! ) , ||| 0.0571221 0.0775352 ||| ||| 1
+! - , möchte ich meinerseits ||| ! - I would like to ||| 0.028561 0.0775352 ||| ||| 2
+! - , möchte ich meinerseits ||| surprise ! - I would like to ||| 0.028561 0.0775352 ||| ||| 2
+! - , möchte ich ||| ! - I would like to ||| 0.028561 0.0775352 ||| ||| 2
+! - , möchte ich ||| surprise ! - I would like to ||| 0.028561 0.0775352 ||| ||| 2
+! - , so wie es ja ||| . this is ||| 0.028561 1 ||| ||| 2
+! - , so wie es ja ||| indeed . this is ||| 0.028561 1 ||| ||| 2
+! - , so wie es ||| . this ||| 0.028561 1 ||| ||| 2
+! - , so wie es ||| indeed . this ||| 0.028561 1 ||| ||| 2
+! - , so wie ||| . ||| 0.028561 1 ||| ||| 2
+! - , so wie ||| indeed . ||| 0.028561 1 ||| ||| 2
+! - , so ||| . ||| 0.028561 1 ||| ||| 2
+! - , so ||| indeed . ||| 0.028561 1 ||| ||| 2
+! - , sondern daß sogar geradezu ||| ? - but that ||| 0.0571221 1 ||| ||| 1
+! - , sondern daß sogar ||| ? - but that ||| 0.0571221 1 ||| ||| 1
+! - , sondern daß ||| ? - but that ||| 0.0571221 1 ||| ||| 1
+! - , um uns dann , ||| it - and then , ||| 0.0571221 1 ||| ||| 1
+! - , um uns dann ||| it - and then ||| 0.0571221 1 ||| ||| 1
+! - , um uns ||| it - and ||| 0.0571221 1 ||| ||| 1
+! - , um ||| it - and ||| 0.0571221 1 ||| ||| 1
+! - , von dem ||| ! - in favour ||| 0.028561 0.0775352 ||| ||| 2
+! - , von dem ||| ! - in ||| 0.028561 0.0775352 ||| ||| 2
+! - , von ||| ! - in favour ||| 0.028561 0.0775352 ||| ||| 2
+! - , von ||| ! - in ||| 0.028561 0.0775352 ||| ||| 2
+! - , wohingegen man ||| ! - whereas one ||| 0.0571221 0.0775352 ||| ||| 1
+! - , wohingegen ||| ! - whereas ||| 0.0571221 0.0775352 ||| ||| 1
+! - , während diejenigen , die ||| ! - while those responsible for the ||| 0.0571221 0.0775352 ||| ||| 1
+! - , während diejenigen , ||| ! - while those responsible for ||| 0.028561 0.0775352 ||| ||| 2
+! - , während diejenigen , ||| ! - while those responsible ||| 0.028561 0.0775352 ||| ||| 2
+! - , während diejenigen ||| ! - while those responsible for ||| 0.028561 0.0775352 ||| ||| 2
+! - , während diejenigen ||| ! - while those responsible ||| 0.028561 0.0775352 ||| ||| 2
+! - , während ||| ! - while ||| 0.0571221 0.0775352 ||| ||| 1
+! - , ||| ! ) , ||| 0.00357013 0.0775352 ||| ||| 16
+! - , ||| ! - ||| 0.4375 0.0775352 ||| ||| 16
+! - , ||| ! ||| 0.00357013 0.0775352 ||| ||| 16
+! - , ||| - which ||| 0.00357013 1 ||| ||| 16
+! - , ||| - ||| 0.00357013 1 ||| ||| 16
+! - , ||| . ||| 0.00357013 1 ||| ||| 16
+! - , ||| indeed . ||| 0.00357013 1 ||| ||| 16
+! - , ||| it - and ||| 0.00357013 1 ||| ||| 16
+! - , ||| surprise ! - ||| 0.00357013 0.0775352 ||| ||| 16
+! - , ||| we ||| 0.00357013 1 ||| ||| 16
+! - Die ||| - the United Nations ||| 0.0190407 1 ||| ||| 3
+! - Die ||| - the United ||| 0.0190407 1 ||| ||| 3
+! - Die ||| - the ||| 0.0190407 1 ||| ||| 3
+! - Es sind ||| the two draftsmen have presented ||| 0.0571221 1 ||| ||| 1
+! - Frage von Unvereinbarkeiten ||| ! – incompatibilities arise ||| 0.0571221 0.0775352 ||| ||| 1
+! - Frau Präsidentin , ich wurde ||| ! - Madam President , I was ||| 0.0571221 0.0775352 ||| ||| 1
+! - Frau Präsidentin , ich ||| ! - Madam President , I ||| 0.0571221 0.0775352 ||| ||| 1
+! - Frau Präsidentin , ||| ! - Madam President , ||| 0.0571221 0.0775352 ||| ||| 1
+! - Frau Präsidentin ||| ! - Madam President ||| 0.0571221 0.0775352 ||| ||| 1
+! - Frau ||| ! - Madam ||| 0.0571221 0.0775352 ||| ||| 1
+! - Kernkraftwerke errichtet werden ||| ! ) nuclear power stations built ||| 0.0571221 0.0775352 ||| ||| 1
+! - Kernkraftwerke errichtet ||| ! ) nuclear power stations built ||| 0.0571221 0.0775352 ||| ||| 1
+! - Kernkraftwerke ||| ! ) nuclear power stations ||| 0.0571221 0.0775352 ||| ||| 1
+! - Referenden und Volksinitiativen zu stellen ||| ! - of referendums and popular initiatives ||| 0.0571221 0.0775352 ||| ||| 1
+! - Referenden und Volksinitiativen zu ||| ! - of referendums and popular initiatives ||| 0.0571221 0.0775352 ||| ||| 1
+! - Referenden und Volksinitiativen ||| ! - of referendums and popular initiatives ||| 0.0571221 0.0775352 ||| ||| 1
+! - Referenden und ||| ! - of referendums and ||| 0.0571221 0.0775352 ||| ||| 1
+! - Referenden ||| ! - of referendums ||| 0.0571221 0.0775352 ||| ||| 1
+! - Rücksicht ||| into consideration ||| 0.0571221 1 ||| ||| 1
+! - bedeutet eine derart anmaßende ||| , such an arrogant ||| 0.0571221 1 ||| ||| 1
+! - besagen , dass der Zugang ||| ! - stipulate that access ||| 0.0571221 0.0775352 ||| ||| 1
+! - besagen , dass ||| ! - stipulate that ||| 0.0571221 0.0775352 ||| ||| 1
+! - besagen ||| ! - stipulate ||| 0.0571221 0.0775352 ||| ||| 1
+! - besteht , wie ||| , via ||| 0.0571221 1 ||| ||| 1
+! - besteht , ||| , via ||| 0.0571221 1 ||| ||| 1
+! - besteht ||| , via ||| 0.0571221 1 ||| ||| 1
+! - der Energie vergeudet , bevor ||| ! - of the energy before ||| 0.0571221 0.0775352 ||| ||| 1
+! - der Energie vergeudet , ||| ! - of the energy ||| 0.0571221 0.0775352 ||| ||| 1
+! - der Energie vergeudet ||| ! - of the energy ||| 0.0571221 0.0775352 ||| ||| 1
+! - der Energie ||| ! - of the energy ||| 0.0571221 0.0775352 ||| ||| 1
+! - der betreffenden Minderheiten ||| , - of the relevant minorities ||| 0.0571221 1 ||| ||| 1
+! - der betreffenden ||| , - of the relevant ||| 0.0571221 1 ||| ||| 1
+! - der operativen Ausgaben werden ||| ! - of operational expenses are managed ||| 0.028561 0.0775352 ||| ||| 2
+! - der operativen Ausgaben werden ||| ! - of operational expenses are ||| 0.028561 0.0775352 ||| ||| 2
+! - der operativen Ausgaben ||| ! - of operational expenses ||| 0.0571221 0.0775352 ||| ||| 1
+! - der operativen ||| ! - of operational ||| 0.0571221 0.0775352 ||| ||| 1
+! - der ||| ! - of the ||| 0.0190407 0.0775352 ||| ||| 3
+! - der ||| ! - of ||| 0.0190407 0.0775352 ||| ||| 3
+! - der ||| , - of the ||| 0.0190407 1 ||| ||| 3
+! - die ||| , ||| 0.0571221 1 ||| ||| 1
+! - direkte ||| - direct ||| 0.0571221 1 ||| ||| 1
+! - direkte Ãœbertragung , aber auch ||| - direct transmission but also ||| 0.0571221 1 ||| ||| 1
+! - direkte Ãœbertragung , aber ||| - direct transmission but ||| 0.0571221 1 ||| ||| 1
+! - direkte Ãœbertragung , ||| - direct transmission ||| 0.0571221 1 ||| ||| 1
+! - direkte Ãœbertragung ||| - direct transmission ||| 0.0571221 1 ||| ||| 1
+! - energische Maßnahmen vorgeschlagen hat , ||| ! - proposing powerful measures ||| 0.0571221 0.0775352 ||| ||| 1
+! - energische Maßnahmen vorgeschlagen hat ||| ! - proposing powerful measures ||| 0.0571221 0.0775352 ||| ||| 1
+! - energische Maßnahmen vorgeschlagen ||| ! - proposing powerful measures ||| 0.0571221 0.0775352 ||| ||| 1
+! - im Lauf dieser Woche begonnen ||| - set in motion this week ||| 0.0571221 1 ||| ||| 1
+! - ist ein klares und durchsichtiges ||| - is a clear , transparent ||| 0.0571221 1 ||| ||| 1
+! - ist ein klares und ||| - is a clear , ||| 0.0571221 1 ||| ||| 1
+! - ist ein klares ||| - is a clear ||| 0.0571221 1 ||| ||| 1
+! - ist ein ||| - is a ||| 0.0571221 1 ||| ||| 1
+! - ist ||| - is ||| 0.0571221 1 ||| ||| 1
+! - mit beeindruckender Hellsichtigkeit den ||| - with ||| 0.0571221 1 ||| ||| 1
+! - mit beeindruckender Hellsichtigkeit ||| - with ||| 0.0571221 1 ||| ||| 1
+! - mit beeindruckender ||| - with ||| 0.0571221 1 ||| ||| 1
+! - mit ||| - with ||| 0.0571221 1 ||| ||| 1
+! - quer durch alle Fraktionen , ||| ! - all , ||| 0.0571221 0.0775352 ||| ||| 1
+! - quer durch alle Fraktionen ||| ! - all ||| 0.0571221 0.0775352 ||| ||| 1
+! - quer durch alle ||| ! - all ||| 0.0571221 0.0775352 ||| ||| 1
+! - quer durch ||| ! - ||| 0.0571221 0.0775352 ||| ||| 1
+! - quer ||| ! - ||| 0.0571221 0.0775352 ||| ||| 1
+! - rechtzeitig reagiert : sie hat ||| ! - took timely action : it ||| 0.0571221 0.0775352 ||| ||| 1
+! - rechtzeitig reagiert : sie ||| ! - took timely action : it ||| 0.0571221 0.0775352 ||| ||| 1
+! - rechtzeitig reagiert : ||| ! - took timely action : ||| 0.0571221 0.0775352 ||| ||| 1
+! - rechtzeitig reagiert ||| ! - took timely action ||| 0.0571221 0.0775352 ||| ||| 1
+! - rechtzeitig ||| ! - took timely ||| 0.0571221 0.0775352 ||| ||| 1
+! - räume ich ein , ||| ! - I recognise ||| 0.0571221 0.0775352 ||| ||| 1
+! - räume ich ein ||| ! - I recognise ||| 0.0571221 0.0775352 ||| ||| 1
+! - sage ich ||| ! - I would say ||| 0.0571221 0.0775352 ||| ||| 1
+! - scheint die Europäische Union jetzt ||| ! - the EU seems ||| 0.0571221 0.0775352 ||| ||| 1
+! - scheint die Europäische Union ||| ! - the EU seems ||| 0.0571221 0.0775352 ||| ||| 1
+! - um zu bekräftigen , daß ||| ! - as a reaffirmation of ||| 0.028561 0.0775352 ||| ||| 2
+! - um zu bekräftigen , daß ||| ! - as a reaffirmation ||| 0.028561 0.0775352 ||| ||| 2
+! - um zu bekräftigen , ||| ! - as a reaffirmation of ||| 0.028561 0.0775352 ||| ||| 2
+! - um zu bekräftigen , ||| ! - as a reaffirmation ||| 0.028561 0.0775352 ||| ||| 2
+! - um zu bekräftigen ||| ! - as a reaffirmation of ||| 0.028561 0.0775352 ||| ||| 2
+! - um zu bekräftigen ||| ! - as a reaffirmation ||| 0.028561 0.0775352 ||| ||| 2
+! - um zu ||| ! - as a ||| 0.0571221 0.0775352 ||| ||| 1
+! - um ||| ! - as a ||| 0.028561 0.0775352 ||| ||| 2
+! - um ||| , ||| 0.028561 1 ||| ||| 2
+! - und begrenzt somit die ||| ! - thereby restricting the ||| 0.0571221 0.0775352 ||| ||| 1
+! - und dass die landwirtschaftliche Produktivität ||| - and that agricultural productivity ||| 0.0571221 1 ||| ||| 1
+! - und dass die landwirtschaftliche ||| - and that agricultural ||| 0.0571221 1 ||| ||| 1
+! - und dass die ||| - and that ||| 0.0571221 1 ||| ||| 1
+! - und ideologischer Manipulation ||| ! - and borders on ideological manipulation ||| 0.0571221 0.0775352 ||| ||| 1
+! - und ideologischer ||| ! - and borders on ideological ||| 0.0571221 0.0775352 ||| ||| 1
+! - und nationale Präferenz entschieden ||| - and national preference ||| 0.0571221 1 ||| ||| 1
+! - und nationale ||| - and national ||| 0.0571221 1 ||| ||| 1
+! - und zum ersten ||| ! - and we saw the first ||| 0.0571221 0.0775352 ||| ||| 1
+! - und zum ||| ! - and we saw the ||| 0.0571221 0.0775352 ||| ||| 1
+! - und ||| ! - and we saw ||| 0.00952034 0.0775352 ||| ||| 6
+! - und ||| ! - and we ||| 0.00952034 0.0775352 ||| ||| 6
+! - und ||| ! - and ||| 0.12845 0.0775352 ||| ||| 6
+! - und ||| - and ||| 0.12845 1 ||| ||| 6
+! - ungefähr 18 Millionen Arbeitslose . ||| , some 18 million unemployed . ||| 0.0571221 1 ||| ||| 1
+! - ungefähr 18 Millionen Arbeitslose ||| , some 18 million unemployed ||| 0.0571221 1 ||| ||| 1
+! - ungefähr 18 Millionen ||| , some 18 million ||| 0.0571221 1 ||| ||| 1
+! - ungefähr 18 ||| , some 18 ||| 0.0571221 1 ||| ||| 1
+! - ungefähr ||| , some ||| 0.0571221 1 ||| ||| 1
+! - unter Anlegung objektiver Maßstäbe erfolgen ||| emphasize , from an objective viewpoint ||| 0.028561 1 ||| ||| 2
+! - unter Anlegung objektiver Maßstäbe erfolgen ||| would emphasize , from an objective viewpoint ||| 0.028561 1 ||| ||| 2
+! - unter Anlegung objektiver ||| emphasize , from an objective ||| 0.028561 1 ||| ||| 2
+! - unter Anlegung objektiver ||| would emphasize , from an objective ||| 0.028561 1 ||| ||| 2
+! - unter Anlegung ||| emphasize , from an ||| 0.028561 1 ||| ||| 2
+! - unter Anlegung ||| would emphasize , from an ||| 0.028561 1 ||| ||| 2
+! - unter vielen anderen . ||| , one among many others . ||| 0.0571221 1 ||| ||| 1
+! - unter vielen anderen ||| , one among many others ||| 0.0571221 1 ||| ||| 1
+! - unter vielen ||| , one among many ||| 0.0571221 1 ||| ||| 1
+! - unter ||| , one among ||| 0.0190407 1 ||| ||| 3
+! - unter ||| emphasize , from ||| 0.0190407 1 ||| ||| 3
+! - unter ||| would emphasize , from ||| 0.0190407 1 ||| ||| 3
+! - weiß ich nicht , ||| - I do not know , but ||| 0.028561 1 ||| ||| 2
+! - weiß ich nicht , ||| - I do not know , ||| 0.028561 1 ||| ||| 2
+! - weiß ich nicht ||| - I do not know ||| 0.0571221 1 ||| ||| 1
+! - zugab ||| saying something – admitted ||| 0.0571221 1 ||| ||| 1
+! - zur Koordination im ||| - relating to applying coordination in the ||| 0.0571221 1 ||| ||| 1
+! - zur Koordination ||| - relating to applying coordination ||| 0.0571221 1 ||| ||| 1
+! - zur ||| - relating to ||| 0.0571221 1 ||| ||| 1
+! - ||| ! ) ||| 0.00819894 0.0775352 ||| ||| 94
+! - ||| ! - I do ||| 0.000607682 0.0775352 ||| ||| 94
+! - ||| ! - I ||| 0.000607682 0.0775352 ||| ||| 94
+! - ||| ! - of ||| 0.000607682 0.0775352 ||| ||| 94
+! - ||| ! - ||| 0.361702 0.0775352 ||| ||| 94
+! - ||| ! ||| 0.00819894 0.0775352 ||| ||| 94
+! - ||| ! – ||| 0.000607682 0.0775352 ||| ||| 94
+! - ||| , - ||| 0.000607682 1 ||| ||| 94
+! - ||| , and ||| 0.00819894 1 ||| ||| 94
+! - ||| , mind you - ||| 0.000607682 1 ||| ||| 94
+! - ||| , one ||| 0.000607682 1 ||| ||| 94
+! - ||| , ||| 0.0744681 1 ||| ||| 94
+! - ||| - ||| 0.212766 1 ||| ||| 94
+! - ||| . at ||| 0.000607682 1 ||| ||| 94
+! - ||| . indeed ||| 0.000607682 1 ||| ||| 94
+! - ||| . ||| 0.0214524 1 ||| ||| 94
+! - ||| ? - ||| 0.000607682 1 ||| ||| 94
+! - ||| emphasize , ||| 0.000607682 1 ||| ||| 94
+! - ||| indeed . ||| 0.000607682 1 ||| ||| 94
+! - ||| is , ||| 0.000607682 1 ||| ||| 94
+! - ||| it - ||| 0.000607682 1 ||| ||| 94
+! - ||| it everybody - ||| 0.000607682 1 ||| ||| 94
+! - ||| one ||| 0.000607682 1 ||| ||| 94
+! - ||| sake , ||| 0.000607682 1 ||| ||| 94
+! - ||| surprise ! - ||| 0.000607682 0.0775352 ||| ||| 94
+! - ||| the ||| 0.000607682 1 ||| ||| 94
+! - ||| want . ||| 0.000607682 1 ||| ||| 94
+! - ||| we ||| 0.000607682 1 ||| ||| 94
+! - ||| would be ||| 0.000607682 1 ||| ||| 94
+! - ||| would emphasize , ||| 0.000607682 1 ||| ||| 94
+! - ||| would ||| 0.000607682 1 ||| ||| 94
+! - über 10 Milliarden dänische ||| it everybody - over 10 billion Danish ||| 0.0571221 1 ||| ||| 1
+! - über 10 Milliarden ||| it everybody - over 10 billion ||| 0.0571221 1 ||| ||| 1
+! - über 10 ||| it everybody - over 10 ||| 0.0571221 1 ||| ||| 1
+! - über ||| it everybody - over ||| 0.0571221 1 ||| ||| 1
+! . ||| ! ||| 0.224059 0.0390177 ||| ||| 9
+! . ||| . ||| 0.0856334 1 ||| ||| 9
+! . ||| in this . ||| 0.0063469 1 ||| ||| 9
+! . ||| misunderstandings . ||| 0.0063469 1 ||| ||| 9
+! . ||| point . ||| 0.0063469 1 ||| ||| 9
+! . ||| this . ||| 0.0063469 1 ||| ||| 9
+! ... und , hier war ich ||| ! ... ||| 0.0571221 0.0775352 ||| ||| 1
+! ... und , hier war ||| ! ... ||| 0.0571221 0.0775352 ||| ||| 1
+! ... und , hier ||| ! ... ||| 0.0571221 0.0775352 ||| ||| 1
+! ... und , ||| ! ... ||| 0.0571221 0.0775352 ||| ||| 1
+! ... und ||| ! ... ||| 0.0571221 0.0775352 ||| ||| 1
+! ... ||| ! ... ||| 0.672176 0.0775352 ||| ||| 3
+! 100 Mio. ECU ||| ! ECU 100 m ||| 0.0571221 0.0775352 ||| ||| 1
+! 14,5 % Feuchte ist ||| ! 14.5 % is ||| 0.0571221 0.0733998 ||| ||| 1
+! 14,5 % Feuchte ||| ! 14.5 % ||| 0.0571221 0.0733998 ||| ||| 1
+! 173 Auftragsmorde seit 1990 ||| ! 173 contract killings since 1990 ||| 0.0571221 0.0775352 ||| ||| 1
+! 173 Auftragsmorde seit 1990 – ||| ! 173 contract killings since 1990 – ||| 0.0571221 0.0775352 ||| ||| 1
+! 173 Auftragsmorde seit ||| ! 173 contract killings since ||| 0.0571221 0.0775352 ||| ||| 1
+! 173 Auftragsmorde ||| ! 173 contract killings ||| 0.0571221 0.0775352 ||| ||| 1
+! 173 ||| ! 173 ||| 0.0571221 0.0775352 ||| ||| 1
+! 1962 haben sie dies ||| ! in 1962 , did they not ||| 0.028561 0.0775352 ||| ||| 2
+! 1962 haben sie dies ||| ! in 1962 , did they ||| 0.028561 0.0775352 ||| ||| 2
+! 1962 haben sie ||| ! in 1962 , did they not ||| 0.028561 0.0775352 ||| ||| 2
+! 1962 haben sie ||| ! in 1962 , did they ||| 0.028561 0.0775352 ||| ||| 2
+! 1962 haben ||| ! in 1962 , did ||| 0.0571221 0.0775352 ||| ||| 1
+! 1962 ||| ! in 1962 , ||| 0.028561 0.0775352 ||| ||| 2
+! 1962 ||| ! in 1962 ||| 0.028561 0.0775352 ||| ||| 2
+! 1991 habe ich ||| , in 1991 , I joined ||| 0.0571221 1 ||| ||| 1
+! 1991 ||| , in 1991 , ||| 0.028561 1 ||| ||| 2
+! 1991 ||| , in 1991 ||| 0.028561 1 ||| ||| 2
+! 1996 haben vier Millionen Menschen ||| ! in 1996 , four million people ||| 0.0571221 0.0775352 ||| ||| 1
+! 1996 haben vier Millionen ||| ! in 1996 , four million ||| 0.0571221 0.0775352 ||| ||| 1
+! 1996 haben vier ||| ! in 1996 , four ||| 0.0571221 0.0775352 ||| ||| 1
+! 1996 haben ||| ! in 1996 , ||| 0.0571221 0.0775352 ||| ||| 1
+! 1996 ||| ! in 1996 ||| 0.0571221 0.0775352 ||| ||| 1
+! 20 % des ||| . twenty per cent of the territory ||| 0.028561 1 ||| ||| 2
+! 20 % des ||| . twenty per cent of the ||| 0.028561 1 ||| ||| 2
+! 20 % ||| . twenty per cent ||| 0.0571221 1 ||| ||| 1
+! 20 Prozent der jungen Frauen ||| . 20 % of young women ||| 0.0571221 0.529412 ||| ||| 1
+! 20 Prozent der jungen ||| . 20 % of young ||| 0.0571221 0.529412 ||| ||| 1
+! 20 Prozent der ||| . 20 % of ||| 0.0571221 0.529412 ||| ||| 1
+! 20 Prozent ||| . 20 % ||| 0.0571221 0.529412 ||| ||| 1
+! 20 ||| . 20 ||| 0.028561 1 ||| ||| 2
+! 20 ||| . twenty ||| 0.028561 1 ||| ||| 2
+! 2002 wird ein entscheidendes Jahr ||| , 2002 will be a crucial year ||| 0.0571221 1 ||| ||| 1
+! 2002 wird ein entscheidendes ||| , 2002 will be a crucial ||| 0.0571221 1 ||| ||| 1
+! 2002 wird ein ||| , 2002 will be a ||| 0.0571221 1 ||| ||| 1
+! 2002 wird ||| , 2002 will be ||| 0.0571221 1 ||| ||| 1
+! 2002 ||| , 2002 ||| 0.0571221 1 ||| ||| 1
+! 2003 ||| 2003 ||| 0.0571221 1 ||| ||| 1
+! 2004 war die UKIP die einzige ||| ! ||| 0.0571221 0.0388843 ||| ||| 1
+! 2004 war die UKIP die ||| ! ||| 0.0571221 0.0388843 ||| ||| 1
+! 2004 war die UKIP ||| ! ||| 0.0571221 0.0388843 ||| ||| 1
+! 2004 war die ||| ! ||| 0.0571221 0.0388843 ||| ||| 1
+! 2004 war ||| ! ||| 0.028561 0.0388843 ||| ||| 2
+! 2004 war ||| , 2004 was ||| 0.028561 1 ||| ||| 2
+! 2004 ||| ! 2004 may ||| 0.0142805 0.0775352 ||| ||| 4
+! 2004 ||| ! 2004 ||| 0.0142805 0.0775352 ||| ||| 4
+! 2004 ||| ! ||| 0.0142805 0.0388843 ||| ||| 4
+! 2004 ||| , 2004 ||| 0.0142805 1 ||| ||| 4
+! 2005 war ||| , 2005 has ||| 0.0571221 1 ||| ||| 1
+! 2005 wird ||| , 2005 will ||| 0.0571221 1 ||| ||| 1
+! 2005 ||| , 2005 ||| 0.38535 1 ||| ||| 2
+! 2010 ist eigentlich schon morgen ||| , 2010 is just round the corner ||| 0.0571221 1 ||| ||| 1
+! 2010 ist eigentlich schon ||| , 2010 is just round the ||| 0.028561 1 ||| ||| 2
+! 2010 ist eigentlich schon ||| , 2010 is just round ||| 0.028561 1 ||| ||| 2
+! 2010 ist ||| , 2010 is ||| 0.0571221 1 ||| ||| 1
+! 2010 ||| , 2010 ||| 0.0571221 1 ||| ||| 1
+! 91 % gehen an Rechtsinhaber , ||| the other 91 % goes to holders ||| 0.0571221 0.946664 ||| ||| 1
+! 91 % gehen an Rechtsinhaber ||| the other 91 % goes to holders ||| 0.0571221 0.946664 ||| ||| 1
+! 91 % gehen an ||| the other 91 % goes to ||| 0.0571221 0.946664 ||| ||| 1
+! 91 % gehen ||| the other 91 % goes ||| 0.0571221 0.946664 ||| ||| 1
+! 91 % ||| the other 91 % ||| 0.0571221 0.946664 ||| ||| 1
+! 91 ||| the other 91 ||| 0.0571221 1 ||| ||| 1
+! 99 % ||| 99 % ||| 0.0571221 0.946664 ||| ||| 1
+! 99 ||| 99 ||| 0.0571221 1 ||| ||| 1
+! ; und aus Angola , Dom ||| ! ; and from Angola , Dom ||| 0.0571221 0.0775352 ||| ||| 1
+! ; und aus Angola , ||| ! ; and from Angola , ||| 0.0571221 0.0775352 ||| ||| 1
+! ; und aus Angola ||| ! ; and from Angola ||| 0.0571221 0.0775352 ||| ||| 1
+! ; und aus ||| ! ; and from ||| 0.0571221 0.0775352 ||| ||| 1
+! ; und ||| ! ; and ||| 0.0571221 0.0775352 ||| ||| 1
+! ; ||| ! ; ||| 0.0571221 0.0775352 ||| ||| 1
+! ? " ||| ? " ||| 0.0571221 0.118338 ||| ||| 1
+! ? ? ||| ! ||| 0.028561 0.0265065 ||| ||| 2
+! ? ? ||| ! ’ ||| 0.028561 0.0265065 ||| ||| 2
+! ? Inshaallah . ' ||| , ' inshallah ' . ||| 0.0571221 0.545017 ||| ||| 1
+! ? Inshaallah ||| , ' inshallah ||| 0.0571221 1 ||| ||| 1
+! ? ||| . ' ||| 0.0190407 0.0032785 ||| ||| 3
+! ? ||| ? ! ||| 0.0190407 0.0775352 ||| ||| 3
+! ? ||| ? ||| 0.0190407 1 ||| ||| 3
+! Airbus ist eine europäische Erfolgsgeschichte ||| , Airbus is a European success story ||| 0.0571221 1 ||| ||| 1
+! Airbus ist eine europäische ||| , Airbus is a European ||| 0.0571221 1 ||| ||| 1
+! Airbus ist eine ||| , Airbus is a ||| 0.0571221 1 ||| ||| 1
+! Airbus ist ||| , Airbus is ||| 0.0571221 1 ||| ||| 1
+! Airbus ||| , Airbus ||| 0.0571221 1 ||| ||| 1
+! Algerien ist schwerkrank ||| , Algeria is a very ill country ||| 0.0190407 1 ||| ||| 3
+! Algerien ist schwerkrank ||| , Algeria is a very ill ||| 0.0190407 1 ||| ||| 3
+! Algerien ist schwerkrank ||| , Algeria is a very ||| 0.0190407 1 ||| ||| 3
+! Algerien ist ||| , Algeria is a ||| 0.028561 1 ||| ||| 2
+! Algerien ist ||| , Algeria is ||| 0.028561 1 ||| ||| 2
+! Algerien ||| , Algeria ||| 0.0571221 1 ||| ||| 1
+! Alkoholkonsum ist eine Gewohnheit , die ||| , alcohol consumption is a habit ||| 0.0571221 1 ||| ||| 1
+! Alkoholkonsum ist eine Gewohnheit , ||| , alcohol consumption is a habit ||| 0.0571221 1 ||| ||| 1
+! Alkoholkonsum ist eine Gewohnheit ||| , alcohol consumption is a habit ||| 0.0571221 1 ||| ||| 1
+! Alkoholkonsum ist eine ||| , alcohol consumption is a ||| 0.0571221 1 ||| ||| 1
+! Alkoholkonsum ist ||| , alcohol consumption is ||| 0.0571221 1 ||| ||| 1
+! Alkoholkonsum ||| , alcohol consumption ||| 0.0571221 1 ||| ||| 1
+! Anfang Juli hat sich Filip ||| , at the beginning of July Filip ||| 0.0571221 1 ||| ||| 1
+! Anfang Juli hat sich ||| , at the beginning of July ||| 0.0571221 1 ||| ||| 1
+! Anfang Juli hat ||| , at the beginning of July ||| 0.0571221 1 ||| ||| 1
+! Anfang Juli ||| , at the beginning of July ||| 0.0571221 1 ||| ||| 1
+! Anfang dieses Jahres haben sich die ||| , earlier this year the ||| 0.0571221 1 ||| ||| 1
+! Anfang dieses Jahres haben sich ||| , earlier this year ||| 0.0571221 1 ||| ||| 1
+! Anfang dieses Jahres haben ||| , earlier this year ||| 0.0571221 1 ||| ||| 1
+! Anfang dieses Jahres ||| , earlier this year ||| 0.0571221 1 ||| ||| 1
+! Anfang dieses ||| , earlier this ||| 0.0571221 1 ||| ||| 1
+! Anfang ||| , at the beginning of ||| 0.0190407 1 ||| ||| 3
+! Anfang ||| , at the beginning ||| 0.0190407 1 ||| ||| 3
+! Anfang ||| , earlier ||| 0.0190407 1 ||| ||| 3
+! Anlass ||| , the occasion ||| 0.0571221 1 ||| ||| 1
+! Armut hat ||| , poverty has ||| 0.0571221 1 ||| ||| 1
+! Armut und soziale Ausgrenzung ||| , poverty and social exclusion ||| 0.0571221 1 ||| ||| 1
+! Armut und soziale ||| , poverty and social ||| 0.0571221 1 ||| ||| 1
+! Armut und ||| , poverty and ||| 0.0571221 1 ||| ||| 1
+! Armut ||| , poverty ||| 0.38535 1 ||| ||| 2
+! Aufgabe der Konferenz von Bali ||| , the remit of the Bali Conference ||| 0.0571221 1 ||| ||| 1
+! Aufgabe der ||| , the remit of the ||| 0.0571221 1 ||| ||| 1
+! Aufgabe ||| , the remit ||| 0.0571221 1 ||| ||| 1
+! Aus- und Fortbildung wird ||| , training and education will be a ||| 0.028561 1 ||| ||| 2
+! Aus- und Fortbildung wird ||| , training and education will be ||| 0.028561 1 ||| ||| 2
+! Aus- und Fortbildung ||| , training and education ||| 0.0571221 1 ||| ||| 1
+! Aus- und ||| , training and ||| 0.0571221 1 ||| ||| 1
+! Aus- ||| , training ||| 0.0571221 1 ||| ||| 1
+! Außenpolitik muß ||| and gentlemen , foreign policy needs to ||| 0.028561 1 ||| ||| 2
+! Außenpolitik muß ||| gentlemen , foreign policy needs to ||| 0.028561 1 ||| ||| 2
+! Außenpolitik ||| , ladies and gentlemen , foreign policy ||| 0.0142805 1 ||| ||| 4
+! Außenpolitik ||| and gentlemen , foreign policy ||| 0.0142805 1 ||| ||| 4
+! Außenpolitik ||| gentlemen , foreign policy ||| 0.0142805 1 ||| ||| 4
+! Außenpolitik ||| ladies and gentlemen , foreign policy ||| 0.0142805 1 ||| ||| 4
+! Beifall an den tschechischen ||| , let us applaud the Czech ||| 0.0571221 1 ||| ||| 1
+! Beifall an den ||| , let us applaud the ||| 0.0571221 1 ||| ||| 1
+! Beifall an ||| , let us applaud ||| 0.0571221 1 ||| ||| 1
+! Beifall ||| , let us applaud ||| 0.0571221 1 ||| ||| 1
+! Belarus gehörte im Laufe der Geschichte ||| , throughout history , Belarus has belonged ||| 0.028561 1 ||| ||| 2
+! Belarus gehörte im Laufe der Geschichte ||| throughout history , Belarus has belonged ||| 0.028561 1 ||| ||| 2
+! Belarus gehörte ||| , Belarus has belonged ||| 0.0571221 1 ||| ||| 1
+! Belarus ||| , Belarus ||| 0.0571221 1 ||| ||| 1
+! Belgien hat offenbar ||| , it does seem that Belgium has ||| 0.0571221 1 ||| ||| 1
+! Beschäftigungspolitik und soziale Sicherheit gehören ||| , employment policy and social security go ||| 0.0571221 1 ||| ||| 1
+! Beschäftigungspolitik und soziale Sicherheit ||| , employment policy and social security ||| 0.0571221 1 ||| ||| 1
+! Beschäftigungspolitik und soziale ||| , employment policy and social ||| 0.0571221 1 ||| ||| 1
+! Beschäftigungspolitik und ||| , employment policy and ||| 0.0571221 1 ||| ||| 1
+! Beschäftigungspolitik ||| , employment policy ||| 0.0571221 1 ||| ||| 1
+! Betriebsstilllegungen wie jetzt in ||| , plant closures like this one in ||| 0.0571221 1 ||| ||| 1
+! Betriebsstilllegungen wie jetzt ||| , plant closures like this one ||| 0.028561 1 ||| ||| 2
+! Betriebsstilllegungen wie jetzt ||| , plant closures like this ||| 0.028561 1 ||| ||| 2
+! Betriebsstilllegungen wie ||| , plant closures like ||| 0.0571221 1 ||| ||| 1
+! Betriebsstilllegungen ||| , plant closures ||| 0.0571221 1 ||| ||| 1
+! Beziehungen zu Nachbarn sind ||| , links with neighbours are ||| 0.0571221 1 ||| ||| 1
+! Beziehungen zu Nachbarn ||| , links with neighbours ||| 0.0571221 1 ||| ||| 1
+! Beziehungen zu ||| , links with ||| 0.0571221 1 ||| ||| 1
+! Beziehungen ||| , links ||| 0.0571221 1 ||| ||| 1
+! Bezug ||| the ||| 0.0571221 1 ||| ||| 1
+! Biozide , das sind Produkte , ||| , biocides are products that ||| 0.0571221 1 ||| ||| 1
+! Biozide , das sind Produkte ||| , biocides are products ||| 0.0571221 1 ||| ||| 1
+! Biozide , das sind ||| , biocides are ||| 0.0571221 1 ||| ||| 1
+! Biozide , das ||| , biocides ||| 0.0571221 1 ||| ||| 1
+! Biozide , ||| , biocides ||| 0.0571221 1 ||| ||| 1
+! Birma ||| , Burma ||| 0.0571221 1 ||| ||| 1
+! Bosnien-Herzegowina ist im Grunde ||| , Bosnia-Herzegovina is , in fact , ||| 0.0571221 1 ||| ||| 1
+! Bosnien-Herzegowina ist im ||| , Bosnia-Herzegovina is , in ||| 0.0571221 1 ||| ||| 1
+! Bosnien-Herzegowina ist ||| , Bosnia-Herzegovina is , ||| 0.028561 1 ||| ||| 2
+! Bosnien-Herzegowina ist ||| , Bosnia-Herzegovina is ||| 0.028561 1 ||| ||| 2
+! Bosnien-Herzegowina ||| , Bosnia-Herzegovina ||| 0.0571221 1 ||| ||| 1
+! Bovine spongiforme Enzephalopathie , Dioxin , ||| , bovine spongiform encephalopathy , dioxin , ||| 0.0571221 1 ||| ||| 1
+! Bovine spongiforme Enzephalopathie , Dioxin ||| , bovine spongiform encephalopathy , dioxin ||| 0.0571221 1 ||| ||| 1
+! Bovine spongiforme Enzephalopathie , ||| , bovine spongiform encephalopathy , ||| 0.0571221 1 ||| ||| 1
+! Bovine spongiforme Enzephalopathie ||| , bovine spongiform encephalopathy ||| 0.0571221 1 ||| ||| 1
+! Bovine spongiforme ||| , bovine spongiform ||| 0.0571221 1 ||| ||| 1
+! Bovine ||| , bovine ||| 0.0571221 1 ||| ||| 1
+! Burma taucht regelmäßig als Thema ||| , Burma is a regular theme ||| 0.0571221 1 ||| ||| 1
+! Burma taucht regelmäßig als ||| , Burma is a regular ||| 0.0571221 1 ||| ||| 1
+! Burma taucht ||| , Burma is ||| 0.0571221 1 ||| ||| 1
+! Burma ||| , Burma ||| 0.0571221 1 ||| ||| 1
+! Bücher sind ein wichtiges Medium ||| , books are an important instrument ||| 0.0571221 1 ||| ||| 1
+! Bücher sind ein wichtiges ||| , books are an important ||| 0.0571221 1 ||| ||| 1
+! Bücher sind ein ||| , books are an ||| 0.0571221 1 ||| ||| 1
+! Bücher sind ||| , books are ||| 0.0571221 1 ||| ||| 1
+! Bücher ||| , books ||| 0.0571221 1 ||| ||| 1
+! Cancún ist ebenso ein Misserfolg wie ||| , Cancún was a failure just like ||| 0.0571221 1 ||| ||| 1
+! Cancún ist ebenso ein Misserfolg ||| , Cancún was a failure ||| 0.0571221 1 ||| ||| 1
+! Cancún ist ebenso ein ||| , Cancún was a ||| 0.0571221 1 ||| ||| 1
+! Cancún ist ebenso ||| , Cancún was ||| 0.0571221 1 ||| ||| 1
+! Cancún ist ||| , Cancún was ||| 0.0571221 1 ||| ||| 1
+! Cancún ||| , Cancún ||| 0.0571221 1 ||| ||| 1
+! Chaos , wie es vom ||| ' to the chaos that the ||| 0.0142805 1 ||| ||| 4
+! Chaos , wie es vom ||| no ' to the chaos that the ||| 0.0142805 1 ||| ||| 4
+! Chaos , wie es vom ||| the chaos that the ||| 0.0142805 1 ||| ||| 4
+! Chaos , wie es vom ||| to the chaos that the ||| 0.0142805 1 ||| ||| 4
+! Chaos , wie es ||| ' no ' to the chaos that ||| 0.0114244 1 ||| ||| 5
+! Chaos , wie es ||| ' to the chaos that ||| 0.0114244 1 ||| ||| 5
+! Chaos , wie es ||| no ' to the chaos that ||| 0.0114244 1 ||| ||| 5
+! Chaos , wie es ||| the chaos that ||| 0.0114244 1 ||| ||| 5
+! Chaos , wie es ||| to the chaos that ||| 0.0114244 1 ||| ||| 5
+! Chaos ||| ' no ' to the chaos ||| 0.0114244 1 ||| ||| 5
+! Chaos ||| ' to the chaos ||| 0.0114244 1 ||| ||| 5
+! Chaos ||| no ' to the chaos ||| 0.0114244 1 ||| ||| 5
+! Chaos ||| the chaos ||| 0.0114244 1 ||| ||| 5
+! Chaos ||| to the chaos ||| 0.0114244 1 ||| ||| 5
+! Clearing und Abrechnung sind ein wesentliches ||| , clearing and settlement are an essential ||| 0.0571221 1 ||| ||| 1
+! Clearing und Abrechnung sind ein ||| , clearing and settlement are an ||| 0.0571221 1 ||| ||| 1
+! Clearing und Abrechnung sind ||| , clearing and settlement are ||| 0.0571221 1 ||| ||| 1
+! Clearing und Abrechnung ||| , clearing and settlement ||| 0.0571221 1 ||| ||| 1
+! Clearing und ||| , clearing and ||| 0.0571221 1 ||| ||| 1
+! Clearing ||| , clearing ||| 0.0571221 1 ||| ||| 1
+! Dank an Constanze ||| I am obliged to ||| 0.0571221 1 ||| ||| 1
+! Dank der Arbeit Ihres ||| , thanks to the work of your ||| 0.0571221 1 ||| ||| 1
+! Dank der Arbeit ||| , thanks to the work ||| 0.0571221 1 ||| ||| 1
+! Dank der ||| , thanks to the ||| 0.0571221 1 ||| ||| 1
+! Dank ||| , thanks to ||| 0.028561 1 ||| ||| 2
+! Dank ||| , thanks ||| 0.028561 1 ||| ||| 2
+! Dogan gehört zu den Köpfen ||| , Dogan is one of the heads ||| 0.0571221 1 ||| ||| 1
+! Dogan gehört zu den ||| , Dogan is one of the ||| 0.0571221 1 ||| ||| 1
+! Dogan gehört zu ||| , Dogan is one of ||| 0.028561 1 ||| ||| 2
+! Dogan gehört zu ||| , Dogan is one ||| 0.028561 1 ||| ||| 2
+! Dogan ||| , Dogan ||| 0.0571221 1 ||| ||| 1
+! Doris Pack hat ||| , Mrs Pack has ||| 0.0571221 1 ||| ||| 1
+! Doris Pack ||| , Mrs Pack ||| 0.0571221 1 ||| ||| 1
+! Doris ||| , Mrs ||| 0.0571221 1 ||| ||| 1
+! Echelon existiert ||| , ECHELON exists , as has already ||| 0.0114244 1 ||| ||| 5
+! Echelon existiert ||| , ECHELON exists , as has ||| 0.0114244 1 ||| ||| 5
+! Echelon existiert ||| , ECHELON exists , as ||| 0.0114244 1 ||| ||| 5
+! Echelon existiert ||| , ECHELON exists , ||| 0.0114244 1 ||| ||| 5
+! Echelon existiert ||| , ECHELON exists ||| 0.0114244 1 ||| ||| 5
+! Echelon ||| , ECHELON ||| 0.0571221 1 ||| ||| 1
+! Emissionsrechte sind keine ||| , emission allowances are not ||| 0.0571221 1 ||| ||| 1
+! Emissionsrechte sind ||| , emission allowances are ||| 0.0571221 1 ||| ||| 1
+! Emissionsrechte ||| , emission allowances ||| 0.0571221 1 ||| ||| 1
+! Energie stellt einen entscheidenden Faktor in ||| , energy is a crucial factor as ||| 0.0571221 1 ||| ||| 1
+! Energie stellt einen entscheidenden Faktor ||| , energy is a crucial factor ||| 0.0571221 1 ||| ||| 1
+! Energie stellt einen entscheidenden ||| , energy is a crucial ||| 0.0571221 1 ||| ||| 1
+! Energie stellt einen ||| , energy is a ||| 0.0571221 1 ||| ||| 1
+! Energie stellt ||| , energy is ||| 0.0571221 1 ||| ||| 1
+! Energie ||| , energy ||| 0.0571221 1 ||| ||| 1
+! Energieabhängigkeit ist das Thema Nummer eins ||| , energy dependence is priority number one ||| 0.0571221 1 ||| ||| 1
+! Energieabhängigkeit ist das Thema Nummer ||| , energy dependence is priority number ||| 0.0571221 1 ||| ||| 1
+! Energieabhängigkeit ist das ||| , energy dependence is ||| 0.0571221 1 ||| ||| 1
+! Energieabhängigkeit ist ||| , energy dependence is ||| 0.0571221 1 ||| ||| 1
+! Energieabhängigkeit ||| , energy dependence ||| 0.0571221 1 ||| ||| 1
+! Entschuldigung , ||| , and I apologise ||| 0.0142805 1 ||| ||| 4
+! Entschuldigung , ||| of the tongue , and I apologise ||| 0.0142805 1 ||| ||| 4
+! Entschuldigung , ||| the tongue , and I apologise ||| 0.0142805 1 ||| ||| 4
+! Entschuldigung , ||| tongue , and I apologise ||| 0.0142805 1 ||| ||| 4
+! Entschuldigung ||| , and I apologise ||| 0.0142805 1 ||| ||| 4
+! Entschuldigung ||| of the tongue , and I apologise ||| 0.0142805 1 ||| ||| 4
+! Entschuldigung ||| the tongue , and I apologise ||| 0.0142805 1 ||| ||| 4
+! Entschuldigung ||| tongue , and I apologise ||| 0.0142805 1 ||| ||| 4
+! Entwicklungszusammenarbeit und Handel sind ||| , development cooperation and trade are ||| 0.0571221 1 ||| ||| 1
+! Entwicklungszusammenarbeit und Handel ||| , development cooperation and trade ||| 0.0571221 1 ||| ||| 1
+! Entwicklungszusammenarbeit und ||| , development cooperation and ||| 0.0571221 1 ||| ||| 1
+! Entwicklungszusammenarbeit ||| , development cooperation ||| 0.0571221 1 ||| ||| 1
+! Erfahrungen sind nicht wirklichkeitsfremd ||| , there is nothing fanciful about experience ||| 0.0571221 1 ||| ||| 1
+! Erzeugnisse aus den besetzten Gebieten sind ||| , products from the Occupied Territories are ||| 0.0571221 1 ||| ||| 1
+! Erzeugnisse aus den besetzten Gebieten ||| , products from the Occupied Territories ||| 0.0571221 1 ||| ||| 1
+! Erzeugnisse aus den besetzten ||| , products from the Occupied ||| 0.0571221 1 ||| ||| 1
+! Erzeugnisse aus den ||| , products from the ||| 0.0571221 1 ||| ||| 1
+! Erzeugnisse aus ||| , products from ||| 0.0571221 1 ||| ||| 1
+! Erzeugnisse ||| , products ||| 0.0571221 1 ||| ||| 1
+! Europa befindet sich gegenwärtig in einer ||| , Europe is currently going through a ||| 0.0571221 1 ||| ||| 1
+! Europa befindet sich gegenwärtig in ||| , Europe is currently going through ||| 0.0571221 1 ||| ||| 1
+! Europa befindet sich gegenwärtig ||| , Europe is currently going ||| 0.028561 1 ||| ||| 2
+! Europa befindet sich gegenwärtig ||| , Europe is currently ||| 0.028561 1 ||| ||| 2
+! Europa befindet sich ||| , Europe is ||| 0.0571221 1 ||| ||| 1
+! Europa hat ||| , Europe has ||| 0.0571221 1 ||| ||| 1
+! Europa ist ein großes Ideal : ||| , Europe is a great ideal : ||| 0.0571221 1 ||| ||| 1
+! Europa ist ein großes Ideal ||| , Europe is a great ideal ||| 0.0571221 1 ||| ||| 1
+! Europa ist ein großes ||| , Europe is a great ||| 0.0571221 1 ||| ||| 1
+! Europa ist ein ||| , Europe is a ||| 0.0571221 1 ||| ||| 1
+! Europa ist ||| , Europe is ||| 0.0571221 1 ||| ||| 1
+! Europa muss ||| , Europe must ||| 0.0571221 1 ||| ||| 1
+! Europa und das Europäische Parlament ||| , Europe and the European Parliament ||| 0.0571221 1 ||| ||| 1
+! Europa und das Europäische ||| , Europe and the European ||| 0.0571221 1 ||| ||| 1
+! Europa und das ||| , Europe and the ||| 0.0571221 1 ||| ||| 1
+! Europa und ||| , Europe and ||| 0.0571221 1 ||| ||| 1
+! Europa unter Wasser , Europa im ||| , Europe under water , Europe under ||| 0.0571221 1 ||| ||| 1
+! Europa unter Wasser , Europa ||| , Europe under water , Europe ||| 0.0571221 1 ||| ||| 1
+! Europa unter Wasser , ||| , Europe under water , ||| 0.0571221 1 ||| ||| 1
+! Europa unter Wasser ||| , Europe under water ||| 0.0571221 1 ||| ||| 1
+! Europa unter ||| , Europe under ||| 0.0571221 1 ||| ||| 1
+! Europa verdient Besseres als dieses ||| , Europeans deserve more than the ||| 0.0571221 1 ||| ||| 1
+! Europa verdient Besseres als ||| , Europeans deserve more than ||| 0.0571221 1 ||| ||| 1
+! Europa verdient Besseres ||| , Europeans deserve more ||| 0.0571221 1 ||| ||| 1
+! Europa wurde gebeten ||| , Europe has been asked ||| 0.0571221 1 ||| ||| 1
+! Europa wurde ||| , Europe has been ||| 0.0571221 1 ||| ||| 1
+! Europa ||| , Europe ||| 0.875 1 ||| ||| 8
+! Europa ||| , Europeans ||| 0.00714026 1 ||| ||| 8
+! Europas Zukunft ist in hohem Maße ||| that Europe 's future is largely ||| 0.0571221 1 ||| ||| 1
+! Europas Zukunft ist in ||| that Europe 's future is ||| 0.0571221 1 ||| ||| 1
+! Europas Zukunft ist ||| that Europe 's future is ||| 0.0571221 1 ||| ||| 1
+! Europas Zukunft ||| that Europe 's future ||| 0.0571221 1 ||| ||| 1
+! Europas modernisierte Industriepolitik , ||| , Europe 's updated industrial policy , ||| 0.0571221 1 ||| ||| 1
+! Europas modernisierte Industriepolitik ||| , Europe 's updated industrial policy ||| 0.0571221 1 ||| ||| 1
+! Europas modernisierte ||| , Europe 's updated ||| 0.0571221 1 ||| ||| 1
+! Europas ||| , Europe 's ||| 0.028561 1 ||| ||| 2
+! Europas ||| that Europe 's ||| 0.028561 1 ||| ||| 2
+! Europäische Solidarität wird greifbar ||| , European solidarity is within our grasp ||| 0.0571221 1 ||| ||| 1
+! Europäische Solidarität wird ||| , European solidarity is ||| 0.0571221 1 ||| ||| 1
+! Europäische Solidarität ||| , European solidarity ||| 0.0571221 1 ||| ||| 1
+! Europäische ||| , European ||| 0.0571221 1 ||| ||| 1
+! Feinstaubemissionen ||| , particulate-matter emissions ||| 0.0142805 1 ||| ||| 4
+! Feinstaubemissionen ||| Commission , particulate-matter emissions ||| 0.0142805 1 ||| ||| 4
+! Feinstaubemissionen ||| of the Commission , particulate-matter emissions ||| 0.0142805 1 ||| ||| 4
+! Feinstaubemissionen ||| the Commission , particulate-matter emissions ||| 0.0142805 1 ||| ||| 4
+! Finnland hat ||| , Finland is ||| 0.0571221 1 ||| ||| 1
+! Finnland ||| , Finland ||| 0.38535 1 ||| ||| 2
+! Finnland übernimmt ||| , Finland is taking over ||| 0.0571221 1 ||| ||| 1
+! Francis Bacon hat gesagt : " ||| , Francis Bacon said that whoever ||| 0.028561 1 ||| ||| 2
+! Francis Bacon hat gesagt : " ||| , Francis Bacon said that ||| 0.028561 1 ||| ||| 2
+! Francis ||| , Francis ||| 0.0571221 1 ||| ||| 1
+! Frau Angelilli führte aus , daß ||| Representative , Mrs Angelilli commented that ||| 0.0571221 1 ||| ||| 1
+! Frau Angelilli führte aus ||| Representative , Mrs Angelilli commented ||| 0.0571221 1 ||| ||| 1
+! Frau Angelilli führte ||| Representative , Mrs Angelilli commented ||| 0.0571221 1 ||| ||| 1
+! Frau Doyle hat bei ||| , as Mrs Doyle has ||| 0.0571221 1 ||| ||| 1
+! Frau Ferrero-Waldner kann an ||| , Mrs Ferrero-Waldner is unable to ||| 0.0571221 1 ||| ||| 1
+! Frau Ferrero-Waldner kann ||| , Mrs Ferrero-Waldner is unable ||| 0.0571221 1 ||| ||| 1
+! Frau Ferrero-Waldner ||| , Mrs Ferrero-Waldner ||| 0.0571221 1 ||| ||| 1
+! Frau Flautre , ||| , Mrs Flautre ||| 0.0571221 1 ||| ||| 1
+! Frau Flautre ||| , Mrs Flautre ||| 0.0571221 1 ||| ||| 1
+! Frau Kommissarin , ||| ; Commissioner , ||| 0.0571221 1 ||| ||| 1
+! Frau Kommissarin Wallström hat am Ende ||| , Commissioner Wallström ended ||| 0.0571221 1 ||| ||| 1
+! Frau Kommissarin Wallström ||| , Commissioner Wallström ||| 0.0571221 1 ||| ||| 1
+! Frau Kommissarin ||| , Commissioner ||| 0.028561 1 ||| ||| 2
+! Frau Kommissarin ||| ; Commissioner ||| 0.028561 1 ||| ||| 2
+! Frau Martens hat ||| , Mrs Martens has ||| 0.0571221 1 ||| ||| 1
+! Frau Martens ||| , Mrs Martens ||| 0.0571221 1 ||| ||| 1
+! Frau Plooij-van Gorsel zeichnet ein ||| , Mrs Plooij-van Gorsel is painting a ||| 0.0571221 1 ||| ||| 1
+! Frau Plooij-van Gorsel zeichnet ||| , Mrs Plooij-van Gorsel is painting ||| 0.0571221 1 ||| ||| 1
+! Frau Plooij-van Gorsel ||| , Mrs Plooij-van Gorsel ||| 0.0571221 1 ||| ||| 1
+! Frau Plooij-van ||| , Mrs Plooij-van ||| 0.0571221 1 ||| ||| 1
+! Frau Torres Marques hat sehr ||| , Mrs Torres Marques has done an ||| 0.0571221 1 ||| ||| 1
+! Frau Torres Marques hat ||| , Mrs Torres Marques has done ||| 0.028561 1 ||| ||| 2
+! Frau Torres Marques hat ||| , Mrs Torres Marques has ||| 0.028561 1 ||| ||| 2
+! Frau Torres Marques ||| , Mrs Torres Marques ||| 0.0571221 1 ||| ||| 1
+! Frau Torres ||| , Mrs Torres ||| 0.0571221 1 ||| ||| 1
+! Frau in ' t Veld hat ||| , Mrs in ' t Veld is ||| 0.0571221 0.545017 ||| ||| 1
+! Frau in ' t Veld ||| , Mrs in ' t Veld ||| 0.0571221 0.545017 ||| ||| 1
+! Frau in ' t ||| , Mrs in ' t ||| 0.0571221 0.545017 ||| ||| 1
+! Frau in ' ||| , Mrs in ' ||| 0.0571221 0.545017 ||| ||| 1
+! Frau in ||| , Mrs in ||| 0.0571221 1 ||| ||| 1
+! Frau ||| , Mrs ||| 0.857143 1 ||| ||| 7
+! Frau ||| Representative , Mrs ||| 0.00816029 1 ||| ||| 7
+! Galileo könnte auch den Untertitel " ||| , Galileo could also be subtitled ' ||| 0.0571221 0.579445 ||| ||| 1
+! Galileo könnte auch den Untertitel ||| , Galileo could also be subtitled ||| 0.0571221 1 ||| ||| 1
+! Galileo könnte auch ||| , Galileo could also ||| 0.0571221 1 ||| ||| 1
+! Galileo könnte ||| , Galileo could ||| 0.0571221 1 ||| ||| 1
+! Galileo ||| , Galileo ||| 0.0571221 1 ||| ||| 1
+! General de Gaulle sagte ||| , General de Gaulle said ||| 0.0571221 1 ||| ||| 1
+! General de Gaulle sagte über Valéry ||| , General de Gaulle said of Valéry ||| 0.0571221 1 ||| ||| 1
+! General de Gaulle sagte über ||| , General de Gaulle said of ||| 0.0571221 1 ||| ||| 1
+! General de Gaulle ||| , General de Gaulle ||| 0.0571221 1 ||| ||| 1
+! General de ||| , General de ||| 0.0571221 1 ||| ||| 1
+! General ||| , General ||| 0.0571221 1 ||| ||| 1
+! Genozid ist auch , wenn ||| : it is also genocide to deprive ||| 0.0571221 1 ||| ||| 1
+! Genozid ist auch , ||| : it is also genocide to ||| 0.0571221 1 ||| ||| 1
+! Genozid ist auch ||| : it is also genocide ||| 0.0571221 1 ||| ||| 1
+! Gesundheit und Verbraucherschutz sind zwei ||| , health and consumer protection are two ||| 0.0571221 1 ||| ||| 1
+! Gesundheit und Verbraucherschutz sind ||| , health and consumer protection are ||| 0.0571221 1 ||| ||| 1
+! Gesundheit und Verbraucherschutz ||| , health and consumer protection ||| 0.0571221 1 ||| ||| 1
+! Gesundheit und ||| , health and ||| 0.0571221 1 ||| ||| 1
+! Gesundheit ||| , health ||| 0.0571221 1 ||| ||| 1
+! Gewissens- ||| , conscience ||| 0.0571221 1 ||| ||| 1
+! Gleichstellung von Frauen und Männern ist ||| , equality between women and men is ||| 0.0571221 1 ||| ||| 1
+! Gleichstellung von Frauen und Männern ||| , equality between women and men ||| 0.0571221 1 ||| ||| 1
+! Gleichstellung von Frauen und ||| , equality between women and ||| 0.0571221 1 ||| ||| 1
+! Gleichstellung von Frauen ||| , equality between women ||| 0.0571221 1 ||| ||| 1
+! Gleichstellung von ||| , equality between ||| 0.0571221 1 ||| ||| 1
+! Griechenland hat ||| , Greece was not ||| 0.028561 1 ||| ||| 2
+! Griechenland hat ||| , Greece was ||| 0.028561 1 ||| ||| 2
+! Griechenland ||| , Greece ||| 0.0571221 1 ||| ||| 1
+! Heizen und Kühlen machen 49 ||| , heating and cooling accounts for 49 ||| 0.0571221 1 ||| ||| 1
+! Heizen und Kühlen machen ||| , heating and cooling accounts for ||| 0.0571221 1 ||| ||| 1
+! Heizen und ||| , heating and ||| 0.0571221 1 ||| ||| 1
+! Heizen ||| , heating ||| 0.0571221 1 ||| ||| 1
+! Herr Blair , Sie haben erklärt ||| , you have , Mr Blair ||| 0.0571221 1 ||| ||| 1
+! Herr Bösch , ich ||| , Mr Bösch , I ||| 0.0571221 1 ||| ||| 1
+! Herr Bösch , ||| , Mr Bösch , ||| 0.0571221 1 ||| ||| 1
+! Herr Bösch ||| , Mr Bösch ||| 0.0571221 1 ||| ||| 1
+! Herr Friedrich , eine Staatsbürgerschaft ist ||| , Mr Friedrich , citizenship must ||| 0.0571221 1 ||| ||| 1
+! Herr Friedrich , eine Staatsbürgerschaft ||| , Mr Friedrich , citizenship ||| 0.0571221 1 ||| ||| 1
+! Herr Friedrich , eine ||| , Mr Friedrich , ||| 0.0571221 1 ||| ||| 1
+! Herr Friedrich , ||| , Mr Friedrich , ||| 0.0571221 1 ||| ||| 1
+! Herr Friedrich ||| , Mr Friedrich ||| 0.0571221 1 ||| ||| 1
+! Herr Galeote Quecedo unterstreicht in ||| , Mr Galeote Quecedo emphasises , in ||| 0.0571221 1 ||| ||| 1
+! Herr Galeote Quecedo unterstreicht ||| , Mr Galeote Quecedo emphasises , ||| 0.028561 1 ||| ||| 2
+! Herr Galeote Quecedo unterstreicht ||| , Mr Galeote Quecedo emphasises ||| 0.028561 1 ||| ||| 2
+! Herr Galeote Quecedo ||| , Mr Galeote Quecedo ||| 0.0571221 1 ||| ||| 1
+! Herr Galeote ||| , Mr Galeote ||| 0.0571221 1 ||| ||| 1
+! Herr Jarzembowski , ich danke Ihnen ||| , Mr Jarzembowski , thank you ||| 0.0571221 1 ||| ||| 1
+! Herr Jarzembowski , ich danke ||| , Mr Jarzembowski , thank ||| 0.0571221 1 ||| ||| 1
+! Herr Jarzembowski , ||| , Mr Jarzembowski , ||| 0.0571221 1 ||| ||| 1
+! Herr Jarzembowski ||| , Mr Jarzembowski ||| 0.0571221 1 ||| ||| 1
+! Herr Kommissar ! ||| . ||| 0.0571221 1 ||| ||| 1
+! Herr Kommissar , welche Bereiche ||| , Commissioner , which sectors ||| 0.0571221 1 ||| ||| 1
+! Herr Kommissar , welche ||| , Commissioner , which ||| 0.0571221 1 ||| ||| 1
+! Herr Kommissar , ||| , Commissioner , ||| 0.0571221 1 ||| ||| 1
+! Herr Kommissar Frattini ||| , Commissioner Fratini ||| 0.0571221 1 ||| ||| 1
+! Herr Kommissar ||| , Commissioner ||| 0.38535 1 ||| ||| 2
+! Herr Kommissionspräsident , ||| ) Mr President , ||| 0.0571221 1 ||| ||| 1
+! Herr Kommissionspräsident Romano Prodi erhielt ||| , President Prodi was ||| 0.0571221 1 ||| ||| 1
+! Herr Kommissionspräsident Romano Prodi ||| , President Prodi ||| 0.0571221 1 ||| ||| 1
+! Herr Kommissionspräsident ||| ) Mr President ||| 0.0142805 1 ||| ||| 4
+! Herr Kommissionspräsident ||| , Mr President of the Commission , ||| 0.0142805 1 ||| ||| 4
+! Herr Kommissionspräsident ||| , Mr President of the Commission ||| 0.0142805 1 ||| ||| 4
+! Herr Kommissionspräsident ||| , President ||| 0.0142805 1 ||| ||| 4
+! Herr Kreissl-Dörfler ging ||| , Mr Kreissl-Dörfler went ||| 0.0571221 1 ||| ||| 1
+! Herr Kreissl-Dörfler ||| , Mr Kreissl-Dörfler ||| 0.0571221 1 ||| ||| 1
+! Herr Lannoye hat soeben gesagt ||| , Mr Lannoye stated a moment ago ||| 0.0571221 1 ||| ||| 1
+! Herr Lannoye ||| , Mr Lannoye ||| 0.0571221 1 ||| ||| 1
+! Herr Morris verdient sicher eine Antwort ||| , Mr Morris certainly deserves an answer ||| 0.0571221 1 ||| ||| 1
+! Herr Morris verdient sicher eine ||| , Mr Morris certainly deserves an ||| 0.0571221 1 ||| ||| 1
+! Herr Morris verdient sicher ||| , Mr Morris certainly deserves ||| 0.0571221 1 ||| ||| 1
+! Herr Morris ||| , Mr Morris ||| 0.0571221 1 ||| ||| 1
+! Herr Nisticò hat ||| , the report Mr Nisticò has ||| 0.0571221 1 ||| ||| 1
+! Herr Nisticò ||| , the report Mr Nisticò ||| 0.0571221 1 ||| ||| 1
+! Herr Palko ist ein führender Vertreter ||| , Mr Palko is a senior representative ||| 0.0571221 1 ||| ||| 1
+! Herr Palko ist ein führender ||| , Mr Palko is a senior ||| 0.0571221 1 ||| ||| 1
+! Herr Palko ist ein ||| , Mr Palko is a ||| 0.0571221 1 ||| ||| 1
+! Herr Palko ist ||| , Mr Palko is ||| 0.0571221 1 ||| ||| 1
+! Herr Palko ||| , Mr Palko ||| 0.0571221 1 ||| ||| 1
+! Herr Peter hat ||| , Mr Peter has ||| 0.0571221 1 ||| ||| 1
+! Herr Peter ||| , Mr Peter ||| 0.0571221 1 ||| ||| 1
+! Herr Piecyk , zunächst mein ||| , Mr Piecyk , I should first ||| 0.0571221 1 ||| ||| 1
+! Herr Piecyk , ||| , Mr Piecyk , ||| 0.0571221 1 ||| ||| 1
+! Herr Piecyk ||| , Mr Piecyk ||| 0.0571221 1 ||| ||| 1
+! Herr Pohjamo hat in seinen Entschließungsantrag ||| , Mr Pohjamo ' s resolution included ||| 0.028561 1 ||| ||| 2
+! Herr Pohjamo hat in seinen Entschließungsantrag ||| , Mr Pohjamo ' s resolution ||| 0.028561 1 ||| ||| 2
+! Herr Pohjamo hat in seinen ||| , Mr Pohjamo ' s ||| 0.0571221 1 ||| ||| 1
+! Herr Pohjamo hat in ||| , Mr Pohjamo ' ||| 0.028561 1 ||| ||| 2
+! Herr Pohjamo hat in ||| , Mr Pohjamo ||| 0.028561 1 ||| ||| 2
+! Herr Pohjamo hat ||| , Mr Pohjamo ' ||| 0.028561 1 ||| ||| 2
+! Herr Pohjamo hat ||| , Mr Pohjamo ||| 0.028561 1 ||| ||| 2
+! Herr Pohjamo ||| , Mr Pohjamo ' ||| 0.028561 1 ||| ||| 2
+! Herr Pohjamo ||| , Mr Pohjamo ||| 0.028561 1 ||| ||| 2
+! Herr Poignant weist ||| , as Mr Poignant points out ||| 0.0571221 1 ||| ||| 1
+! Herr Poignant ||| , as Mr Poignant ||| 0.0571221 1 ||| ||| 1
+! Herr Professor Prodi , Sie stellen ||| , Professor Prodi , you are ||| 0.0571221 1 ||| ||| 1
+! Herr Professor Prodi , Sie ||| , Professor Prodi , you ||| 0.0571221 1 ||| ||| 1
+! Herr Professor Prodi , ||| , Professor Prodi , ||| 0.0571221 1 ||| ||| 1
+! Herr Professor Prodi ||| , Professor Prodi ||| 0.0571221 1 ||| ||| 1
+! Herr Professor ||| , Professor ||| 0.0571221 1 ||| ||| 1
+! Herr Präsident , leider hat der ||| ) Mr President , unfortunately , the ||| 0.0571221 1 ||| ||| 1
+! Herr Präsident , leider hat ||| ) Mr President , unfortunately , ||| 0.0571221 1 ||| ||| 1
+! Herr Präsident , leider ||| ) Mr President , unfortunately ||| 0.0571221 1 ||| ||| 1
+! Herr Präsident , ||| ) Mr President , ||| 0.0571221 1 ||| ||| 1
+! Herr Präsident ||| ) Mr President ||| 0.028561 1 ||| ||| 2
+! Herr Präsident ||| , Dear Mr. Chairman ||| 0.028561 1 ||| ||| 2
+! Herr Ratspräsident ||| , Mr President ||| 0.0571221 1 ||| ||| 1
+! Herr Schmid , ich danke Ihnen ||| , Mr Schmid , thank you ||| 0.0571221 1 ||| ||| 1
+! Herr Schmid , ich danke ||| , Mr Schmid , thank ||| 0.0571221 1 ||| ||| 1
+! Herr Schmid , ||| , Mr Schmid , ||| 0.0571221 1 ||| ||| 1
+! Herr Schmid ||| , Mr Schmid ||| 0.0571221 1 ||| ||| 1
+! Herr Schnellhardt hat ||| , Mr Schnellhardt has ||| 0.0571221 1 ||| ||| 1
+! Herr Schnellhardt ||| , Mr Schnellhardt ||| 0.0571221 1 ||| ||| 1
+! Herr Schwab ||| , Mr Schwab 's ||| 0.028561 1 ||| ||| 2
+! Herr Schwab ||| , Mr Schwab ||| 0.028561 1 ||| ||| 2
+! Herr Swoboda gelangt in seinem Bericht ||| , Mr Swoboda 's report ||| 0.0571221 1 ||| ||| 1
+! Herr Swoboda gelangt in seinem ||| , Mr Swoboda 's ||| 0.0571221 1 ||| ||| 1
+! Herr Swoboda gelangt ||| , Mr Swoboda ||| 0.0571221 1 ||| ||| 1
+! Herr Trakatellis und Frau Scheele haben ||| , Mr Trakatellis and Mrs Scheele have ||| 0.0571221 1 ||| ||| 1
+! Herr Trakatellis und Frau Scheele ||| , Mr Trakatellis and Mrs Scheele ||| 0.0571221 1 ||| ||| 1
+! Herr Trakatellis und Frau ||| , Mr Trakatellis and Mrs ||| 0.0571221 1 ||| ||| 1
+! Herr Trakatellis und ||| , Mr Trakatellis and ||| 0.0571221 1 ||| ||| 1
+! Herr Trakatellis ||| , Mr Trakatellis ||| 0.0571221 1 ||| ||| 1
+! Herr Verheugen , Sie ||| , Mr Verheugen , you ||| 0.0571221 1 ||| ||| 1
+! Herr Verheugen , ||| , Mr Verheugen , ||| 0.0571221 1 ||| ||| 1
+! Herr Verheugen ||| , Mr Verheugen ||| 0.0571221 1 ||| ||| 1
+! Herr Whitehead hat ||| , Mr Whitehead has ||| 0.0571221 1 ||| ||| 1
+! Herr Whitehead ||| , Mr Whitehead ||| 0.0571221 1 ||| ||| 1
+! Herr ||| ) Mr ||| 0.0285445 1 ||| ||| 27
+! Herr ||| , Dear Mr. ||| 0.00211563 1 ||| ||| 27
+! Herr ||| , Mr ||| 0.777778 1 ||| ||| 27
+! Herr ||| , as Mr ||| 0.00211563 1 ||| ||| 27
+! Herr ||| , the report Mr ||| 0.00211563 1 ||| ||| 27
+! Herr ||| , ||| 0.00211563 1 ||| ||| 27
+! Herrn Berlatos Bericht befasst sich mit ||| , Mr Berlato 's report deals with ||| 0.0571221 1 ||| ||| 1
+! Herrn Berlatos Bericht befasst sich ||| , Mr Berlato 's report deals ||| 0.0571221 1 ||| ||| 1
+! Herrn Berlatos Bericht ||| , Mr Berlato 's report ||| 0.0571221 1 ||| ||| 1
+! Herrn Berlatos ||| , Mr Berlato 's ||| 0.0571221 1 ||| ||| 1
+! Herrn ||| , Mr ||| 0.0571221 1 ||| ||| 1
+! Härte auf der einen Seite , ||| ; rigour on the one hand , ||| 0.0571221 1 ||| ||| 1
+! Härte auf der einen Seite ||| ; rigour on the one hand ||| 0.0571221 1 ||| ||| 1
+! Härte auf der einen ||| ; rigour on the one ||| 0.0571221 1 ||| ||| 1
+! Härte auf der ||| ; rigour on the ||| 0.0571221 1 ||| ||| 1
+! Härte auf ||| ; rigour on ||| 0.0571221 1 ||| ||| 1
+! Härte ||| ; rigour ||| 0.0571221 1 ||| ||| 1
+! Ihnen allen ist die Sachlage bekannt ||| , you all know the position ||| 0.0571221 1 ||| ||| 1
+! Ihnen allen ist ||| , you all ||| 0.0571221 1 ||| ||| 1
+! Ihnen allen ||| , you all ||| 0.0571221 1 ||| ||| 1
+! Ihnen dürfte bekannt sein , dass ||| , as you will know , ||| 0.0571221 1 ||| ||| 1
+! Ihnen dürfte bekannt sein , ||| , as you will know , ||| 0.0571221 1 ||| ||| 1
+! Ihnen dürfte bekannt sein ||| , as you will know ||| 0.0571221 1 ||| ||| 1
+! Ihnen dürfte bekannt ||| , as you will know ||| 0.0571221 1 ||| ||| 1
+! Ihnen dürfte ||| , as you will ||| 0.0571221 1 ||| ||| 1
+! Ihnen gilt meine Solidarität . ||| and express my solidarity with them . ||| 0.0571221 1 ||| ||| 1
+! Ihnen gilt meine Solidarität ||| and express my solidarity with them ||| 0.0190407 1 ||| ||| 3
+! Ihnen gilt meine Solidarität ||| and express my solidarity with ||| 0.0190407 1 ||| ||| 3
+! Ihnen gilt meine Solidarität ||| and express my solidarity ||| 0.0190407 1 ||| ||| 3
+! Ihnen gilt meine ||| and express my ||| 0.0571221 1 ||| ||| 1
+! Ihnen gilt ||| and express ||| 0.0571221 1 ||| ||| 1
+! Ihnen ist durchaus bewusst , dass ||| , you are well aware that ||| 0.0571221 1 ||| ||| 1
+! Ihnen ist durchaus bewusst ||| , you are well aware ||| 0.0571221 1 ||| ||| 1
+! Ihnen ist durchaus ||| , you are well ||| 0.0571221 1 ||| ||| 1
+! Ihnen ist ||| , you are ||| 0.0571221 1 ||| ||| 1
+! Ihnen werden ||| , you will ||| 0.0571221 1 ||| ||| 1
+! Ihnen ||| , as you ||| 0.0142805 1 ||| ||| 4
+! Ihnen ||| , you ||| 0.504132 1 ||| ||| 4
+! Information und Wissen bilden die Grundlage ||| , knowledge and know-how are the basis ||| 0.0571221 1 ||| ||| 1
+! Information und Wissen bilden die ||| , knowledge and know-how are the ||| 0.0571221 1 ||| ||| 1
+! Information und Wissen bilden ||| , knowledge and know-how are ||| 0.0571221 1 ||| ||| 1
+! Information und Wissen ||| , knowledge and know-how ||| 0.0571221 1 ||| ||| 1
+! Information und ||| , knowledge and ||| 0.0571221 1 ||| ||| 1
+! Information ||| , knowledge ||| 0.0571221 1 ||| ||| 1
+! Israel hat die militärische Macht und ||| Israel has the military power and ||| 0.0571221 1 ||| ||| 1
+! Israel hat die militärische Macht ||| Israel has the military power ||| 0.0571221 1 ||| ||| 1
+! Israel hat die militärische ||| Israel has the military ||| 0.0571221 1 ||| ||| 1
+! Israel hat die ||| Israel has the ||| 0.0571221 1 ||| ||| 1
+! Israel hat ||| Israel has ||| 0.0571221 1 ||| ||| 1
+! Israel ||| Israel ||| 0.0571221 1 ||| ||| 1
+! Jacques Barrot gehört ja ||| although Mr Barrot belongs ||| 0.0571221 1 ||| ||| 1
+! Jacques Barrot ||| although Mr Barrot ||| 0.0571221 1 ||| ||| 1
+! Joaquim Miranda , vielen Dank ||| , thank you , Mr Miranda , ||| 0.0571221 1 ||| ||| 1
+! Kleinunternehmen gehören zu ||| , small enterprises ||| 0.0571221 1 ||| ||| 1
+! Kleinunternehmen gehören ||| , small enterprises ||| 0.0571221 1 ||| ||| 1
+! Kollege Davies sprach von ||| , Mr Davies has been talking about ||| 0.0571221 1 ||| ||| 1
+! Kollege Davies sprach ||| , Mr Davies has been talking ||| 0.0571221 1 ||| ||| 1
+! Kollege Davies ||| , Mr Davies ||| 0.0571221 1 ||| ||| 1
+! Kollege Sarlis , ||| , Mr Sarlis , ||| 0.0571221 1 ||| ||| 1
+! Kollege Sarlis ||| , Mr Sarlis ||| 0.0571221 1 ||| ||| 1
+! Kollege ||| , Mr ||| 0.38535 1 ||| ||| 2
+! Kommissar Barroso befand sich kürzlich zu ||| , Commissioner Barroso was on a ||| 0.0571221 1 ||| ||| 1
+! Kommissar Barroso befand sich ||| , Commissioner Barroso was ||| 0.0571221 1 ||| ||| 1
+! Kommissar Barroso befand ||| , Commissioner Barroso was ||| 0.0571221 1 ||| ||| 1
+! Kommissar Barroso ||| , Commissioner Barroso ||| 0.0571221 1 ||| ||| 1
+! Kommissar Mandelson ||| , Commissioner Mandelson ||| 0.0571221 1 ||| ||| 1
+! Kommissar Patten hat ||| , Commissioner Patten has ||| 0.0571221 1 ||| ||| 1
+! Kommissar Patten meinte , wir sollten ||| , Commissioner Patten said that we should ||| 0.0571221 1 ||| ||| 1
+! Kommissar Patten meinte , wir ||| , Commissioner Patten said that we ||| 0.0571221 1 ||| ||| 1
+! Kommissar Patten meinte , ||| , Commissioner Patten said that ||| 0.0571221 1 ||| ||| 1
+! Kommissar Patten meinte ||| , Commissioner Patten said ||| 0.0571221 1 ||| ||| 1
+! Kommissar Patten ||| , Commissioner Patten ||| 0.38535 1 ||| ||| 2
+! Kommissar Verheugen hat soeben ||| , Commissioner Verheugen has just ||| 0.0571221 1 ||| ||| 1
+! Kommissar Verheugen hat ||| , Commissioner Verheugen has ||| 0.0571221 1 ||| ||| 1
+! Kommissar Verheugen ||| , Commissioner Verheugen ||| 0.0571221 1 ||| ||| 1
+! Kommissar ||| , Commissioner ||| 1 1 ||| ||| 5
+! Kommissarin Ferrero-Waldner hatte Recht , als ||| , Commissioner Ferrero-Waldner was right at the ||| 0.0571221 1 ||| ||| 1
+! Kommissarin Ferrero-Waldner hatte Recht , ||| , Commissioner Ferrero-Waldner was right at ||| 0.028561 1 ||| ||| 2
+! Kommissarin Ferrero-Waldner hatte Recht , ||| , Commissioner Ferrero-Waldner was right ||| 0.028561 1 ||| ||| 2
+! Kommissarin Ferrero-Waldner hatte Recht ||| , Commissioner Ferrero-Waldner was right at ||| 0.028561 1 ||| ||| 2
+! Kommissarin Ferrero-Waldner hatte Recht ||| , Commissioner Ferrero-Waldner was right ||| 0.028561 1 ||| ||| 2
+! Kommissarin Ferrero-Waldner hatte ||| , Commissioner Ferrero-Waldner was ||| 0.0571221 1 ||| ||| 1
+! Kommissarin Ferrero-Waldner ||| , Commissioner Ferrero-Waldner ||| 0.0571221 1 ||| ||| 1
+! Kommissarin ||| , Commissioner ||| 0.0571221 1 ||| ||| 1
+! Kommissionspräsident Prodi hat heute vormittag unter ||| , this morning President Prodi , among ||| 0.0571221 1 ||| ||| 1
+! Kommissionspräsident Prodi hat heute vormittag ||| , this morning President Prodi , ||| 0.0571221 1 ||| ||| 1
+! Kommissionspräsident Prodi hatte ||| , President of the Commission Prodi was ||| 0.0571221 1 ||| ||| 1
+! Kommissionspräsident Prodi ||| , President of the Commission Prodi ||| 0.0571221 1 ||| ||| 1
+! Kommissionspräsident ||| , President of the Commission ||| 0.0571221 1 ||| ||| 1
+! Kyoto ist nicht mehr ||| , this is no longer ||| 0.0571221 1 ||| ||| 1
+! Kyoto ist nicht ||| , this is no ||| 0.0571221 1 ||| ||| 1
+! Kyoto ist ||| , this is ||| 0.0571221 1 ||| ||| 1
+! Kyoto ||| , this ||| 0.0571221 1 ||| ||| 1
+! LIFE + ||| , the intention is that LIFE + ||| 0.0571221 1 ||| ||| 1
+! LIFE ||| , the intention is that LIFE ||| 0.0571221 1 ||| ||| 1
+! Leidenschaft und ||| ' passion and ||| 0.0571221 0.000288 ||| ||| 1
+! Leidenschaft und Ãœberzeugung haben unseren ||| ' passion and conviction have ||| 0.0571221 0.000288 ||| ||| 1
+! Leidenschaft und Ãœberzeugung haben ||| ' passion and conviction have ||| 0.0571221 0.000288 ||| ||| 1
+! Leidenschaft und Ãœberzeugung ||| ' passion and conviction ||| 0.0571221 0.000288 ||| ||| 1
+! Leidenschaft ||| ' passion ||| 0.0571221 0.000288 ||| ||| 1
+! Mahmoud ||| , so far President Mahmoud ||| 0.0571221 1 ||| ||| 1
+! Mal sehen , was Sie ||| , let us see what you ||| 0.0571221 1 ||| ||| 1
+! Mal sehen , was ||| , let us see what ||| 0.0571221 1 ||| ||| 1
+! Mal sehen , ||| , let us see ||| 0.0571221 1 ||| ||| 1
+! Malaria und Tuberkulose sind heilbar ||| ! malaria and tuberculosis can be cured ||| 0.0571221 0.0775352 ||| ||| 1
+! Malaria und Tuberkulose sind ||| ! malaria and tuberculosis can ||| 0.0571221 0.0775352 ||| ||| 1
+! Malaria und Tuberkulose ||| ! malaria and tuberculosis ||| 0.0571221 0.0775352 ||| ||| 1
+! Malaria und ||| ! malaria and ||| 0.0571221 0.0775352 ||| ||| 1
+! Malaria ||| ! malaria ||| 0.0571221 0.0775352 ||| ||| 1
+! Menschenhandel , wie wir ||| , human trafficking , as we ||| 0.0571221 1 ||| ||| 1
+! Menschenhandel , wie ||| , human trafficking , as ||| 0.0571221 1 ||| ||| 1
+! Menschenhandel , ||| , human trafficking , ||| 0.0571221 1 ||| ||| 1
+! Menschenhandel ist ||| , trafficking in human beings is ||| 0.0571221 1 ||| ||| 1
+! Menschenhandel ||| , human trafficking ||| 0.028561 1 ||| ||| 2
+! Menschenhandel ||| , trafficking in human beings ||| 0.028561 1 ||| ||| 2
+! Minister Sasi hat soeben ||| , Mr Sasi has just ||| 0.0571221 1 ||| ||| 1
+! Minister Sasi hat ||| , Mr Sasi has ||| 0.0571221 1 ||| ||| 1
+! Minister Sasi ||| , Mr Sasi ||| 0.0571221 1 ||| ||| 1
+! Minister ||| , Mr ||| 0.0571221 1 ||| ||| 1
+! Ministerpräsident Meciar spielt mit dem Feuer ||| , President Meciar is playing with fire ||| 0.0571221 1 ||| ||| 1
+! Ministerpräsident Meciar spielt mit ||| , President Meciar is playing with ||| 0.0571221 1 ||| ||| 1
+! Ministerpräsident Meciar spielt ||| , President Meciar is playing ||| 0.0571221 1 ||| ||| 1
+! Ministerpräsident Meciar ||| , President Meciar ||| 0.0571221 1 ||| ||| 1
+! Ministerpräsident ||| , President ||| 0.0571221 1 ||| ||| 1
+! Mobiltelefon und Internet ||| , the mobile telephone and the Internet ||| 0.0571221 1 ||| ||| 1
+! Mobiltelefon und ||| , the mobile telephone and the ||| 0.028561 1 ||| ||| 2
+! Mobiltelefon und ||| , the mobile telephone and ||| 0.028561 1 ||| ||| 2
+! Mobiltelefon ||| , the mobile telephone ||| 0.0571221 1 ||| ||| 1
+! Mosambik ist ein junger afrikanischer Staat ||| , Mozambique is a young African country ||| 0.0571221 1 ||| ||| 1
+! Mosambik ist ein junger afrikanischer ||| , Mozambique is a young African ||| 0.0571221 1 ||| ||| 1
+! Mosambik ist ein junger ||| , Mozambique is a young ||| 0.0571221 1 ||| ||| 1
+! Mosambik ist ein ||| , Mozambique is a ||| 0.0571221 1 ||| ||| 1
+! Mosambik ist ||| , Mozambique is ||| 0.0571221 1 ||| ||| 1
+! Mosambik ||| , Mozambique ||| 0.0571221 1 ||| ||| 1
+! Multiple Sklerose sollte - und muss ||| , multiple sclerosis should - and must ||| 0.0571221 1 ||| ||| 1
+! Multiple Sklerose sollte - und ||| , multiple sclerosis should - and ||| 0.0571221 1 ||| ||| 1
+! Multiple Sklerose sollte - ||| , multiple sclerosis should - ||| 0.0571221 1 ||| ||| 1
+! Multiple Sklerose sollte ||| , multiple sclerosis should ||| 0.0571221 1 ||| ||| 1
+! Multiple Sklerose ||| , multiple sclerosis ||| 0.0571221 1 ||| ||| 1
+! Multiple ||| , multiple ||| 0.0571221 1 ||| ||| 1
+! Nachahmungen und Produktpiraterie sind eben gerade ||| : counterfeiting and product piracy certainly are ||| 0.0571221 1 ||| ||| 1
+! Nachahmungen und ||| : counterfeiting and ||| 0.0571221 1 ||| ||| 1
+! Nachahmungen ||| : counterfeiting ||| 0.0571221 1 ||| ||| 1
+! Natura 2000 ist eine der ||| , Natura 2000 is one of the ||| 0.0571221 1 ||| ||| 1
+! Natura 2000 ist eine ||| , Natura 2000 is one ||| 0.0571221 1 ||| ||| 1
+! Natura 2000 ist ||| , Natura 2000 is ||| 0.0571221 1 ||| ||| 1
+! Natura 2000 ||| , Natura 2000 ||| 0.0571221 1 ||| ||| 1
+! Natura ||| , Natura ||| 0.0571221 1 ||| ||| 1
+! Nein , das ||| but no , it is ||| 0.028561 1 ||| ||| 2
+! Nein , das ||| but no , it ||| 0.028561 1 ||| ||| 2
+! Nein , wir wollen keine ||| ; no , we do not want ||| 0.0571221 1 ||| ||| 1
+! Nein , wir ||| ; no , we ||| 0.0571221 1 ||| ||| 1
+! Nein , ||| ; no , ||| 0.028561 1 ||| ||| 2
+! Nein , ||| but no , ||| 0.028561 1 ||| ||| 2
+! Nein ||| ; no ||| 0.028561 1 ||| ||| 2
+! Nein ||| but no ||| 0.028561 1 ||| ||| 2
+! Nepal verdient mehr als eine ||| , Nepal deserves more than ||| 0.0571221 1 ||| ||| 1
+! Nepal verdient mehr als ||| , Nepal deserves more than ||| 0.0571221 1 ||| ||| 1
+! Nepal verdient mehr ||| , Nepal deserves more ||| 0.0571221 1 ||| ||| 1
+! Nepal verdient ||| , Nepal deserves ||| 0.0571221 1 ||| ||| 1
+! Nepal ||| , Nepal ||| 0.0571221 1 ||| ||| 1
+! Olivenöl ist eines der ||| , olive oil is one of the ||| 0.0571221 1 ||| ||| 1
+! Olivenöl ist eines ||| , olive oil is one of ||| 0.0571221 1 ||| ||| 1
+! Olivenöl ist ||| , olive oil is ||| 0.0571221 1 ||| ||| 1
+! Olivenöl ||| , olive oil ||| 0.0571221 1 ||| ||| 1
+! Organtransplantationen retten tatsächlich ||| , organ transplants do indeed save ||| 0.0571221 1 ||| ||| 1
+! Organtransplantationen ||| , organ transplants ||| 0.0571221 1 ||| ||| 1
+! Ortega y Gasset sagte , daß ||| Ortega y Gasset said that ||| 0.0571221 1 ||| ||| 1
+! Ortega y Gasset sagte ||| Ortega y Gasset said ||| 0.0571221 1 ||| ||| 1
+! Ortega y Gasset ||| Ortega y Gasset ||| 0.0571221 1 ||| ||| 1
+! Ortega y ||| Ortega y ||| 0.0571221 1 ||| ||| 1
+! Ortega ||| Ortega ||| 0.0571221 1 ||| ||| 1
+! Parlament , Rat und ||| , Parliament , the Council and ||| 0.0571221 1 ||| ||| 1
+! Parlament , Rat ||| , Parliament , the Council ||| 0.0571221 1 ||| ||| 1
+! Parlament , ||| , Parliament , the ||| 0.0190407 1 ||| ||| 3
+! Parlament , ||| , Parliament , ||| 0.0190407 1 ||| ||| 3
+! Parlament , ||| , this House , ||| 0.0190407 1 ||| ||| 3
+! Parlament ||| , Parliament ||| 0.028561 1 ||| ||| 2
+! Parlament ||| , this House ||| 0.028561 1 ||| ||| 2
+! Pascal Lamy und ich ||| , Mr Lamy and I ||| 0.0571221 1 ||| ||| 1
+! Pascal Lamy und ||| , Mr Lamy and ||| 0.0571221 1 ||| ||| 1
+! Pascal Lamy ||| , Mr Lamy ||| 0.0571221 1 ||| ||| 1
+! Patente ||| , ||| 0.0571221 1 ||| ||| 1
+! Paul Rübig hat gesagt , ||| , as Mr Rübig said , ||| 0.0571221 1 ||| ||| 1
+! Paul Rübig hat gesagt ||| , as Mr Rübig said ||| 0.0571221 1 ||| ||| 1
+! Paul Rübig ||| , as Mr Rübig ||| 0.0571221 1 ||| ||| 1
+! Paul ||| , as Mr ||| 0.0571221 1 ||| ||| 1
+! Postdienste sind ||| , postal services are ||| 0.0571221 1 ||| ||| 1
+! Postdienste ||| , postal services ||| 0.0571221 1 ||| ||| 1
+! Professor Ukshin Hoti ist eine von ||| , Professor Ukshin Hoti is one of ||| 0.0571221 1 ||| ||| 1
+! Professor Ukshin Hoti ist eine ||| , Professor Ukshin Hoti is one ||| 0.0571221 1 ||| ||| 1
+! Professor Ukshin Hoti ist ||| , Professor Ukshin Hoti is ||| 0.0571221 1 ||| ||| 1
+! Professor Ukshin Hoti ||| , Professor Ukshin Hoti ||| 0.0571221 1 ||| ||| 1
+! Professor Ukshin ||| , Professor Ukshin ||| 0.0571221 1 ||| ||| 1
+! Professor ||| , Professor ||| 0.0571221 1 ||| ||| 1
+! Präsident Barroso spricht immer von einem ||| , President Barroso always speaks of a ||| 0.0571221 1 ||| ||| 1
+! Präsident Barroso spricht immer von ||| , President Barroso always speaks of ||| 0.0571221 1 ||| ||| 1
+! Präsident Barroso spricht immer ||| , President Barroso always speaks ||| 0.0571221 1 ||| ||| 1
+! Präsident Barroso ||| , President Barroso ||| 0.0571221 1 ||| ||| 1
+! Präsident Chirac hat sich ||| , President Chirac says he would ||| 0.0571221 1 ||| ||| 1
+! Präsident Chirac hat ||| , President Chirac says he ||| 0.0571221 1 ||| ||| 1
+! Präsident ||| , President ||| 0.38535 1 ||| ||| 2
+! Rassismus und Fremdenfeindlichkeit haben selbst ||| , racism and xenophobia have even ||| 0.0571221 1 ||| ||| 1
+! Rassismus und Fremdenfeindlichkeit haben ||| , racism and xenophobia have ||| 0.0571221 1 ||| ||| 1
+! Rassismus und Fremdenfeindlichkeit ||| , racism and xenophobia ||| 0.0571221 1 ||| ||| 1
+! Rassismus und ||| , racism and ||| 0.0571221 1 ||| ||| 1
+! Rassismus ||| , racism ||| 0.0571221 1 ||| ||| 1
+! Rat und Kommission sollten ||| the Council and the Commission should ||| 0.0571221 1 ||| ||| 1
+! Rat und Kommission ||| the Council and the Commission ||| 0.0571221 1 ||| ||| 1
+! Rat und ||| the Council and the ||| 0.028561 1 ||| ||| 2
+! Rat und ||| the Council and ||| 0.028561 1 ||| ||| 2
+! Rat ||| the Council ||| 0.0571221 1 ||| ||| 1
+! Rauchen ist schädlich - sowohl für ||| , smoking is dangerous both for ||| 0.0571221 1 ||| ||| 1
+! Rauchen ist schädlich - sowohl ||| , smoking is dangerous both ||| 0.0571221 1 ||| ||| 1
+! Rauchen ist schädlich - ||| , smoking is dangerous ||| 0.0571221 1 ||| ||| 1
+! Rauchen ist schädlich ||| , smoking is dangerous ||| 0.0571221 1 ||| ||| 1
+! Rauchen ist ||| , smoking is ||| 0.0571221 1 ||| ||| 1
+! Rauchen ||| , smoking ||| 0.0571221 1 ||| ||| 1
+! Rentenpolitik , Armutsbekämpfung ||| , pension policy , poverty reduction ||| 0.0571221 1 ||| ||| 1
+! Rentenpolitik , ||| , pension policy , ||| 0.0571221 1 ||| ||| 1
+! Rentenpolitik ||| , pension policy ||| 0.0571221 1 ||| ||| 1
+! Rohöl ist teurer als ||| , crude oil is more expensive than ||| 0.0571221 1 ||| ||| 1
+! Rohöl ist teurer ||| , crude oil is more expensive ||| 0.0571221 1 ||| ||| 1
+! Rohöl ist ||| , crude oil is ||| 0.0571221 1 ||| ||| 1
+! Rohöl ||| , crude oil ||| 0.0571221 1 ||| ||| 1
+! Russland verweigert die Unterzeichnung ||| , Russia is refusing to sign up ||| 0.0571221 1 ||| ||| 1
+! Russland verweigert die ||| , Russia is refusing to ||| 0.0571221 1 ||| ||| 1
+! Russland ||| , Russia is ||| 0.0190407 1 ||| ||| 3
+! Russland ||| , Russia ||| 0.2569 1 ||| ||| 3
+! Schlepperkriminalität und Menschenhandel ||| , organising illegal immigration and people trafficking ||| 0.0571221 1 ||| ||| 1
+! Schlepperkriminalität und ||| , organising illegal immigration and ||| 0.0571221 1 ||| ||| 1
+! Schlepperkriminalität ||| , organising illegal immigration ||| 0.0571221 1 ||| ||| 1
+! Schreiben Sie Ihren Blauen Brief , ||| and write your warning letter , ||| 0.0571221 1 ||| ||| 1
+! Schreiben Sie Ihren Blauen Brief ||| and write your warning letter ||| 0.0571221 1 ||| ||| 1
+! Schreiben Sie Ihren Blauen ||| and write your warning ||| 0.0571221 1 ||| ||| 1
+! Schreiben Sie Ihren ||| and write your ||| 0.0571221 1 ||| ||| 1
+! Schreiben ||| and write ||| 0.0571221 1 ||| ||| 1
+! Schule , Gesundheit , Postdienste ||| , education , health , postal services ||| 0.0571221 1 ||| ||| 1
+! Schule , Gesundheit , ||| , education , health , ||| 0.0571221 1 ||| ||| 1
+! Schule , Gesundheit ||| , education , health ||| 0.0571221 1 ||| ||| 1
+! Schule , ||| , education , ||| 0.0571221 1 ||| ||| 1
+! Schule ||| , education ||| 0.0571221 1 ||| ||| 1
+! Schweden hat ||| , Sweden has ||| 0.0571221 1 ||| ||| 1
+! Schweden ||| , Sweden ||| 0.0571221 1 ||| ||| 1
+! Schwindel , Schwund und Betrügereien und ||| ; fraud , wastage and ||| 0.0571221 1 ||| ||| 1
+! Schwindel , Schwund und Betrügereien ||| ; fraud , wastage ||| 0.0571221 1 ||| ||| 1
+! Sicherheit ist nach wie vor ein ||| , safety remains an ||| 0.0571221 1 ||| ||| 1
+! Sicherheit ist nach wie vor ||| , safety remains ||| 0.0571221 1 ||| ||| 1
+! Sicherheit ||| , safety ||| 0.0571221 1 ||| ||| 1
+! Sinn und Zweck der ||| , the purpose of the ||| 0.0571221 1 ||| ||| 1
+! Sinn und Zweck der Ãœberarbeitung ||| , the purpose of the revision ||| 0.0571221 1 ||| ||| 1
+! Sinn und Zweck ||| , the purpose ||| 0.0571221 1 ||| ||| 1
+! Sinn und ||| , the ||| 0.0571221 1 ||| ||| 1
+! Sinn ||| , the ||| 0.0571221 1 ||| ||| 1
+! Small is beautiful , vor allem ||| , small is beautiful , especially ||| 0.0571221 1 ||| ||| 1
+! Small is beautiful , ||| , small is beautiful , ||| 0.0571221 1 ||| ||| 1
+! Small is beautiful ||| , small is beautiful ||| 0.0571221 1 ||| ||| 1
+! Small is ||| , small is ||| 0.0571221 1 ||| ||| 1
+! Small ||| , small ||| 0.0571221 1 ||| ||| 1
+! Solidarität mit den Opfern der ||| , solidarity with the victims of the ||| 0.0571221 1 ||| ||| 1
+! Solidarität mit den Opfern ||| , solidarity with the victims ||| 0.0571221 1 ||| ||| 1
+! Solidarität mit den ||| , solidarity with the ||| 0.0571221 1 ||| ||| 1
+! Solidarität mit ||| , solidarity with ||| 0.0571221 1 ||| ||| 1
+! Solidarität ||| , solidarity ||| 0.0571221 1 ||| ||| 1
+! Spanien ||| , Spain ||| 0.0571221 1 ||| ||| 1
+! Spanien übernimmt ||| , Spain will ||| 0.0571221 1 ||| ||| 1
+! Stichwort : Verbraucherkreditrichtlinie ; ||| the Consumer Credit Directive ; ||| 0.028561 1 ||| ||| 2
+! Stichwort : Verbraucherkreditrichtlinie ; ||| with the Consumer Credit Directive ; ||| 0.028561 1 ||| ||| 2
+! Stichwort : Verbraucherkreditrichtlinie ||| the Consumer Credit Directive ||| 0.028561 1 ||| ||| 2
+! Stichwort : Verbraucherkreditrichtlinie ||| with the Consumer Credit Directive ||| 0.028561 1 ||| ||| 2
+! Stichwort : ||| the ||| 0.028561 1 ||| ||| 2
+! Stichwort : ||| with the ||| 0.028561 1 ||| ||| 2
+! Stichwort ||| the ||| 0.028561 1 ||| ||| 2
+! Stichwort ||| with the ||| 0.028561 1 ||| ||| 2
+! Stringenz ist eine Sache , aber ||| , stringency is one thing , but ||| 0.0571221 1 ||| ||| 1
+! Stringenz ist eine Sache , ||| , stringency is one thing , ||| 0.0571221 1 ||| ||| 1
+! Stringenz ist eine Sache ||| , stringency is one thing ||| 0.0571221 1 ||| ||| 1
+! Stringenz ist eine ||| , stringency is one ||| 0.0571221 1 ||| ||| 1
+! Stringenz ist ||| , stringency is ||| 0.0571221 1 ||| ||| 1
+! Stringenz ||| , stringency ||| 0.0571221 1 ||| ||| 1
+! Tampere ist ||| , Tampere has ||| 0.0571221 1 ||| ||| 1
+! Tampere ||| , Tampere ||| 0.0571221 1 ||| ||| 1
+! Tatsache ist , dass ||| it is true that , ||| 0.0571221 1 ||| ||| 1
+! Tatsache ist ||| it is true ||| 0.0571221 1 ||| ||| 1
+! Tausende Zivilpersonen sind ||| , thousands of civilians have ||| 0.0571221 1 ||| ||| 1
+! Tausende Zivilpersonen ||| , thousands of civilians ||| 0.0571221 1 ||| ||| 1
+! Tausende ||| , thousands of ||| 0.028561 1 ||| ||| 2
+! Tausende ||| , thousands ||| 0.028561 1 ||| ||| 2
+! Terrorismus ist ein Verbrechen gegen ||| , terrorism is a crime against ||| 0.0571221 1 ||| ||| 1
+! Terrorismus ist ein Verbrechen ||| , terrorism is a crime ||| 0.0571221 1 ||| ||| 1
+! Terrorismus ist ein ||| , terrorism is a ||| 0.0571221 1 ||| ||| 1
+! Terrorismus ist ||| , terrorism is ||| 0.0571221 1 ||| ||| 1
+! Terrorismus ||| , terrorism ||| 0.0571221 1 ||| ||| 1
+! Tierversuche gehören bei ||| , animal experiments in the field of ||| 0.0142805 1 ||| ||| 4
+! Tierversuche gehören bei ||| , animal experiments in the field ||| 0.0142805 1 ||| ||| 4
+! Tierversuche gehören bei ||| , animal experiments in the ||| 0.0142805 1 ||| ||| 4
+! Tierversuche gehören bei ||| , animal experiments in ||| 0.0142805 1 ||| ||| 4
+! Tierversuche gehören ||| , animal experiments ||| 0.0571221 1 ||| ||| 1
+! Tierversuche ||| , animal experiments ||| 0.0571221 1 ||| ||| 1
+! Tunesien ist ein Land , in ||| , Tunisia is a country in ||| 0.0571221 1 ||| ||| 1
+! Tunesien ist ein Land , ||| , Tunisia is a country ||| 0.0571221 1 ||| ||| 1
+! Tunesien ist ein Land ||| , Tunisia is a country ||| 0.0571221 1 ||| ||| 1
+! Tunesien ist ein ||| , Tunisia is a ||| 0.0571221 1 ||| ||| 1
+! Tunesien ist ||| , Tunisia is ||| 0.0571221 1 ||| ||| 1
+! Tunesien ||| , Tunisia ||| 0.0571221 1 ||| ||| 1
+! Umwelt- , Sozial- und Steuerrecht ||| , environmental , social and tax legislation ||| 0.0571221 1 ||| ||| 1
+! Umwelt- , Sozial- und ||| , environmental , social and ||| 0.0571221 1 ||| ||| 1
+! Umwelt- , Sozial- ||| , environmental , social ||| 0.0571221 1 ||| ||| 1
+! Umwelt- , ||| , environmental , ||| 0.0571221 1 ||| ||| 1
+! Umwelt- ||| , environmental ||| 0.0571221 1 ||| ||| 1
+! Umweltfragen werden am besten gelöst , ||| , environmental issues are handled best ||| 0.0571221 1 ||| ||| 1
+! Umweltfragen werden am besten gelöst ||| , environmental issues are handled best ||| 0.0571221 1 ||| ||| 1
+! Umweltfragen werden ||| , environmental issues are ||| 0.0571221 1 ||| ||| 1
+! Umweltfragen ||| , environmental issues ||| 0.0571221 1 ||| ||| 1
+! Umweltvereinbarungen in der Europäischen Gemeinschaft ||| , environmental agreements in the European Community ||| 0.0571221 1 ||| ||| 1
+! Umweltvereinbarungen in der Europäischen ||| , environmental agreements in the European ||| 0.0571221 1 ||| ||| 1
+! Umweltvereinbarungen in der ||| , environmental agreements in the ||| 0.0571221 1 ||| ||| 1
+! Umweltvereinbarungen in ||| , environmental agreements in ||| 0.0571221 1 ||| ||| 1
+! Umweltvereinbarungen ||| , environmental agreements ||| 0.0571221 1 ||| ||| 1
+! Usted no es una persona loca ||| , usted no es una persona loca ||| 0.0571221 1 ||| ||| 1
+! Usted no es una persona ||| , usted no es una persona ||| 0.0571221 1 ||| ||| 1
+! Usted no es una ||| , usted no es una ||| 0.0571221 1 ||| ||| 1
+! Usted no es ||| , usted no es ||| 0.0571221 1 ||| ||| 1
+! Verletzungen des Rechts auf geistiges Eigentum ||| , infringements of intellectual property rights ||| 0.0571221 1 ||| ||| 1
+! Verletzungen des Rechts auf geistiges ||| , infringements of intellectual ||| 0.0571221 1 ||| ||| 1
+! Verletzungen des Rechts auf ||| , infringements of ||| 0.0571221 1 ||| ||| 1
+! Verletzungen des Rechts ||| , infringements of ||| 0.0571221 1 ||| ||| 1
+! Verletzungen des ||| , infringements of ||| 0.0571221 1 ||| ||| 1
+! Verletzungen ||| , infringements ||| 0.0571221 1 ||| ||| 1
+! Vertrauen ist gut , Kontrolle ist ||| , trust is good , control is ||| 0.0571221 1 ||| ||| 1
+! Vertrauen ist gut , Kontrolle ||| , trust is good , control ||| 0.0571221 1 ||| ||| 1
+! Vertrauen ist gut , ||| , trust is good , ||| 0.0571221 1 ||| ||| 1
+! Vertrauen ist gut ||| , trust is good ||| 0.0571221 1 ||| ||| 1
+! Vertrauen ist ||| , trust is ||| 0.0571221 1 ||| ||| 1
+! Vertrauen ||| , trust ||| 0.0571221 1 ||| ||| 1
+! Vietnam ist ||| , both in ||| 0.028561 1 ||| ||| 2
+! Vietnam ist ||| , both ||| 0.028561 1 ||| ||| 2
+! Vietnam ||| , both in ||| 0.028561 1 ||| ||| 2
+! Vietnam ||| , both ||| 0.028561 1 ||| ||| 2
+! Walter ||| , Mr Walter 's ||| 0.0571221 1 ||| ||| 1
+! Wechsel ist ||| you are right in ||| 0.0190407 1 ||| ||| 3
+! Wechsel ist ||| you are right ||| 0.0190407 1 ||| ||| 3
+! Wechsel ist ||| you are ||| 0.0190407 1 ||| ||| 3
+! Wechsel ||| you ||| 0.0571221 1 ||| ||| 1
+! Wettbewerb ist gut , wenn ||| , competition is a good thing when ||| 0.0571221 1 ||| ||| 1
+! Wettbewerb ist gut , ||| , competition is a good thing ||| 0.0571221 1 ||| ||| 1
+! Wettbewerb ist gut ||| , competition is a good thing ||| 0.0571221 1 ||| ||| 1
+! Wettbewerb ist ||| , competition is ||| 0.0571221 1 ||| ||| 1
+! Wettbewerb ||| , competition ||| 0.0571221 1 ||| ||| 1
+! Wwir beraten heute ||| , this morning we are ||| 0.0571221 1 ||| ||| 1
+! Wwir beraten heute über die ||| , this morning we are examining the ||| 0.0571221 1 ||| ||| 1
+! Wwir beraten heute über ||| , this morning we are examining ||| 0.0571221 1 ||| ||| 1
+! Wwir beraten ||| , this morning we ||| 0.0571221 1 ||| ||| 1
+! Wwir ||| , this morning we ||| 0.0571221 1 ||| ||| 1
+! Ziel des ||| , the objective of the ||| 0.0571221 1 ||| ||| 1
+! Ziel ||| , the objective ||| 0.028561 1 ||| ||| 2
+! Ziel ||| aiming ||| 0.028561 1 ||| ||| 2
+! Zypern ist vergangene Woche ||| , last week Cyprus was ||| 0.0571221 1 ||| ||| 1
+! aber - ich bin Ihnen ||| , and I am much ||| 0.0571221 1 ||| ||| 1
+! aber - ich bin ||| , and I am ||| 0.0571221 1 ||| ||| 1
+! aber - ich ||| , and I ||| 0.0571221 1 ||| ||| 1
+! aber - wie ein Humorist sagte ||| , but as the joke goes ||| 0.0571221 1 ||| ||| 1
+! aber - wie ein ||| , but as the ||| 0.0571221 1 ||| ||| 1
+! aber - wie ||| , but as ||| 0.0571221 1 ||| ||| 1
+! aber Herr ||| , but I ask you , ||| 0.0142805 1 ||| ||| 4
+! aber Herr ||| , but I ask you ||| 0.0142805 1 ||| ||| 4
+! aber Herr ||| , but I ask ||| 0.0142805 1 ||| ||| 4
+! aber Herr ||| , but I ||| 0.0142805 1 ||| ||| 4
+! aber Sie werden ||| , but you will ||| 0.0571221 1 ||| ||| 1
+! aber Sie ||| , but you ||| 0.0571221 1 ||| ||| 1
+! aber da liegt ein Missverständnis vor ||| , but there is a misunderstanding here ||| 0.0571221 1 ||| ||| 1
+! aber da liegt ein ||| , but there is a ||| 0.0571221 1 ||| ||| 1
+! aber da liegt ||| , but there is ||| 0.0571221 1 ||| ||| 1
+! aber da ||| , but there ||| 0.0571221 1 ||| ||| 1
+! aber dann ||| , but then ||| 0.0571221 1 ||| ||| 1
+! aber darum geht es eigentlich nicht ||| , but that is not my point ||| 0.0190407 1 ||| ||| 3
+! aber darum geht es eigentlich nicht ||| , but that is not my ||| 0.0190407 1 ||| ||| 3
+! aber darum geht es eigentlich nicht ||| , but that is not ||| 0.0190407 1 ||| ||| 3
+! aber darum geht es eigentlich ||| , but that is ||| 0.0571221 1 ||| ||| 1
+! aber darum geht es ||| , but that is ||| 0.0571221 1 ||| ||| 1
+! aber darum geht ||| , but that is ||| 0.0571221 1 ||| ||| 1
+! aber darum ||| , but that ||| 0.0571221 1 ||| ||| 1
+! aber das kann man ja schon ||| , but one can ||| 0.0190407 1 ||| ||| 3
+! aber das kann man ja schon ||| control , but one can ||| 0.0190407 1 ||| ||| 3
+! aber das kann man ja schon ||| supervisory control , but one can ||| 0.0190407 1 ||| ||| 3
+! aber das kann man ja ||| , but one can ||| 0.0190407 1 ||| ||| 3
+! aber das kann man ja ||| control , but one can ||| 0.0190407 1 ||| ||| 3
+! aber das kann man ja ||| supervisory control , but one can ||| 0.0190407 1 ||| ||| 3
+! aber das kann man ||| , but one can ||| 0.0190407 1 ||| ||| 3
+! aber das kann man ||| control , but one can ||| 0.0190407 1 ||| ||| 3
+! aber das kann man ||| supervisory control , but one can ||| 0.0190407 1 ||| ||| 3
+! aber die ||| , but the ||| 0.0571221 1 ||| ||| 1
+! aber diese Freundschaft soll ||| , but this friendship should bear fruit ||| 0.0190407 1 ||| ||| 3
+! aber diese Freundschaft soll ||| , but this friendship should bear ||| 0.0190407 1 ||| ||| 3
+! aber diese Freundschaft soll ||| , but this friendship should ||| 0.0190407 1 ||| ||| 3
+! aber diese Freundschaft ||| , but this friendship ||| 0.0571221 1 ||| ||| 1
+! aber diese ||| , but this ||| 0.0571221 1 ||| ||| 1
+! aber dieses Fenster der Gelegenheit ||| , but this window of opportunity ||| 0.0571221 1 ||| ||| 1
+! aber dieses Fenster der ||| , but this window of ||| 0.0571221 1 ||| ||| 1
+! aber dieses Fenster ||| , but this window ||| 0.0571221 1 ||| ||| 1
+! aber dieses ||| , but this ||| 0.0571221 1 ||| ||| 1
+! aber eine ||| , but there ||| 0.028561 1 ||| ||| 2
+! aber eine ||| from , but there ||| 0.028561 1 ||| ||| 2
+! aber es gilt ||| , but ||| 0.0571221 1 ||| ||| 1
+! aber es muss ||| , but there need to ||| 0.0571221 1 ||| ||| 1
+! aber es ||| , but there ||| 0.028561 1 ||| ||| 2
+! aber es ||| , but ||| 0.028561 1 ||| ||| 2
+! aber ich glaube , die Bürger ||| , but I think our citizens ||| 0.0571221 1 ||| ||| 1
+! aber ich glaube , die ||| , but I think our ||| 0.0571221 1 ||| ||| 1
+! aber ich glaube , ||| , but I think ||| 0.0571221 1 ||| ||| 1
+! aber ich glaube ||| , but I think ||| 0.0571221 1 ||| ||| 1
+! aber ich ||| , but I ||| 0.0571221 1 ||| ||| 1
+! aber man muss in Betracht ziehen ||| , but we have to consider the ||| 0.0190407 1 ||| ||| 3
+! aber man muss in Betracht ziehen ||| , but we have to consider ||| 0.0190407 1 ||| ||| 3
+! aber man muss in Betracht ziehen ||| taken , but we have to consider ||| 0.0190407 1 ||| ||| 3
+! aber man muss in ||| , but we have to ||| 0.0190407 1 ||| ||| 3
+! aber man muss in ||| been taken , but we have to ||| 0.0190407 1 ||| ||| 3
+! aber man muss in ||| taken , but we have to ||| 0.0190407 1 ||| ||| 3
+! aber man muss ||| , but we have ||| 0.0142805 1 ||| ||| 4
+! aber man muss ||| been taken , but we have ||| 0.0142805 1 ||| ||| 4
+! aber man muss ||| have been taken , but we have ||| 0.0142805 1 ||| ||| 4
+! aber man muss ||| taken , but we have ||| 0.0142805 1 ||| ||| 4
+! aber man ||| , but we ||| 0.0142805 1 ||| ||| 4
+! aber man ||| been taken , but we ||| 0.0142805 1 ||| ||| 4
+! aber man ||| have been taken , but we ||| 0.0142805 1 ||| ||| 4
+! aber man ||| taken , but we ||| 0.0142805 1 ||| ||| 4
+! aber mein besonderer Dank gilt ||| , but I am particularly obliged , ||| 0.0571221 1 ||| ||| 1
+! aber mein besonderer Dank ||| , but I am particularly obliged ||| 0.0571221 1 ||| ||| 1
+! aber mein besonderer ||| , but I am particularly ||| 0.0571221 1 ||| ||| 1
+! aber mein ||| , but I am ||| 0.0571221 1 ||| ||| 1
+! aber meine Antwort wird leider ||| , but my answer is ||| 0.0571221 1 ||| ||| 1
+! aber meine Antwort wird ||| , but my answer is ||| 0.0571221 1 ||| ||| 1
+! aber meine Antwort ||| , but my answer ||| 0.0571221 1 ||| ||| 1
+! aber meine ||| , but my ||| 0.0571221 1 ||| ||| 1
+! aber wenn Sie ||| , but if you ||| 0.0571221 1 ||| ||| 1
+! aber wenn ||| , but if ||| 0.0571221 1 ||| ||| 1
+! aber wer macht sie ||| , but exactly who is making them ||| 0.0571221 1 ||| ||| 1
+! aber wer macht ||| , but exactly who is making ||| 0.0571221 1 ||| ||| 1
+! aber wer ||| , but exactly who ||| 0.0571221 1 ||| ||| 1
+! aber wir haben gehört ||| , but we have learned ||| 0.0571221 1 ||| ||| 1
+! aber wir hätten ||| , but we would have preferred ||| 0.028561 1 ||| ||| 2
+! aber wir hätten ||| EU , but we would have preferred ||| 0.028561 1 ||| ||| 2
+! aber wir sind ||| , but we have great ||| 0.028561 1 ||| ||| 2
+! aber wir sind ||| , but we have ||| 0.028561 1 ||| ||| 2
+! aber wir sollten nicht anfangen ||| , but we should not start ||| 0.0571221 1 ||| ||| 1
+! aber wir sollten nicht ||| , but we should not ||| 0.0571221 1 ||| ||| 1
+! aber wir sollten ||| , but we should ||| 0.0571221 1 ||| ||| 1
+! aber wir ||| , but we ||| 0.714286 1 ||| ||| 7
+! aber wir ||| EU , but we ||| 0.00816029 1 ||| ||| 7
+! aber wir ||| the EU , but we ||| 0.00816029 1 ||| ||| 7
+! aber ||| ! - but , ||| 0.00129823 0.0775352 ||| ||| 44
+! aber ||| , and ||| 0.00129823 1 ||| ||| 44
+! aber ||| , but exactly ||| 0.00129823 1 ||| ||| 44
+! aber ||| , but its prospects ||| 0.00129823 1 ||| ||| 44
+! aber ||| , but its ||| 0.00129823 1 ||| ||| 44
+! aber ||| , but ||| 0.681818 1 ||| ||| 44
+! aber ||| EU , but ||| 0.00129823 1 ||| ||| 44
+! aber ||| am saying ||| 0.00129823 1 ||| ||| 44
+! aber ||| been taken , but ||| 0.00129823 1 ||| ||| 44
+! aber ||| control , but ||| 0.00129823 1 ||| ||| 44
+! aber ||| from , but ||| 0.00129823 1 ||| ||| 44
+! aber ||| have been taken , but ||| 0.00129823 1 ||| ||| 44
+! aber ||| supervisory control , but ||| 0.00129823 1 ||| ||| 44
+! aber ||| taken , but ||| 0.00129823 1 ||| ||| 44
+! aber ||| the EU , but ||| 0.00129823 1 ||| ||| 44
+! abgesehen von der Technik der Mittelzuweisungen ||| , beyond its technique on envelopes ||| 0.0571221 1 ||| ||| 1
+! abgesehen von der Technik der ||| , beyond its technique on ||| 0.0571221 1 ||| ||| 1
+! abgesehen von der Technik ||| , beyond its technique ||| 0.0571221 1 ||| ||| 1
+! abgesehen von der ||| , beyond its ||| 0.0571221 1 ||| ||| 1
+! abgesehen von ||| , beyond ||| 0.0571221 1 ||| ||| 1
+! abschließend möchte ich noch ||| , I should like to conclude by ||| 0.0571221 1 ||| ||| 1
+! abschließend möchte ich ||| , I should like to conclude by ||| 0.028561 1 ||| ||| 2
+! abschließend möchte ich ||| to conclude , ||| 0.028561 1 ||| ||| 2
+! abschließend ||| , by way of conclusion , ||| 0.028561 1 ||| ||| 2
+! abschließend ||| , by way of conclusion ||| 0.028561 1 ||| ||| 2
+! all dies ist ||| that all these things should ||| 0.0571221 1 ||| ||| 1
+! all dies ||| that all these things ||| 0.0571221 1 ||| ||| 1
+! all ||| that all ||| 0.0571221 1 ||| ||| 1
+! alle , die mich kennen , ||| , those who know me can ||| 0.0571221 1 ||| ||| 1
+! alle Arten landwirtschaftlicher Tätigkeit und ||| , all types of agricultural activity and ||| 0.0571221 1 ||| ||| 1
+! alle Arten landwirtschaftlicher Tätigkeit ||| , all types of agricultural activity ||| 0.0571221 1 ||| ||| 1
+! alle Arten landwirtschaftlicher ||| , all types of agricultural ||| 0.0571221 1 ||| ||| 1
+! alle Arten ||| , all types ||| 0.0571221 1 ||| ||| 1
+! alle Mittel aus dem europäischen Haushalt ||| , all funds from the European Budget ||| 0.0571221 1 ||| ||| 1
+! alle Mittel aus dem europäischen ||| , all funds from the European ||| 0.0571221 1 ||| ||| 1
+! alle Mittel aus dem ||| , all funds from the ||| 0.0571221 1 ||| ||| 1
+! alle Mittel aus ||| , all funds from ||| 0.0571221 1 ||| ||| 1
+! alle Mittel ||| , all funds ||| 0.0571221 1 ||| ||| 1
+! alle singen heute ||| , everyone is proclaiming today ||| 0.0571221 1 ||| ||| 1
+! alle singen ||| , everyone is proclaiming ||| 0.0571221 1 ||| ||| 1
+! alle wissen um die ||| , no one is unaware of the ||| 0.0571221 1 ||| ||| 1
+! alle wissen um ||| , no one is unaware of ||| 0.028561 1 ||| ||| 2
+! alle wissen um ||| , no one is unaware ||| 0.028561 1 ||| ||| 2
+! alle ||| , all ||| 0.1101 1 ||| ||| 7
+! alle ||| , everyone is ||| 0.00816029 1 ||| ||| 7
+! alle ||| , everyone ||| 0.00816029 1 ||| ||| 7
+! alle ||| , no one ||| 0.00816029 1 ||| ||| 7
+! alle ||| , no ||| 0.00816029 1 ||| ||| 7
+! alle ||| , those ||| 0.00816029 1 ||| ||| 7
+! allerdings gehört das ||| , but unfortunately that has ||| 0.0571221 1 ||| ||| 1
+! allerdings muss sie mit ||| , but the opinion must accord with ||| 0.0571221 1 ||| ||| 1
+! allerdings muss sie ||| , but the opinion must accord ||| 0.028561 1 ||| ||| 2
+! allerdings muss sie ||| , but the opinion must ||| 0.028561 1 ||| ||| 2
+! allerdings ||| , but unfortunately ||| 0.028561 1 ||| ||| 2
+! allerdings ||| , but ||| 0.028561 1 ||| ||| 2
+! alles an diesen Informationen ist in ||| , all of this information is ||| 0.0571221 1 ||| ||| 1
+! alles an diesen Informationen ist ||| , all of this information is ||| 0.0571221 1 ||| ||| 1
+! alles an diesen Informationen ||| , all of this information ||| 0.0571221 1 ||| ||| 1
+! alles an diesen ||| , all of this ||| 0.0571221 1 ||| ||| 1
+! alles an ||| , all of ||| 0.0571221 1 ||| ||| 1
+! alles ist bereits gesagt worden . ||| , everything has been said . ||| 0.0571221 1 ||| ||| 1
+! alles ist bereits gesagt worden ||| , everything has been said ||| 0.0571221 1 ||| ||| 1
+! alles ist ||| , everything has ||| 0.0571221 1 ||| ||| 1
+! alles ||| , all ||| 0.028561 1 ||| ||| 2
+! alles ||| , everything ||| 0.028561 1 ||| ||| 2
+! allgemein gesagt , halte ich diese ||| , generally speaking I consider this ||| 0.0571221 1 ||| ||| 1
+! allgemein gesagt , halte ich ||| , generally speaking I consider ||| 0.0571221 1 ||| ||| 1
+! allgemein gesagt , ||| , generally speaking ||| 0.0571221 1 ||| ||| 1
+! allgemein gesagt ||| , generally speaking ||| 0.0571221 1 ||| ||| 1
+! allzu viele ||| , there are too many ||| 0.0571221 1 ||| ||| 1
+! allzu ||| , there are too ||| 0.0571221 1 ||| ||| 1
+! als Abgeordneter aus ||| , as a member of parliament from ||| 0.0571221 1 ||| ||| 1
+! als Abgeordneter des ||| , as a Member for the ||| 0.0571221 1 ||| ||| 1
+! als Abgeordneter von der französischen ||| , as a Member for the French ||| 0.0571221 1 ||| ||| 1
+! als Abgeordneter von der ||| , as a Member for the ||| 0.0571221 1 ||| ||| 1
+! als Abgeordneter von ||| , as a Member for ||| 0.0571221 1 ||| ||| 1
+! als Abgeordneter ||| , as a Member ||| 0.2569 1 ||| ||| 3
+! als Abgeordneter ||| , as a member of parliament ||| 0.0190407 1 ||| ||| 3
+! als Beobachter des Europäischen Parlaments ||| , as European Parliament observers , ||| 0.028561 1 ||| ||| 2
+! als Beobachter des Europäischen Parlaments ||| , as European Parliament observers ||| 0.028561 1 ||| ||| 2
+! als Berichterstatter bedaure ich es eigentlich ||| , as rapporteur I regret the fact ||| 0.0571221 1 ||| ||| 1
+! als Berichterstatter bedaure ich es ||| , as rapporteur I regret the ||| 0.0571221 1 ||| ||| 1
+! als Berichterstatter bedaure ich ||| , as rapporteur I regret ||| 0.0571221 1 ||| ||| 1
+! als Berichterstatter für Estland ||| , as rapporteur for Estonia ||| 0.0571221 1 ||| ||| 1
+! als Berichterstatter für ||| , as rapporteur for ||| 0.0571221 1 ||| ||| 1
+! als Berichterstatter zu ||| , in the capacity of rapporteur for ||| 0.0571221 1 ||| ||| 1
+! als Berichterstatter zum Beitritt ||| , as rapporteur for the accession of ||| 0.028561 1 ||| ||| 2
+! als Berichterstatter zum Beitritt ||| , as rapporteur for the accession ||| 0.028561 1 ||| ||| 2
+! als Berichterstatter zum ||| , as rapporteur for the ||| 0.0571221 1 ||| ||| 1
+! als Berichterstatter ||| , as rapporteur ||| 0.504132 1 ||| ||| 4
+! als Berichterstatter ||| , in the capacity of rapporteur ||| 0.0142805 1 ||| ||| 4
+! als Berichterstatterin meiner Fraktion für ||| , as my group 's rapporteur for ||| 0.0571221 1 ||| ||| 1
+! als Berichterstatterin meiner Fraktion ||| , as my group 's rapporteur ||| 0.0571221 1 ||| ||| 1
+! als Berichterstatterin ||| , as rapporteur ||| 0.0571221 1 ||| ||| 1
+! als Berichterstatterin über die Entlastung betreffend ||| , as rapporteur on the discharge for ||| 0.0571221 1 ||| ||| 1
+! als Berichterstatterin über die Entlastung ||| , as rapporteur on the discharge ||| 0.0571221 1 ||| ||| 1
+! als Berichterstatterin über die ||| , as rapporteur on the ||| 0.0571221 1 ||| ||| 1
+! als Berichterstatterin über ||| , as rapporteur on ||| 0.0571221 1 ||| ||| 1
+! als Beweis dafür , daß dieses ||| , as proof that this ||| 0.0571221 1 ||| ||| 1
+! als Beweis dafür , daß ||| , as proof that ||| 0.0571221 1 ||| ||| 1
+! als Beweis dafür ||| , as proof ||| 0.0571221 1 ||| ||| 1
+! als Bürgerbeauftragter vertreten Sie die 450 ||| , as Ombudsman you represent the 450 ||| 0.0571221 1 ||| ||| 1
+! als Bürgerbeauftragter vertreten Sie die ||| , as Ombudsman you represent the ||| 0.0571221 1 ||| ||| 1
+! als Bürgerbeauftragter vertreten Sie ||| , as Ombudsman you represent ||| 0.0571221 1 ||| ||| 1
+! als Bürgerbeauftragter ||| , as Ombudsman ||| 0.0571221 1 ||| ||| 1
+! als China ||| , when China ||| 0.0571221 1 ||| ||| 1
+! als Christdemokrat und schwedischer ||| , as a Christian Democrat and Swedish ||| 0.0571221 1 ||| ||| 1
+! als Christdemokrat und ||| , as a Christian Democrat and ||| 0.0571221 1 ||| ||| 1
+! als Christdemokrat ||| , as a Christian Democrat ||| 0.0571221 1 ||| ||| 1
+! als Deutscher ist man hier in ||| , any German in this House will ||| 0.0571221 1 ||| ||| 1
+! als Deutscher ||| , any German ||| 0.0571221 1 ||| ||| 1
+! als Einwohner der ||| , as a resident of the ||| 0.0571221 1 ||| ||| 1
+! als Einwohner ||| , as a resident ||| 0.0571221 1 ||| ||| 1
+! als Ergebnis der Beratungen auf ||| , as a result of consultations at ||| 0.0571221 1 ||| ||| 1
+! als Ergebnis der Beratungen ||| , as a result of consultations ||| 0.0571221 1 ||| ||| 1
+! als Ergebnis der ||| , as a result of ||| 0.0571221 1 ||| ||| 1
+! als Ergebnis ||| , as a result ||| 0.0571221 1 ||| ||| 1
+! als Ergänzung zu meiner ||| , further to the question that I ||| 0.0571221 1 ||| ||| 1
+! als Ergänzung zu ||| , further to the question that ||| 0.0190407 1 ||| ||| 3
+! als Ergänzung zu ||| , further to the question ||| 0.0190407 1 ||| ||| 3
+! als Ergänzung zu ||| , further to the ||| 0.0190407 1 ||| ||| 3
+! als Erstes möchte ich ||| , I should like to start by ||| 0.028561 1 ||| ||| 2
+! als Erstes möchte ich ||| , firstly I would like to ||| 0.028561 1 ||| ||| 2
+! als Erstes ||| , first of all , ||| 0.00476017 1 ||| ||| 12
+! als Erstes ||| , first of all ||| 0.168044 1 ||| ||| 12
+! als Erstes ||| , first of ||| 0.168044 1 ||| ||| 12
+! als Erstes ||| , first ||| 0.168044 1 ||| ||| 12
+! als Erstes ||| , firstly ||| 0.00476017 1 ||| ||| 12
+! als Erstes ||| , the first message ||| 0.00476017 1 ||| ||| 12
+! als Föderalisten haben ||| , as a pro-federalist party ||| 0.0571221 1 ||| ||| 1
+! als Grüne bin ich ||| , as a Green I am ||| 0.0571221 1 ||| ||| 1
+! als Grüne ||| , as a Green ||| 0.0571221 1 ||| ||| 1
+! als Leiter der Delegation ||| , as the leader of the delegation ||| 0.0571221 1 ||| ||| 1
+! als Leiter der ||| , as the leader of the ||| 0.0571221 1 ||| ||| 1
+! als Leiter ||| , as the leader ||| 0.0571221 1 ||| ||| 1
+! als Mitberichterstatter dieser ||| , as co-rapporteur for this , ||| 0.028561 1 ||| ||| 2
+! als Mitberichterstatter dieser ||| , as co-rapporteur for this ||| 0.028561 1 ||| ||| 2
+! als Mitberichterstatter ||| , as co-rapporteur for ||| 0.028561 1 ||| ||| 2
+! als Mitberichterstatter ||| , as co-rapporteur ||| 0.028561 1 ||| ||| 2
+! als Mitglied des ||| , as a member of the ||| 0.0571221 1 ||| ||| 1
+! als Mitglied ||| , as a member ||| 0.0571221 1 ||| ||| 1
+! als Präsident der Europäischen Union ||| , as President-in-Office of the European Union ||| 0.0571221 1 ||| ||| 1
+! als Präsident der Europäischen ||| , as President-in-Office of the European ||| 0.0571221 1 ||| ||| 1
+! als Präsident der ||| , as President-in-Office of the ||| 0.0571221 1 ||| ||| 1
+! als Präsident ||| , as President-in-Office ||| 0.0571221 1 ||| ||| 1
+! als Schotte und Ihr Landsmann bin ||| , as a fellow Scot , ||| 0.028561 1 ||| ||| 2
+! als Schotte und Ihr Landsmann bin ||| , as a fellow Scot ||| 0.028561 1 ||| ||| 2
+! als Sie ||| , when ||| 0.0571221 1 ||| ||| 1
+! als Skandinavierin verwende ich ||| , as a Scandinavian , I ||| 0.0571221 1 ||| ||| 1
+! als Skandinavierin verwende ||| , as a Scandinavian , ||| 0.028561 1 ||| ||| 2
+! als Skandinavierin verwende ||| , as a Scandinavian ||| 0.028561 1 ||| ||| 2
+! als Skandinavierin ||| , as a Scandinavian , ||| 0.0571221 1 ||| ||| 1
diff --git a/scripts/Makefile b/scripts/Makefile
index 8a648d6e0..29a3f7265 100644
--- a/scripts/Makefile
+++ b/scripts/Makefile
@@ -8,8 +8,8 @@ DS?=$(shell date '+%Y%m%d')
# Set TARGETDIR to directory where you want the compiled scripts to be copied
# to.
# Set BINDIR to the directory where GIZA++ and other tools are installed.
-TARGETDIR=/mnt/odin3/bhaddow/moses
-BINDIR=/mnt/odin3/bhaddow/moses/bin
+TARGETDIR=/opt/AO/sw/edinburgh-code/
+BINDIR=/opt/AO/sw/edinburgh-code/
MAIN_SCRIPTS_TARGET_DIR=$(TARGETDIR)
# MAIN_SCRIPTS_TARGET_DIR=$(shell echo `pwd`/temp)
@@ -25,9 +25,9 @@ RELEASEDIR=$(TARGETDIR)/scripts-$(TS)
all: compile
SUBDIRS=training/phrase-extract training/symal training/mbr training/lexical-reordering ems/biconcor
-SUBDIRS_CLEAN=$(SUBDIRS) training/memscore
+SUBDIRS_CLEAN=$(SUBDIRS) training/memscore training/eppex
-compile: compile-memscore
+compile: compile-memscore compile-eppex
touch release-exclude # No files excluded by default
pwd=`pwd`; \
for subdir in $(SUBDIRS); do \
@@ -45,6 +45,14 @@ compile-memscore:
|| ( echo "WARNING: Building memscore failed."; \
echo 'training/memscore/memscore' >> ../../release-exclude )
+compile-eppex:
+ # Building eppex may fail e.g. if boost is not available.
+ # We ignore this because traditional extraction will still work and eppex isn't used by default.
+ cd training/eppex ; \
+ ./configure && $(MAKE) \
+ || ( echo "WARNING: Building eppex failed."; \
+ echo 'training/eppex/counter' >> ../../release-exclude; \
+ echo 'training/eppex/eppex' >> ../../release-exclude )
clean:
pwd=`pwd`; \
for subdir in $(SUBDIRS_CLEAN); do \
diff --git a/scripts/analysis/weight-scan-summarize.sh b/scripts/analysis/weight-scan-summarize.sh
new file mode 100755
index 000000000..237182736
--- /dev/null
+++ b/scripts/analysis/weight-scan-summarize.sh
@@ -0,0 +1,75 @@
+#!/bin/bash
+# Hackish summarization of weight-scan.pl results, heavily relies on tools by
+# Ondrej Bojar (bojar@ufal.mff.cuni.cz), some of which need Mercury; beware.
+
+function die() { echo "$@" >&2; exit 1; }
+set -o pipefail # safer pipes
+
+refs="$1"
+dir="$2"
+
+[ -d "$dir" ] && [ -e "$refs" ] \
+ || die "usage: $0 ref-file weight-scan-working-dir"
+
+testbleu=$HOME/tools/src/obotools/testbleu
+projectbleu=$HOME/tools/src/obotools/projectbleu
+
+[ -x "$testbleu" ] || die "Can't run $testbleu"
+[ -x "$projectbleu" ] || die "Can't run $projectbleu"
+
+# create exact bleus and put them to bleu.*
+for f in $dir/out.*; do
+ bleuf=${f//out./bleu.}
+ [ -e "$bleuf" ] \
+ || $testbleu $refs < $f | pickre --re='BLEU...([0-9.]*)' > $bleuf \
+ || die "Failed to construct $bleuf"
+done
+
+# create bleu projections from each best* and put them to corresponding pbleu*
+# first collect all weights
+lcat $dir/weights.* \
+| tr ' ' , \
+| pickre --re='weights.([-0-9.]*)' \
+| cut -f 1,3 \
+| numsort 1 \
+> $dir/allweights
+allwparam=$(cut -f2 $dir/allweights | prefix -- '-w ' | tr '\n' ' ')
+for f in $dir/best*.*; do
+ pbleuf=$(echo $f | sed 's/best[0-9]*/pbleu/')
+ if [ ! -e "$pbleuf" ] || [ `wc -l < $pbleuf` -ne `wc -l < $dir/allweights` ]; then
+ # need to regenerate the projection
+ $projectbleu $refs $allwparam < $f \
+ | paste $dir/allweights - \
+ | cut -f1,3 \
+ > $pbleuf \
+ || die "Failed to construct $pbleuf"
+ fi
+done
+
+# summarize bleu projections
+echo "goal proj/real from was" > $dir/graph.data
+for f in $dir/bleu.*; do
+ obs=$(echo $f | sed 's/^.*bleu\.//')
+ cat $dir/pbleu.$obs \
+ | pickre --re='F: ([0-9.]*)' \
+ | recut 2,1 \
+ | prefix --tab -- "$obs\tproj" \
+ >> $dir/graph.data
+ lcat $dir/bleu.$obs \
+ | pickre --re='bleu\.([-0-9.]*)' \
+ | prefix --tab -- "$obs\treal" \
+ | recut 1,2,3,5 \
+ >> $dir/graph.data
+done
+
+
+exit 0
+
+## COMMANDS TO PLOT IT:
+# plot 'walkable' graph of projections at various points
+g=weight-scan-tm_2/graph.data; cat $g | skip 1 | grep real | cut -f2- | numsort 2 | sed 's/real/all/' > cliprealall; skip 1 < $g | numsort 1,3 | split_at_colchange 1 | blockwise "(prefix --tab x cliprealall; cat -) | labelledxychart --data=3,4,0,'',linespoints --blockpivot=2" > clip
+
+# plot a combination of projections along with the individual projections and
+# the real scores
+cat best100.-0.100000 best100.-0.500000 best100.-0.300000 best100.-0.200000 | /home/obo/tools/src/obotools/projectbleu ../tune.ref $allwparam | paste allweights - > comb.-0.5_-0.3_-0.2_-0.1
+(lcat pbleu.-0.100000 pbleu.-0.500000 pbleu.-0.300000 pbleu.-0.200000 comb.-0.5_-0.3_-0.2_-0.1 | pickre --re='F: ([0-9.]*)' | recut 2,3,1 ; cat graph.data | skip 1 | grep real | cut -f2- | numsort 2 ) | tee delme | labelledxychart --blockpivot=1 --data=2,3,0,'',linespoints | gpsandbox
diff --git a/scripts/analysis/weight-scan.pl b/scripts/analysis/weight-scan.pl
new file mode 100755
index 000000000..0ed4dbe09
--- /dev/null
+++ b/scripts/analysis/weight-scan.pl
@@ -0,0 +1,259 @@
+#!/usr/bin/perl
+# runs Moses many times changing the values of one weight, all others fixed
+# nbest lists are always produced to allow for comparison of real and
+# 'projected' BLEU (BLEU estimated from n-best lists collected at a neighouring
+# node)
+# usage: weight-scan.pl <input> <moses> <moses.ini> tm_2 --range=0.0,0.1,1.0
+
+use strict;
+use warnings;
+use Getopt::Long;
+use FindBin qw($Bin);
+use File::Basename;
+use File::Path;
+my $SCRIPTS_ROOTDIR = $Bin;
+$SCRIPTS_ROOTDIR =~ s/\/training$//;
+$SCRIPTS_ROOTDIR = $ENV{"SCRIPTS_ROOTDIR"} if defined($ENV{"SCRIPTS_ROOTDIR"});
+
+my $prec = 3; # precision of weightvalue within filename
+my $jobs = 0;
+my $workdir = "weight-scan";
+my $range = "0.0,0.1,1.0";
+my $input_type = 0;
+my $normalize = 0; # normalize
+my $nbestsize = 100;
+my $decoderflags = "";
+my $moses_parallel_cmd = "$SCRIPTS_ROOTDIR/generic/moses-parallel.pl";
+my $qsubwrapper="$SCRIPTS_ROOTDIR/generic/qsub-wrapper.pl";
+my $queue_flags = "-hard"; # extra parameters for parallelizer
+GetOptions(
+ "jobs=i" => \$jobs,
+ "range=s" => \$range,
+ "working-dir=s" => \$workdir,
+ "normalize!" => \$normalize,
+ "nbest=i" => \$nbestsize,
+ "decoderflags=s" => \$decoderflags,
+) or exit 1;
+
+my $inf = shift;
+my $decoder = shift;
+my $config = shift;
+my $weightspec = shift;
+
+if (!defined $inf || ! defined $decoder || !defined $config || !defined $weightspec) {
+ print STDERR "usage: $0 <input> <moses> <moses.ini> tm_2 --range=0.0,0.1,1.0
+Options:
+ --working-dir=weight-scan
+ --jobs=0
+ --range=0.0,0.1,1.0
+";
+ exit 1;
+}
+
+print STDERR "Using SCRIPTS_ROOTDIR: $SCRIPTS_ROOTDIR\n";
+
+die "Not executable: $moses_parallel_cmd" if defined $jobs && ! -x $moses_parallel_cmd;
+die "Not executable: $qsubwrapper" if defined $jobs && ! -x $qsubwrapper;
+die "Not executable: $decoder" if ! -x $decoder;
+
+my $inf_abs = ensure_full_path($inf);
+die "File not found: $inf (interpreted as $inf_abs)."
+ if ! -e $inf_abs;
+$inf = $inf_abs;
+
+my $decoder_abs = ensure_full_path($decoder);
+die "File not executable: $decoder (interpreted as $decoder_abs)."
+ if ! -x $decoder_abs;
+$decoder = $decoder_abs;
+
+my $config_abs = ensure_full_path($config);
+die "File not found: $config (interpreted as $config_abs)."
+ if ! -e $config_abs;
+$config = $config_abs;
+
+
+my ($startvalue, $step, $stopvalue) = split /,/, $range;
+die "Bad range: $range; expected start,step,stop"
+ if !defined $startvalue || !defined $step || !defined $stopvalue;
+
+
+my $featlist = get_featlist_from_moses($config);
+
+# $weightidx is within features of the name $weightname
+# $weightindex is global
+my ($weightname, $weightidx) = split /_/, $weightspec;
+my $weightindex;
+
+# scan the weights, find the one we'll test and remember values of all of the
+# given name
+my $only_one_expected = 0;
+if (!defined $weightidx) {
+ $only_one_expected = 1;
+ $weightidx = 0;
+}
+my @weightvalues = ();
+my $idx = 0;
+for(my $i=0; $i<scalar(@{$featlist->{"names"}}); $i++) {
+ my $name = $featlist->{"names"}->[$i];
+ if ($name eq $weightname) {
+ push @weightvalues, $featlist->{"values"}->[$i];
+ $weightindex = $i if $idx == $weightidx; # remember the global index of the weight
+ $idx++;
+ }
+}
+
+die "You specified only '$weightspec' but there are $idx features of the given name.\nUse e.g.: ${weightspec}_0\n"
+ if $only_one_expected && $idx > 1;
+die "Failed to find weights of the name '$weightname' in moses config."
+ if !defined $weightindex;
+
+
+
+#store current directory and create the working directory (if needed)
+my $cwd = `pawd 2>/dev/null`;
+if(!$cwd){$cwd = `pwd`;}
+chomp($cwd);
+
+mkpath($workdir);
+{
+# open local scope
+
+#chdir to the working directory
+chdir($workdir) or die "Can't chdir to $workdir";
+
+## MAIN LOOP
+for(my $weightvalue = $startvalue; $weightvalue <= $stopvalue; $weightvalue+=$step) {
+ my $nbestout = run_decoder($featlist, $weightvalue);
+}
+
+
+#chdir back to the original directory # useless, just to remind we were not there
+chdir($cwd);
+} # end of local scope
+
+sub run_decoder {
+ my ($featlist, $weightvalue) = @_;
+ my $filebase = sprintf("%${prec}f", $weightvalue);
+ my $nbestfilename = "best$nbestsize.$filebase";
+ my $filename = "out.$filebase";
+
+ # user-supplied parameters
+ print STDERR "params = $decoderflags\n";
+
+ # parameters to set all model weights (to override moses.ini)
+ my @vals = @{$featlist->{"values"}};
+ $vals[$weightindex] = $weightvalue; # set the one we're scanning
+ if ($normalize) {
+ print STDERR "Normalizing lambdas: @vals\n";
+ my $totlambda=0;
+ grep($totlambda+=abs($_),@vals);
+ grep($_/=$totlambda,@vals);
+ }
+ # moses now does not seem accept "-tm X -tm Y" but needs "-tm X Y"
+ my %model_weights;
+ for(my $i=0; $i<scalar(@{$featlist->{"names"}}); $i++) {
+ my $name = $featlist->{"names"}->[$i];
+ $model_weights{$name} = "-$name" if !defined $model_weights{$name};
+ $model_weights{$name} .= sprintf " %.6f", $vals[$i];
+ }
+ my $decoder_config = join(" ", values %model_weights);
+ print STDERR "DECODER_CFG = $decoder_config\n";
+
+ # write the weights for future use
+ open OUTF, ">weights.$filebase" or die "Can't write weights";
+ print OUTF join(" ", map { sprintf("%.6f", $_) } @vals)."\n";
+ close OUTF;
+
+ # run the decoder
+ my $nBest_cmd = "-n-best-size $nbestsize";
+ my $decoder_cmd;
+
+ if ($jobs) {
+ $decoder_cmd = "$moses_parallel_cmd -config $config -inputtype $input_type -qsub-prefix scan$weightvalue -queue-parameters \"$queue_flags\" -decoder-parameters \"$decoderflags $decoder_config\" -n-best-list \"$nbestfilename $nbestsize\" -input-file $inf -jobs $jobs -decoder $decoder > $filename";
+ } else {
+ $decoder_cmd = "$decoder $decoderflags -config $config -inputtype $input_type $decoder_config -n-best-list $nbestfilename $nbestsize -input-file $inf > $filename";
+ }
+
+ safesystem($decoder_cmd) or die "The decoder died. CONFIG WAS $decoder_config \n";
+
+ return $nbestfilename;
+}
+
+sub get_featlist_from_moses {
+ # run moses with the given config file and return the list of features and
+ # their initial values
+ my $configfn = shift;
+ my $featlistfn = "./features.list";
+ if (-e $featlistfn) {
+ print STDERR "Using cached features list: $featlistfn\n";
+ } else {
+ print STDERR "Asking moses for feature names and values from $configfn\n";
+ my $cmd = "$decoder $decoderflags -config $configfn -inputtype $input_type -show-weights > $featlistfn";
+ safesystem($cmd) or die "Failed to run moses with the config $configfn";
+ }
+
+ # read feature list
+ my @names = ();
+ my @startvalues = ();
+ open(INI,$featlistfn) or die "Can't read $featlistfn";
+ my $nr = 0;
+ my @errs = ();
+ while (<INI>) {
+ $nr++;
+ chomp;
+ my ($longname, $feature, $value) = split / /;
+ push @errs, "$featlistfn:$nr:Bad initial value of $feature: $value\n"
+ if $value !~ /^[+-]?[0-9.e]+$/;
+ #push @errs, "$featlistfn:$nr:Unknown feature '$feature', please add it to \@ABBR_FULL_MAP\n"
+ # if !defined $ABBR2FULL{$feature};
+ push @names, $feature;
+ push @startvalues, $value;
+ }
+ close INI;
+ if (scalar @errs) {
+ print STDERR join("", @errs);
+ exit 1;
+ }
+ return {"names"=>\@names, "values"=>\@startvalues};
+}
+
+sub safesystem {
+ print STDERR "Executing: @_\n";
+ system(@_);
+ if ($? == -1) {
+ print STDERR "Failed to execute: @_\n $!\n";
+ exit(1);
+ }
+ elsif ($? & 127) {
+ printf STDERR "Execution of: @_\n died with signal %d, %s coredump\n",
+ ($? & 127), ($? & 128) ? 'with' : 'without';
+ exit(1);
+ }
+ else {
+ my $exitcode = $? >> 8;
+ print STDERR "Exit code: $exitcode\n" if $exitcode;
+ return ! $exitcode;
+ }
+}
+
+sub ensure_full_path {
+ my $PATH = shift;
+$PATH =~ s/\/nfsmnt//;
+ return $PATH if $PATH =~ /^\//;
+ my $dir = `pawd 2>/dev/null`;
+ if(!$dir){$dir = `pwd`;}
+ chomp($dir);
+ $PATH = $dir."/".$PATH;
+ $PATH =~ s/[\r\n]//g;
+ $PATH =~ s/\/\.\//\//g;
+ $PATH =~ s/\/+/\//g;
+ my $sanity = 0;
+ while($PATH =~ /\/\.\.\// && $sanity++<10) {
+ $PATH =~ s/\/+/\//g;
+ $PATH =~ s/\/[^\/]+\/\.\.\//\//g;
+ }
+ $PATH =~ s/\/[^\/]+\/\.\.$//;
+ $PATH =~ s/\/+$//;
+$PATH =~ s/\/nfsmnt//;
+ return $PATH;
+}
diff --git a/scripts/ems/biconcor/Alignment.h b/scripts/ems/biconcor/Alignment.h
index 5e3890b0f..38e4dab17 100644
--- a/scripts/ems/biconcor/Alignment.h
+++ b/scripts/ems/biconcor/Alignment.h
@@ -14,7 +14,7 @@ private:
INDEX *m_sentenceEnd;
INDEX m_size;
INDEX m_sentenceCount;
- char m_unaligned[ 256 ];
+ char m_unaligned[ 256 ]; // here for speed (local to PhraseAlignment)
public:
~Alignment();
@@ -27,4 +27,18 @@ public:
void Load( string fileName );
void Save( string fileName );
vector<string> Tokenize( const char input[] );
+
+ INDEX GetSentenceStart( INDEX sentence ) {
+ if (sentence == 0) return 0;
+ return m_sentenceEnd[ sentence-1 ] + 2;
+ }
+ INDEX GetNumberOfAlignmentPoints( INDEX sentence ) {
+ return ( m_sentenceEnd[ sentence ] - GetSentenceStart( sentence ) ) / 2;
+ }
+ char GetSourceWord( INDEX sentence, INDEX alignment_point ) {
+ return m_array[ GetSentenceStart( sentence ) + alignment_point*2 ];
+ }
+ char GetTargetWord( INDEX sentence, INDEX alignment_point ) {
+ return m_array[ GetSentenceStart( sentence ) + alignment_point*2 + 1 ];
+ }
};
diff --git a/scripts/ems/biconcor/Makefile b/scripts/ems/biconcor/Makefile
index b6ac5a4a7..3b2aa9636 100644
--- a/scripts/ems/biconcor/Makefile
+++ b/scripts/ems/biconcor/Makefile
@@ -6,5 +6,5 @@ clean:
.cpp.o:
g++ -O6 -g -c $<
-biconcor: Vocabulary.o SuffixArray.o TargetCorpus.o Alignment.o PhrasePair.o PhrasePairCollection.o biconcor.o
- g++ Vocabulary.o SuffixArray.o TargetCorpus.o Alignment.o PhrasePair.o PhrasePairCollection.o biconcor.o -o biconcor
+biconcor: Vocabulary.o SuffixArray.o TargetCorpus.o Alignment.o Mismatch.o PhrasePair.o PhrasePairCollection.o biconcor.o base64.o
+ g++ Vocabulary.o SuffixArray.o TargetCorpus.o Alignment.o Mismatch.o PhrasePair.o PhrasePairCollection.o biconcor.o base64.o -o biconcor
diff --git a/scripts/ems/biconcor/Mismatch.cpp b/scripts/ems/biconcor/Mismatch.cpp
new file mode 100644
index 000000000..43e83e921
--- /dev/null
+++ b/scripts/ems/biconcor/Mismatch.cpp
@@ -0,0 +1,246 @@
+#include "Mismatch.h"
+#include "Vocabulary.h"
+
+using namespace std;
+
+#define UNANNOTATED 0
+#define PRE_ALIGNED 1
+#define POST_ALIGNED 2
+#define UNALIGNED 3
+#define MISALIGNED 4
+#define ALIGNED 5
+
+
+void Mismatch::PrintClippedHTML( ostream* out, int width )
+{
+ char source_annotation[256], target_annotation[256];
+ vector< string > label_class;
+ label_class.push_back( "" );
+ label_class.push_back( "mismatch_pre_aligned" );
+ label_class.push_back( "mismatch_post_aligned" );
+ label_class.push_back( "null_aligned" );
+ label_class.push_back( "mismatch_misaligned" );
+ label_class.push_back( "mismatch_aligned" );
+
+ for(int i=0; i<m_source_length;i++) source_annotation[i] = UNANNOTATED;
+ for(int i=0; i<m_target_length;i++) target_annotation[i] = UNANNOTATED;
+
+ if (m_unaligned) {
+ // find alignment points for prior and next word(s) and
+ // center target phrase around those.
+ bool found_aligned = false;
+ for(int i=1; i<m_source_length && !found_aligned; i++) {
+ if (m_source_start-i >= 0) {
+ int word_id = m_source_start-i;
+ source_annotation[ word_id ] = UNALIGNED;
+ if (!m_source_unaligned[ word_id ]) {
+ found_aligned = true;
+ LabelSourceMatches( source_annotation, target_annotation, word_id, PRE_ALIGNED );
+ }
+ }
+
+ if (m_source_end+i < m_source_length) {
+ int word_id = m_source_end+i;
+ source_annotation[ word_id ] = UNALIGNED;
+ if (!m_source_unaligned[ word_id ]) {
+ found_aligned = true;
+ LabelSourceMatches( source_annotation, target_annotation, word_id, POST_ALIGNED );
+ }
+ }
+ }
+
+ }
+ // misalignment
+ else {
+ // label aligned output words
+ for(int i=m_source_start; i<=m_source_end; i++)
+ LabelSourceMatches( source_annotation, target_annotation, i, ALIGNED );
+
+ // find first and last
+ int target_start = -1;
+ int target_end;
+ for(int i=0; i<m_target_length; i++)
+ if (target_annotation[i] == ALIGNED) {
+ if (target_start == -1)
+ target_start = i;
+ target_end = i;
+ }
+ // go over all enclosed target words
+ for(int i=target_start; i<=target_end; i++) {
+ // label other target words as unaligned or misaligned
+ if (m_target_unaligned[ i ])
+ target_annotation[ i ] = UNALIGNED;
+ else {
+ if (target_annotation[ i ] != ALIGNED)
+ target_annotation[ i ] = MISALIGNED;
+ // loop over aligned source words
+ for(INDEX ap=0; ap<m_num_alignment_points; ap++) {
+ if (m_alignment->GetTargetWord( m_sentence_id, ap ) == i) {
+ int source_word = m_alignment->GetSourceWord( m_sentence_id, ap );
+ // if not part of the source phrase -> also misaligned
+ if (source_word < m_source_start || source_word > m_source_end)
+ source_annotation[ source_word ] = MISALIGNED;
+ }
+ }
+ }
+ }
+ // closure
+ bool change = true;
+ while(change) {
+ change = false;
+ for(INDEX ap=0; ap<m_num_alignment_points; ap++) {
+ int source_word = m_alignment->GetSourceWord( m_sentence_id, ap );
+ int target_word = m_alignment->GetTargetWord( m_sentence_id, ap );
+ if (source_annotation[source_word] != UNANNOTATED &&
+ target_annotation[target_word] == UNANNOTATED) {
+ target_annotation[target_word] = MISALIGNED;
+ change = true;
+ }
+ if (source_annotation[source_word] == UNANNOTATED &&
+ target_annotation[target_word] != UNANNOTATED) {
+ source_annotation[source_word] = MISALIGNED;
+ change = true;
+ }
+ }
+ }
+ }
+
+ // print source
+ // shorten source context if too long
+ int sentence_start = m_source_position - m_source_start;
+ int context_space = width/2;
+ for(int i=m_source_start;i<=m_source_end;i++)
+ context_space -= m_suffixArray->GetWord( sentence_start + i ).size() + 1;
+ context_space /= 2;
+
+ int remaining = context_space;
+ int start_word = m_source_start;
+ for(;start_word>0 && remaining>0; start_word--)
+ remaining -= m_suffixArray->GetWord( sentence_start + start_word-1 ).size() + 1;
+ if (remaining<0 || start_word == -1) start_word++;
+
+ remaining = context_space;
+ int end_word = m_source_end;
+ for(;end_word<m_source_length && remaining>0; end_word++)
+ remaining -= m_suffixArray->GetWord( sentence_start + end_word ).size() + 1;
+ end_word--;
+
+ // output with markup
+ *out << "<tr><td class=\"pp_source_left\">";
+ char current_label = UNANNOTATED;
+ if (start_word>0) {
+ current_label = source_annotation[start_word-1];
+ *out << "... ";
+ }
+ for(int i=start_word; i<=end_word; i++) {
+ // change to phrase block
+ if (i == m_source_start) {
+ if (current_label != UNANNOTATED && i!=start_word)
+ *out << "</span>";
+ *out << "</td><td class=\"pp_source\">";
+ current_label = UNANNOTATED;
+ }
+
+ // change to labeled word
+ else if (source_annotation[i] != current_label &&
+ source_annotation[i] != ALIGNED) {
+ if (current_label != UNANNOTATED && i!=start_word)
+ *out << "</span>";
+ if (source_annotation[i] != UNANNOTATED)
+ *out << "<span class=\""
+ << label_class[ source_annotation[i] ]
+ << "\">";
+ current_label = source_annotation[i];
+ }
+
+ // output word
+ *out << m_suffixArray->GetWord( sentence_start + i ) << " ";
+
+ // change to right context block
+ if (i == m_source_end) {
+ *out << "</td><td class=\"pp_source_right\">";
+ current_label = UNANNOTATED;
+ }
+ }
+
+ if (current_label != UNANNOTATED && end_word>m_source_end)
+ *out << "</span>";
+ if (end_word<m_source_length-1)
+ *out << "... ";
+
+ // print target
+ // shorten target context if too long
+ int target_start = -1;
+ int target_end;
+ for(int i=0; i<m_target_length; i++)
+ if (target_annotation[i] != UNANNOTATED) {
+ if (target_start == -1)
+ target_start = i;
+ target_end = i;
+ }
+
+ context_space = width/2;
+ for(int i=target_start;i<=target_end;i++)
+ context_space -= m_targetCorpus->GetWord( m_sentence_id, i ).size() + 1;
+ while (context_space < 0) { // shorten matched part, if too long
+ context_space +=
+ m_targetCorpus->GetWord( m_sentence_id, target_start ).size() +
+ m_targetCorpus->GetWord( m_sentence_id, target_end ).size() + 2;
+ target_start++;
+ target_end--;
+ }
+ context_space /= 2;
+
+ remaining = context_space;
+ start_word = target_start;
+ for(;start_word>0 && remaining>0; start_word--) {
+ //cerr << "remaining: " << remaining << ", start_word: " << start_word << endl;
+ remaining -= m_targetCorpus->GetWord( m_sentence_id, start_word-1 ).size() + 1;
+ }
+ if (remaining<0 || start_word == -1) start_word++;
+
+ remaining = context_space;
+ end_word = target_end;
+ for(;end_word<m_target_length && remaining>0; end_word++) {
+ //cerr << "remaining: " << remaining << ", end_word: " << end_word << endl;
+ remaining -= m_targetCorpus->GetWord( m_sentence_id, end_word ).size() + 1;
+ }
+ end_word--;
+
+ // output with markup
+ *out << "</td><td class=\"mismatch_target\">";
+ current_label = UNANNOTATED;
+ if (start_word>0) {
+ current_label = target_annotation[start_word-1];
+ *out << "... ";
+ }
+ for(int i=start_word; i<=end_word; i++) {
+ if (target_annotation[i] != current_label) {
+ if (current_label != UNANNOTATED && i!=start_word)
+ *out << "</span>";
+ if (target_annotation[i] != UNANNOTATED)
+ *out << "<span class=\""
+ << label_class[ target_annotation[i] ]
+ << "\">";
+ current_label = target_annotation[i];
+ }
+
+ // output word
+ *out << m_targetCorpus->GetWord( m_sentence_id, i ) << " ";
+ }
+
+ if (current_label != UNANNOTATED && end_word>target_end)
+ *out << "</span>";
+ if (end_word<m_target_length-1)
+ *out << "... ";
+ *out << "</td></tr>";
+}
+
+void Mismatch::LabelSourceMatches( char *source_annotation, char *target_annotation, char source_id, char label ) {
+ for(INDEX ap=0; ap<m_num_alignment_points; ap++) {
+ if (m_alignment->GetSourceWord( m_sentence_id, ap ) == source_id) {
+ source_annotation[ source_id ] = label;
+ target_annotation[ m_alignment->GetTargetWord( m_sentence_id, ap ) ] = label;
+ }
+ }
+}
diff --git a/scripts/ems/biconcor/Mismatch.h b/scripts/ems/biconcor/Mismatch.h
new file mode 100644
index 000000000..bfcbf4fd8
--- /dev/null
+++ b/scripts/ems/biconcor/Mismatch.h
@@ -0,0 +1,70 @@
+#include <string>
+#include <stdlib.h>
+#include <cstring>
+#include <fstream>
+#include <sstream>
+#include <iostream>
+#include "SuffixArray.h"
+#include "TargetCorpus.h"
+#include "Alignment.h"
+#pragma once
+
+using namespace std;
+
+class Mismatch
+{
+public:
+ typedef unsigned int INDEX;
+
+private:
+ SuffixArray *m_suffixArray;
+ TargetCorpus *m_targetCorpus;
+ Alignment *m_alignment;
+ INDEX m_sentence_id;
+ INDEX m_num_alignment_points;
+ char m_source_length;
+ char m_target_length;
+ SuffixArray::INDEX m_source_position;
+ char m_source_start, m_source_end;
+ char m_source_unaligned[ 256 ];
+ char m_target_unaligned[ 256 ];
+ char m_unaligned;
+
+public:
+ Mismatch( SuffixArray *sa, TargetCorpus *tc, Alignment *a, INDEX sentence_id, INDEX position, char source_length, char target_length, char source_start, char source_end )
+ :m_suffixArray(sa)
+ ,m_targetCorpus(tc)
+ ,m_alignment(a)
+ ,m_sentence_id(sentence_id)
+ ,m_source_position(position)
+ ,m_source_length(source_length)
+ ,m_target_length(target_length)
+ ,m_source_start(source_start)
+ ,m_source_end(source_end)
+ {
+ // initialize unaligned indexes
+ for(char i=0; i<m_source_length; i++) {
+ m_source_unaligned[i] = true;
+ }
+ for(char i=0; i<m_target_length; i++) {
+ m_target_unaligned[i] = true;
+ }
+ m_num_alignment_points =
+ m_alignment->GetNumberOfAlignmentPoints( sentence_id );
+ for(INDEX ap=0; ap<m_num_alignment_points; ap++) {
+ m_source_unaligned[ m_alignment->GetSourceWord( sentence_id, ap ) ] = false;
+ m_target_unaligned[ m_alignment->GetTargetWord( sentence_id, ap ) ] = false;
+ }
+ m_unaligned = true;
+ for(char i=source_start; i<=source_end; i++) {
+ if (!m_source_unaligned[ i ]) {
+ m_unaligned = false;
+ }
+ }
+ }
+ ~Mismatch () {}
+
+ bool Unaligned() { return m_unaligned; }
+ void PrintClippedHTML( ostream* out, int width );
+ void LabelSourceMatches( char *source_annotation, char *target_annotation, char source_id, char label );
+};
diff --git a/scripts/ems/biconcor/PhrasePair.cpp b/scripts/ems/biconcor/PhrasePair.cpp
index 5ca6b5f6e..b5330a5fb 100644
--- a/scripts/ems/biconcor/PhrasePair.cpp
+++ b/scripts/ems/biconcor/PhrasePair.cpp
@@ -145,14 +145,27 @@ void PhrasePair::PrintClippedHTML( ostream* out, int width )
int source_pre_width = (source_width-source.size())/2;
int source_post_width = (source_width-source.size()+1)/2;
+ // if phrase is too long, don't show any context
if (source.size() > width) {
source_pre_width = 0;
source_post_width = 0;
}
- if (source_pre.size()>source_pre_width)
+ // too long -> truncate and add "..."
+ if (source_pre.size()>source_pre_width) {
+ // first skip up to a space
+ while(source_pre_width>0 &&
+ source_pre.substr(source_pre.size()-source_pre_width,1) != " ") {
+ source_pre_width--;
+ }
source_pre = "..." + source_pre.substr( source_pre.size()-source_pre_width, source_pre_width );
- if (source_post.size() > source_post_width)
+ }
+ if (source_post.size() > source_post_width) {
+ while(source_post_width>0 &&
+ source_post.substr(source_post_width-1,1) != " ") {
+ source_post_width--;
+ }
source_post = source_post.substr( 0, source_post_width ) + "...";
+ }
*out << "<tr><td class=\"pp_source_left\">"
<< source_pre
@@ -167,8 +180,13 @@ void PhrasePair::PrintClippedHTML( ostream* out, int width )
string target_pre = "";
string target = "";
string target_post = "";
+ int target_pre_null_width = 0;
+ int target_post_null_width = 0;
for( char i=0; i<m_target_start; i++ ) {
- target_pre += " " + m_targetCorpus->GetWord( m_sentence_id, i);
+ WORD word = m_targetCorpus->GetWord( m_sentence_id, i);
+ target_pre += " " + word;
+ if (i >= m_target_start-m_pre_null)
+ target_pre_null_width += word.size() + 1;
}
for( char i=m_target_start; i<=m_target_end; i++ ) {
if (i>m_target_start) target += " ";
@@ -176,7 +194,11 @@ void PhrasePair::PrintClippedHTML( ostream* out, int width )
}
for( char i=m_target_end+1; i<m_target_length; i++ ) {
if (i>m_target_end+1) target_post += " ";
- target_post += m_targetCorpus->GetWord( m_sentence_id, i);
+ WORD word = m_targetCorpus->GetWord( m_sentence_id, i);
+ target_post += word;
+ if (i-(m_target_end+1) < m_post_null) {
+ target_post_null_width += word.size() + 1;
+ }
}
int target_pre_width = (target_width-target.size())/2;
@@ -186,10 +208,47 @@ void PhrasePair::PrintClippedHTML( ostream* out, int width )
target_pre_width = 0;
target_post_width = 0;
}
- if (target_pre.size() > target_pre_width)
+
+ if (target_pre.size() < target_pre_width)
+ target_pre_width = target_pre.size();
+ else {
+ while(target_pre_width>0 &&
+ target_pre.substr(target_pre.size()-target_pre_width,1) != " ") {
+ target_pre_width--;
+ }
target_pre = "..." + target_pre.substr( target_pre.size()-target_pre_width, target_pre_width );
- if (target_post.size() > target_post_width)
- target_post = target_post.substr( 0, target_post_width ) + "...";
+ }
+
+ if (target_post.size() < target_post_width) {
+ target_post_width = target_post.size();
+ }
+ else {
+ while(target_post_width>0 &&
+ target_post.substr(target_post_width-1,1) != " ") {
+ target_post_width--;
+ }
+ target_post = target_post.substr( 0, target_post_width ) + "...";
+ }
+
+ if (m_pre_null) {
+ //cerr << endl << "target_pre_width=" << target_pre_width << ", target_pre_null_width=" << target_pre_null_width << ", target_pre.size()=" << target_pre.size() << endl;
+ if (target_pre_width < target_pre.size())
+ target_pre_null_width -= target_pre.size()-target_pre_width;
+ target_pre = target_pre.substr(0,target_pre_width-target_pre_null_width)
+ + "<span class=\"null_aligned\">"
+ + target_pre.substr(target_pre_width-target_pre_null_width)
+ + "</span>";
+ }
+ if (m_post_null) {
+ //cerr << endl << "target_post_width=" << target_post_width << ", target_post_null_width=" << target_post_null_width << ", target_post.size()=" << target_post.size() << endl;
+ if (target_post_null_width>target_post.size()) {
+ target_post_null_width = target_post.size();
+ }
+ target_post = "<span class=\"null_aligned\">"
+ + target_post.substr(0,target_post_null_width)
+ + "</span>"
+ + target_post.substr(target_post_null_width);
+ }
*out << "<td class=\"pp_target_left\">"
<< target_pre
diff --git a/scripts/ems/biconcor/PhrasePairCollection.cpp b/scripts/ems/biconcor/PhrasePairCollection.cpp
index 6647fe985..10d4e37c4 100644
--- a/scripts/ems/biconcor/PhrasePairCollection.cpp
+++ b/scripts/ems/biconcor/PhrasePairCollection.cpp
@@ -47,8 +47,9 @@ bool PhrasePairCollection::GetCollection( const vector< string > sourceString )
if (m_alignment->PhraseAlignment( sentence_id, target_length, source_start, source_end, target_start, target_end, pre_null, post_null)) {
cerr << " aligned to [" << (int)target_start << "," << (int)target_end << "]";
cerr << " +(" << (int)pre_null << "," << (int)post_null << ")";
- for( char pre = 0; pre <= pre_null; pre++ ) {
- for( char post = 0; post <= post_null; post++ ) {
+ bool null_boundary_words = false;
+ for( char pre = 0; pre <= pre_null && (pre==0||null_boundary_words); pre++ ) {
+ for( char post = 0; post <= post_null && (post==0||null_boundary_words); post++ ) {
vector< WORD_ID > targetString;
cerr << "; ";
for( char target = target_start-pre; target <= target_end+post; target++ ) {
@@ -67,6 +68,18 @@ bool PhrasePairCollection::GetCollection( const vector< string > sourceString )
}
}
}
+ else {
+ cerr << "mismatch " << (i-first_match)
+ << " in sentence " << sentence_id
+ << ", starting at word " << source_start
+ << " of " << sentence_length
+ << ". target sentence has " << target_length << " words.";
+ Mismatch *mismatch = new Mismatch( m_suffixArray, m_targetCorpus, m_alignment, sentence_id, position, sentence_length, target_length, source_start, source_end );
+ if (mismatch->Unaligned())
+ m_unaligned.push_back( mismatch );
+ else
+ m_mismatch.push_back( mismatch );
+ }
cerr << endl;
if (found > m_max_lookup) {
@@ -92,23 +105,89 @@ void PhrasePairCollection::Print()
void PhrasePairCollection::PrintHTML()
{
- vector< vector<PhrasePair*> >::iterator ppWithSameTarget;
int pp_target = 0;
+ bool singleton = false;
+ // loop over all translations
+ vector< vector<PhrasePair*> >::iterator ppWithSameTarget;
for( ppWithSameTarget = m_collection.begin(); ppWithSameTarget != m_collection.end() && pp_target<m_max_pp_target; ppWithSameTarget++, pp_target++ ) {
- cout << "<p class=\"pp_target_header\">";
- (*(ppWithSameTarget->begin()))->PrintTarget( &cout );
- int count = ppWithSameTarget->size();
- cout << "(" << count << "/" << m_size << ")" << endl;
- cout << "<p><table align=\"center\">";
+
+ int count = ppWithSameTarget->size();
+ if (!singleton) {
+ if (count == 1) {
+ singleton = true;
+ cout << "<p class=\"pp_singleton_header\">singleton"
+ << (m_collection.end() - ppWithSameTarget==1?"":"s") << " ("
+ << (m_collection.end() - ppWithSameTarget)
+ << "/" << m_size << ")</p>";
+ }
+ else {
+ cout << "<p class=\"pp_target_header\">";
+ (*(ppWithSameTarget->begin()))->PrintTarget( &cout );
+ cout << " (" << count << "/" << m_size << ")" << endl;
+ cout << "<p><div id=\"pp_" << pp_target << "\">";
+ }
+ cout << "<table align=\"center\">";
+ }
+
vector< PhrasePair* >::iterator p;
- int pp = 0;
- for(p = ppWithSameTarget->begin(); pp<count && p != ppWithSameTarget->end(); p++, pp++ ) {
+ // loop over all sentences where translation occurs
+ int pp=0;
+ int i=0;
+ for(p = ppWithSameTarget->begin(); i<10 && pp<count && p != ppWithSameTarget->end(); p++, pp++, i++ ) {
(*p)->PrintClippedHTML( &cout, 160 );
if (count > m_max_pp) {
p += count/m_max_pp-1;
pp += count/m_max_pp-1;
}
}
- cout << "</table>\n";
+ if (i == 10 && pp < count) {
+ // extended table
+ cout << "<tr><td colspan=7 align=center class=\"pp_more\" onclick=\"javascript:document.getElementById('pp_" << pp_target << "').style.display = 'none'; document.getElementById('pp_ext_" << pp_target << "').style.display = 'block';\">(more)</td></tr></table></div>";
+ cout << "<div id=\"pp_ext_" << pp_target << "\" style=\"display:none;\";\">";
+ cout << "<table align=\"center\">";
+ for(i=0, pp=0, p = ppWithSameTarget->begin(); i<m_max_pp && pp<count && p != ppWithSameTarget->end(); p++, pp++, i++ ) {
+ (*p)->PrintClippedHTML( &cout, 160 );
+ if (count > m_max_pp) {
+ p += count/m_max_pp-1;
+ pp += count/m_max_pp-1;
+ }
+ }
+ }
+ if (!singleton) cout << "</table></div>\n";
+
+ if (!singleton && pp_target == 9) {
+ cout << "<div id=\"pp_toggle\" onclick=\"javascript:document.getElementById('pp_toggle').style.display = 'none'; document.getElementById('pp_additional').style.display = 'block';\">";
+ cout << "<p class=\"pp_target_header\">(more)</p></div>";
+ cout << "<div id=\"pp_additional\" style=\"display:none;\";\">";
+ }
}
+ if (singleton) cout << "</table></div>\n";
+ else if (pp_target > 9) cout << "</div>";
+
+ int max_mismatch = m_max_pp/3;
+ // unaligned phrases
+ if (m_unaligned.size() > 0) {
+ cout << "<p class=\"pp_singleton_header\">unaligned"
+ << " (" << (m_unaligned.size()) << ")</p>";
+ cout << "<table align=\"center\">";
+ int step_size = 1;
+ if (m_unaligned.size() > max_mismatch)
+ step_size = (m_unaligned.size()+max_mismatch-1) / max_mismatch;
+ for(int i=0;i<m_unaligned.size();i+=step_size)
+ m_unaligned[i]->PrintClippedHTML( &cout, 160 );
+ cout << "</table>";
+ }
+
+ // mismatched phrases
+ if (m_mismatch.size() > 0) {
+ cout << "<p class=\"pp_singleton_header\">mismatched"
+ << " (" << (m_mismatch.size()) << ")</p>";
+ cout << "<table align=\"center\">";
+ int step_size = 1;
+ if (m_mismatch.size() > max_mismatch)
+ step_size = (m_mismatch.size()+max_mismatch-1) / max_mismatch;
+ for(int i=0;i<m_mismatch.size();i+=step_size)
+ m_mismatch[i]->PrintClippedHTML( &cout, 160 );
+ cout << "</table>";
+ }
}
diff --git a/scripts/ems/biconcor/PhrasePairCollection.h b/scripts/ems/biconcor/PhrasePairCollection.h
index e90122d3d..b2473515e 100644
--- a/scripts/ems/biconcor/PhrasePairCollection.h
+++ b/scripts/ems/biconcor/PhrasePairCollection.h
@@ -3,6 +3,7 @@
#include "TargetCorpus.h"
#include "Alignment.h"
#include "PhrasePair.h"
+#include "Mismatch.h"
#pragma once
@@ -16,6 +17,7 @@ private:
TargetCorpus *m_targetCorpus;
Alignment *m_alignment;
vector< vector<PhrasePair*> > m_collection;
+ vector< Mismatch* > m_mismatch, m_unaligned;
int m_size;
int m_max_lookup;
int m_max_pp_target;
diff --git a/scripts/ems/biconcor/TargetCorpus.cpp b/scripts/ems/biconcor/TargetCorpus.cpp
index bcf6e4664..78c67987f 100644
--- a/scripts/ems/biconcor/TargetCorpus.cpp
+++ b/scripts/ems/biconcor/TargetCorpus.cpp
@@ -109,4 +109,5 @@ void TargetCorpus::Load( string fileName )
fread( m_sentenceEnd, sizeof(INDEX), m_sentenceCount, pFile); // sentence index
fclose( pFile );
m_vcb.Load( fileName + ".tgt-vcb" );
-} \ No newline at end of file
+}
+
diff --git a/scripts/ems/biconcor/base64.cpp b/scripts/ems/biconcor/base64.cpp
new file mode 100644
index 000000000..2a863d161
--- /dev/null
+++ b/scripts/ems/biconcor/base64.cpp
@@ -0,0 +1,123 @@
+/*
+ base64.cpp and base64.h
+
+ Copyright (C) 2004-2008 René Nyffenegger
+
+ This source code is provided 'as-is', without any express or implied
+ warranty. In no event will the author be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this source code must not be misrepresented; you must not
+ claim that you wrote the original source code. If you use this source code
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original source code.
+
+ 3. This notice may not be removed or altered from any source distribution.
+
+ René Nyffenegger rene.nyffenegger@adp-gmbh.ch
+
+*/
+
+#include "base64.h"
+#include <iostream>
+
+static const std::string base64_chars =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxyz"
+ "0123456789+/";
+
+
+static inline bool is_base64(unsigned char c) {
+ return (isalnum(c) || (c == '+') || (c == '/'));
+}
+
+std::string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_len) {
+ std::string ret;
+ int i = 0;
+ int j = 0;
+ unsigned char char_array_3[3];
+ unsigned char char_array_4[4];
+
+ while (in_len--) {
+ char_array_3[i++] = *(bytes_to_encode++);
+ if (i == 3) {
+ char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
+ char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
+ char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
+ char_array_4[3] = char_array_3[2] & 0x3f;
+
+ for(i = 0; (i <4) ; i++)
+ ret += base64_chars[char_array_4[i]];
+ i = 0;
+ }
+ }
+
+ if (i)
+ {
+ for(j = i; j < 3; j++)
+ char_array_3[j] = '\0';
+
+ char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
+ char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
+ char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
+ char_array_4[3] = char_array_3[2] & 0x3f;
+
+ for (j = 0; (j < i + 1); j++)
+ ret += base64_chars[char_array_4[j]];
+
+ while((i++ < 3))
+ ret += '=';
+
+ }
+
+ return ret;
+
+}
+
+std::string base64_decode(std::string const& encoded_string) {
+ int in_len = encoded_string.size();
+ int i = 0;
+ int j = 0;
+ int in_ = 0;
+ unsigned char char_array_4[4], char_array_3[3];
+ std::string ret;
+
+ while (in_len-- && ( encoded_string[in_] != '=') && is_base64(encoded_string[in_])) {
+ char_array_4[i++] = encoded_string[in_]; in_++;
+ if (i ==4) {
+ for (i = 0; i <4; i++)
+ char_array_4[i] = base64_chars.find(char_array_4[i]);
+
+ char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
+ char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
+ char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
+
+ for (i = 0; (i < 3); i++)
+ ret += char_array_3[i];
+ i = 0;
+ }
+ }
+
+ if (i) {
+ for (j = i; j <4; j++)
+ char_array_4[j] = 0;
+
+ for (j = 0; j <4; j++)
+ char_array_4[j] = base64_chars.find(char_array_4[j]);
+
+ char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
+ char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
+ char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
+
+ for (j = 0; (j < i - 1); j++) ret += char_array_3[j];
+ }
+
+ return ret;
+}
diff --git a/scripts/ems/biconcor/base64.h b/scripts/ems/biconcor/base64.h
new file mode 100644
index 000000000..65d5db8b2
--- /dev/null
+++ b/scripts/ems/biconcor/base64.h
@@ -0,0 +1,4 @@
+#include <string>
+
+std::string base64_encode(unsigned char const* , unsigned int len);
+std::string base64_decode(std::string const& s);
diff --git a/scripts/ems/biconcor/biconcor.cpp b/scripts/ems/biconcor/biconcor.cpp
index e518ae28c..0b6218623 100644
--- a/scripts/ems/biconcor/biconcor.cpp
+++ b/scripts/ems/biconcor/biconcor.cpp
@@ -3,6 +3,7 @@
#include "Alignment.h"
#include "PhrasePairCollection.h"
#include <getopt.h>
+#include "base64.h"
using namespace std;
@@ -32,7 +33,7 @@ int main(int argc, char* argv[])
{0, 0, 0, 0}
};
int option_index = 0;
- int c = getopt_long (argc, argv, "l:s:c:q:t:a:h", long_options, &option_index);
+ int c = getopt_long (argc, argv, "l:s:c:q:Q:t:a:h", long_options, &option_index);
if (c == -1) break;
switch (c) {
case 'l':
@@ -53,6 +54,10 @@ int main(int argc, char* argv[])
fileNameSource = string(optarg);
createFlag = true;
break;
+ case 'Q':
+ query = base64_decode(string(optarg));
+ queryFlag = true;
+ break;
case 'q':
query = string(optarg);
queryFlag = true;
diff --git a/scripts/ems/example/config.basic b/scripts/ems/example/config.basic
index 0b4d32493..a8bfbfdd3 100644
--- a/scripts/ems/example/config.basic
+++ b/scripts/ems/example/config.basic
@@ -134,11 +134,22 @@ order = 5
#
#rlm-training = "$moses-src-dir/randlm/bin/buildlm -falsepos 8 -values 8"
-### script to use for binary table format for irstlm
+### script to use for binary table format for irstlm or kenlm
# (default: no binarization)
-#
+
+# irstlm
#lm-binarizer = $moses-src-dir/irstlm/bin/compile-lm
+# kenlm, also set type to 8
+#lm-binarizer = $moses-src-dir/kenlm/build_binary
+#type = 8
+
+#
+# if binarized, set type (default srilm; if binarized: irstlm)
+#
+# set to 8 when using kenlm
+#type = 8
+
### script to create quantized language model format (irstlm)
# (default: no quantization)
#
@@ -204,11 +215,16 @@ tuning-sgm = $wmt10-data/dev/news-test2008-ref.$output-extension.sgm
#lowercased-tuning =
#split-tuning =
-### script to use for binary table format for irstlm
+### script to use for binary table format for irstlm or kenlm
# (default: no binarization)
-#
+
+# irstlm
#lm-binarizer = $moses-src-dir/irstlm/bin/compile-lm
+# kenlm, also set type to 8
+#lm-binarizer = $moses-src-dir/kenlm/build_binary
+#type = 8
+
### script to create quantized language model format (irstlm)
# (default: no quantization)
#
@@ -306,6 +322,10 @@ lexicalized-reordering = msd-bidirectional-fe
#
score-settings = "--GoodTuring"
+### include word alignment in phrase table
+#
+#include-word-alignment-in-rules = yes
+
### if phrase table training should be skipped,
# point to phrase translation table
#
@@ -362,6 +382,10 @@ nbest = 100
#
# lambda =
+### additional flags for the filter script
+#
+filter-settings = ""
+
### additional flags for the decoder
#
decoder-settings = ""
@@ -418,6 +442,10 @@ trainer = $moses-script-dir/recaser/train-truecaser.perl
#
#jobs = 10
+### additional flags for the filter script
+#
+#filter-settings = ""
+
### additional decoder settings
# switches for the Moses decoder
#
@@ -429,7 +457,7 @@ decoder-settings = "-search-algorithm 1 -cube-pruning-pop-limit 5000 -s 5000"
### multiple reference translations
#
-multiref = yes
+#multiref = yes
### prepare system output for scoring
# this may include detokenization and wrapping output in sgm
@@ -438,7 +466,7 @@ multiref = yes
detokenizer = "$moses-script-dir/tokenizer/detokenizer.perl -l $output-extension"
#recaser = $moses-script-dir/recaser/recase.perl
wrapping-script = "$moses-script-dir/ems/support/wrap-xml.perl $output-extension"
-# output-sgm =
+#output-sgm =
### BLEU
#
@@ -466,6 +494,13 @@ analyze-coverage = yes
#
# also report on phrase mappings used
report-segmentation = yes
+#
+# report precision of translations for each input word, broken down by
+# count of input word in corpus and model
+#report-precision-by-coverage = yes
+#
+# further precision breakdown by factor
+#precision-by-coverage-factor = pos
[EVALUATION:newstest2009]
@@ -484,6 +519,12 @@ reference-sgm = $wmt10-data/dev/newstest2009-ref.$output-extension.sgm
# tokenized-reference =
# reference =
+### analysis settings
+# may contain any of the general evaluation analysis settings
+# specific setting: base coverage statistics on earlier run
+#
+#precision-by-coverage-base = $working-dir/evaluation/test.analysis.5
+
### wrapping frame
# for nist-bleu and other scoring scripts, the output needs to be wrapped
# in sgm markup (typically like the input sgm)
diff --git a/scripts/ems/example/config.factored b/scripts/ems/example/config.factored
index 03207e611..5bbe72a66 100644
--- a/scripts/ems/example/config.factored
+++ b/scripts/ems/example/config.factored
@@ -134,11 +134,16 @@ order = 5
#
#rlm-training = "$moses-src-dir/randlm/bin/buildlm -falsepos 8 -values 8"
-### script to use for binary table format for irstlm
+### script to use for binary table format for irstlm or kenlm
# (default: no binarization)
-#
+
+# irstlm
#lm-binarizer = $moses-src-dir/irstlm/bin/compile-lm
+# kenlm, also set type to 8
+#lm-binarizer = $moses-src-dir/kenlm/build_binary
+#type = 8
+
### script to create quantized language model format (irstlm)
# (default: no quantization)
#
@@ -209,11 +214,16 @@ tuning-sgm = $wmt10-data/dev/news-test2008-ref.$output-extension.sgm
#lowercased-tuning =
#split-tuning =
-### script to use for binary table format for irstlm
+### script to use for binary table format for irstlm or kenlm
# (default: no binarization)
-#
+
+# irstlm
#lm-binarizer = $moses-src-dir/irstlm/bin/compile-lm
+# kenlm, also set type to 8
+#lm-binarizer = $moses-src-dir/kenlm/build_binary
+#type = 8
+
### script to create quantized language model format (irstlm)
# (default: no quantization)
#
@@ -326,6 +336,10 @@ lexicalized-reordering = msd-bidirectional-fe
#
score-settings = "--GoodTuring"
+### include word alignment in phrase table
+#
+#include-word-alignment-in-rules = yes
+
### if phrase table training should be skipped,
# point to phrase translation table
#
@@ -382,6 +396,10 @@ nbest = 100
#
# lambda =
+### additional flags for the filter script
+#
+filter-settings = ""
+
### additional flags for the decoder
#
decoder-settings = ""
@@ -438,6 +456,10 @@ trainer = $moses-script-dir/recaser/train-truecaser.perl
#
#jobs = 10
+### additional flags for the filter script
+#
+#filter-settings = ""
+
### additional decoder settings
# switches for the Moses decoder
#
@@ -449,7 +471,7 @@ decoder-settings = "-search-algorithm 1 -cube-pruning-pop-limit 5000 -s 5000"
### multiple reference translations
#
-multiref = yes
+#multiref = yes
### prepare system output for scoring
# this may include detokenization and wrapping output in sgm
@@ -458,7 +480,7 @@ multiref = yes
detokenizer = "$moses-script-dir/tokenizer/detokenizer.perl -l $output-extension"
#recaser = $moses-script-dir/recaser/recase.perl
wrapping-script = "$moses-script-dir/ems/support/wrap-xml.perl $output-extension"
-# output-sgm =
+#output-sgm =
### BLEU
#
@@ -486,6 +508,13 @@ analyze-coverage = yes
#
# also report on phrase mappings used
report-segmentation = yes
+#
+# report precision of translations for each input word, broken down by
+# count of input word in corpus and model
+#report-precision-by-coverage = yes
+#
+# further precision breakdown by factor
+#precision-by-coverage-factor = pos
[EVALUATION:newstest2009]
@@ -504,6 +533,12 @@ reference-sgm = $wmt10-data/dev/newstest2009-ref.$output-extension.sgm
# tokenized-reference =
# reference =
+### analysis settings
+# may contain any of the general evaluation analysis settings
+# specific setting: base coverage statistics on earlier run
+#
+#precision-by-coverage-base = $working-dir/evaluation/test.analysis.5
+
### wrapping frame
# for nist-bleu and other scoring scripts, the output needs to be wrapped
# in sgm markup (typically like the input sgm)
diff --git a/scripts/ems/example/config.hierarchical b/scripts/ems/example/config.hierarchical
index eca73576e..7f2e8a5fd 100644
--- a/scripts/ems/example/config.hierarchical
+++ b/scripts/ems/example/config.hierarchical
@@ -134,11 +134,16 @@ order = 5
#
#rlm-training = "$moses-src-dir/randlm/bin/buildlm -falsepos 8 -values 8"
-### script to use for binary table format for irstlm
+### script to use for binary table format for irstlm or kenlm
# (default: no binarization)
-#
+
+# irstlm
#lm-binarizer = $moses-src-dir/irstlm/bin/compile-lm
+# kenlm, also set type to 8
+#lm-binarizer = $moses-src-dir/kenlm/build_binary
+#type = 8
+
### script to create quantized language model format (irstlm)
# (default: no quantization)
#
@@ -204,11 +209,16 @@ tuning-sgm = $wmt10-data/dev/news-test2008-ref.$output-extension.sgm
#lowercased-tuning =
#split-tuning =
-### script to use for binary table format for irstlm
+### script to use for binary table format for irstlm or kenlm
# (default: no binarization)
-#
+
+# irstlm
#lm-binarizer = $moses-src-dir/irstlm/bin/compile-lm
+# kenlm, also set type to 8
+#lm-binarizer = $moses-src-dir/kenlm/build_binary
+#type = 8
+
### script to create quantized language model format (irstlm)
# (default: no quantization)
#
@@ -306,6 +316,10 @@ hierarchical-rule-set = true
#
score-settings = "--GoodTuring"
+### include word alignment in phrase table
+#
+#include-word-alignment-in-rules = yes
+
### if phrase table training should be skipped,
# point to phrase translation table
#
@@ -362,6 +376,10 @@ nbest = 100
#
# lambda =
+### additional flags for the filter script
+#
+filter-settings = ""
+
### additional flags for the decoder
#
decoder-settings = ""
@@ -418,6 +436,10 @@ trainer = $moses-script-dir/recaser/train-truecaser.perl
#
#jobs = 10
+### additional flags for the filter script
+#
+#filter-settings = ""
+
### additional decoder settings
# switches for the Moses decoder
#
@@ -429,7 +451,7 @@ trainer = $moses-script-dir/recaser/train-truecaser.perl
### multiple reference translations
#
-multiref = yes
+#multiref = yes
### prepare system output for scoring
# this may include detokenization and wrapping output in sgm
@@ -438,7 +460,7 @@ multiref = yes
detokenizer = "$moses-script-dir/tokenizer/detokenizer.perl -l $output-extension"
#recaser = $moses-script-dir/recaser/recase.perl
wrapping-script = "$moses-script-dir/ems/support/wrap-xml.perl $output-extension"
-# output-sgm =
+#output-sgm =
### BLEU
#
@@ -466,6 +488,13 @@ analyze-coverage = yes
#
# also report on phrase mappings used
report-segmentation = yes
+#
+# report precision of translations for each input word, broken down by
+# count of input word in corpus and model
+#report-precision-by-coverage = yes
+#
+# further precision breakdown by factor
+#precision-by-coverage-factor = pos
[EVALUATION:newstest2009]
@@ -484,6 +513,12 @@ reference-sgm = $wmt10-data/dev/newstest2009-ref.$output-extension.sgm
# tokenized-reference =
# reference =
+### analysis settings
+# may contain any of the general evaluation analysis settings
+# specific setting: base coverage statistics on earlier run
+#
+#precision-by-coverage-base = $working-dir/evaluation/test.analysis.5
+
### wrapping frame
# for nist-bleu and other scoring scripts, the output needs to be wrapped
# in sgm markup (typically like the input sgm)
diff --git a/scripts/ems/example/config.syntax b/scripts/ems/example/config.syntax
index f2f082b54..7d25ed1c2 100644
--- a/scripts/ems/example/config.syntax
+++ b/scripts/ems/example/config.syntax
@@ -138,11 +138,16 @@ order = 5
#
#rlm-training = "$moses-src-dir/randlm/bin/buildlm -falsepos 8 -values 8"
-### script to use for binary table format for irstlm
+### script to use for binary table format for irstlm or kenlm
# (default: no binarization)
-#
+
+# irstlm
#lm-binarizer = $moses-src-dir/irstlm/bin/compile-lm
+# kenlm, also set type to 8
+#lm-binarizer = $moses-src-dir/kenlm/build_binary
+#type = 8
+
### script to create quantized language model format (irstlm)
# (default: no quantization)
#
@@ -208,11 +213,16 @@ tuning-sgm = $wmt10-data/dev/news-test2008-ref.$output-extension.sgm
#lowercased-tuning =
#split-tuning =
-### script to use for binary table format for irstlm
+### script to use for binary table format for irstlm or kenlm
# (default: no binarization)
-#
+
+# irstlm
#lm-binarizer = $moses-src-dir/irstlm/bin/compile-lm
+# kenlm, also set type to 8
+#lm-binarizer = $moses-src-dir/kenlm/build_binary
+#type = 8
+
### script to create quantized language model format (irstlm)
# (default: no quantization)
#
@@ -310,6 +320,10 @@ extract-settings = "--MinHoleSource 1 --NonTermConsecSource"
#
score-settings = "--GoodTuring"
+### include word alignment in phrase table
+#
+#include-word-alignment-in-rules = yes
+
### if phrase table training should be skipped,
# point to phrase translation table
#
@@ -366,6 +380,10 @@ nbest = 100
#
# lambda =
+### additional flags for the filter script
+#
+filter-settings = ""
+
### additional flags for the decoder
#
decoder-settings = ""
@@ -422,6 +440,10 @@ trainer = $moses-script-dir/recaser/train-truecaser.perl
#
#jobs = 10
+### additional flags for the filter script
+#
+#filter-settings = ""
+
### additional decoder settings
# switches for the Moses decoder
#
@@ -433,7 +455,7 @@ trainer = $moses-script-dir/recaser/train-truecaser.perl
### multiple reference translations
#
-multiref = yes
+#multiref = yes
### prepare system output for scoring
# this may include detokenization and wrapping output in sgm
@@ -442,7 +464,7 @@ multiref = yes
detokenizer = "$moses-script-dir/tokenizer/detokenizer.perl -l $output-extension"
#recaser = $moses-script-dir/recaser/recase.perl
wrapping-script = "$moses-script-dir/ems/support/wrap-xml.perl $output-extension"
-# output-sgm =
+#output-sgm =
### BLEU
#
@@ -470,6 +492,13 @@ analyze-coverage = yes
#
# also report on phrase mappings used
report-segmentation = yes
+#
+# report precision of translations for each input word, broken down by
+# count of input word in corpus and model
+#report-precision-by-coverage = yes
+#
+# further precision breakdown by factor
+#precision-by-coverage-factor = pos
[EVALUATION:newstest2009]
@@ -488,6 +517,12 @@ reference-sgm = $wmt10-data/dev/newstest2009-ref.$output-extension.sgm
# tokenized-reference =
# reference =
+### analysis settings
+# may contain any of the general evaluation analysis settings
+# specific setting: base coverage statistics on earlier run
+#
+#precision-by-coverage-base = $working-dir/evaluation/test.analysis.5
+
### wrapping frame
# for nist-bleu and other scoring scripts, the output needs to be wrapped
# in sgm markup (typically like the input sgm)
diff --git a/scripts/ems/example/config.toy b/scripts/ems/example/config.toy
index 166577d6e..5aa4945a2 100644
--- a/scripts/ems/example/config.toy
+++ b/scripts/ems/example/config.toy
@@ -128,11 +128,16 @@ order = 5
#
#rlm-training = "$moses-src-dir/randlm/bin/buildlm -falsepos 8 -values 8"
-### script to use for binary table format for irstlm
+### script to use for binary table format for irstlm or kenlm
# (default: no binarization)
-#
+
+# irstlm
#lm-binarizer = $moses-src-dir/irstlm/bin/compile-lm
+# kenlm, also set type to 8
+#lm-binarizer = $moses-src-dir/kenlm/build_binary
+#type = 8
+
### script to create quantized language model format (irstlm)
# (default: no quantization)
#
@@ -188,11 +193,16 @@ raw-corpus = $toy-data/nc-5k.$output-extension
#lowercased-tuning =
#split-tuning =
-### script to use for binary table format for irstlm
+### script to use for binary table format for irstlm or kenlm
# (default: no binarization)
-#
+
+# irstlm
#lm-binarizer = $moses-src-dir/irstlm/bin/compile-lm
+# kenlm, also set type to 8
+#lm-binarizer = $moses-src-dir/kenlm/build_binary
+#type = 8
+
### script to create quantized language model format (irstlm)
# (default: no quantization)
#
@@ -290,6 +300,10 @@ lexicalized-reordering = msd-bidirectional-fe
#
score-settings = "--GoodTuring"
+### include word alignment in phrase table
+#
+#include-word-alignment-in-rules = yes
+
### if phrase table training should be skipped,
# point to phrase translation table
#
@@ -346,6 +360,10 @@ nbest = 100
#
# lambda =
+### additional flags for the filter script
+#
+filter-settings = ""
+
### additional flags for the decoder
#
decoder-settings = ""
@@ -398,6 +416,10 @@ trainer = $moses-script-dir/recaser/train-truecaser.perl
[EVALUATION]
+### additional flags for the filter script
+#
+#filter-settings = ""
+
### additional decoder settings
# switches for the Moses decoder
#
@@ -409,7 +431,7 @@ decoder-settings = "-search-algorithm 1 -cube-pruning-pop-limit 5000 -s 5000"
### multiple reference translations
#
-multiref = yes
+#multiref = yes
### prepare system output for scoring
# this may include detokenization and wrapping output in sgm
@@ -418,7 +440,7 @@ multiref = yes
detokenizer = "$moses-script-dir/tokenizer/detokenizer.perl -l $output-extension"
#recaser = $moses-script-dir/recaser/recase.perl
wrapping-script = "$moses-script-dir/ems/support/wrap-xml.perl $output-extension"
-# output-sgm =
+#output-sgm =
### BLEU
#
@@ -446,6 +468,13 @@ analyze-coverage = yes
#
# also report on phrase mappings used
report-segmentation = yes
+#
+# report precision of translations for each input word, broken down by
+# count of input word in corpus and model
+#report-precision-by-coverage = yes
+#
+# further precision breakdown by factor
+#precision-by-coverage-factor = pos
[EVALUATION:test]
@@ -464,6 +493,12 @@ reference-sgm = $toy-data/test-ref.$output-extension.sgm
# tokenized-reference =
# reference =
+### analysis settings
+# may contain any of the general evaluation analysis settings
+# specific setting: base coverage statistics on earlier run
+#
+#precision-by-coverage-base = $working-dir/evaluation/test.analysis.5
+
### wrapping frame
# for nist-bleu and other scoring scripts, the output needs to be wrapped
# in sgm markup (typically like the input sgm)
diff --git a/scripts/ems/experiment.meta b/scripts/ems/experiment.meta
index 8f38c3802..a3c6d5783 100644
--- a/scripts/ems/experiment.meta
+++ b/scripts/ems/experiment.meta
@@ -128,10 +128,11 @@ train
[LM] multiple
get-corpus
- in: get-corpus-script
+ in: get-corpus-script
out: raw-corpus
+ pass-unless: get-corpus-script
default-name: lm/txt
- template: IN > OUT
+ template: $get-corpus-script > OUT
tokenize
in: raw-corpus
out: tokenized-corpus
@@ -156,6 +157,7 @@ lowercase
ignore-if: output-truecaser
only-factor-0: yes
template: $output-lowercaser < IN > OUT
+ parallelizable: yes
truecase
in: factorized-corpus TRUECASER:truecase-model
out: lowercased-corpus
@@ -163,7 +165,8 @@ truecase
default-name: lm/truecased
ignore-unless: output-truecaser
only-factor-0: yes
- template: $output-truecaser -model IN1.$output-extension < IN > OUT
+ template: $output-truecaser -model IN1.$output-extension < IN > OUT
+ parallelizable: yes
split
in: lowercased-corpus SPLITTER:splitter-model
out: split-corpus
@@ -351,23 +354,30 @@ build-reordering
build-ttable
in: extracted-phrases lexical-translation-table
out: phrase-translation-table
- rerun-on-change: translation-factors hierarchical-rule-set score-settings training-options script report-precision-by-coverage
+ rerun-on-change: translation-factors hierarchical-rule-set score-settings training-options script EVALUATION:report-precision-by-coverage include-word-alignment-in-rules
default-name: model/phrase-table
build-generation
in: corpus
out: generation-table
rerun-on-change: generation-factors generation-type training-options script
ignore-unless: generation-factors
+ ignore-if: generation-corpus
+ default-name: model/generation-table
+build-generation-custom
+ in: generation-corpus
+ out: generation-table
+ rerun-on-change: generation-factors generation-type training-options script generation-corpus
+ ignore-unless: AND generation-factors generation-corpus
default-name: model/generation-table
create-config
- in: reordering-table phrase-translation-table generation-table LM:binlm biconcor-model
+ in: reordering-table phrase-translation-table generation-table LM:binlm
out: config
ignore-if: use-hiero INTERPOLATED-LM:script
rerun-on-change: decoding-steps alignment-factors translation-factors reordering-factors generation-factors lexicalized-reordering training-options script decoding-graph-backoff score-settings
default-name: model/moses.ini
error: Unknown option
create-config-interpolated-lm
- in: reordering-table phrase-translation-table generation-table INTERPOLATED-LM:binlm biconcor-model
+ in: reordering-table phrase-translation-table generation-table INTERPOLATED-LM:binlm
out: config
ignore-if: use-hiero
ignore-unless: INTERPOLATED-LM:script
@@ -514,8 +524,15 @@ split-reference
pass-unless: output-splitter
multiref: $moses-script-dir/ems/support/run-command-on-multiple-refsets.perl
template: $output-splitter -model IN1.$output-extension < IN > OUT
+filter
+ in: TRAINING:config input
+ out: filtered-config
+ default-name: tuning/moses.filtered.ini
+ rerun-on-change: filter-settings
+ pass-if: TRAINING:binarize-all
+ ignore-if: use-hiero
tune
- in: TRAINING:config input reference
+ in: filtered-config input reference
out: weight-config
ignore-if: use-hiero
qsub-script: yes
@@ -602,8 +619,14 @@ split-input
default-name: evaluation/input.split
pass-unless: input-splitter
template: $input-splitter -model IN1.$input-extension < IN > OUT
-decode
+filter
in: TUNING:config-with-reused-weights input
+ out: filtered-config
+ default-name: evaluation/filtered.ini
+ pass-if: TRAINING:binarize-all
+ rerun-on-change: filter-settings report-precision-by-coverage
+decode
+ in: filtered-config input
out: system-output
default-name: evaluation/output
qsub-script: yes
@@ -747,13 +770,14 @@ analysis-coverage
ignore-unless: AND analysis analyze-coverage
rerun-on-change: score-settings
analysis-precision
- in: recased-output reference input TRAINING:corpus TRAINING:phrase-translation-table
+ in: recased-output reference input TRAINING:corpus TRAINING:phrase-translation-table analysis-coverage
out: analysis
default-name: evaluation/analysis
ignore-unless: AND analysis analyze-coverage report-precision-by-coverage
+ rerun-on-change: precision-by-coverage-base
[REPORTING] single
report
- in: EVALUATION:nist-bleu-score EVALUATION:nist-bleu-c-score EVALUATION:multi-bleu-score EVALUATION:multi-bleu-c-score EVALUATION:meteor-score EVALUATION:ter-score EVALUATION:wer-score EVALUATION:ibm-bleu-score EVALUATION:ibm-bleu-c-score EVALUATION:analysis EVALUATION:analysis-coverage EVALUATION:analysis-prec
+ in: EVALUATION:nist-bleu-score EVALUATION:nist-bleu-c-score EVALUATION:multi-bleu-score EVALUATION:multi-bleu-c-score EVALUATION:meteor-score EVALUATION:ter-score EVALUATION:wer-score EVALUATION:ibm-bleu-score EVALUATION:ibm-bleu-c-score EVALUATION:analysis EVALUATION:analysis-coverage EVALUATION:analysis-prec TRAINING:biconcor-model
out: report
default-name: evaluation/report
diff --git a/scripts/ems/experiment.perl b/scripts/ems/experiment.perl
index 006b6f9b1..956a422af 100755
--- a/scripts/ems/experiment.perl
+++ b/scripts/ems/experiment.perl
@@ -939,12 +939,18 @@ sub define_step {
elsif ($DO_STEP[$i] eq 'TUNING:factorize-input') {
&define_tuningevaluation_factorize($i);
}
+ elsif ($DO_STEP[$i] eq 'TUNING:filter') {
+ &define_tuningevaluation_filter(undef,$i);
+ }
elsif ($DO_STEP[$i] eq 'TUNING:tune') {
&define_tuning_tune($i);
}
elsif ($DO_STEP[$i] =~ /^EVALUATION:(.+):factorize-input$/) {
&define_tuningevaluation_factorize($i);
}
+ elsif ($DO_STEP[$i] =~ /^EVALUATION:(.+):filter$/) {
+ &define_tuningevaluation_filter($1,$i);
+ }
elsif ($DO_STEP[$i] =~ /^EVALUATION:(.+):decode$/) {
&define_evaluation_decode($1,$i);
}
@@ -1532,41 +1538,20 @@ sub define_tuning_tune {
my $lambda = &backoff_and_get("TUNING:lambda");
my $tune_continue = &backoff_and_get("TUNING:continue");
my $tune_inputtype = &backoff_and_get("TUNING:inputtype");
- my $tune_inputfilter = &backoff_and_get("TUNING:input-filter");
-
- print "define_tuning_tuning ($tuned_config,$config,$input)\n" if $VERBOSE;
-
my $jobs = &backoff_and_get("TUNING:jobs");
my $decoder = &check_backoff_and_get("TUNING:decoder");
- my $binarizer = &get("GENERAL:ttable-binarizer");
- my $lex_binarizer = &get("GENERAL:rtable-binarizer");
+
my $decoder_settings = &backoff_and_get("TUNING:decoder-settings");
$decoder_settings = "" unless $decoder_settings;
$decoder_settings .= " -v 0 " unless $CLUSTER && $jobs;
+
my $tuning_settings = &backoff_and_get("TUNING:tuning-settings");
$tuning_settings = "" unless $tuning_settings;
- my $filter = "$scripts/training/filter-model-given-input.pl";
- $filter .= " -Binarizer \"$binarizer\"" if $binarizer;
- if (&get("TRAINING:hierarchical-rule-set")) {
- $filter .= " --Hierarchical";
- #$filter .= " --MaxSpan 9999" if &get("GENERAL:input-parser") || &get("GENERAL:output-parser");
- }
-
- my $binarize_all = &backoff_and_get("TRAINING:binarize-all");
-
- my $cmd = "$tuning_script $input $reference $decoder $config --nbest $nbest_size --working-dir $dir/tuning/tmp.$VERSION --decoder-flags \"$decoder_settings\" --rootdir $scripts $tuning_settings";
-
- if ($binarize_all) {
- $cmd .= " --no-filter-phrase-table";
- } else {
- $cmd .= " --filtercmd '$filter'";
- }
-
+ my $cmd = "$tuning_script $input $reference $decoder $config --nbest $nbest_size --working-dir $dir/tuning/tmp.$VERSION --decoder-flags \"$decoder_settings\" --rootdir $scripts $tuning_settings --no-filter-phrase-table";
$cmd .= " --lambdas \"$lambda\"" if $lambda;
$cmd .= " --continue" if $tune_continue;
$cmd .= " --inputtype $tune_inputtype" if $tune_inputtype;
- $cmd .= " --filterfile $tune_inputfilter" if $tune_inputfilter;
my $qsub_args = &get_qsub_args("TUNING");
$cmd .= " --queue-flags=\"$qsub_args\"" if ($CLUSTER && $qsub_args);
@@ -1689,14 +1674,16 @@ sub define_training_build_ttable {
my ($step_id) = @_;
my ($phrase_table, $extract,$lex) = &get_output_and_input($step_id);
- my $report_precision_by_coverage = &backoff_and_get("EVALUATION:report-precision-by-coverage");
+ my $word_report = &backoff_and_get("EVALUATION:report-precision-by-coverage");
+ my $word_alignment = &backoff_and_get("TRAINING:include-word-alignment-in-rules");
my $cmd = &get_training_setting(6);
$cmd .= "-extract-file $extract ";
$cmd .= "-lexical-file $lex ";
$cmd .= &get_table_name_settings("translation-factors","phrase-translation-table",$phrase_table);
- if (defined($report_precision_by_coverage) && $report_precision_by_coverage eq "yes") {
+ if ((defined($word_report) && $word_report eq "yes") ||
+ (defined($word_alignment) && $word_alignment eq "yes")) {
$cmd .= "-phrase-word-alignment ";
}
@@ -1726,13 +1713,23 @@ sub define_training_build_generation {
&create_step($step_id,$cmd);
}
+sub define_training_build_custom_generation {
+ my ($step_id) = @_;
+
+ my ($generation_table, $generation_corpus) = &get_output_and_input($step_id);
+ my $cmd = &get_training_setting(8);
+ $cmd .= "-generation-corpus $generation_corpus ";
+ $cmd .= &get_table_name_settings("generation-factors","generation-table",$generation_table);
+
+ &create_step($step_id,$cmd);
+}
+
sub define_training_create_config {
my ($step_id) = @_;
my ($config,
$reordering_table,$phrase_translation_table,$generation_table,@LM)
= &get_output_and_input($step_id);
- if ($LM[$#LM] =~ /biconcor/ || $LM[$#LM] eq '') { pop @LM; }
my $cmd = &get_training_setting(9);
@@ -1781,6 +1778,9 @@ sub define_training_create_config {
$type = 5 if (&get("INTERPOLATED-LM:rlm") ||
&backoff_and_get("INTERPOLATED-LM:lm-randomizer"));
+ # manually set type
+ $type = &get("INTERPOLATED-LM:type") if (&get("INTERPOLATED-LM:type"));
+
# order and factor inherited from individual LMs
my $set = shift @LM_SETS;
my $order = &check_backoff_and_get("LM:$set:order");
@@ -1804,11 +1804,14 @@ sub define_training_create_config {
$type = 1 if (&get("LM:$set:binlm") ||
&backoff_and_get("LM:$set:lm-binarizer"));
- # using a randomized lm?
+ # using a randomized lm?
$type = 5 if (&get("LM:$set:rlm") ||
&backoff_and_get("LM:$set:rlm-training") ||
&backoff_and_get("LM:$set:lm-randomizer"));
+ # manually set type
+ $type = &backoff_and_get("LM:$set:type") if (&backoff_and_get("LM:$set:type"));
+
# which factor is the model trained on?
my $factor = 0;
if (&backoff_and_get("TRAINING:output-factors") &&
@@ -2003,28 +2006,67 @@ sub encode_factor_list {
return $id;
}
+sub define_tuningevaluation_filter {
+ my ($set,$step_id) = @_;
+ my $scripts = &check_and_get("GENERAL:moses-script-dir");
+ my $dir = &check_and_get("GENERAL:working-dir");
+ my $tuning_flag = !defined($set);
+
+ my ($filter_config,
+ $config,$input) = &get_output_and_input($step_id);
+
+ my $binarizer = &get("GENERAL:ttable-binarizer");
+ my $hierarchical = &get("TRAINING:hierarchical-rule-set");
+ my $report_precision_by_coverage = !$tuning_flag && &backoff_and_get("EVALUATION:$set:report-precision-by-coverage");
+
+ # occasionally, lattices and conf nets need to be able
+ # to filter phrase tables, we can provide sentences/ngrams
+ # in a separate file
+ my $input_filter;
+ $input_filter = &get("EVALUATION:$set:input-filter") unless $tuning_flag;
+ $input_filter = &get("TUNING:input-filter") if $tuning_flag;
+ $input_filter = $input unless $input_filter;
+
+ my $filter_dir = "$dir/tuning/filtered.$VERSION";
+ $filter_dir = "$dir/evaluation/filtered.$set.$VERSION" unless $tuning_flag;
+
+ my $settings = &backoff_and_get("EVALUATION:$set:filter-settings") unless $tuning_flag;
+ $settings = &get("TUNING:filter-settings") if $tuning_flag;
+ $settings = "" unless $settings;
+
+ $binarizer .= " -alignment-info"
+ if !$tuning_flag && $binarizer && $report_precision_by_coverage;
+ $settings .= " -Binarizer \"$binarizer\"" if $binarizer;
+ $settings .= " --Hierarchical" if &get("TRAINING:hierarchical-rule-set");
+
+ my $cmd = "$scripts/training/filter-model-given-input.pl";
+ $cmd .= " $filter_dir $config $input_filter $settings";
+
+ # copy moses.ini into specified file location
+ $cmd .= "\ncp $filter_dir/moses.ini $filter_config\n";
+
+ &create_step($step_id,$cmd);
+}
+
sub define_evaluation_decode {
my ($set,$step_id) = @_;
my $scripts = &check_and_get("GENERAL:moses-script-dir");
my $dir = &check_and_get("GENERAL:working-dir");
my ($system_output,
- $config,$input,$reference) = &get_output_and_input($step_id);
+ $config,$input) = &get_output_and_input($step_id);
my $jobs = &backoff_and_get("EVALUATION:$set:jobs");
my $decoder = &check_backoff_and_get("EVALUATION:$set:decoder");
- my $binarizer = &get("GENERAL:ttable-binarizer");
- my $lex_binarizer = &get("GENERAL:rtable-binarizer");
my $settings = &backoff_and_get("EVALUATION:$set:decoder-settings");
$settings = "" unless $settings;
my $nbest = &backoff_and_get("EVALUATION:$set:nbest");
- my $do_filter = &get("GENERAL:do_filter");
- my $binarize_all = &backoff_and_get("TRAINING:binarize-all");
my $moses_parallel = &backoff_and_get("EVALUATION:$set:moses-parallel");
my $report_segmentation = &backoff_and_get("EVALUATION:$set:report-segmentation");
my $report_precision_by_coverage = &backoff_and_get("EVALUATION:$set:report-precision-by-coverage");
my $hierarchical = &get("TRAINING:hierarchical-rule-set");
+ # specify additional output for analysis
if (defined($report_precision_by_coverage) && $report_precision_by_coverage eq "yes") {
$settings .= " -use-alignment-info -alignment-output-file $system_output.wa";
$report_segmentation = "yes";
@@ -2038,46 +2080,10 @@ sub define_evaluation_decode {
}
}
- my $qsub_filter = 0;
- if ($jobs && $CLUSTER) {
- $qsub_filter = 1;
- }
- #occasionally, lattices and conf nets need to be able filter phrase tables, we can provide sentences/ngrams in a separate file
- my $input_filter = &get("EVALUATION:$set:input-filter");
- $input_filter = $input unless ($input_filter);
-
- my $filter = "$scripts/training/filter-model-given-input.pl";
- $filter .= " $dir/evaluation/filtered.$set.$VERSION $config $input_filter";
- $binarizer .= " -alignment-info" if $binarizer && $report_precision_by_coverage;
- $filter .= " -Binarizer \"$binarizer\"" if $binarizer;
-
- if (&get("TRAINING:hierarchical-rule-set")) {
- $filter .= " --Hierarchical";
- #$filter .= " --MaxSpan 9999" if &get("GENERAL:input-parser") || &get("GENERAL:output-parser");
- # set number of non terminals, phrase length
- }
-
- if (!$do_filter && $binarize_all) {
- $filter = "mkdir -p $config $dir/evaluation/filtered.$set.$VERSION\n"
- ."cp $config $dir/evaluation/filtered.$set.$VERSION/moses.ini \n";
- $qsub_filter = 0;
- }
-
+ # create command
my $cmd;
- my $nbest_size;
- if ($nbest) {
- $nbest =~ /(\d+)/;
- $nbest_size = $1;
- }
+ $nbest =~ s/[^\d]//g if $nbest;
if ($jobs && $CLUSTER) {
- if ($qsub_filter) {
- $cmd = "qsub $filter\n";
- $cmd .= "perl -e 'while(! -e \"$dir/evaluation/filtered.$set.$VERSION/info\") { sleep(10); }'\n";
- }
- else {
- $cmd = $filter."\n";
- }
-
$cmd .= "mkdir -p $dir/evaluation/tmp.$set.$VERSION\n";
$cmd .= "cd $dir/evaluation/tmp.$set.$VERSION\n";
if (defined $moses_parallel) {
@@ -2087,13 +2093,16 @@ sub define_evaluation_decode {
}
my $qsub_args = &get_qsub_args($DO_STEP[$step_id]);
$cmd .= " -queue-parameters \"$qsub_args\"" if ($CLUSTER && $qsub_args);
- $cmd .= " -decoder $decoder -config $dir/evaluation/filtered.$set.$VERSION/moses.ini -input-file $input --jobs $jobs -decoder-parameters \"$settings\" > $system_output";
-
- $cmd .= " -n-best-file $system_output.best$nbest_size -n-best-size $nbest" if $nbest;
+ $cmd .= " -decoder $decoder";
+ $cmd .= " -config $config";
+ $cmd .= " -input-file $input";
+ $cmd .= " --jobs $jobs";
+ $cmd .= " -decoder-parameters \"$settings\" > $system_output";
+ $cmd .= " -n-best-file $system_output.best$nbest -n-best-size $nbest" if $nbest;
}
else {
- $cmd = $filter."\n$decoder $settings -v 0 -f $dir/evaluation/filtered.$set.$VERSION/moses.ini < $input > $system_output";
- $cmd .= " -n-best-list $system_output.best$nbest_size $nbest" if $nbest;
+ $cmd = "$decoder $settings -v 0 -f $config < $input > $system_output";
+ $cmd .= " -n-best-list $system_output.best$nbest $nbest" if $nbest;
}
&create_step($step_id,$cmd);
@@ -2122,15 +2131,17 @@ sub define_evaluation_analysis_precision {
my ($set,$step_id) = @_;
my ($analysis,
- $output,$reference,$input,$corpus,$ttable) = &get_output_and_input($step_id);
+ $output,$reference,$input,$corpus,$ttable,$coverage) = &get_output_and_input($step_id);
my $script = &backoff_and_get("EVALUATION:$set:analysis");
my $input_extension = &check_backoff_and_get("TRAINING:input-extension");
-
+ my $coverage_base = &backoff_and_get("EVALUATION:$set:precision-by-coverage-base");
my $cmd = "$script -system $output -reference $reference -input $input -dir $analysis -precision-by-coverage";
my $segmentation_file = &get_default_file("EVALUATION",$set,"decode");
$cmd .= " -segmentation $segmentation_file";
$cmd .= " -system-alignment $segmentation_file.wa";
+ $coverage = $coverage_base if defined($coverage_base);
+ $cmd .= " -coverage $coverage";
# get table with surface factors
if (&backoff_and_get("TRAINING:input-factors")) {
@@ -2184,6 +2195,8 @@ sub define_evaluation_analysis_coverage {
my %IN = &get_factor_id("input");
$ttable_config = "-input-factors ".(scalar(keys %IN));
my %OUT = &get_factor_id("output");
+ $ttable_config .= " -input-factor-names '".join(",",keys %IN)."'";
+ $ttable_config .= " -output-factor-names '".join(",",keys %OUT)."'";
my $factors = &encode_factor_definition("translation-factors",\%IN,\%OUT);
my @FACTOR = split(/\+/,$factors);
my @SPECIFIED_NAME;
@@ -2554,7 +2567,6 @@ sub get_default_file {
sub long_file_name {
my ($file,$module,$set) = @_;
return $file if $file =~ /^\//;
-# print "\t\tlong_file_name($file,$module,$set)\n";
if ($file !~ /\//) {
my $dir = $module;
diff --git a/scripts/ems/support/analysis.perl b/scripts/ems/support/analysis.perl
index 1ab18330f..9a9de9327 100755
--- a/scripts/ems/support/analysis.perl
+++ b/scripts/ems/support/analysis.perl
@@ -5,12 +5,14 @@ use Getopt::Long "GetOptions";
my $MAX_LENGTH = 4;
-my ($system,$system_alignment,$segmentation,$reference,$dir,$input,$corpus,$ttable,@FACTORED_TTABLE,$score_options,$hierarchical,$output_corpus,$alignment,$biconcor,$input_factors,$precision_by_coverage,$precision_by_coverage_factor);
+my ($system,$system_alignment,$segmentation,$reference,$dir,$input,$corpus,$ttable,@FACTORED_TTABLE,$score_options,$hierarchical,$output_corpus,$alignment,$biconcor,$input_factors,$input_factor_names,$output_factor_names,$precision_by_coverage,$precision_by_coverage_factor,$coverage_dir);
if (!&GetOptions('system=s' => \$system, # raw output from decoder
'system-alignment=s' => \$system_alignment, # word alignment of system output
'reference=s' => \$reference, # tokenized reference
'dir=s' => \$dir, # directory for storing results
'input-factors=i' => \$input_factors, # list of input factors
+ 'input-factor-names=s' => \$input_factor_names,
+ 'output-factor-names=s' => \$output_factor_names,
'precision-by-coverage' => \$precision_by_coverage, # added report for input words
'precision-by-coverage-factor=i' => \$precision_by_coverage_factor, # sub-reports
'input=s' => \$input, # tokenized input (as for decoder)
@@ -21,6 +23,7 @@ if (!&GetOptions('system=s' => \$system, # raw output from decoder
'score-options=s' => \$score_options, # score options to detect p(e|f) score
'output-corpus=s' => \$output_corpus, # output side of parallel training corpus
'alignment-file=s' => \$alignment, # alignment of parallel corpus
+ 'coverage=s' => \$coverage_dir, # already computed coverage, stored in this dir
'biconcor=s' => \$biconcor, # binary for bilingual concordancer
'hierarchical' => \$hierarchical) || # hierarchical model?
!defined($dir)) {
@@ -29,6 +32,14 @@ if (!&GetOptions('system=s' => \$system, # raw output from decoder
`mkdir -p $dir`;
+# factor names
+if (defined($input_factor_names) && defined($output_factor_names)) {
+ open(FACTOR,">$dir/factor-names");
+ print FACTOR $input_factor_names."\n";
+ print FACTOR $output_factor_names."\n";
+ close(FACTOR);
+}
+
# compare system output against reference translation
my(@SYSTEM,@REFERENCE);
my (%PRECISION_CORRECT,%PRECISION_TOTAL,
@@ -82,13 +93,13 @@ if (defined($segmentation)) {
# coverage analysis
my (%INPUT_PHRASE,%CORPUS_COVERED,%TTABLE_COVERED,%TTABLE_ENTROPY);
-if (!defined($system_alignment) && (defined($ttable) || defined($corpus))) {
+if (!defined($coverage_dir) && (defined($ttable) || defined($corpus))) {
if (!defined($input)) {
die("ERROR: when specifying either ttable or input-corpus, please also specify input\n");
}
$MAX_LENGTH = 7;
&input_phrases();
- &ttable_coverage(0,$ttable) if defined($ttable);
+ &ttable_coverage("0",$ttable) if defined($ttable);
&corpus_coverage() if defined($corpus);
&input_annotation();
@@ -101,11 +112,11 @@ if (!defined($system_alignment) && (defined($ttable) || defined($corpus))) {
}
# factored ttable coverage
- foreach my $ttable (@FACTORED_TTABLE) {
+ foreach my $factored_ttable (@FACTORED_TTABLE) {
die("factored ttable must be specified as factor:file -- $ttable")
- unless $ttable =~ /^(\d+)\:(.+)/; # factor:ttable
+ unless $factored_ttable =~ /^([\d,]+)\:(.+)/; # factor:ttable
my ($factor,$file) = ($1,$2);
- next unless $file eq $ttable; # no need to do this twice
+ next if defined($ttable) && $file eq $ttable; # no need to do this twice
&input_phrases($factor);
&ttable_coverage($factor,$file);
}
@@ -166,7 +177,7 @@ sub get_factor_phrase {
$line =~ s/ $//;
# only surface? delete remaining factors
- if (!defined($factor) || $factor == 0) {
+ if (!defined($factor) || $factor eq "0") {
$line =~ s/\|\S+//g;
return $line;
}
@@ -196,7 +207,7 @@ sub get_factor_word {
sub factor_ext {
my ($factor) = @_;
- return "" if !defined($factor) || $factor == 0;
+ return "" if !defined($factor) || $factor eq "0";
return ".".$factor;
}
@@ -327,6 +338,7 @@ sub ttable_coverage {
# handling hierarchical
$in =~ s/ \[[^ \]]+\]$//; # remove lhs nt
next if $in =~ /\[[^ \]]+\]\[[^ \]]+\]/; # only consider flat rules
+ $in = &get_factor_phrase($factor,$in) unless !defined($factor) || $factor eq "0";
$scores = $COLUMN[4] if defined($hierarchical); #scalar @COLUMN == 5;
my @IN = split(/ /,$in);
$size = scalar @IN;
@@ -536,7 +548,10 @@ sub precision_by_coverage {
# get coverage statistics
my %COVERAGE;
- open(COVERAGE,"$dir/$coverage_type-coverage-by-phrase");
+ print STDERR "".(defined($coverage_dir)?$coverage_dir:$dir)
+ ."/$coverage_type-coverage-by-phrase";
+ open(COVERAGE,(defined($coverage_dir)?$coverage_dir:$dir)
+ ."/$coverage_type-coverage-by-phrase");
while(<COVERAGE>) {
chop;
my ($phrase,$count) = split(/\t/);
diff --git a/scripts/ems/support/report-experiment-scores.perl b/scripts/ems/support/report-experiment-scores.perl
index 062574785..59f43f6eb 100755
--- a/scripts/ems/support/report-experiment-scores.perl
+++ b/scripts/ems/support/report-experiment-scores.perl
@@ -101,7 +101,7 @@ sub extract_multi_bleu {
my ($bleu,$ratio);
foreach (`cat $file`) {
$bleu = $1 if /BLEU = (\S+), /;
- $ratio = $1 if / ration?=(\S+)\)/;
+ $ratio = $1 if / ration?=(\S+),/;
}
my $output = sprintf("%.02f ",$bleu);
$output .= sprintf("(%.03f) ",$ratio) if $ratio;
diff --git a/scripts/ems/web/analysis.php b/scripts/ems/web/analysis.php
index dc534d3fa..489bdc50d 100644
--- a/scripts/ems/web/analysis.php
+++ b/scripts/ems/web/analysis.php
@@ -1,6 +1,6 @@
<?php
-// main page frame, triggers the loading of parts
+# main page frame, triggers the loading of parts
function show_analysis() {
global $task,$user,$setup,$id,$set;
global $dir;
@@ -8,27 +8,34 @@ function show_analysis() {
head("Analysis: $task ($user), Set $set, Run $id");
?><script>
-function show(field,sort,count) {
+function show(field,sort,count,filter) {
var url = '?analysis=' + field + '_show'
- + '&setup=<?php print $setup ?>&id=<?php print $id ?>&set=<?php print $set ?>'
- + '&sort=' + sort
- + '&count=' + count;
+ + '&setup=<?php print $setup ?>'
+ + '&id=<?php print $id ?>'
+ + '&set=<?php print $set ?>'
+ + '&sort=' + sort
+ + '&count=' + count
+ + '&filter=' + filter;
new Ajax.Updater(field, url, { method: 'get', evalScripts: true });
}
function ngram_show(type,order,count,sort,smooth) {
var url = '?analysis=ngram_' + type + '_show'
- + '&setup=<?php print $setup ?>&id=<?php print $id ?>&set=<?php print $set ?>'
- + '&order=' + order
- + '&smooth=' + smooth
- + '&sort=' + sort
- + '&count=' + count;
+ + '&setup=<?php print $setup ?>'
+ + '&id=<?php print $id ?>'
+ + '&set=<?php print $set ?>'
+ + '&order=' + order
+ + '&smooth=' + smooth
+ + '&sort=' + sort
+ + '&count=' + count;
var field = (type == "precision" ? "nGramPrecision" : "nGramRecall") + order;
new Ajax.Updater(field, url, { method: 'get', evalScripts: true });
}
function generic_show(field,parameters) {
var url = '?analysis=' + field + '_show'
- + '&setup=<?php print $setup ?>&id=<?php print $id ?>&set=<?php print $set ?>'
- + '&' + parameters;
+ + '&setup=<?php print $setup ?>'
+ + '&id=<?php print $id ?>'
+ + '&set=<?php print $set ?>'
+ + '&' + parameters;
new Ajax.Updater(field, url, { method: 'get', evalScripts: true });
}
function highlight_phrase(sentence,phrase) {
@@ -55,7 +62,7 @@ function hide_word_info(sentence) {
function show_biconcor(sentence,phrase) {
var div = "biconcor-"+sentence;
var url = '?analysis=biconcor'
- + '&setup=<?php print $setup ?>&id=<?php print get_biconcor_version($dir,$id); ?>&set=<?php print $set ?>'
+ + '&setup=<?php print $setup ?>&id=<?php print get_biconcor_version($dir,$set,$id); ?>&set=<?php print $set ?>'
+ '&sentence=' + sentence
+ '&phrase=' + encodeURIComponent(phrase);
document.getElementById(div).innerHTML = "<center><img src=\"spinner.gif\" width=48 height=48></center>";
@@ -73,16 +80,289 @@ function close_biconcor(sentence) {
<body>
<div id="nGramSummary"><?php ngram_summary() ?></div>
<div id="CoverageDetails"></div>
+<div id="PrecisionByCoverage"></div>
<div id="PrecisionRecallDetails"></div>
<div id="bleu">(loading...)</div>
<script language="javascript">
-show('bleu','',5);
+show('bleu','',5,'');
</script>
</body></html>
<?php
}
-// stats on precision and recall
+function precision_by_coverage() {
+ global $experiment,$evalset,$dir,$set,$id;
+ $img_width = 1000;
+
+ print "<h3>Precision of Input Words by Coverage</h3>";
+ print "The graphs display what ratio of words of a specific type are translated correctly (yellow), and what ratio is deleted (blue).";
+ print " The extend of the boxes is scaled on the x-axis by the number of tokens of the displayed type.";
+
+ // load data
+ $data = file(get_current_analysis_filename("precision","precision-by-corpus-coverage"));
+ $total = 0;
+ $log_info = array();
+ for($i=0;$i<count($data);$i++) {
+ $item = split("\t",$data[$i]);
+ $info[$item[0]]["precision"] = $item[1];
+ $info[$item[0]]["delete"] = $item[2];
+ $info[$item[0]]["length"] = $item[3];
+ $info[$item[0]]["total"] = $item[4];
+ $total += $item[4];
+ $log_count = -1;
+ if ($item[0]>0) {
+ $log_count = (int) (log($item[0])/log(2));
+ }
+ if (!array_key_exists($log_count,$log_info)) {
+ $log_info[$log_count]["precision"] = 0;
+ $log_info[$log_count]["delete"] = 0;
+ $log_info[$log_count]["length"] = 0;
+ $log_info[$log_count]["total"] = 0;
+ }
+ $log_info[$log_count]["precision"] += $item[1];
+ $log_info[$log_count]["delete"] += $item[2];
+ $log_info[$log_count]["length"] += $item[3];
+ $log_info[$log_count]["total"] += $item[4];
+ }
+ print "<h4>By log<sub>2</sub>-count in the training corpus</h4>";
+ precision_by_coverage_graph("byCoverage",$log_info,$total,$img_width,SORT_NUMERIC);
+
+ # load factored data
+ $d = dir("$dir/evaluation/$set.analysis.".get_precision_analysis_version($dir,$set,$id));
+ while (false !== ($file = $d->read())) {
+ if (preg_match('/precision-by-corpus-coverage.(.+)$/',$file, $match)) {
+ precision_by_coverage_factored($img_width,$total,$file,$match[1]);
+ }
+ }
+}
+
+function precision_by_coverage_factored($img_width,$total,$file,$factor_id) {
+ global $dir,$set,$id;
+ $data = file(get_current_analysis_filename("precision",$file));
+ for($i=0;$i<count($data);$i++) {
+ $item = split("\t",$data[$i]);
+ $factor = $item[0];
+ $count = $item[1];
+ $info_factored[$factor][$count]["precision"] = $item[2];
+ $info_factored[$factor][$count]["delete"] = $item[3];
+ $info_factored[$factor][$count]["length"] = $item[4];
+ $info_factored[$factor][$count]["total"] = $item[5];
+ $info_factored_sum[$factor]["precision"] += $item[2];
+ $info_factored_sum[$factor]["delete"] += $item[3];
+ $info_factored_sum[$factor]["length"] += $item[4];
+ $info_factored_sum[$factor]["total"] += $item[5];
+ $total_factored[$factor] += $item[5];
+ $log_count = -1;
+ if ($count>0) {
+ $log_count = (int) (log($count)/log(2));
+ }
+ $log_info_factored[$factor][$log_count]["precision"] += $item[2];
+ $log_info_factored[$factor][$log_count]["delete"] += $item[3];
+ $log_info_factored[$factor][$log_count]["length"] += $item[4];
+ $log_info_factored[$factor][$log_count]["total"] += $item[5];
+ }
+ print "<h4>By factor ".factor_name("input",$factor_id)."</h4>";
+ precision_by_coverage_graph("byFactor",$info_factored_sum,$total,$img_width,SORT_STRING);
+
+ print "<h4>For each factor, by log<sub>2</sub>-count in the corpus</h4>";
+ foreach ($log_info_factored as $factor => $info) {
+ if ($total_factored[$factor]/$total > 0.01) {
+ print "<table style=\"display:inline;\"><tr><td align=center><font size=-2><b>$factor</b></font></td></tr><tr><td align=center>";
+ precision_by_coverage_graph("byCoverageFactor$factor",$info,$total_factored[$factor],10+2*$img_width*$total_factored[$factor]/$total,SORT_NUMERIC);
+ print "</td></tr></table>";
+ }
+ }
+}
+
+function precision_by_word($type) {
+ global $dir,$set,$id;
+ $byCoverage = -2;
+ $byFactor = "false";
+ if ($type == "byCoverage") {
+ $byCoverage = (int) $_GET["type"];
+ }
+ else if ($type == "byFactor") {
+ $byFactor = $_GET["type"];
+ }
+ else if (preg_match("/byCoverageFactor(.+)/",$type,$match)) {
+ $byCoverage = (int) $_GET["type"];
+ $byFactor = $match[1];
+ }
+
+ $data = file(get_current_analysis_filename("precision","precision-by-input-word"));
+ for($i=0;$i<count($data);$i++) {
+ $line = rtrim($data[$i]);
+ $item = split("\t",$line);
+
+ //# filter for count
+ $count = $item[4];
+ $log_count = -1;
+ if ($count>0) {
+ $log_count = (int) (log($count)/log(2));
+ }
+ if ($byCoverage != -2 && $byCoverage != $log_count) {
+ continue;
+ }
+
+ //# filter for factor
+ $word = $item[5];
+ if ($byFactor != "false" && $byFactor != $item[6]) {
+ continue;
+ }
+
+ $info[$word]["precision"] = $item[0];
+ $info[$word]["delete"] = $item[1];
+ $info[$word]["length"] = $item[2];
+ $info[$word]["total"] = $item[3];
+ $total += $item[3];
+ }
+
+ print "<table border=1><tr><td align=center>Count</td><td align=center colspan=2>Precision</td><td align=center colspan=2>Delete</td><td align=center>Length</td></tr>\n";
+ foreach ($info as $word => $wordinfo) {
+ print "<tr><td align=center><a href=\"javascript:show('bleu','order',5,'".base64_encode($word)."')\">$word</a></td>";
+ printf("<td align=right>%.1f%s</td><td align=right><font size=-1>%.1f/%d</font></td>",$wordinfo["precision"]/$wordinfo["total"]*100,"%",$wordinfo["precision"],$wordinfo["total"]);
+ printf("<td align=right>%.1f%s</td><td align=right><font size=-1>%d/%d</font></td>",$wordinfo["delete"]/$wordinfo["total"]*100,"%",$wordinfo["delete"],$wordinfo["total"]);
+ printf("<td align=right>%.3f</td>",$wordinfo["length"]/$wordinfo["total"]);
+ print "</tr>";
+ }
+ print "</table>\n";
+}
+
+function precision_by_coverage_latex($name,$log_info,$total,$img_width,$sort_type) {
+ $keys = array_keys($log_info);
+ sort($keys,$sort_type);
+
+ $img_width /= 100;
+ print "<div id=\"LatexToggle$name\" onClick=\"document.getElementById('Latex$name').style.display = 'block'; this.style.display = 'none';\" style=\"display:none;\"><font size=-2>(show LaTeX)</font></div>\n";
+ print "<div id=\"Latex$name\" style=\"display:none;\">\n";
+ print "<code>\\begin{tikzpicture}<br>";
+
+ print "% co-ordinates for precision<br>";
+ for($line=0;$line<=9;$line++) {
+ $height = 1.8-$line/10*1.8;
+ print "\\draw[thin,lightgray] (0.2,-$height) ";
+ print "node[anchor=east,black] {".$line."0\\%} -- ";
+ print "($img_width,-$height) ;<br>\n";
+ }
+ print "% co-ordinates for deletion<br>\n";
+ for($line=0;$line<=3;$line++) {
+ $height = 2+$line/10*1.80;
+ print "\\draw[thin,lightgray] (0.2,-$height) ";
+ if ($line != 0) {
+ print "node[anchor=east,black] {".$line."0\\%} ";
+ }
+ print "-- ($img_width,-$height) ;<br>\n";
+ }
+
+ print "% boxes<br>\n";
+ $total_so_far = 0;
+ foreach ($keys as $i) {
+ $prec_ratio = $log_info[$i]["precision"]/$log_info[$i]["total"];
+ $x = .2+($img_width-.2) * $total_so_far/$total;
+ $y = 1.80-($prec_ratio*1.80);
+ $width = $img_width * $log_info[$i]["total"]/$total;
+ $height = $prec_ratio*1.80;
+
+ $width += $x;
+ $height += $y;
+
+ print "\\filldraw[very thin,gray] ($x,-$y) rectangle($width,-$height) ;<br>";
+ print "\\draw[very thin,black] ($x,-$y) rectangle($width,-$height);<br>";
+ if ($width-$x>.1) {
+ print "\\draw (".(($x+$width)/2).",-1.8) node[anchor=north,black] {".$i."};<br>";
+ }
+
+
+ $del_ratio = $log_info[$i]["delete"]/$log_info[$i]["total"];
+ $height = $del_ratio*1.80;
+
+ $height += 2;
+
+ print "\\filldraw[very thin,lightgray] ($x,-2) rectangle($width,-$height);<br>\n";
+ print "\\draw[very thin,black] ($x,-2) rectangle($width,-$height);<br>\n";
+
+ $total_so_far += $log_info[$i]["total"];
+ }
+ print "\\end{tikzpicture}</code>";
+ print "</div>";
+}
+
+function precision_by_coverage_graph($name,$log_info,$total,$img_width,$sort_type) {
+
+ $keys = array_keys($log_info);
+ sort($keys,$sort_type);
+
+ print "<div id=\"Toggle$name\" onClick=\"document.getElementById('Table$name').style.display = 'none'; document.getElementById('LatexToggle$name').style.display = 'none'; document.getElementById('Latex$name').style.display = 'none'; this.style.display = 'none';\" style=\"display:none;\"><font size=-2>(hide table)</font></div>\n";
+ precision_by_coverage_latex($name,$log_info,$total,$img_width,$sort_type);
+
+ print "<div id=\"Table$name\" style=\"display:none;\">\n";
+ print "<table border=1><tr><td align=center>Count</td><td align=center colspan=2>Precision</td><td align=center colspan=2>Delete</td><td align=center>Length</td></tr>\n";
+ foreach ($keys as $i) {
+ if (array_key_exists($i,$log_info)) {
+ print "<tr><td align=center>$i</td>";
+ printf("<td align=right>%.1f%s</td><td align=right><font size=-1>%.1f/%d</font></td>",$log_info[$i]["precision"]/$log_info[$i]["total"]*100,"%",$log_info[$i]["precision"],$log_info[$i]["total"]);
+ printf("<td align=right>%.1f%s</td><td align=right><font size=-1>%d/%d</font></td>",$log_info[$i]["delete"]/$log_info[$i]["total"]*100,"%",$log_info[$i]["delete"],$log_info[$i]["total"]);
+ printf("<td align=right>%.3f</td>",$log_info[$i]["length"]/$log_info[$i]["total"]);
+ print "<td><A HREF=\"javascript:generic_show('PrecisionByWord$name','type=$i')\">&#x24BE;</A></td>";
+ print "</tr>";
+ }
+ }
+ print "</table><div id=\"PrecisionByWord$name\"></div></div>";
+
+ print "<div id=\"Graph$name\" onClick=\"document.getElementById('Table$name').style.display = 'block'; document.getElementById('LatexToggle$name').style.display = 'block'; document.getElementById('Toggle$name').style.display = 'block';\">";
+ print "<canvas id=\"$name\" width=$img_width height=300></canvas></div>";
+ print "<script language=\"javascript\">
+var canvas = document.getElementById(\"$name\");
+var ctx = canvas.getContext(\"2d\");
+ctx.lineWidth = 0.5;
+ctx.font = '9px serif';
+";
+ for($line=0;$line<=9;$line++) {
+ $height = 180-$line/10*180;
+ print "ctx.moveTo(20, $height);\n";
+ print "ctx.lineTo($img_width, $height);\n";
+ if ($line != 0) {
+ print "ctx.fillText(\"${line}0\%\", 0, $height+4);";
+ }
+ }
+ for($line=0;$line<=3;$line++) {
+ $height = 200+$line/10*180;
+ print "ctx.moveTo(20, $height);\n";
+ print "ctx.lineTo($img_width, $height);\n";
+ if ($line != 0) {
+ print "ctx.fillText(\"${line}0\%\", 0, $height+4);";
+ }
+ }
+ print "ctx.strokeStyle = \"rgb(100,100,100)\"; ctx.stroke();\n";
+
+ $total_so_far = 0;
+ foreach ($keys as $i) {
+ $prec_ratio = $log_info[$i]["precision"]/$log_info[$i]["total"];
+ $x = (int)(20+($img_width-20) * $total_so_far / $total);
+ $y = (int)(180-($prec_ratio*180));
+ $width = (int)($img_width * $log_info[$i]["total"]/$total);
+ $height = (int)($prec_ratio*180);
+ print "ctx.fillStyle = \"rgb(200,200,0)\";";
+ print "ctx.fillRect ($x, $y, $width, $height);";
+
+ $del_ratio = $log_info[$i]["delete"]/$log_info[$i]["total"];
+ $height = (int)($del_ratio*180);
+ print "ctx.fillStyle = \"rgb(100,100,255)\";";
+ print "ctx.fillRect ($x, 200, $width, $height);";
+
+ $total_so_far += $log_info[$i]["total"];
+
+ if ($width>3) {
+ print "ctx.fillStyle = \"rgb(0,0,0)\";";
+ // print "ctx.rotate(-1.5707);";
+ print "ctx.fillText(\"$i\", $x+$width/2-3, 190);";
+ //print "ctx.rotate(1.5707);";
+ }
+ }
+ print "</script>";
+}
+
+//# stats on precision and recall
function precision_recall_details() {
?>
<table width=100%>
@@ -110,20 +390,20 @@ ngram_show('recall',4,5,'',0);
<?php
}
-// stats on ngram precision
+//# stats on ngram precision
function ngram_summary() {
global $experiment,$evalset,$dir,$set,$id;
- // load data
- $data = file("$dir/evaluation/$set.analysis.$id/summary");
+ //# load data
+ $data = file(get_current_analysis_filename("basic","summary"));
for($i=0;$i<count($data);$i++) {
$item = split(": ",$data[$i]);
$info[$item[0]] = $item[1];
}
print "<table cellspacing=5 width=100%><tr><td valign=top align=center bgcolor=#eeeeee>";
- //foreach (array("precision","recall") as $type) {
- print "<b>Precision</b>\n";
+ //#foreach (array("precision","recall") as $type) {
+ print "<b>Precision of Output</b>\n";
$type = "precision";
print "<table><tr><td>$type</td><td>1-gram</td><td>2-gram</td><td>3-gram</td><td>4-gram</td></tr>\n";
printf("<tr><td>correct</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td></tr>\n",
@@ -145,6 +425,9 @@ function ngram_summary() {
//}
print "<A HREF=\"javascript:generic_show('PrecisionRecallDetails','')\">details</A> ";
+ if (file_exists(get_current_analysis_filename("precision","precision-by-corpus-coverage"))) {
+ print "| <A HREF=\"javascript:generic_show('PrecisionByCoverage','')\">precision of input by coverage</A> ";
+ }
print "</td><td valign=top valign=top align=center bgcolor=#eeeeee>";
@@ -163,8 +446,7 @@ function ngram_summary() {
printf("<p>length-diff: %d (%.1f%s)",$info["precision-1-total"]-$info["recall-1-total"],($info["precision-1-total"]-$info["recall-1-total"])/$info["recall-1-total"]*100,"%");
// coverage
- $coverage_id = get_coverage_analysis_version($dir,$set,$id);
- if (file_exists("$dir/evaluation/$set.analysis.$coverage_id/corpus-coverage-summary")) {
+ if (file_exists(get_current_analysis_filename("coverage","corpus-coverage-summary"))) {
print "</td><td valign=top align=center bgcolor=#eeeeee>";
print "<div id=\"CoverageSummary\">";
coverage_summary();
@@ -172,8 +454,8 @@ function ngram_summary() {
}
// phrase segmentation
- if (file_exists("$dir/evaluation/$set.analysis.$id/segmentation") ||
- file_exists("$dir/evaluation/$set.analysis.$id/rule")) {
+ if (file_exists(get_current_analysis_filename("basic","segmentation")) ||
+ file_exists(get_current_analysis_filename("basic","rule"))) {
print "</td><td valign=top align=center bgcolor=#eeeeee>";
print "<div id=\"SegmentationSummary\">";
segmentation_summary();
@@ -181,7 +463,7 @@ function ngram_summary() {
}
// rules
- if (file_exists("$dir/evaluation/$set.analysis.$id/rule")) {
+ if (file_exists(get_current_analysis_filename("basic","rule"))) {
print "</td><td valign=top align=center bgcolor=#eeeeee>";
print "<div id=\"RuleSummary\">";
rule_summary();
@@ -197,7 +479,7 @@ function ngram_show($type) {
// load data
$order = $_GET['order'];
- $data = file("$dir/evaluation/$set.analysis.$id/n-gram-$type.$order");
+ $data = file(get_current_analysis_filename("basic","n-gram-$type.$order"));
for($i=0;$i<count($data);$i++) {
$item = split("\t",$data[$i]);
$line["total"] = $item[0];
@@ -290,7 +572,7 @@ function coverage_details() {
$total[$corpus][$b][$i] = 0;
}
}
- $data = file("$dir/evaluation/$set.analysis.$id/$corpus-coverage-summary");
+ $data = file(filename_fallback_to_factored(get_current_analysis_filename("coverage","$corpus-coverage-summary")));
for($i=0;$i<count($data);$i++) {
$item = split("\t",$data[$i]);
if ($item[1]>5) {
@@ -332,7 +614,7 @@ function coverage_details() {
}
print "</tr></table>\n";
- $data = file("$dir/evaluation/$set.analysis.$id/ttable-unknown");
+ $data = file(filename_fallback_to_factored(get_current_analysis_filename("coverage","ttable-unknown")));
for($i=0;$i<count($data);$i++) {
list($word,$count) = split("\t",$data[$i]);
$item["word"] = $word;
@@ -354,7 +636,7 @@ function coverage_details() {
usort($unknown, 'cmp');
- print "<b>unknown words</b><br>\n";
+ print "<b>unknown words (to model)</b><br>\n";
print "<table><tr><td valign=top><table>";
$state = 5;
foreach ($unknown as $item) {
@@ -377,6 +659,34 @@ function coverage_details() {
print "</font></td></tr></table>\n";
}
+function filename_fallback_to_factored($file) {
+ if (file_exists($file)) {
+ return $file;
+ }
+ $path = pathinfo($file);
+ $dh = opendir($path['dirname']);
+ while (($factored_file = readdir($dh)) !== false) {
+ if (strlen($factored_file) > strlen($path['basename']) &&
+ substr($factored_file,0,strlen($path['basename'])) == $path['basename'] &&
+ preg_match("/0/",substr($factored_file,strlen($path['basename'])))) {
+ return $path['dirname']."/".$factored_file;
+ }
+ }
+ // found nothing...
+ return $file;
+}
+
+function factor_name($input_output,$factor_id) {
+ global $dir,$set,$id;
+ $file = get_current_analysis_filename("coverage","factor-names");
+ if (!file_exists($file)) {
+ return $factor_id;
+ }
+ $in_out_names = file($file);
+ $names = explode(",",trim($in_out_names[($input_output == "input")?0:1]));
+ return "'".$names[$factor_id]."' ($factor_id)";
+}
+
// stats on ngram coverage
function coverage_summary() {
global $dir,$set,$id,$corpus;
@@ -392,8 +702,7 @@ function coverage_summary() {
}
$total[$corpus][$b] = 0;
}
- $coverage_id = get_coverage_analysis_version($dir,$set,$id);
- $data = file("$dir/evaluation/$set.analysis.$coverage_id/$corpus-coverage-summary");
+ $data = file(filename_fallback_to_factored(get_current_analysis_filename("coverage","$corpus-coverage-summary")));
for($i=0;$i<count($data);$i++) {
$item = split("\t",$data[$i]);
if ($item[0] == 1) {
@@ -457,8 +766,9 @@ function segmentation_summary() {
}
$total = 0;
- if (file_exists("$dir/evaluation/$set.analysis.$id/segmentation")) {
- $data = file("$dir/evaluation/$set.analysis.$id/segmentation");
+ $file = get_current_analysis_filename("basic","segmentation");
+ if (file_exists($file)) {
+ $data = file($file);
for($i=0;$i<count($data);$i++) {
list($in,$out,$c) = split("\t",$data[$i]);
if ($by == "word") { $c *= $in; }
@@ -469,9 +779,12 @@ function segmentation_summary() {
}
}
else {
- $data = file("$dir/evaluation/$set.analysis.$id/rule");
+ $data = file(get_current_analysis_filename("basic","rule"));
for($i=0;$i<count($data);$i++) {
- list($type,$rule,$c) = split("\t",$data[$i]);
+ $field = split("\t",$data[$i]);
+ $type = $field[0];
+ $rule = $field[1];
+ if (count($field) > 2) { $c = $field[2]; } else { $c = 0; }
if ($type == "rule") {
list($rule_in,$in,$nt,$rule_out,$out) = split(":",$rule);
if ($by == "word") { $c *= $in; }
@@ -511,9 +824,14 @@ function segmentation_summary() {
// hierarchical rules used in translation
function rule_summary() {
global $dir,$set,$id;
- $data = file("$dir/evaluation/$set.analysis.$id/rule");
+ $data = file(get_current_analysis_filename("basic","rule"));
+ $rule = array(); $count = array(); $count_nt = array(); $count_w = array();
+ $nt_count = 0; $total = 0;
foreach ($data as $item) {
- list($type,$d,$d2) = split("\t",$item);
+ $field = split("\t",$item);
+ $type = $field[0];
+ $d = $field[1];
+ if (count($field) > 2) { $d2 = $field[2]; } else { $d2 = 0; }
if ($type == "sentence-count") {
$sentence_count = $d;
}
@@ -532,12 +850,16 @@ function rule_summary() {
$rule_out = preg_replace("/b/","y",$rule_out);
$rule_out = preg_replace("/c/","z",$rule_out);
$nt_count += $d2 * $nt;
+ if (!array_key_exists($d,$rule)) { $rule[$d] = 0; }
$rule[$d] += $d2;
+ if (!array_key_exists($nt,$count)) { $count[$nt] = 0; }
$count[$nt] += $d2;
$just_nt = preg_replace("/\d/","",$rule_in)."-".preg_replace("/\d/","",$rule_out);
$no_wc = preg_replace("/\d/","W",$rule_in)."-".preg_replace("/\d/","",$rule_out);
if ($just_nt == "-") { $just_nt = "lexical"; }
+ if (!array_key_exists($just_nt,$count_nt)) { $count_nt[$just_nt] = 0; }
$count_nt[$just_nt] += $d2;
+ if (!array_key_exists($no_wc,$count_w)) { $count_w[$no_wc] = 0; }
$count_w[$no_wc] += $d2;
$total += $d2;
}
@@ -555,172 +877,109 @@ function rule_summary() {
// annotated sentences, navigation
function bleu_show() {
+
$count = $_GET['count'];
if ($count == 0) { $count = 5; }
- print "<b>annotated sentences</b><br><font size=-1>sorted by ";
+ $filter = "";
+ if (array_key_exists("filter",$_GET)) {
+ $filter = base64_decode($_GET['filter']);
+ }
- if ($_GET['sort'] == "order" || $_GET['sort'] == "") {
- print "order ";
+ print "<b>annotated sentences</b><br><font size=-1>sorted by: ";
+
+ if ($_GET['sort'] == "order" || $_GET['sort'] == "") { print "order "; }
+ else {
+ print "<A HREF=\"javascript:show('bleu','order',$count,'".base64_encode($filter)."')\">order</A> ";
}
+ if ($_GET['sort'] == "best") { print "best "; }
else {
- print "<A HREF=\"javascript:show('bleu','order',$count)\">order</A> ";
+ print "<A HREF=\"javascript:show('bleu','best',$count,'".base64_encode($filter)."')\">best</A> ";
}
-
- if ($_GET['sort'] == "best") {
- print "order ";
+ if ($_GET['sort'] == "25") { print "25% "; }
+ else {
+ print "<A HREF=\"javascript:show('bleu','25',$count,'".base64_encode($filter)."')\">25%</A> ";
}
+ if ($_GET['sort'] == "avg") { print "avg "; }
else {
- print "<A HREF=\"javascript:show('bleu','best',$count)\">best</A> ";
+ print "<A HREF=\"javascript:show('bleu','avg',$count,'".base64_encode($filter)."')\">avg</A> ";
}
-
- if ($_GET['sort'] == "worst") {
- print "order ";
+ if ($_GET['sort'] == "75") { print "75% "; }
+ else {
+ print "<A HREF=\"javascript:show('bleu','75',$count,'".base64_encode($filter)."')\">75%</A> ";
}
+ if ($_GET['sort'] == "worst") { print "worst; "; }
else {
- print "<A HREF=\"javascript:show('bleu','worst',$count)\">worst</A> ";
+ print "<A HREF=\"javascript:show('bleu','worst',$count,'".base64_encode($filter)."')\">worst</A>; ";
}
- #print "display <A HREF=\"\">fullscreen</A> ";
-
- $count = $_GET['count'];
- if ($count == 0) { $count = 5; }
- print "showing $count ";
- print "<A HREF=\"javascript:show('bleu','" . $_GET['sort'] . "',5+$count)\">more</A> ";
- print "<A HREF=\"javascript:show('bleu','" . $_GET['sort'] . "',9999)\">all</A> ";
-
- print "</font><BR>\n";
+ print "showing: $count ";
+ print "<A HREF=\"javascript:show('bleu','" . $_GET['sort'] . "',5+$count,'".base64_encode($filter)."')\">more</A> ";
+ print "<A HREF=\"javascript:show('bleu','" . $_GET['sort'] . "',9999,'".base64_encode($filter)."')\">all</A>";
- sentence_annotation();
- print "<p align=center><A HREF=\"javascript:show('bleu','" . $_GET['sort'] . "',5+$count)\">5 more</A> | ";
- print "<A HREF=\"javascript:show('bleu','" . $_GET['sort'] . "',10+$count)\">10 more</A> | ";
- print "<A HREF=\"javascript:show('bleu','" . $_GET['sort'] . "',20+$count)\">20 more</A> | ";
- print "<A HREF=\"javascript:show('bleu','" . $_GET['sort'] . "',50+$count)\">50 more</A> | ";
- print "<A HREF=\"javascript:show('bleu','" . $_GET['sort'] . "',100+$count)\">100 more</A> | ";
- print "<A HREF=\"javascript:show('bleu','" . $_GET['sort'] . "',9999)\">all</A> ";
+ if ($filter != "") {
+ print "; filter: '$filter'";
+ }
+ sentence_annotation($count,$filter);
+ print "<p align=center><A HREF=\"javascript:show('bleu','" . $_GET['sort'] . "',5+$count,'".base64_encode($filter)."')\">5 more</A> | ";
+ print "<A HREF=\"javascript:show('bleu','" . $_GET['sort'] . "',10+$count,'".base64_encode($filter)."')\">10 more</A> | ";
+ print "<A HREF=\"javascript:show('bleu','" . $_GET['sort'] . "',20+$count,'".base64_encode($filter)."')\">20 more</A> | ";
+ print "<A HREF=\"javascript:show('bleu','" . $_GET['sort'] . "',50+$count,'".base64_encode($filter)."')\">50 more</A> | ";
+ print "<A HREF=\"javascript:show('bleu','" . $_GET['sort'] . "',100+$count,'".base64_encode($filter)."')\">100 more</A> | ";
+ print "<A HREF=\"javascript:show('bleu','" . $_GET['sort'] . "',9999,'".base64_encode($filter)."')\">all</A> ";
}
// annotated sentences core: reads data, sorts sentences, displays them
-function sentence_annotation() {
+function sentence_annotation($count,$filter) {
global $set,$id,$dir,$biconcor;
- // load data
- $data = file("$dir/evaluation/$set.analysis.$id/bleu-annotation");
- for($i=0;$i<count($data);$i++) {
- $item = split("\t",$data[$i]);
- $line["bleu"] = $item[0];
- $line["id"] = $item[1];
- $line["system"] = $item[2];
- $line["reference"] = "";
- for($j=3;$j<count($item);$j++) {
- if ($j>3) { $line["reference"] .= "<br>"; };
- $line["reference"] .= $item[$j];
- }
- $bleu[] = $line;
- }
-
- $coverage_id = get_coverage_analysis_version($dir,$set,$id);
- if (file_exists("$dir/evaluation/$set.analysis.$coverage_id/input-annotation")) {
- $input = file("$dir/evaluation/$set.analysis.$coverage_id/input-annotation");
- }
-
- if (file_exists("$dir/evaluation/$set.analysis.$id/segmentation-annotation")) {
- $data = file("$dir/evaluation/$set.analysis.$id/segmentation-annotation");
- for($i=0;$i<count($data);$i++) {
- $segment = 0;
- foreach (split(" ",$data[$i]) as $item) {
- list($in_start,$in_end,$out_start,$out_end) = split(":",$item);
- $segment++;
- $segmentation[$i]["input_start"][$in_start] = $segment;
- $segmentation[$i]["input_end"][$in_end] = $segment;
- $segmentation[$i]["output_start"][$out_start] = $segment;
- $segmentation[$i]["output_end"][$out_end+0] = $segment;
- }
- }
- }
-
- // hierarchical data
- $hierarchical = 0;
- if (file_exists("$dir/evaluation/$set.analysis.$id/input-tree")) {
- $data = file("$dir/evaluation/$set.analysis.$id/input-tree");
- $span = 0;
- $last_sentence = -1;
- $nt_count = array();
- for($i=0;$i<count($data);$i++) {
- list($sentence,$brackets,$nt,$words) = split("\t",$data[$i]);
- if ($sentence != $last_sentence) { $span = 0; }
- $last_sentence = $sentence;
- $segmentation[$sentence][$span]["brackets"] = $brackets;
-# $segmentation[$sentence][$span]["nt"] = $nt;
- $segmentation[$sentence][$span]["words"] = rtrim($words);
- if ($nt != "") { $nt_count[$nt]++; }
- $span++;
- }
- $hierarchical = 1;
-# if (count($nt_count) <= 2) {
-# foreach ($segmentation as $sentence => $segmentation_span) {
-# foreach ($segmentation_span as $span => $type) {
-# $segmentation[$sentence][$span]["nt"]="";
-# }
-# }
-# }
- }
- if (file_exists("$dir/evaluation/$set.analysis.$id/output-tree")) {
- $data = file("$dir/evaluation/$set.analysis.$id/output-tree");
- $span = 0;
- $last_sentence = -1;
- $nt_count = array();
- for($i=0;$i<count($data);$i++) {
- list($sentence,$brackets,$nt,$words) = split("\t",$data[$i]);
- if ($sentence != $last_sentence) { $span = 0; }
- $last_sentence = $sentence;
- $segmentation_out[$sentence][$span]["brackets"] = $brackets;
- $segmentation_out[$sentence][$span]["nt"] = $nt;
- $segmentation_out[$sentence][$span]["words"] = rtrim($words);
- if ($nt != "") { $nt_count[$nt]++; }
- $span++;
- }
- if (count($nt_count) <= 2) {
- foreach ($segmentation_out as $sentence => $segmentation_span) {
- foreach ($segmentation_span as $span => $type) {
- $segmentation_out[$sentence][$span]["nt"]="";
- }
+ # get input
+ $filtered = array();
+ $file = get_current_analysis_filename("coverage","input-annotation");
+ if (file_exists($file)) {
+ $input = file($file);
+ # filter is so specified
+ if ($filter != "") {
+ for($i=0;$i<count($input);$i++) {
+ $item = explode("\t",$input[$i]);
+ $word = explode(" ",$item[0]);
+ $keep = 0;
+ for($j=0;$j<count($word);$j++) {
+ if ($word[$j] == $filter) {
+ $keep = 1;
}
+ }
+ if (!$keep) { $filtered[$i] = 1; }
}
+ }
+ }
+
+ # load bleu scores
+ $data = file(get_current_analysis_filename("basic","bleu-annotation"));
+ for($i=0;$i<count($data);$i++) {
+ $item = split("\t",$data[$i]);
+ if (! array_key_exists($item[1],$filtered)) {
+ $line["bleu"] = $item[0];
+ $line["id"] = $item[1];
+ $line["system"] = $item[2];
+ $line["reference"] = "";
+ for($j=3;$j<count($item);$j++) {
+ if ($j>3) { $line["reference"] .= "<br>"; };
+ $line["reference"] .= $item[$j];
+ }
+ $bleu[] = $line;
+ }
}
- if (file_exists("$dir/evaluation/$set.analysis.$id/node")) {
- $data = file("$dir/evaluation/$set.analysis.$id/node");
- $n = 0;
- $last_sentence = -1;
- for($i=0;$i<count($data);$i++) {
- list($sentence,$depth,$start_div,$end_div,$start_div_in,$end_div_in,$children) = split(" ",$data[$i]);
- if ($sentence != $last_sentence) { $n = 0; }
- $last_sentence = $sentence;
- $node[$sentence][$n]['depth'] = $depth;
- $node[$sentence][$n]['start_div'] = $start_div;
- $node[$sentence][$n]['end_div'] = $end_div;
- $node[$sentence][$n]['start_div_in'] = $start_div_in;
- $node[$sentence][$n]['end_div_in'] = $end_div_in;
- $node[$sentence][$n]['children'] = rtrim($children);
- $n++;
- }
- }
-
- $biconcor = get_biconcor_version($dir,$id);
- // sort
+ # sort and label additional sentences as filtered
global $sort;
- $sort = $_GET['sort'];
- if ($sort == '') {
- $sort = "order";
- }
function cmp($a, $b) {
global $sort;
if ($sort == "order") {
$a_idx = $a["id"];
$b_idx = $b["id"];
}
- else if ($sort == "worst") {
+ else if ($sort == "worst" || $sort == "75") {
$a_idx = $a["bleu"];
$b_idx = $b["bleu"];
if ($a_idx == $b_idx) {
@@ -728,7 +987,7 @@ function sentence_annotation() {
$b_idx = $a["id"];
}
}
- else if ($sort == "best") {
+ else if ($sort == "best" || $sort == "avg" || $sort == "25") {
$a_idx = -$a["bleu"];
$b_idx = -$b["bleu"];
if ($a_idx == $b_idx) {
@@ -736,37 +995,151 @@ function sentence_annotation() {
$b_idx = $b["id"];
}
}
-
if ($a_idx == $b_idx) {
- return 0;
+ return 0;
}
return ($a_idx < $b_idx) ? -1 : 1;
}
-
+ $sort = $_GET['sort'];
+ if ($sort == '') {
+ $sort = "order";
+ }
usort($bleu, 'cmp');
- $count = $_GET['count'];
- if ($count == 0) { $count = 5; }
+ $offset = 0;
+ if ($sort == "25" || $sort == "75") {
+ $offset = (int) (count($bleu)/4);
+ }
+ else if ($sort == "avg") {
+ $offset = (int) (count($bleu)/2);
+ }
- // display
- //print "<div id=\"debug\"></div>";
- for($i=0;$i<$count && $i<count($bleu);$i++) {
+ $retained = array();
+ for($i=$offset;$i<$count+$offset && $i<count($bleu);$i++) {
+ $line = $bleu[$i];
+ $retained[$line["id"]] = 1;
+ }
+
+ # get segmentation (phrase alignment)
+ $file = get_current_analysis_filename("basic","segmentation-annotation");
+ if (file_exists($file)) {
+ $data = file($file);
+ for($i=0;$i<count($data);$i++) {
+ if ($filter == "" || array_key_exists($i,$retained)) {
+ $segment = 0;
+ foreach (split(" ",$data[$i]) as $item) {
+ list($in_start,$in_end,$out_start,$out_end) = split(":",$item);
+ $segment++;
+ $segmentation[$i]["input_start"][$in_start] = $segment;
+ $segmentation[$i]["input_end"][$in_end] = $segment;
+ $segmentation[$i]["output_start"][$out_start] = $segment;
+ $segmentation[$i]["output_end"][$out_end+0] = $segment;
+ }
+ }
+ }
+ }
+
+ # get hierarchical data
+ $hierarchical = 0;
+ $file = get_current_analysis_filename("basic","input-tree");
+ if (file_exists($file)) {
+ $data = file($file);
+ $span = 0;
+ $last_sentence = -1;
+ $nt_count = array();
+ for($i=0;$i<count($data);$i++) {
+ list($sentence,$brackets,$nt,$words) = split("\t",$data[$i]);
+ if ($sentence != $last_sentence) { $span = 0; }
+ $last_sentence = $sentence;
+ if ($filter == "" || array_key_exists($sentence,$retained)) {
+ $segmentation[$sentence][$span]["brackets"] = $brackets;
+# $segmentation[$sentence][$span]["nt"] = $nt;
+ $segmentation[$sentence][$span]["words"] = rtrim($words);
+ if ($nt != "") { $nt_count[$nt]=1; }
+ $span++;
+ }
+ }
+ $hierarchical = 1;
+# if (count($nt_count) <= 2) {
+# foreach ($segmentation as $sentence => $segmentation_span) {
+# foreach ($segmentation_span as $span => $type) {
+# $segmentation[$sentence][$span]["nt"]="";
+# }
+# }
+# }
+ }
+ $file = get_current_analysis_filename("basic","output-tree");
+ if (file_exists($file)) {
+ $data = file($file);
+ $span = 0;
+ $last_sentence = -1;
+ $nt_count = array();
+ for($i=0;$i<count($data);$i++) {
+ list($sentence,$brackets,$nt,$words) = split("\t",$data[$i]);
+ if ($sentence != $last_sentence) { $span = 0; }
+ $last_sentence = $sentence;
+ if ($filter == "" || array_key_exists($sentence,$retained)) {
+ $segmentation_out[$sentence][$span]["brackets"] = $brackets;
+ $segmentation_out[$sentence][$span]["nt"] = $nt;
+ $segmentation_out[$sentence][$span]["words"] = rtrim($words);
+ if ($nt != "") { $nt_count[$nt]=1; }
+ $span++;
+ }
+ }
+ # no non-terminal markup, if there are two or less non-terminals (X,S)
+ if (count($nt_count) <= 2) {
+ foreach ($segmentation_out as $sentence => $segmentation_span) {
+ foreach ($segmentation_span as $span => $type) {
+ $segmentation_out[$sentence][$span]["nt"]="";
+ }
+ }
+ }
+ }
+ $file = get_current_analysis_filename("basic","node");
+ if (file_exists($file)) {
+ $data = file($file);
+ $n = 0;
+ $last_sentence = -1;
+ for($i=0;$i<count($data);$i++) {
+ list($sentence,$depth,$start_div,$end_div,$start_div_in,$end_div_in,$children) = split(" ",$data[$i]);
+ if ($sentence != $last_sentence) { $n = 0; }
+ $last_sentence = $sentence;
+ if ($filter == "" || array_key_exists($sentence,$retained)) {
+ $node[$sentence][$n]['depth'] = $depth;
+ $node[$sentence][$n]['start_div'] = $start_div;
+ $node[$sentence][$n]['end_div'] = $end_div;
+ $node[$sentence][$n]['start_div_in'] = $start_div_in;
+ $node[$sentence][$n]['end_div_in'] = $end_div_in;
+ $node[$sentence][$n]['children'] = rtrim($children);
+ $n++;
+ }
+ }
+ }
+
+ # display
+ if ($filter != "") {
+ print " (".(count($input)-count($filtered))." retaining)";
+ }
+ print "</font><BR>\n";
+
+ $biconcor = get_biconcor_version($dir,$set,$id);
+ //print "<div id=\"debug\">$sort / $offset</div>";
+ for($i=$offset;$i<$count+$offset && $i<count($bleu);$i++) {
$line = $bleu[$i];
if ($hierarchical) {
annotation_hierarchical($line["id"],$segmentation[$line["id"]],$segmentation_out[$line["id"]],$node[$line["id"]]);
}
if ($input) {
- print "<div id=\"info-$i\" style=\"border-color:black; background:#ffff80; opacity:0; width:100%; border:1px;\">8364 occ. in corpus, 56 translations, entropy: 5.54</div>\n";
+ print "<div id=\"info-".$line["id"]."\" style=\"border-color:black; background:#ffff80; opacity:0; width:100%; border:1px;\">0 occ. in corpus, 0 translations, entropy: 0.00</div>\n";
if ($biconcor) {
- //print "<div id=\"biconcor-$i\" style=\"display: none;\">xxx</div>";
- print "<div id=\"biconcor-$i\" class=\"biconcor\">xxx</div>";
+ print "<div id=\"biconcor-".$line["id"]."\" class=\"biconcor\"><font size=-2>(click on input phrase for bilingual concordancer)</font></div>";
}
if ($hierarchical) {
sentence_annotation_hierarchical("#".$line["id"],$line["id"],$input[$line["id"]],$segmentation[$line["id"]],"in");
}
else {
print "<font size=-2>[#".$line["id"]."]</font> ";
- input_annotation($line["id"],$input[$line["id"]],$segmentation[$line["id"]]);
+ input_annotation($line["id"],$input[$line["id"]],$segmentation[$line["id"]],$filter);
}
}
//else {
@@ -788,19 +1161,20 @@ function coverage($coverage_vector) {
$coverage = array();
foreach (split(" ",$coverage_vector) as $item) {
if (preg_match("/[\-:]/",$item)) {
- list($from,$to,$corpus_count,$ttable_count,$ttable_entropy) = preg_split("/[\-:]/",$item);
- $coverage[$from][$to]["corpus_count"] = $corpus_count;
- $coverage[$from][$to]["ttable_count"] = $ttable_count;
- $coverage[$from][$to]["ttable_entropy"] = $ttable_entropy;
+ $field = preg_split("/[\-:]/",$item);
+ $from = $field[0];
+ $to = $field[1];
+ if (count($field)>2){ $coverage[$from][$to]["corpus_count"]=$field[2]; }
+ if (count($field)>3){ $coverage[$from][$to]["ttable_count"]=$field[3]; }
+ if (count($field)>4){ $coverage[$from][$to]["ttabel_entropy"]=$field[4]; }
}
}
- $word = split(" ",$words);
return $coverage;
}
// annotate an inpute sentence
-function input_annotation($sentence,$input,$segmentation) {
+function input_annotation($sentence,$input,$segmentation,$filter) {
global $biconcor;
list($words,$coverage_vector) = split("\t",$input);
@@ -876,10 +1250,10 @@ function input_annotation($sentence,$input,$segmentation) {
for($j=$from;$j<=$to;$j++) {
if ($j>$from) { $phrase .= " "; }
$phrase .= $word[$j];
- $highlightwords .= " document.getElementById('inputword-$sentence-$j').style.backgroundColor='#ffff80';";
- $lowlightwords .= " document.getElementById('inputword-$sentence-$j').style.backgroundColor='".coverage_color($coverage[$j][$j])."';";
+ $highlightwords .= " document.getElementById('inputword-$i-$j').style.backgroundColor='#ffff80';";
+ $lowlightwords .= " document.getElementById('inputword-$i-$j').style.backgroundColor='".coverage_color($coverage[$j][$j])."';";
}
- print "<td colspan=$size><div style=\"background-color: $color; height:3px;\" onmouseover=\"show_word_info($sentence,".$coverage[$from][$to]["corpus_count"].",".$coverage[$from][$to]["ttable_count"].",".$coverage[$from][$to]["ttable_entropy"]."); this.style.backgroundColor='#ffff80';$highlightwords\" onmouseout=\"hide_word_info($sentence); this.style.backgroundColor='$color';$lowlightwords;\"".($biconcor?" onclick=\"show_biconcor($sentence,'".htmlspecialchars($phrase)."');\"":"").">";
+ print "<td colspan=$size><div style=\"background-color: $color; height:3px;\" onmouseover=\"show_word_info($sentence,".$coverage[$from][$to]["corpus_count"].",".$coverage[$from][$to]["ttable_count"].",".$coverage[$from][$to]["ttable_entropy"]."); this.style.backgroundColor='#ffff80';$highlightwords\" onmouseout=\"hide_word_info($sentence); this.style.backgroundColor='$color';$lowlightwords;\"".($biconcor?" onclick=\"show_biconcor($sentence,'".base64_encode($phrase)."');\"":"").">";
}
print "</div></td>";
$from += $size-1;
@@ -907,7 +1281,14 @@ function input_annotation($sentence,$input,$segmentation) {
$color = '#ffffff';
$cc = 0; $tc = 0; $te = 0;
}
- print "<span id=\"inputword-$sentence-$j\" style=\"background-color: $color;\" onmouseover=\"show_word_info($sentence,$cc,$tc,$te); this.style.backgroundColor='#ffff80';\" onmouseout=\"hide_word_info($sentence); this.style.backgroundColor='$color';\"".($biconcor?" onclick=\"show_biconcor($sentence,'".htmlspecialchars($word[$j])."');\"":"").">$word[$j]</span>";
+ print "<span id=\"inputword-$sentence-$j\" style=\"background-color: $color;\" onmouseover=\"show_word_info($sentence,$cc,$tc,$te); this.style.backgroundColor='#ffff80';\" onmouseout=\"hide_word_info($sentence); this.style.backgroundColor='$color';\"".($biconcor?" onclick=\"show_biconcor($sentence,'".base64_encode($word[$j])."');\"":"").">";
+ if ($word[$j] == $filter) {
+ print "<b><font color=#ff0000>".$word[$j]."</font></b>";
+ }
+ else {
+ print $word[$j];
+ }
+ print "</span>";
if ($segmentation && array_key_exists($j,$segmentation["input_end"])) {
print "</span>";
}
@@ -984,7 +1365,7 @@ function annotation_hierarchical($sentence,$segmentation,$segmentation_out,$node
function sentence_annotation_hierarchical($info,$sentence,$sequence,$segmentation,$in_out) {
$In_Out = $in_out == "out" ? "Out" : "In";
- list($words,$coverage_vector) = split("\t",$input);
+ #list($words,$coverage_vector) = split("\t",$input);
$coverage = coverage($sequence);
$word = preg_split("/\s/",$sequence);
@@ -1011,7 +1392,8 @@ function annotation_hierarchical($sentence,$segmentation,$segmentation_out,$node
$words = $segmentation[$span]["words"];
# non terminal
- if ($segmentation[$span]["nt"]) {
+ if (array_key_exists("nt",$segmentation[$span]) &&
+ $segmentation[$span]["nt"] != "") {
print $segmentation[$span]["nt"].": ";
}
@@ -1048,16 +1430,16 @@ function annotation_hierarchical($sentence,$segmentation,$segmentation_out,$node
function biconcor($query) {
global $set,$id,$dir;
$sentence = $_GET['sentence'];
- $biconcor = get_biconcor_version($dir,$id);
+ $biconcor = get_biconcor_version($dir,$set,$id);
print "<center>
-<form action=\"...\" method=get>
+<form method=get id=\"BiconcorForm\">
<img src=\"close.gif\" width=17 height=17 onClick=\"close_biconcor($sentence);\">
-<input width=20 value=\"$query\">
-<input type=submit value=\"look up\">
+<input width=20 id=\"BiconcorQuery\" value=\"$query\">
+<input type=submit onclick=\"show_biconcor($sentence,encodeBase64(document.getElementById('BiconcorQuery').value));\" value=\"look up\">
</form>
<div class=\"biconcor-content\">";
- $cmd = "./biconcor -l $dir/model/biconcor.$biconcor -q ".escapeshellarg($query)." 2>/dev/null";
- # print $cmd."<p>";
+ $cmd = "./biconcor -l $dir/model/biconcor.$biconcor -Q ".base64_encode($query)." 2>/dev/null";
+ #print $cmd."<p>";
system($cmd);
# print "<p>done.";
print "</div></center>";
diff --git a/scripts/ems/web/analysis_diff.php b/scripts/ems/web/analysis_diff.php
index f292090df..9cb853030 100644
--- a/scripts/ems/web/analysis_diff.php
+++ b/scripts/ems/web/analysis_diff.php
@@ -4,11 +4,10 @@ function diff_analysis() {
global $task,$user,$setup,$id,$id2,$set;
global $comment,$dir;
- head("Comparative Analysis");
+ head("Comparative Analysis: $task ($user), Set $set");
$c = $comment["$setup-$id"]->name;
$c2 = $comment["$setup-$id2"]->name;
- print "<h4>$task ($user), Set $set, ";
if (substr($c2,0,strlen($id)+1) == $id."+") {
print "Run $id2 vs $id (".substr($c2,strlen($id)).")";
}
@@ -22,25 +21,355 @@ function diff_analysis() {
<script>
function diff(field,sort,count) {
var url = '?analysis_diff=' + field + '_diff'
- + '&setup=<?php print $setup ?>&id=<?php print $id ?>&id2=<?php print $id2 ?>&set=<?php print $set ?>'
- + '&sort=' + sort
- + '&count=' + count;
+ + '&setup=<?php print $setup ?>'
+ + '&id=<?php print $id ?>'
+ + '&id2=<?php print $id2 ?>'
+ + '&set=<?php print $set ?>'
+ + '&sort=' + sort
+ + '&count=' + count;
new Ajax.Updater(field, url, { method: 'get' });
}
function ngram_diff(type,order,count,sort,smooth) {
var url = '?analysis_diff=ngram_' + type + '_diff'
- + '&setup=<?php print $setup ?>&id=<?php print $id ?>&id2=<?php print $id2 ?>&set=<?php print $set ?>'
- + '&order=' + order
- + '&smooth=' + smooth
- + '&sort=' + sort
- + '&count=' + count;
+ + '&setup=<?php print $setup ?>'
+ + '&id=<?php print $id ?>'
+ + '&id2=<?php print $id2 ?>'
+ + '&set=<?php print $set ?>'
+ + '&order=' + order
+ + '&smooth=' + smooth
+ + '&sort=' + sort
+ + '&count=' + count;
var field = (type == "precision" ? "nGramPrecision" : "nGramRecall") + order;
new Ajax.Updater(field, url, { method: 'get' });
}
+function generic_show_diff(field,parameters) {
+ var url = '?analysis=' + field + '_show'
+ + '&setup=<?php print $setup ?>'
+ + '&id=<?php print $id ?>'
+ + '&id2=<?php print $id2 ?>'
+ + '&set=<?php print $set ?>'
+ + '&' + parameters;
+ new Ajax.Updater(field, url, { method: 'get', evalScripts: true });
+}
</script>
</head>
<body>
<div id="nGramSummary"><?php ngram_summary_diff() ?></div>
+<div id="PrecisionByCoverageDiff"></div>
+<div id="PrecisionRecallDetailsDiff"></div>
+<div id="bleu">(loading...)</div>
+<script>
+diff('bleu','',5);
+</script>
+</body></html>
+<?php
+}
+
+function precision_by_coverage_diff() {
+ global $experiment,$evalset,$dir,$set,$id,$id2;
+ $img_width = 1000;
+
+ print "<h3>Precision by Coverage</h3>";
+ print "The graphs display what ratio of words of a specific type are translated correctly (yellow), and what ratio is deleted (blue).";
+ print " The extend of the boxes is scaled on the x-axis by the number of tokens of the displayed type.";
+ // load data
+ $data = file(get_current_analysis_filename2("precision","precision-by-corpus-coverage"));
+ $total = 0;
+ $log_info = array();
+ for($i=0;$i<count($data);$i++) {
+ $item = split("\t",$data[$i]);
+ $info[$item[0]]["precision"] = $item[1];
+ $info[$item[0]]["delete"] = $item[2];
+ $info[$item[0]]["length"] = $item[3];
+ $info[$item[0]]["total"] = $item[4];
+ $total += $item[4];
+ $log_count = -1;
+ if ($item[0]>0) {
+ $log_count = (int) (log($item[0])/log(2));
+ }
+ if (!array_key_exists($log_count,$log_info)) {
+ $log_info[$log_count]["precision"] = 0;
+ $log_info[$log_count]["delete"] = 0;
+ $log_info[$log_count]["length"] = 0;
+ $log_info[$log_count]["total"] = 0;
+ }
+ $log_info[$log_count]["precision"] += $item[1];
+ $log_info[$log_count]["delete"] += $item[2];
+ $log_info[$log_count]["length"] += $item[3];
+ $log_info[$log_count]["total"] += $item[4];
+ }
+ $log_info_new = $log_info;
+
+ // load base data
+ $data = file(get_current_analysis_filename("precision","precision-by-corpus-coverage"));
+ for($i=0;$i<count($data);$i++) {
+ $item = split("\t",$data[$i]);
+ $info[$item[0]]["precision"] -= $item[1];
+ $info[$item[0]]["delete"] -= $item[2];
+ $info[$item[0]]["length"] -= $item[3];
+ $log_count = -1;
+ if ($item[0]>0) {
+ $log_count = (int) (log($item[0])/log(2));
+ }
+ $log_info[$log_count]["precision"] -= $item[1];
+ $log_info[$log_count]["delete"] -= $item[2];
+ $log_info[$log_count]["length"] -= $item[3];
+ }
+
+ print "<h4>By log<sub>2</sub>-count in the training corpus</h4>";
+ precision_by_coverage_diff_graph("byCoverage",$log_info,$log_info_new,$total,$img_width,SORT_NUMERIC);
+
+ // load factored data
+ $d = dir("$dir/evaluation/$set.analysis.".get_precision_analysis_version($dir,$set,$id));
+ while (false !== ($file = $d->read())) {
+ if (preg_match('/precision-by-corpus-coverage.(.+)$/',$file, $match) &&
+ file_exists(get_current_analysis_filename2("precision","precision-by-corpus-coverage.$match[1]"))) {
+ precision_by_coverage_diff_factored($img_width,$total,$file,$match[1]);
+ }
+ }
+}
+
+function precision_by_coverage_diff_factored($img_width,$total,$file,$factor_id) {
+ global $dir,$set,$id,$id2;
+ $data = file(get_current_analysis_filename2("precision",$file));
+ for($i=0;$i<count($data);$i++) {
+ $item = split("\t",$data[$i]);
+ $factor = $item[0];
+ $count = $item[1];
+ $info_factored[$factor][$count]["precision"] = $item[2];
+ $info_factored[$factor][$count]["delete"] = $item[3];
+ $info_factored[$factor][$count]["length"] = $item[4];
+ $info_factored[$factor][$count]["total"] = $item[5];
+ $info_factored_sum[$factor]["precision"] += $item[2];
+ $info_factored_sum[$factor]["delete"] += $item[3];
+ $info_factored_sum[$factor]["length"] += $item[4];
+ $info_factored_sum[$factor]["total"] += $item[5];
+ $total_factored[$factor] += $item[5];
+ $log_count = -1;
+ if ($count>0) {
+ $log_count = (int) (log($count)/log(2));
+ }
+ $log_info_factored[$factor][$log_count]["precision"] += $item[2];
+ $log_info_factored[$factor][$log_count]["delete"] += $item[3];
+ $log_info_factored[$factor][$log_count]["length"] += $item[4];
+ $log_info_factored[$factor][$log_count]["total"] += $item[5];
+ }
+ $info_factored_new = $info_factored;
+ $info_factored_sum_new = $info_factored_sum;
+ $log_info_factored_new = $log_info_factored;
+
+ // baseline data
+ $data = file(get_current_analysis_filename("precision",$file));
+ for($i=0;$i<count($data);$i++) {
+ $item = split("\t",$data[$i]);
+ $factor = $item[0];
+ $count = $item[1];
+ $info_factored[$factor][$count]["precision"] -= $item[2];
+ $info_factored[$factor][$count]["delete"] -= $item[3];
+ $info_factored[$factor][$count]["length"] -= $item[4];
+ $info_factored_sum[$factor]["precision"] -= $item[2];
+ $info_factored_sum[$factor]["delete"] -= $item[3];
+ $info_factored_sum[$factor]["length"] -= $item[4];
+ $log_count = -1;
+ if ($count>0) {
+ $log_count = (int) (log($count)/log(2));
+ }
+ $log_info_factored[$factor][$log_count]["precision"] -= $item[2];
+ $log_info_factored[$factor][$log_count]["delete"] -= $item[3];
+ $log_info_factored[$factor][$log_count]["length"] -= $item[4];
+ }
+ print "<h4>By factor ".factor_name("input",$factor_id)."</h4>";
+ precision_by_coverage_diff_graph("byFactor",$info_factored_sum,$info_factored_sum_new,$total,$img_width,SORT_STRING);
+
+ print "<h4>For each factor, by log<sub>2</sub>-count in the corpus</h4>";
+ foreach ($log_info_factored as $factor => $info) {
+ if ($total_factored[$factor]/$total > 0.01) {
+ print "<table style=\"display:inline;\"><tr><td align=center><font size=-2><b>$factor</b></font>";
+ precision_by_coverage_diff_graph("byCoverageFactor$factor",$info,$log_info_factored_new[$factor],$total,10+2*$img_width*$total_factored[$factor]/$total,SORT_NUMERIC);
+ print "</td></tr></table>";
+ }
+ }
+}
+
+function precision_by_word_diff($type) {
+ global $dir,$set,$id,$id2;
+ $byCoverage = -2;
+ $byFactor = "false";
+ if ($type == "byCoverage") {
+ $byCoverage = (int) $_GET["type"];
+ }
+ else if ($type == "byFactor") {
+ $byFactor = $_GET["type"];
+ }
+ else if (preg_match("/byCoverageFactor(.+)/",$type,$match)) {
+ $byCoverage = (int) $_GET["type"];
+ $byFactor = $match[1];
+ }
+
+ $data = file(get_current_analysis_filename2("precision","precision-by-input-word"));
+ $total = 0;
+ $info = array();
+ for($i=0;$i<count($data);$i++) {
+ $line = rtrim($data[$i]);
+ $item = split("\t",$line);
+ $total += $item[3];
+
+ //# filter for count
+ $count = $item[4];
+ $log_count = -1;
+ if ($count>0) {
+ $log_count = (int) (log($count)/log(2));
+ }
+ if ($byCoverage != -2 && $byCoverage != $log_count) {
+ continue;
+ }
+
+ //# filter for factor
+ $word = $item[5];
+ if ($byFactor != "false" && $byFactor != $item[6]) {
+ continue;
+ }
+ if (!array_key_exists($word,$info)) {
+ $info[$word]["precision"] = 0;
+ $info[$word]["delete"] = 0;
+ $info[$word]["length"] = 0;
+ $info[$word]["total"] = 0;
+ }
+ $info[$word]["precision"] += $item[0];
+ $info[$word]["delete"] += $item[1];
+ $info[$word]["length"] += $item[2];
+ $info[$word]["total"] += $item[3];
+ }
+ $info_new = $info;
+
+ $data = file(get_current_analysis_filename("precision","precision-by-input-word"));
+ for($i=0;$i<count($data);$i++) {
+ $line = rtrim($data[$i]);
+ $item = split("\t",$line);
+
+ //# filter for count
+ $count = $item[4];
+ $log_count = -1;
+ if ($count>0) {
+ $log_count = (int) (log($count)/log(2));
+ }
+ if ($byCoverage != -2 && $byCoverage != $log_count) {
+ continue;
+ }
+
+ //# filter for factor
+ $word = $item[5];
+ if ($byFactor != "false" && $byFactor != $item[6]) {
+ continue;
+ }
+ if (!array_key_exists($word,$info)) {
+ $info[$word]["precision"] = 0;
+ $info[$word]["delete"] = 0;
+ $info[$word]["length"] = 0;
+ $info_new[$word]["length"] = 0;
+ $info_new[$word]["delete"] = 0;
+ $info_new[$word]["precision"] = 0;
+ $info_new[$word]["total"] = 0;
+ $info[$word]["total"] = -$item[3];
+ }
+ $info[$word]["precision"] -= $item[0];
+ $info[$word]["delete"] -= $item[1];
+ $info[$word]["length"] -= $item[2];
+ }
+
+ print "<table border=1><tr><td align=center>&nbsp;</td><td align=center colspan=3>Precision</td><td align=center colspan=2>Precision Impact</td><td align=center colspan=3>Delete</td><td align=center colspan=2>Delete Impact</td><td align=center>Length</td></tr>\n";
+ foreach ($info as $word => $wordinfo) {
+ print "<tr><td align=center>$word</td>";
+ printf("<td align=right>%.1f%s</td><td align=right>%+.1f%s</td><td align=right><font size=-1>%+.1f/%d</font></td>",$info_new[$word]["precision"]/$wordinfo["total"]*100,"%",$wordinfo["precision"]/$wordinfo["total"]*100,"%",$wordinfo["precision"],$wordinfo["total"]);
+ printf("<td align=right>%+.2f%s</td><td align=right><font size=-1>%+.1f/%d</font></td>",$wordinfo["precision"]/$total*100,"%",$wordinfo["precision"],$total);
+ printf("<td align=right>%.1f%s</td><td align=right>%+.1f%s</td><td align=right><font size=-1>%+d/%d</font></td>",$info_new[$word]["delete"]/$wordinfo["total"]*100,"%",$wordinfo["delete"]/$wordinfo["total"]*100,"%",$wordinfo["delete"],$wordinfo["total"]);
+ printf("<td align=right>%+.2f%s</td><td align=right><font size=-1>%+d/%d</font></td>",$wordinfo["delete"]/$total*100,"%",$wordinfo["delete"],$total);
+ printf("<td align=right>%+.3f</td>",$wordinfo["length"]/$wordinfo["total"]);
+ print "</tr>";
+ }
+ print "</table>\n";
+}
+
+
+function precision_by_coverage_diff_graph($name,$log_info,$log_info_new,$total,$img_width,$sort_type) {
+ $keys = array_keys($log_info);
+ sort($keys,$sort_type);
+
+ print "<div id=\"Toggle$name\" onClick=\"document.getElementById('Table$name').style.display = 'none'; this.style.display = 'none';\" style=\"display:none;\"><font size=-2>(hide table)</font></div>\n";
+ print "<div id=\"Table$name\" style=\"display:none;\">\n";
+ print "<table border=1><tr><td align=center>&nbsp;</td><td align=center colspan=3>Precision</td><td align=center colspan=2>Precision Impact</td><td align=center colspan=3>Delete</td><td align=center colspan=2>Delete Impact</td><td align=center>Length</td></tr>\n";
+ foreach ($keys as $i) {
+ if (array_key_exists($i,$log_info)) {
+ print "<tr><td align=center>$i</td>";
+ printf("<td align=right>%.1f%s</td><td align=right>%.1f%s</td><td align=right><font size=-1>%+.1f/%d</font></td>",$log_info_new[$i]["precision"]/$log_info[$i]["total"]*100,"%",$log_info[$i]["precision"]/$log_info[$i]["total"]*100,"%",$log_info[$i]["precision"],$log_info[$i]["total"]);
+ printf("<td align=right>%+.2f%s</td><td align=right><font size=-1>%+.1f/%d</font></td>",$log_info[$i]["precision"]/$total*100,"%",$log_info[$i]["precision"],$total);
+ printf("<td align=right>%.1f%s</td><td align=right>%+.1f%s</td><td align=right><font size=-1>%+d/%d</font></td>",$log_info_new[$i]["delete"]/$log_info[$i]["total"]*100,"%",$log_info[$i]["delete"]/$log_info[$i]["total"]*100,"%",$log_info[$i]["delete"],$log_info[$i]["total"]);
+ printf("<td align=right>%+.2f%s</td><td align=right><font size=-1>%+d/%d</font></td>",$log_info[$i]["delete"]/$total*100,"%",$log_info[$i]["delete"],$total);
+ printf("<td align=right>%+.3f</td>",$log_info[$i]["length"]/$log_info[$i]["total"]);
+ print "<td><A HREF=\"javascript:generic_show_diff('PrecisionByWordDiff$name','type=$i')\">&#x24BE;</A></td>";
+ print "</tr>";
+ }
+ }
+ print "</table><div id=\"PrecisionByWordDiff$name\"></div></div>";
+
+ print "<div id=\"Graph$name\" onClick=\"document.getElementById('Table$name').style.display = 'block'; document.getElementById('Toggle$name').style.display = 'block';\"><canvas id=\"$name\" width=$img_width height=300></canvas></div>";
+ print "<script language=\"javascript\">
+var canvas = document.getElementById(\"$name\");
+var ctx = canvas.getContext(\"2d\");
+ctx.lineWidth = 0.5;
+ctx.font = '9px serif';
+";
+ for($line=-1;$line<=0.8;$line+=.2) {
+ $height = 90-$line/2*180;
+ print "ctx.moveTo(20, $height);\n";
+ print "ctx.lineTo($img_width, $height);\n";
+ print "ctx.fillText(\"".sprintf("%d",10 * $line * 1.001)."\%\", 0, $height+4);";
+ }
+ for($line=-0.4;$line<=0.4;$line+=.2) {
+ $height = 250+$line/2*180;
+ print "ctx.moveTo(20, $height);\n";
+ print "ctx.lineTo($img_width, $height);\n";
+ if ($line != 0) {
+ print "ctx.fillText(\"".sprintf("%d",10 * $line * 1.001)."\%\", 0, $height+4);";
+ }
+ }
+ print "ctx.strokeStyle = \"rgb(100,100,100)\"; ctx.stroke();\n";
+
+ $total = 0;
+ foreach ($keys as $i) {
+ $total += $log_info[$i]["total"];
+ }
+ $total_so_far = 0;
+ foreach ($keys as $i) {
+ $prec_ratio = $log_info[$i]["precision"]/$log_info[$i]["total"];
+ $x = (int)(20+($img_width-20) * $total_so_far / $total);
+ $y = (int)(90-($prec_ratio*180*5));
+ $width = (int)($img_width * $log_info[$i]["total"]/$total);
+ $height = (int)($prec_ratio*180*5);
+ print "ctx.fillStyle = \"rgb(200,200,0)\";";
+ print "ctx.fillRect ($x, $y, $width, $height);";
+
+ $del_ratio = $log_info[$i]["delete"]/$log_info[$i]["total"];
+ $height = (int)($del_ratio*180*5);
+ print "ctx.fillStyle = \"rgb(100,100,255)\";";
+ print "ctx.fillRect ($x, 250, $width, $height);";
+
+ $total_so_far += $log_info[$i]["total"];
+
+ if ($width>3) {
+ print "ctx.fillStyle = \"rgb(0,0,0)\";";
+ // print "ctx.rotate(-1.5707);";
+ print "ctx.fillText(\"$i\", $x+$width/2-3, 190);";
+ //print "ctx.rotate(1.5707);";
+ }
+ }
+ print "</script>";
+}
+
+
+// stats on precision and recall
+function precision_recall_details_diff() {
+?>
<table width=100%>
<tr>
<td width=25% valign=top><div id="nGramPrecision1">(loading...)</div></td>
@@ -53,9 +382,7 @@ function ngram_diff(type,order,count,sort,smooth) {
<td width=25% valign=top><div id="nGramRecall3">(loading...)</div></td>
<td width=25% valign=top><div id="nGramRecall4">(loading...)</div></td>
</tr></table>
-<div id="bleu">(loading...)</div>
-<script>
-diff('bleu','',5);
+<script language="javascript">
ngram_diff('precision',1,5,'',0);
ngram_diff('precision',2,5,'',0);
ngram_diff('precision',3,5,'',0);
@@ -65,7 +392,6 @@ ngram_diff('recall',2,5,'',0);
ngram_diff('recall',3,5,'',0);
ngram_diff('recall',4,5,'',0);
</script>
-</body></html>
<?php
}
@@ -74,14 +400,15 @@ function ngram_summary_diff() {
// load data
for($idx=0;$idx<2;$idx++) {
- $data = file("$dir/evaluation/$set.analysis.".($idx?$id2:$id)."/summary");
+ $data = file(get_analysis_filename($dir,$set,$idx?$id2:$id,"basic","summary"));
for($i=0;$i<count($data);$i++) {
$item = split(": ",$data[$i]);
$info[$idx][$item[0]] = $item[1];
}
}
- print "<table cellpadding=5><tr><td>";
+ print "<table cellspacing=5 width=100%><tr><td valign=top align=center bgcolor=#eeeeee>";
+ print "<b>Precision of Output</b><br>";
//foreach (array("precision","recall") as $type) {
$type = "precision";
print "<table><tr><td>$type</td><td>1-gram</td><td>2-gram</td><td>3-gram</td><td>4-gram</td></tr>\n";
@@ -103,11 +430,14 @@ function ngram_summary_diff() {
print "</table>";
//}
- print "</td><td valign=top>";
-
- printf("length-diff<br>%d (%+d)",$info[1]["precision-1-total"]-$info[1]["recall-1-total"],$info[1]["precision-1-total"]-$info[0]["precision-1-total"]);
+ print "<A HREF=\"javascript:generic_show_diff('PrecisionRecallDetailsDiff','')\">details</A> ";
+ if (file_exists(get_current_analysis_filename("precision","precision-by-corpus-coverage")) &&
+ file_exists(get_current_analysis_filename2("precision","precision-by-corpus-coverage"))) {
+ print "| <A HREF=\"javascript:generic_show_diff('PrecisionByCoverageDiff','')\">precision of input by coverage</A> ";
+ }
- print "</td><td valign=top>";
+ print "</td><td valign=top align=center bgcolor=#eeeeee>";
+ print "<b>Metrics</b><br>\n";
for($idx=0;$idx<2;$idx++) {
$each_score = explode(" ; ",$experiment[$idx?$id2:$id]->result[$set]);
@@ -118,12 +448,14 @@ function ngram_summary_diff() {
}
}
}
+ $header = ""; $score_line = ""; $diff_line = "";
foreach ($score as $name => $value) {
$header .= "<td>$name</td>";
$score_line .= "<td>".$score[$name][1]."</td>";
$diff_line .= sprintf("<td>%+.2f</td>",$score[$name][1]-$score[$name][0]);
}
print "<table border=1><tr>".$header."</tr><tr>".$score_line."</tr><tr>".$diff_line."</tr></table>";
+ printf("length-diff<br>%d (%+d)",$info[1]["precision-1-total"]-$info[1]["recall-1-total"],$info[1]["precision-1-total"]-$info[0]["precision-1-total"]);
print "</td><tr><table>";
}
@@ -177,7 +509,7 @@ function bleu_diff_annotation() {
// load data
for($idx=0;$idx<2;$idx++) {
- $data = file("$dir/evaluation/$set.analysis.".($idx?$id2:$id)."/bleu-annotation");
+ $data = file(get_analysis_filename($dir,$set,$idx?$id2:$id,"basic","bleu-annotation"));
for($i=0;$i<count($data);$i++) {
$item = split("\t",$data[$i]);
$annotation[$item[1]]["bleu$idx"] = $item[0];
@@ -188,6 +520,7 @@ function bleu_diff_annotation() {
}
$data = array();
+ $identical=0; $same=0; $better=0; $worse=0;
for($i=0;$i<count($annotation);$i++) {
if ($annotation[$i]["system1"] == $annotation[$i]["system0"]) {
$identical++;
@@ -292,7 +625,7 @@ function ngram_diff($type) {
$order = $_GET['order'];
for($idx=0;$idx<2;$idx++) {
- $data = file("$dir/evaluation/$set.analysis.".($idx?$id2:$id)."/n-gram-$type.$order");
+ $data = file(get_analysis_filename($dir,$set,$idx?$id2:$id,"basic","n-gram-$type.$order"));
for($i=0;$i<count($data);$i++) {
$item = split("\t",$data[$i]);
$ngram_hash[$item[2]]["total$idx"] = $item[0];
diff --git a/scripts/ems/web/bilingual-concordance.css b/scripts/ems/web/bilingual-concordance.css
index 24be941aa..e232337d2 100644
--- a/scripts/ems/web/bilingual-concordance.css
+++ b/scripts/ems/web/bilingual-concordance.css
@@ -1,11 +1,18 @@
.pp_head {
- font-size: 150%;
+ font-size: 90%;
font-weight: bold;
text-align: center;
}
.pp_target_header {
- font-size: 120%;
+ font-size: 80%;
+ font-weight: bold;
+ text-align: center;
+}
+
+.pp_singleton_header {
+ font-size: 80%;
+ font-variant: small-caps;
font-weight: bold;
text-align: center;
}
@@ -29,23 +36,62 @@ td.biconcor {
}
td.pp_source_left {
+ font-size: 70%;
text-align: right;
}
td.pp_target_left {
+ font-size: 70%;
text-align: right;
}
td.pp_source {
+ font-size: 70%;
font-weight: bold;
}
td.pp_target {
+ font-size: 70%;
font-weight: bold;
}
+td.mismatch_target {
+ font-size: 70%;
+ text-align: center;
+}
+
td.pp_source_right {
+ font-size: 70%;
border-style:solid;
border-width:0px 2px 0px 0px ;
border-color: black;
}
+
+td.pp_target_right {
+ font-size: 70%;
+}
+
+span.null_aligned {
+ color: blue;
+}
+
+span.mismatch_pre_aligned {
+ color: purple;
+}
+
+span.mismatch_post_aligned {
+ color: olive;
+}
+
+span.mismatch_misaligned {
+ color: red;
+}
+
+span.mismatch_aligned {
+ font-weight: bold;
+}
+
+td.pp_more {
+ font-size: 70%;
+ text-align: center;
+}
diff --git a/scripts/ems/web/close.gif b/scripts/ems/web/close.gif
new file mode 100644
index 000000000..d45791ccd
--- /dev/null
+++ b/scripts/ems/web/close.gif
Binary files differ
diff --git a/scripts/ems/web/diff.php b/scripts/ems/web/diff.php
index 74f0f6572..71e732af1 100644
--- a/scripts/ems/web/diff.php
+++ b/scripts/ems/web/diff.php
@@ -18,20 +18,31 @@ function diff() {
}
function compute_diff($base,$change) {
+ print "<H3>Experiment $change</H3><TABLE>";
+
+ // get parameter values for the two runs
$parameter_base = load_parameter($base);
$parameter_change = load_parameter($change);
- print "<H3>Experiment $change</H3><TABLE>";
- while (list($parameter,$base_value) = each($parameter_base)) {
- if (!array_key_exists($parameter,$parameter_change)) {
- $parameter_change[$parameter] = "";
- }
- if ($base_value != $parameter_change[$parameter]) {
- output_diff_line($parameter,$base_value,$parameter_change[$parameter]);
+
+ // get parameters and sort them
+ $all_parameters = array_keys($parameter_base);
+ foreach (array_keys($parameter_change) as $parameter) {
+ if (!array_key_exists($parameter,$parameter_base)) {
+ $all_parameters[] = $parameter;
}
}
- while (list($parameter,$change_value) = each($parameter_change)) {
+ sort($all_parameters);
+
+ // display differences
+ foreach ($all_parameters as $parameter) {
if (!array_key_exists($parameter,$parameter_base)) {
- output_diff_line($parameter,"",$change_value);
+ $parameter_base[$parameter] = "";
+ }
+ if (!array_key_exists($parameter,$parameter_change)) {
+ $parameter_change[$parameter] = "";
+ }
+ if ($parameter_base[$parameter] != $parameter_change[$parameter]) {
+ output_diff_line($parameter,$parameter_base[$parameter],$parameter_change[$parameter]);
}
}
print "</TABLE>\n";
diff --git a/scripts/ems/web/general.css b/scripts/ems/web/general.css
new file mode 100644
index 000000000..5eb8e3eb8
--- /dev/null
+++ b/scripts/ems/web/general.css
@@ -0,0 +1,5 @@
+h2 {
+ font:italic x-large/1.75 'Essays 1743','Times New Roman',serif;
+ text-shadow:0 0 1px #667
+}
+
diff --git a/scripts/ems/web/index.php b/scripts/ems/web/index.php
index c7bd51f33..466af9013 100644
--- a/scripts/ems/web/index.php
+++ b/scripts/ems/web/index.php
@@ -12,6 +12,8 @@ function head($title) {
<script language="javascript" src="/javascripts/prototype.js"></script>
<script language="javascript" src="/javascripts/scriptaculous.js"></script>
<script language="javascript" src="hierarchical-segmentation.js"></script>
+<script language="javascript" src="base64.js"></script>
+<link href="general.css" rel="stylesheet" type="text/css">
<link href="hierarchical-segmentation.css" rel="stylesheet" type="text/css">
<link href="bilingual-concordance.css" rel="stylesheet" type="text/css">
</head>
@@ -28,15 +30,21 @@ if (array_key_exists("setup",$_POST) || array_key_exists("setup",$_GET)) {
$action = $_GET["analysis"];
$set = $_GET["set"];
$id = $_GET["id"];
+ if (array_key_exists("id2",$_GET)) { $id2 = $_GET["id2"]; }
if ($action == "show") { show_analysis(); }
else if ($action == "bleu_show") { bleu_show(); }
else if ($action == "ngram_precision_show") { ngram_show("precision");}
else if ($action == "ngram_recall_show") { ngram_show("recall"); }
else if ($action == "CoverageSummary_show") { coverage_summary(); }
else if ($action == "PrecisionRecallDetails_show") { precision_recall_details(); }
+ else if ($action == "PrecisionRecallDetailsDiff_show") { precision_recall_details_diff(); }
+ else if ($action == "PrecisionByCoverage_show") { precision_by_coverage(); }
+ else if ($action == "PrecisionByCoverageDiff_show") { precision_by_coverage_diff(); }
+ else if (preg_match("/PrecisionByWordDiff(.+)_show/",$action,$match)) { precision_by_word_diff($match[1]); }
+ else if (preg_match("/PrecisionByWord(.+)_show/",$action,$match)) { precision_by_word($match[1]); }
else if ($action == "CoverageDetails_show") { coverage_details(); }
else if ($action == "SegmentationSummary_show") { segmentation_summary(); }
- else if ($action == "biconcor") { biconcor($_GET["phrase"]); }
+ else if ($action == "biconcor") { biconcor(base64_decode($_GET["phrase"])); }
else { print "ERROR! $action"; }
}
else if (array_key_exists("analysis_diff_home",$_GET)) {
diff --git a/scripts/ems/web/lib.php b/scripts/ems/web/lib.php
index 45f2636cb..440940d9c 100644
--- a/scripts/ems/web/lib.php
+++ b/scripts/ems/web/lib.php
@@ -124,48 +124,136 @@ function process_file_entry($dir,$entry) {
}
}
-function get_coverage_analysis_version($dir,$set,$id) {
- if (file_exists("$dir/evaluation/$set.analysis.$id/input-annotation")) {
- return $id;
+function get_analysis_version($dir,$set,$id) {
+ global $analysis_version;
+ if ($analysis_version
+ && array_key_exists($id,$analysis_version)
+ && array_key_exists($set,$analysis_version[$id])) {
+ #reset($analysis_version[$id][$set]);
+ #print "$id,$set ( ";
+ #while(list($type,$i) = each($analysis_version[$id][$set])) {
+ # print "$type=$i ";
+ #}
+ #print ") FROM CACHE<br>";
+ return $analysis_version[$id][$set];
+ }
+ $analysis_version[$id][$set]["basic"] = 0;
+ $analysis_version[$id][$set]["biconcor"] = 0;
+ $analysis_version[$id][$set]["coverage"] = 0;
+ $analysis_version[$id][$set]["precision"] = 0;
+ $prefix = "$dir/evaluation/$set.analysis";
+
+ # produced by the run itself ?
+ if (file_exists("$prefix.$id/summary")) {
+ $analysis_version[$id][$set]["basic"] = $id;
}
+ if (file_exists("$prefix.$id/input-annotation")) {
+ $analysis_version[$id][$set]["coverage"] = $id;
+ }
+ if (file_exists("$prefix.$id/precision-by-input-word")) {
+ $analysis_version[$id][$set]["precision"] = $id;
+ }
+ if (file_exists("$dir/model/biconcor.$id")) {
+ $analysis_version[$id][$set]["biconcor"] = $id;
+ }
+
+ # re-use ?
if (file_exists("$dir/steps/$id/re-use.$id")) {
$re_use = file("$dir/steps/$id/re-use.$id");
foreach($re_use as $line) {
- if (preg_match("/EVALUATION:(.+):analysis-coverage (\d+)/",$line,$match) &&
+ if (preg_match("/EVALUATION:(.+):analysis (\d+)/",$line,$match) &&
$match[1] == $set &&
- file_exists("$dir/evaluation/$set.analysis.$match[2]/input-annotation")) {
- return $match[2];
+ file_exists("$prefix.$match[2]/summary")) {
+ $analysis_version[$id][$set]["basic"] = $match[2];
+ }
+ else if (preg_match("/EVALUATION:(.+):analysis-coverage (\d+)/",$line,$match) &&
+ $match[1] == $set &&
+ file_exists("$prefix.$match[2]/input-annotation")) {
+ $analysis_version[$id][$set]["coverage"] = $match[2];
+ }
+ else if (preg_match("/EVALUATION:(.+):analysis-precision (\d+)/",$line,$match) &&
+ $match[1] == $set &&
+ file_exists("$prefix.$match[2]/precision-by-input-word")) {
+ $analysis_version[$id][$set]["precision"] = $match[2];
+ }
+ else if (preg_match("/TRAINING:build-biconcor (\d+)/",$line,$match) &&
+ file_exists("$dir/model/biconcor.$match[1]")) {
+ $analysis_version[$id][$set]["biconcor"] = $match[1];
}
}
}
+
# legacy stuff below...
- if (! file_exists("$dir/steps/$id/REPORTING_report.$id")) {
- return 0;
- }
- $report = file("$dir/steps/$id/REPORTING_report.$id.INFO");
- foreach ($report as $line) {
+ if (file_exists("$dir/steps/$id/REPORTING_report.$id")) {
+ $report = file("$dir/steps/$id/REPORTING_report.$id.INFO");
+ foreach ($report as $line) {
+ if (preg_match("/\# reuse run (\d+) for EVALUATION:(.+):analysis/",$line,$match) &&
+ $match[2] == $set) {
+ if (file_exists("$prefix.$match[1]/summary")) {
+ $analysis_version[$id][$set]["basic"] = $match[1];
+ }
+ }
if (preg_match("/\# reuse run (\d+) for EVALUATION:(.+):analysis-coverage/",$line,$match) &&
$match[2] == $set) {
- $reuse_id = $match[1];
- if (file_exists("$dir/evaluation/$set.analysis.$reuse_id/input-annotation")) {
- return $reuse_id;
+ if (file_exists("$prefix.$match[1]/input-annotation")) {
+ $analysis_version[$id][$set]["coverage"] = $match[1];
}
}
+ if (preg_match("/\# reuse run (\d+) for EVALUATION:(.+):analysis-precision/",$line,$match) &&
+ $match[2] == $set) {
+ if (file_exists("$prefix.$match[1]/precision-by-input-word")) {
+ $analysis_version[$id][$set]["precision"] = $match[1];
+ }
+ }
+ if (preg_match("/\# reuse run (\d+) for TRAINING:biconcor/",$line,$match)){
+ if (file_exists("$dir/model/biconcor.$match[1]")) {
+ $analysis_version[$id][$set]["biconcor"] = $match[1];
+ }
+ }
+ }
}
- return 0;
+ #print "$id,$set ( ";
+ #reset($analysis_version[$id][$set]);
+ #while(list($type,$i) = each($analysis_version[$id][$set])) {
+ # print "$type=$i ";
+ #}
+ #print ") ZZ<br>";
+ return $analysis_version[$id][$set];
}
-function get_biconcor_version($dir,$id) {
- if (file_exists("$dir/model/biconcor.$id")) {
- return $id;
- }
- $re_use = file("$dir/steps/$id/re-use.$id");
- foreach($re_use as $line) {
- if (preg_match("/TRAINING:build-biconcor (\d+)/",$line,$match) &&
- file_exists("$dir/model/biconcor.$match[1]")) {
- return $match[1];
- }
- }
- return 0;
+function get_precision_analysis_version($dir,$set,$id) {
+ $version = get_analysis_version($dir,$set,$id);
+ return $version["precision"];
+}
+
+function get_basic_analysis_version($dir,$set,$id) {
+ $version = get_analysis_version($dir,$set,$id);
+ return $version["basic"];
}
+function get_coverage_analysis_version($dir,$set,$id) {
+ $version = get_analysis_version($dir,$set,$id);
+ return $version["coverage"];
+}
+
+function get_biconcor_version($dir,$set,$id) {
+ $version = get_analysis_version($dir,$set,$id);
+ return $version["biconcor"];
+}
+
+function get_analysis_filename($dir,$set,$id,$type,$file) {
+ $version = get_analysis_version($dir,$set,$id);
+ return "$dir/evaluation/$set.analysis.".$version[$type]."/".$file;
+}
+
+function get_current_analysis_filename($type,$file) {
+ global $dir,$set,$id;
+ $version = get_analysis_version($dir,$set,$id);
+ return "$dir/evaluation/$set.analysis.".$version[$type]."/".$file;
+}
+
+function get_current_analysis_filename2($type,$file) {
+ global $dir,$set,$id2;
+ $version = get_analysis_version($dir,$set,$id2);
+ return "$dir/evaluation/$set.analysis.".$version[$type]."/".$file;
+}
diff --git a/scripts/ems/web/overview.php b/scripts/ems/web/overview.php
index d4a801643..7280bc35b 100644
--- a/scripts/ems/web/overview.php
+++ b/scripts/ems/web/overview.php
@@ -1,5 +1,7 @@
<?php
+date_default_timezone_set('Europe/London');
+
function setup() {
$setup = file("setup");
head("All Experimental Setups");
@@ -11,7 +13,7 @@ function setup() {
print "<TR><TD><A HREF=\"?setup=$dir[0]\">$dir[0]</A></TD><TD>$dir[1]</TD><TD>$dir[2]</TD><TD>$dir[3]</TD></TR>\n";
}
print "</TABLE>\n";
- print "<P>To add experiment, edit setup";
+ print "<P>To add experiment, edit setup in web directory";
}
function overview() {
@@ -29,10 +31,14 @@ function overview() {
print "<form action=\"\" method=get>\n";
output_state_for_form();
+
+ // count how many analyses there are for each test set
while (list($id,$info) = each($experiment)) {
reset($evalset);
while (list($set,$dummy) = each($evalset)) {
$analysis = "$dir/evaluation/$set.analysis.$id";
+ $report_info = "$dir/steps/$id/REPORTING_report.$id.INFO";
+ // does the analysis file exist?
if (file_exists($analysis)) {
if (!array_key_exists($set,$has_analysis)) {
$has_analysis[$set] = 0;
@@ -117,7 +123,7 @@ function overview() {
list($score) = sscanf($info->result[$set],"%f%s");
if ($score > 0) {
print "score[$id][\"$set\"] = $score;\n";
- if ($score > $best[$set]) {
+ if (!array_key_exists($set,$best) || $score > $best[$set]) {
$best[$set] = $score;
}
}
@@ -303,8 +309,8 @@ function output_score($id,$info) {
if ($has_analysis && array_key_exists($set,$has_analysis)) {
print "<td align=center>";
global $dir;
- $analysis = "$dir/evaluation/$set.analysis.$id";
- if (file_exists($analysis)) {
+ $analysis = get_analysis_version($dir,$set,$id);
+ if ($analysis["basic"]) {
print "<a href=\"?analysis=show&setup=$setup&set=$set&id=$id\">&#x24B6;</a> <input type=checkbox name=analysis-$id-$set value=1>";
}
print "</td>";
@@ -315,6 +321,7 @@ function output_score($id,$info) {
function tune_status($id) {
global $dir;
$max_iteration = 0;
+ if (! file_exists($dir."/tuning/tmp.".$id)) { return ""; }
$d = dir($dir."/tuning/tmp.".$id);
while (false !== ($entry = $d->read())) {
if (preg_match('/run(\d+).moses.ini/',$entry,$match)
diff --git a/scripts/ems/web/spinner.gif b/scripts/ems/web/spinner.gif
new file mode 100644
index 000000000..c196a8289
--- /dev/null
+++ b/scripts/ems/web/spinner.gif
Binary files differ
diff --git a/scripts/generic/extract-parallel.perl b/scripts/generic/extract-parallel.perl
new file mode 100755
index 000000000..cf138a3f8
--- /dev/null
+++ b/scripts/generic/extract-parallel.perl
@@ -0,0 +1,147 @@
+#! /usr/bin/perl
+
+# example
+# ./extract-parallel.perl 8 ./coreutils-8.9/src/split "./coreutils-8.9/src/sort --batch-size=253" ./extract ./corpus.5.en ./corpus.5.ar ./align.ar-en.grow-diag-final-and ./extracted 7 --NoFileLimit orientation
+
+use strict;
+use File::Basename;
+
+sub NumStr($);
+
+print "Started ".localtime() ."\n";
+
+my $numParallel = $ARGV[0];
+my $splitCmd = $ARGV[1];
+my $sortCmd = $ARGV[2];
+my $extractCmd = $ARGV[3];
+
+my $target = $ARGV[4]; # 1st arg of extract argument
+my $source = $ARGV[5]; # 2nd arg of extract argument
+my $align = $ARGV[6]; # 3rd arg of extract argument
+my $extract = $ARGV[7]; # 4th arg of extract argument
+
+my $otherExtractArgs = "";
+for (my $i = 8; $i < $#ARGV + 1; ++$i)
+{
+ $otherExtractArgs .= $ARGV[$i] ." ";
+}
+
+my $TMPDIR=dirname($extract) ."/tmp.$$";
+mkdir $TMPDIR;
+
+my $totalLines = int(`wc -l $align`);
+my $linesPerSplit = int($totalLines / $numParallel) + 1;
+
+print "total=$totalLines line-per-split=$linesPerSplit \n";
+
+my $cmd = "$splitCmd -d -l $linesPerSplit -a 5 $target $TMPDIR/target.";
+`$cmd`;
+
+$cmd = "$splitCmd -d -l $linesPerSplit -a 5 $source $TMPDIR/source.";
+`$cmd`;
+
+$cmd = "$splitCmd -d -l $linesPerSplit -a 5 $align $TMPDIR/align.";
+`$cmd`;
+
+# run extract
+my $isParent = 1;
+my @childs;
+for (my $i = 0; $i < $numParallel; ++$i)
+{
+ my $pid = fork();
+
+ if ($pid == 0)
+ { # child
+ $isParent = 0;
+ my $numStr = NumStr($i);
+ my $cmd = "$extractCmd $TMPDIR/target.$numStr $TMPDIR/source.$numStr $TMPDIR/align.$numStr $TMPDIR/extract.$numStr $otherExtractArgs \n";
+ print $cmd;
+ `$cmd`;
+
+ $cmd = "LC_ALL=C $sortCmd -T $TMPDIR $TMPDIR/extract.$numStr > $TMPDIR/extract.$numStr.sorted \n";
+ print $cmd;
+ `$cmd`;
+
+ $cmd = "LC_ALL=C $sortCmd -T $TMPDIR $TMPDIR/extract.$numStr.inv > $TMPDIR/extract.$numStr.inv.sorted \n";
+ print $cmd;
+ `$cmd`;
+
+ $cmd = "LC_ALL=C $sortCmd -T $TMPDIR $TMPDIR/extract.$numStr.o > $TMPDIR/extract.$numStr.o.sorted \n";
+ print $cmd;
+ `$cmd`;
+
+ $cmd = "rm -f $TMPDIR/extract.$numStr $TMPDIR/extract.$numStr.inv $TMPDIR/extract.$numStr.o \n";
+ print $cmd;
+ `$cmd`;
+
+ exit();
+ }
+ else
+ { # parent
+ push(@childs, $pid);
+ }
+}
+
+# wait for everything is finished
+if ($isParent)
+{
+ foreach (@childs) {
+ waitpid($_, 0);
+ }
+}
+else
+{
+ die "shouldn't be here";
+}
+
+# merge
+my $extractCmd = "LC_ALL=C $sortCmd -m ";
+my $extractInvCmd = "LC_ALL=C $sortCmd -m ";
+my $extractOrderingCmd = "LC_ALL=C $sortCmd -m ";
+for (my $i = 0; $i < $numParallel; ++$i)
+{
+ my $numStr = NumStr($i);
+ $extractCmd .= "$TMPDIR/extract.$numStr.sorted ";
+ $extractInvCmd .= "$TMPDIR/extract.$numStr.inv.sorted ";
+ $extractOrderingCmd .= "$TMPDIR/extract.$numStr.o.sorted ";
+}
+
+$extractCmd .= "> $extract.sorted \n";
+$extractInvCmd .= "> $extract.inv.sorted \n";
+$extractOrderingCmd .= "> $extract.o.sorted \n";
+print $extractCmd;
+print $extractInvCmd;
+print $extractOrderingCmd;
+`$extractCmd`;
+`$extractInvCmd`;
+`$extractOrderingCmd`;
+
+#$cmd = "rm -rf $TMPDIR \n";
+#print $cmd;
+#`$cmd`;
+
+print "Finished ".localtime() ."\n";
+
+
+sub NumStr($)
+{
+ my $i = shift;
+ my $numStr;
+ if ($i < 10) {
+ $numStr = "0000$i";
+ }
+ elsif ($i < 100) {
+ $numStr = "000$i";
+ }
+ elsif ($i < 1000) {
+ $numStr = "00$i";
+ }
+ elsif ($i < 10000) {
+ $numStr = "0$i";
+ }
+ else {
+ $numStr = $i;
+ }
+ return $numStr;
+}
+
diff --git a/scripts/generic/giza-parallel.perl b/scripts/generic/giza-parallel.perl
new file mode 100755
index 000000000..60059b46a
--- /dev/null
+++ b/scripts/generic/giza-parallel.perl
@@ -0,0 +1,124 @@
+#! /usr/bin/perl
+
+# example
+# ~/giza-parallel.perl 10 split ~/workspace/sourceforge/trunk/scripts/training/train-model.perl ar en train align
+
+use strict;
+use File::Basename;
+
+sub NumStr($);
+
+print "Started ".localtime() ."\n";
+
+my $numParallel = $ARGV[0];
+my $splitCmd = $ARGV[1];
+my $trainCmd = $ARGV[2];
+my $inputExt = $ARGV[3];
+my $outputExt = $ARGV[4];
+my $corpus = $ARGV[5];
+my $align = $ARGV[6];
+
+my $TMPDIR=dirname($align) ."/tmp.$$";
+mkdir $TMPDIR;
+
+my $scriptDir=dirname($trainCmd) ."/..";
+
+# split corpus file
+my $totalLines = int(`wc -l $corpus.$inputExt`);
+my $linesPerSplit = int($totalLines / $numParallel) + 1;
+
+my $cmd = "$splitCmd -d -l $linesPerSplit -a 5 $corpus.$inputExt $TMPDIR/source.";
+`$cmd`;
+
+$cmd = "$splitCmd -d -l $linesPerSplit -a 5 $corpus.$outputExt $TMPDIR/target.";
+`$cmd`;
+
+for (my $i = 0; $i < $numParallel; ++$i)
+{
+ my $numStr = NumStr($i);
+ rename("$TMPDIR/source.$numStr", "$TMPDIR/$numStr.source");
+ rename("$TMPDIR/target.$numStr", "$TMPDIR/$numStr.target");
+}
+
+#fork & run giza & friends
+my $isParent = 1;
+my @childs;
+for (my $i = 0; $i < $numParallel; ++$i)
+{
+ my $pid = fork();
+
+ if ($pid == 0)
+ { # child
+ $isParent = 0;
+
+ my $numStr = NumStr($i);
+ my $cmd = "$trainCmd -dont-zip -last-step 1 -scripts-root-dir $scriptDir -f source -e target -alignment grow-diag-final-and -parts 3 -reordering msd-bidirectional-fe -corpus $TMPDIR/$numStr -corpus-dir $TMPDIR/prepared.$numStr \n";
+ print $cmd;
+ `$cmd`;
+
+ $cmd = "$trainCmd -dont-zip -first-step 2 -last-step 2 -scripts-root-dir $scriptDir -f source -e target -alignment grow-diag-final-and -parts 3 -reordering msd-bidirectional-fe -corpus-dir $TMPDIR/prepared.$numStr -giza-e2f $TMPDIR/giza.$numStr -direction 2 \n";
+ print $cmd;
+ `$cmd`;
+
+ $cmd = "$trainCmd -dont-zip -first-step 2 -last-step 2 -scripts-root-dir $scriptDir -f source -e target -alignment grow-diag-final-and -parts 3 -reordering msd-bidirectional-fe -corpus-dir $TMPDIR/prepared.$numStr -giza-f2e $TMPDIR/giza-inverse.$numStr -direction 1 \n";
+ print $cmd;
+ `$cmd`;
+
+ $cmd = "$trainCmd -dont-zip -first-step 3 -last-step 3 -scripts-root-dir $scriptDir -f source -e target -alignment grow-diag-final-and -parts 3 -reordering msd-bidirectional-fe -giza-e2f $TMPDIR/giza.$numStr -giza-f2e $TMPDIR/giza-inverse.$numStr -alignment-file $TMPDIR/aligned.$numStr -alignment grow-diag-final-and \n";
+ print $cmd;
+ `$cmd`;
+
+ exit();
+ }
+ else
+ { # parent
+ push(@childs, $pid);
+ }
+
+}
+
+# wait for everything is finished
+if ($isParent)
+{
+ foreach (@childs) {
+ waitpid($_, 0);
+ }
+}
+else
+{
+ die "shouldn't be here";
+}
+
+# cat all aligned files together. Voila
+my $cmd = "cat ";
+for (my $i = 0; $i < $numParallel; ++$i)
+{
+ my $numStr = NumStr($i);
+ $cmd .= "$TMPDIR/aligned.$numStr.grow-diag-final-and ";
+}
+$cmd .= " > $align \n";
+print $cmd;
+`$cmd`;
+
+sub NumStr($)
+{
+ my $i = shift;
+ my $numStr;
+ if ($i < 10) {
+ $numStr = "0000$i";
+ }
+ elsif ($i < 100) {
+ $numStr = "000$i";
+ }
+ elsif ($i < 1000) {
+ $numStr = "00$i";
+ }
+ elsif ($i < 10000) {
+ $numStr = "0$i";
+ }
+ else {
+ $numStr = $i;
+ }
+ return $numStr;
+}
+
diff --git a/scripts/generic/moses-parallel.pl b/scripts/generic/moses-parallel.pl
index cfa22e9fc..3139be351 100755
--- a/scripts/generic/moses-parallel.pl
+++ b/scripts/generic/moses-parallel.pl
@@ -38,7 +38,6 @@ my $jobscript="$workingdir/job$$";
my $qsubout="$workingdir/out.job$$";
my $qsuberr="$workingdir/err.job$$";
-
my $mosesparameters="";
my $feed_moses_via_stdin = 0;
# a workaround, for a reason, the default "-input-file X" blocks
@@ -64,6 +63,7 @@ my $wordgraphlist=undef;
my $wordgraphfile=undef;
my $wordgraphflag=0;
my $robust=5; # resubmit crashed jobs robust-times
+my $alifile=undef;
my $logfile="";
my $logflag="";
my $searchgraphlist="";
@@ -92,6 +92,7 @@ sub init(){
'n-best-size=i'=> \$oldnbest,
'output-search-graph|osg=s'=> \$searchgraphlist,
'output-word-graph|owg=s'=> \$wordgraphlist,
+ 'alignment-output-file=s'=> \$alifile,
'qsub-prefix=s'=> \$qsubname,
'queue-parameters=s'=> \$queueparameters,
'inputtype=i'=> \$inputtype,
@@ -537,6 +538,7 @@ while ($robust && scalar @idx_todo) {
#concatenating translations and removing temporary files
concatenate_1best();
concatenate_logs() if $logflag;
+concatenate_ali() if defined $alifile;
concatenate_nbest() if $nbestflag;
safesystem("cat nbest$$ >> /dev/stdout") if $nbestlist[0] eq '-';
@@ -571,6 +573,11 @@ sub preparing_script(){
$tmpnbestlist = "-n-best-list $tmpnbestlist";
}
+ my $tmpalioutfile = "";
+ if (defined $alifile){
+ $tmpalioutfile="-alignment-output-file $tmpdir/$alifile.$splitpfx$idx";
+ }
+
my $tmpsearchgraphlist="";
if ($searchgraphflag){
$tmpsearchgraphlist="-output-search-graph $tmpdir/$searchgraphfile.$splitpfx$idx";
@@ -581,9 +588,13 @@ sub preparing_script(){
$tmpwordgraphlist="-output-word-graph $tmpdir/$wordgraphfile.$splitpfx$idx $wordgraphlist[1]";
}
- print OUT "$mosescmd $mosesparameters $tmpwordgraphlist $tmpsearchgraphlist $tmpnbestlist $inputmethod ${inputfile}.$splitpfx$idx > $tmpdir/${inputfile}.$splitpfx$idx.trans\n\n";
+ print OUT "$mosescmd $mosesparameters $tmpalioutfile $tmpwordgraphlist $tmpsearchgraphlist $tmpnbestlist $inputmethod ${inputfile}.$splitpfx$idx > $tmpdir/${inputfile}.$splitpfx$idx.trans\n\n";
print OUT "echo exit status \$\?\n\n";
+ if (defined $alifile){
+ print OUT "\\mv -f $tmpdir/${alifile}.$splitpfx$idx .\n\n";
+ print OUT "echo exit status \$\?\n\n";
+ }
if ($nbestflag){
print OUT "\\mv -f $tmpdir/${nbestfile}.$splitpfx$idx .\n\n";
print OUT "echo exit status \$\?\n\n";
@@ -798,6 +809,18 @@ sub concatenate_logs(){
close(OUT);
}
+sub concatenate_ali(){
+ open (OUT, "> ${alifile}");
+ foreach my $idx (@idxlist){
+ my @in=();
+ open (IN, "$alifile.$splitpfx$idx");
+ @in=<IN>;
+ print OUT "@in";
+ close(IN);
+ }
+ close(OUT);
+}
+
sub check_exit_status(){
print STDERR "check_exit_status\n";
@@ -894,6 +917,7 @@ sub remove_temporary_files(){
foreach my $idx (@idxlist){
unlink("${inputfile}.${splitpfx}${idx}.trans");
unlink("${inputfile}.${splitpfx}${idx}");
+ if (defined $alifile){ unlink("${alifile}.${splitpfx}${idx}"); }
if ($nbestflag){ unlink("${nbestfile}.${splitpfx}${idx}"); }
if ($searchgraphflag){ unlink("${searchgraphfile}.${splitpfx}${idx}"); }
if ($wordgraphflag){ unlink("${wordgraphfile}.${splitpfx}${idx}"); }
diff --git a/scripts/tokenizer/detokenizer.perl b/scripts/tokenizer/detokenizer.perl
index 3538fd6db..ac88834b0 100755
--- a/scripts/tokenizer/detokenizer.perl
+++ b/scripts/tokenizer/detokenizer.perl
@@ -73,11 +73,23 @@ sub detokenize {
my %quoteCount = ("\'"=>0,"\""=>0);
my $prependSpace = " ";
for ($i=0;$i<(scalar(@words));$i++) {
- if ($words[$i] =~ /^[\p{IsSc}\(\[\{\¿\¡]+$/) {
+ if (&startsWithCJKChar($words[$i])) {
+ if ($i > 0 && &endsWithCJKChar($words[$i-1])) {
+ # perform left shift if this is a second consecutive CJK (Chinese/Japanese/Korean) word
+ $text=$text.$words[$i];
+ } else {
+ # ... but do nothing special if this is a CJK word that doesn't follow a CJK word
+ $text=$text.$prependSpace.$words[$i];
+ }
+ $prependSpace = " ";
+ } elsif ($words[$i] =~ /^[\p{IsSc}\(\[\{\¿\¡]+$/) {
#perform right shift on currency and other random punctuation items
$text = $text.$prependSpace.$words[$i];
$prependSpace = "";
} elsif ($words[$i] =~ /^[\,\.\?\!\:\;\\\%\}\]\)]+$/){
+ if (($language eq "fr") && ($words[$i] =~ /^[\?\!\:\;\\\%]$/)) {
+ #these punctuations are prefixed with a non-breakable space in french
+ $text .= " "; }
#perform left shift on punctuation items
$text=$text.$words[$i];
$prependSpace = " ";
@@ -89,7 +101,7 @@ sub detokenize {
#left-shift floats in Czech
$text=$text.$words[$i];
$prependSpace = " ";
- } elsif ((($language eq "fr") ||($language eq "it")) && ($i<(scalar(@words)-2)) && ($words[$i] =~ /[\p{IsAlpha}][\']$/) && ($words[$i+1] =~ /^[\p{IsAlpha}]/)) {
+ } elsif ((($language eq "fr") ||($language eq "it")) && ($i<=(scalar(@words)-2)) && ($words[$i] =~ /[\p{IsAlpha}][\']$/) && ($words[$i+1] =~ /^[\p{IsAlpha}]/)) {
#right-shift the contraction for French and Italian
$text = $text.$prependSpace.$words[$i];
$prependSpace = "";
@@ -158,3 +170,82 @@ sub detokenize {
return $text;
}
+sub startsWithCJKChar {
+ my ($str) = @_;
+ return 0 if length($str) == 0;
+ my $firstChar = substr($str, 0, 1);
+ return &charIsCJK($firstChar);
+}
+
+sub endsWithCJKChar {
+ my ($str) = @_;
+ return 0 if length($str) == 0;
+ my $lastChar = substr($str, length($str)-1, 1);
+ return &charIsCJK($lastChar);
+}
+
+# Given a string consisting of one character, returns true iff the character
+# is a CJK (Chinese/Japanese/Korean) character
+sub charIsCJK {
+ my ($char) = @_;
+ # $char should be a string of length 1
+ my $codepoint = &codepoint_dec($char);
+
+ # The following is based on http://en.wikipedia.org/wiki/Basic_Multilingual_Plane#Basic_Multilingual_Plane
+
+ # Hangul Jamo (1100–11FF)
+ return 1 if (&between_hexes($codepoint, '1100', '11FF'));
+
+ # CJK Radicals Supplement (2E80–2EFF)
+ # Kangxi Radicals (2F00–2FDF)
+ # Ideographic Description Characters (2FF0–2FFF)
+ # CJK Symbols and Punctuation (3000–303F)
+ # Hiragana (3040–309F)
+ # Katakana (30A0–30FF)
+ # Bopomofo (3100–312F)
+ # Hangul Compatibility Jamo (3130–318F)
+ # Kanbun (3190–319F)
+ # Bopomofo Extended (31A0–31BF)
+ # CJK Strokes (31C0–31EF)
+ # Katakana Phonetic Extensions (31F0–31FF)
+ # Enclosed CJK Letters and Months (3200–32FF)
+ # CJK Compatibility (3300–33FF)
+ # CJK Unified Ideographs Extension A (3400–4DBF)
+ # Yijing Hexagram Symbols (4DC0–4DFF)
+ # CJK Unified Ideographs (4E00–9FFF)
+ # Yi Syllables (A000–A48F)
+ # Yi Radicals (A490–A4CF)
+ return 1 if (&between_hexes($codepoint, '2E80', 'A4CF'));
+
+ # Phags-pa (A840–A87F)
+ return 1 if (&between_hexes($codepoint, 'A840', 'A87F'));
+
+ # Hangul Syllables (AC00–D7AF)
+ return 1 if (&between_hexes($codepoint, 'AC00', 'D7AF'));
+
+ # CJK Compatibility Ideographs (F900–FAFF)
+ return 1 if (&between_hexes($codepoint, 'F900', 'FAFF'));
+
+ # CJK Compatibility Forms (FE30–FE4F)
+ return 1 if (&between_hexes($codepoint, 'FE30', 'FE4F'));
+
+ # Range U+FF65–FFDC encodes halfwidth forms, of Katakana and Hangul characters
+ return 1 if (&between_hexes($codepoint, 'FF65', 'FFDC'));
+
+ # Supplementary Ideographic Plane 20000–2FFFF
+ return 1 if (&between_hexes($codepoint, '20000', '2FFFF'));
+
+ return 0;
+}
+
+# Returns the code point of a Unicode char, represented as a decimal number
+sub codepoint_dec {
+ if (my $char = shift) {
+ return unpack('U0U*', $char);
+ }
+}
+
+sub between_hexes {
+ my ($num, $left, $right) = @_;
+ return $num >= hex($left) && $num <= hex($right);
+}
diff --git a/scripts/training/absolutize_moses_model.pl b/scripts/training/absolutize_moses_model.pl
index 943dfa0b6..42f3d8aa3 100755
--- a/scripts/training/absolutize_moses_model.pl
+++ b/scripts/training/absolutize_moses_model.pl
@@ -22,17 +22,38 @@ while (<$inih>) {
if (/^[0-9]/) {
if ($section eq "ttable-file") {
chomp;
- my ($type, $b, $c, $d, $fn) = split / /;
- $abs = ensure_absolute($fn, $ini);
- die "File not found or empty: $fn (interpreted as $abs)"
- if ! -s $abs && ! -s $abs.".binphr.idx"; # accept binarized ttables
- $_ = "$type $b $c $d $abs\n";
+ my ($type, $b, $c, $d, $fn) = split(/ /, $_, 5);
+
+ if ( $type eq '8' ) {
+ # suffix arrays model: <src-corpus> <tgt-corpus> <alignment>.
+ my ($src, $tgt, $align) = split(/ /, $fn);
+
+ my $abs_src = ensure_absolute($src, $ini);
+ die "File not found or empty: $src (searched for $abs_src or $abs_src.binphr.idx)"
+ if ! -s $abs_src && ! -s $abs_src.".binphr.idx"; # accept binarized ttables
+
+ my $abs_tgt = ensure_absolute($tgt, $ini);
+ die "File not found or empty: $tgt (searched for $abs_tgt or $abs_tgt.binphr.idx)"
+ if ! -s $abs_tgt && ! -s $abs_tgt.".binphr.idx"; # accept binarized ttables
+
+ my $abs_align = ensure_absolute($align, $ini);
+ die "File not found or empty: $align (searched for $abs_align or $abs_align.binphr.idx)"
+ if ! -s $abs_align && ! -s $abs_align.".binphr.idx"; # accept binarized ttables
+
+ $_ = "$type $b $c $d $abs_src $abs_tgt $abs_align\n";
+ }
+ else {
+ $abs = ensure_absolute($fn, $ini);
+ die "File not found or empty: $fn (searched for $abs or $abs.binphr.idx)"
+ if ! -s $abs && ! -s $abs.".binphr.idx"; # accept binarized ttables
+ $_ = "$type $b $c $d $abs\n";
+ }
}
if ($section eq "generation-file" || $section eq "lmodel-file") {
chomp;
my ($a, $b, $c, $fn) = split / /;
$abs = ensure_absolute($fn, $ini);
- die "File not found or empty: $fn (interpreted as $abs)"
+ die "File not found or empty: $fn (searched for $abs)"
if ! -s $abs;
$_ = "$a $b $c $abs\n";
}
@@ -40,8 +61,8 @@ while (<$inih>) {
chomp;
my ($a, $b, $c, $fn) = split / /;
$abs = ensure_absolute($fn, $ini);
- die "File not found or empty: $fn (interpreted as $abs)"
- if ! -s $abs;
+ die "File not found or empty: $fn (searched for $abs or $abs.binlexr.idx)"
+ if ! -s $abs && ! -s $abs.".binlexr.idx"; # accept binarized lexro models
$_ = "$a $b $c $abs\n";
}
}
diff --git a/scripts/training/clone_moses_model.pl b/scripts/training/clone_moses_model.pl
index 3ae58276f..2bcbaa149 100755
--- a/scripts/training/clone_moses_model.pl
+++ b/scripts/training/clone_moses_model.pl
@@ -39,14 +39,41 @@ while (<INI>) {
if (/^[0-9]/) {
if ($section eq "ttable-file") {
chomp;
- my ($a, $b, $c, $d, $fn) = split / /;
+ my ($a, $b, $c, $d, $fn) = split(/ /, $_, 5);
$cnt{$section}++;
- $fn = fixpath($fn);
- $fn = ensure_relative_from_origin($fn, $ini);
- $fn = ensure_exists_or_gzipped_exists($fn);
- my $suffix = ($fn =~ /\.gz$/ ? ".gz" : "");
- clone_file_or_die($fn, "./$section.$cnt{$section}$suffix");
- $_ = "$a $b $c $d ./$section.$cnt{$section}$suffix\n";
+
+ if ( $a eq '8' ) {
+ # suffix arrays model: <src-corpus> <tgt-corpus> <alignment>.
+ my ($src, $tgt, $align) = split(/ /, $fn);
+
+ $src = fixpath($src);
+ $src = ensure_relative_from_origin($src, $ini);
+ $src = ensure_exists_or_gzipped_exists($src);
+ my $src_suffix = ($src =~ /\.gz$/ ? ".gz" : "");
+ clone_file_or_die($src, "./sa.src.$cnt{$section}$src_suffix");
+
+ $tgt = fixpath($tgt);
+ $tgt = ensure_relative_from_origin($tgt, $ini);
+ $tgt = ensure_exists_or_gzipped_exists($tgt);
+ my $tgt_suffix = ($tgt =~ /\.gz$/ ? ".gz" : "");
+ clone_file_or_die($tgt, "./sa.tgt.$cnt{$section}$tgt_suffix");
+
+ $align = fixpath($align);
+ $align = ensure_relative_from_origin($align, $ini);
+ $align = ensure_exists_or_gzipped_exists($align);
+ my $align_suffix = ($align =~ /\.gz$/ ? ".gz" : "");
+ clone_file_or_die($align, "./sa.align.$cnt{$section}$align_suffix");
+
+ $_ = "$a $b $c $d ./sa.src.$cnt{$section}$src_suffix ./sa.tgt.$cnt{$section}$tgt_suffix ./sa.align.$cnt{$section}$align_suffix\n";
+ }
+ else {
+ $fn = fixpath($fn);
+ $fn = ensure_relative_from_origin($fn, $ini);
+ $fn = ensure_exists_or_gzipped_exists($fn);
+ my $suffix = ($fn =~ /\.gz$/ ? ".gz" : "");
+ clone_file_or_die($fn, "./$section.$cnt{$section}$suffix");
+ $_ = "$a $b $c $d ./$section.$cnt{$section}$suffix\n";
+ }
}
if ($section eq "generation-file" || $section eq "lmodel-file") {
chomp;
diff --git a/scripts/training/eppex/ISS.h b/scripts/training/eppex/ISS.h
new file mode 100644
index 000000000..7921fcbf8
--- /dev/null
+++ b/scripts/training/eppex/ISS.h
@@ -0,0 +1,236 @@
+/**
+ * ISS (Indexed Strings Storage) - memory efficient storage for permanent strings.
+ *
+ * Implementation note: use #define USE_HASHSET to switch between implementation
+ * using __gnu_cxx::hash_set and implementation using std::set.
+ *
+ * (C) Ceslav Przywara, UFAL MFF UK, 2011
+ *
+ * $Id$
+ */
+
+#ifndef _ISS_H
+#define _ISS_H
+
+#include <limits>
+#include <vector>
+#include <string.h>
+
+// Use hashset instead of std::set for string-to-number indexing?
+#ifdef USE_HASHSET
+#include <ext/hash_set>
+#else
+#include <set>
+#endif
+
+#include <boost/pool/pool.hpp>
+
+#ifdef USE_HASHSET
+// Forward declaration of comparator functor.
+template<class IndType>
+class StringsEqualComparator;
+
+template<class IndType>
+class Hasher;
+#else
+// Forward declaration of comparator functor.
+template<class IndType>
+class StringsLessComparator;
+#endif
+
+/**
+ */
+template<class IndType>
+class IndexedStringsStorage {
+
+public:
+
+ typedef IndType index_type;
+
+#ifdef USE_HASHSET
+ typedef StringsEqualComparator<IndType> equality_comparator_t;
+
+ typedef Hasher<IndType> hasher_t;
+
+ /** @typedef Hash set used as lookup table (string -> numeric index). */
+ typedef __gnu_cxx::hash_set<IndType, hasher_t, equality_comparator_t> index_t;
+#else
+ typedef StringsLessComparator<IndType> less_comparator_t;
+
+ /** @typedef Set used as lookup table (string -> numeric index). */
+ typedef std::set<IndType, less_comparator_t> index_t;
+#endif
+ /** @typedef Container of pointers to stored C-strings. Acts as
+ * conversion table: numeric index -> string.
+ */
+ typedef std::vector<const char*> table_t;
+
+private:
+
+ /** @var memory pool used to store C-strings */
+ boost::pool<> _storage;
+
+ /** @var index-to-string conversion table */
+ table_t _table;
+
+ /** @var index lookup table */
+ index_t _index;
+
+public:
+ /** Default constructor.
+ */
+ IndexedStringsStorage(void);
+
+ /** @return True, if the indices are exhausted (new strings cannot be stored).
+ */
+ inline bool is_full(void) const { return _table.size() == std::numeric_limits<IndType>::max(); }
+
+ /** Retrieves pointer to C-string instance represented by given index.
+ * Note: No range checks are performed!
+ * @param index Index of C-string to retrieve.
+ * @return Pointer to stored C-string instance.
+ */
+ inline const char* get(IndType index) const { return _table[index]; }
+
+ /** Stores the string and returns its numeric index.
+ * @param str Pointer to C-string to store.
+ * @return Index of stored copy of str.
+ * @throw std::bad_alloc When insertion of new string would cause
+ * overflow of indices datatype.
+ */
+ IndType put(const char* str);
+
+ /** @return Number of unique strings stored so far.
+ */
+ inline table_t::size_type size(void) const { return _table.size(); }
+};
+
+
+/** Functor designed for less than comparison of C-strings stored within StringStore.
+ * @param IndType Type of numerical indices of strings within given StringStore.
+ */
+#ifdef USE_HASHSET
+template<class IndType>
+class StringsEqualComparator: public std::binary_function<IndType, IndType, bool> {
+#else
+template<class IndType>
+class StringsLessComparator: public std::binary_function<IndType, IndType, bool> {
+#endif
+ /** @var conversion table: index -> string (necessary for indices comparison) */
+ const typename IndexedStringsStorage<IndType>::table_t& _table;
+public:
+#ifdef USE_HASHSET
+ StringsEqualComparator<IndType>(const typename IndexedStringsStorage<IndType>::table_t& table): _table(table) {}
+#else
+ StringsLessComparator<IndType>(const typename IndexedStringsStorage<IndType>::table_t& table): _table(table) {}
+#endif
+
+ /** Comparison of two pointers to C-strings.
+ * @param lhs Pointer to 1st C-string.
+ * @param rhs Pointer to 2nd C-string.
+ * @return True, if 1st argument is equal/less than 2nd argument.
+ */
+ inline bool operator()(IndType lhs, IndType rhs) const {
+#ifdef USE_HASHSET
+ return strcmp(_table[lhs], _table[rhs]) == 0;
+#else
+ return strcmp(_table[lhs], _table[rhs]) < 0;
+#endif
+ }
+};
+
+#ifdef USE_HASHSET
+/** Functor... TODO.
+ */
+template<class IndType>
+class Hasher: public std::unary_function<IndType, size_t> {
+
+ __gnu_cxx::hash<const char*> _hash;
+
+ /** @var conversion table: index -> string (necessary for indices comparison) */
+ const typename IndexedStringsStorage<IndType>::table_t& _table;
+
+public:
+ /** */
+ Hasher<IndType>(const typename IndexedStringsStorage<IndType>::table_t& table): _hash(), _table(table) {}
+
+ /** Hashing function.
+ * @param index
+ * @return Counted hash.
+ */
+ inline size_t operator()(const IndType index) const {
+ return _hash(_table[index]);
+ }
+};
+#endif
+
+template <class IndType>
+#ifdef USE_HASHSET
+IndexedStringsStorage<IndType>::IndexedStringsStorage(void): _storage(sizeof(char)), _table(), _index(100, hasher_t(_table), equality_comparator_t(_table)) {}
+#else
+IndexedStringsStorage<IndType>::IndexedStringsStorage(void): _storage(sizeof(char)), _table(), _index(less_comparator_t(_table)) {}
+#endif
+
+template <class IndType>
+IndType IndexedStringsStorage<IndType>::put(const char* str) {
+
+ if ( this->is_full() ) {
+ // What a pity, not a single index left to spend.
+ throw std::bad_alloc();
+ }
+
+ // To use the index for lookup we first have to store passed string
+ // in conversion table (cause during lookup we compare the strings indirectly
+ // by using their indices).
+ // Note: thread unsafe! TODO: Redesing.
+ IndType index = static_cast<IndType>(_table.size());
+ _table.push_back(str);
+
+#ifdef USE_HASHSET
+ //
+ typename index_t::iterator iIndex = _index.find(index);
+#else
+ // A lower_bound() search enables us to use "found" iterator as a hint for
+ // eventual insertion.
+ typename index_t::iterator iIndex = _index.lower_bound(index);
+#endif
+
+ if ( (iIndex != _index.end())
+#ifndef USE_HASHSET
+ // In case of lower_bound() search we have to also compare found item
+ // with passed string.
+ && (strcmp(_table[*iIndex], str) == 0)
+#endif
+ ) {
+ // String is already present in storage!
+ // Pop back temporary stored pointer...
+ _table.pop_back();
+ // ...and return numeric index to already stored copy of `str`.
+ return static_cast<IndType>(*iIndex);
+ }
+
+ // String not found within storage.
+
+ // Allocate memory required for string storage...
+ char* mem = static_cast<char*>(_storage.ordered_malloc(strlen(str) + 1));
+ // ...and fill it with copy of passed string.
+ strcpy(mem, str);
+
+ // Overwrite temporary stored pointer to `str` with pointer to freshly
+ // saved copy.
+ _table[index] = mem;
+
+#ifdef USE_HASHSET
+ // Insert the index into lookup table.
+ _index.insert(index);
+#else
+ // Insert the index into lookup table (use previously retrieved iterator
+ // as a hint).
+ _index.insert(iIndex, index);
+#endif
+
+ // Finally.
+ return index;
+}
+
+#endif
diff --git a/scripts/training/eppex/IndexedPhrasesPair.h b/scripts/training/eppex/IndexedPhrasesPair.h
new file mode 100644
index 000000000..18e3a39fd
--- /dev/null
+++ b/scripts/training/eppex/IndexedPhrasesPair.h
@@ -0,0 +1,316 @@
+/**
+ * IndexedPhrasesPair - implementation of a single phrase pair source and target
+ * phrases represented by numeric indices.
+ *
+ * (C) Ceslav Przywara, UFAL MFF UK, 2011
+ *
+ * $Id$
+ *
+ * TODO:
+ * - current unordered_map implementation is terribly slow. More sophisticated
+ * design of hash function should help.
+ */
+
+#ifndef INDEXEDPHRASESPAIR_H
+#define INDEXEDPHRASESPAIR_H
+
+#include <vector>
+#include <new>
+#include <algorithm>
+#include <string.h>
+#ifdef USE_UNORDERED_MAP
+#include <tr1/functional_hash.h>
+#endif
+
+// Forward declaration because of friend comparison operator declaration below.
+template<class OrientationIndexType, class TokenIndexType> class IndexedPhrasesPair;
+
+#ifdef USE_UNORDERED_MAP
+template<class OrientationIndexType, class TokenIndexType>
+class IndexedPhrasePairHasher;
+
+// Comparison operator (is going to be declared as friend).
+template<class OrientationIndexType, class TokenIndexType>
+bool operator== (const IndexedPhrasesPair<OrientationIndexType, TokenIndexType>& lhs, const IndexedPhrasesPair<OrientationIndexType, TokenIndexType>& rhs);
+#else
+// Comparison operator (is going to be declared as friend).
+template<class OrientationIndexType, class TokenIndexType>
+bool operator< (const IndexedPhrasesPair<OrientationIndexType, TokenIndexType>& lhs, const IndexedPhrasesPair<OrientationIndexType, TokenIndexType>& rhs);
+#endif
+
+/**
+ * Structure capable of holding a phrase pair consisting of:
+ * a) source phrase
+ * b) target phrase
+ * c) word alignment
+ * d) orientation info
+ * @param OrientationIndexType
+ * @param TokenIndexType - datatype for token indices.
+ */
+template<class OrientationIndexType = unsigned char, class TokenIndexType = unsigned int>
+class IndexedPhrasesPair {
+public:
+
+ typedef TokenIndexType token_index_t;
+
+ typedef OrientationIndexType orientation_info_index_t;
+
+ typedef std::vector<TokenIndexType> phrase_t;
+
+ // A single alignment point.
+ typedef unsigned char alignment_point_t;
+
+ // A single pair of alignments points.
+ typedef std::pair<alignment_point_t, alignment_point_t> alignment_pair_t;
+
+ // A single phrase alignment (eg. 0-0 0-1 1-2)
+ typedef std::vector<alignment_pair_t> alignment_t;
+
+#ifdef USE_UNORDERED_MAP
+ // Unordered map requires hashing functor object.
+ typedef IndexedPhrasePairHasher<OrientationIndexType, TokenIndexType> Hash;
+#endif
+
+private:
+
+ /** @var Source and target phrase as array of respective token indices */
+ token_index_t* _data;
+
+ /** @var A single phrase alignment stored in array */
+ alignment_point_t* _alignment;
+
+ /** @var Index of orientation info string */
+ orientation_info_index_t _orientationInfoIndex;
+
+ alignment_point_t _srcPhraseLength;
+
+ alignment_point_t _tgtPhraseLength;
+
+ alignment_point_t _alignmentLength;
+
+public:
+
+ IndexedPhrasesPair(void): _data(NULL), _alignment(NULL), _orientationInfoIndex(0), _srcPhraseLength(0), _tgtPhraseLength(0), _alignmentLength(0) {}
+
+ IndexedPhrasesPair(const phrase_t& srcPhrase, const phrase_t& tgtPhrase, orientation_info_index_t orientationInfo, const alignment_t& alignment);
+
+ IndexedPhrasesPair(const IndexedPhrasesPair<OrientationIndexType, TokenIndexType>& copy);
+
+ ~IndexedPhrasesPair(void);
+
+ IndexedPhrasesPair<OrientationIndexType, TokenIndexType>& operator=(const IndexedPhrasesPair<OrientationIndexType, TokenIndexType>& other);
+
+ phrase_t srcPhrase(void) const { return phrase_t(_data, _data + _srcPhraseLength); }
+
+ phrase_t tgtPhrase(void) const { return phrase_t(_data + _srcPhraseLength, _data + _srcPhraseLength + _tgtPhraseLength); }
+
+ orientation_info_index_t orientationInfo(void) const { return _orientationInfoIndex; }
+
+ alignment_t alignment(void) const;
+
+ const alignment_point_t * alignmentData(void) const { return _alignment; }
+
+ alignment_point_t alignmentLength(void) const { return _alignmentLength; }
+
+#ifdef USE_UNORDERED_MAP
+ friend class IndexedPhrasePairHasher<OrientationIndexType, TokenIndexType>;
+ friend bool operator== <> (const IndexedPhrasesPair<OrientationIndexType, TokenIndexType>& lhs, const IndexedPhrasesPair<OrientationIndexType, TokenIndexType>& rhs);
+#else
+ friend bool operator< <> (const IndexedPhrasesPair<OrientationIndexType, TokenIndexType>& lhs, const IndexedPhrasesPair<OrientationIndexType, TokenIndexType>& rhs);
+#endif
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+//// IndexedPhrasesPair IMPLEMENTATION /////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+
+template<class OrientationIndexType, class TokenIndexType>
+IndexedPhrasesPair<OrientationIndexType, TokenIndexType>::IndexedPhrasesPair(const phrase_t& srcPhrase, const phrase_t& tgtPhrase, orientation_info_index_t orientationInfo, const alignment_t& alignment):
+ _data(NULL), _alignment(NULL), _orientationInfoIndex(orientationInfo), _srcPhraseLength(static_cast<alignment_point_t>(srcPhrase.size())), _tgtPhraseLength(static_cast<alignment_point_t>(tgtPhrase.size())), _alignmentLength(alignment.size()) {
+
+ // Save alignment.
+ _alignment = new alignment_point_t[2 * _alignmentLength]; // Note: *2 for each pair.
+ for ( size_t i = 0; i < alignment.size(); ++i ) {
+ _alignment[i*2] = alignment[i].first;
+ _alignment[i*2 + 1] = alignment[i].second;
+ }
+
+ // Save data.
+ _data = new token_index_t[_srcPhraseLength + _tgtPhraseLength];
+ std::copy(srcPhrase.begin(), srcPhrase.end(), _data);
+ std::copy(tgtPhrase.begin(), tgtPhrase.end(), _data + _srcPhraseLength);
+
+}
+
+template<class OrientationIndexType, class TokenIndexType>
+IndexedPhrasesPair<OrientationIndexType, TokenIndexType>::IndexedPhrasesPair(const IndexedPhrasesPair<OrientationIndexType, TokenIndexType>& copy):
+ _data(NULL), _alignment(NULL), _orientationInfoIndex(copy._orientationInfoIndex), _srcPhraseLength(copy._srcPhraseLength), _tgtPhraseLength(copy._tgtPhraseLength), _alignmentLength(copy._alignmentLength) {
+
+ // Copy alignment.
+ // alignment_point_t alignmentLength = std::max(_srcPhraseLength, _tgtPhraseLength);
+ _alignment = new alignment_point_t[2 * _alignmentLength]; // Note: *2 for each pair.
+ memcpy(_alignment, copy._alignment, _alignmentLength * 2 * sizeof(alignment_point_t));
+
+ // Copy data.
+ _data = new token_index_t[_srcPhraseLength + _tgtPhraseLength];
+ std::copy(copy._data, copy._data + _srcPhraseLength + _tgtPhraseLength, _data);
+}
+
+template<class OrientationIndexType, class TokenIndexType>
+IndexedPhrasesPair<OrientationIndexType, TokenIndexType>::~IndexedPhrasesPair(void) {
+ delete[] _alignment;
+ delete[] _data;
+}
+
+template<class OrientationIndexType, class TokenIndexType>
+IndexedPhrasesPair<OrientationIndexType, TokenIndexType>& IndexedPhrasesPair<OrientationIndexType, TokenIndexType>::operator=(const IndexedPhrasesPair<OrientationIndexType, TokenIndexType>& other) {
+
+ if ( this != &other ) {
+
+ // Copy alignment.
+ _alignmentLength = other._alignmentLength;
+ // alignment_point_t alignmentLength = std::max(_srcPhraseLength, _tgtPhraseLength);
+ alignment_point_t * alignment = new alignment_point_t[2 * _alignmentLength]; // Note: *2 for each pair.
+ memcpy(alignment, other._alignment, _alignmentLength * 2 * sizeof(alignment_point_t));
+ if ( _alignment != NULL ) {
+ delete[] _alignment; // !
+ }
+ _alignment = alignment; // !
+
+ // Copy data.
+ _srcPhraseLength = other._srcPhraseLength;
+ _tgtPhraseLength = other._tgtPhraseLength;
+ token_index_t * data = new token_index_t[_srcPhraseLength + _tgtPhraseLength];
+ std::copy(other._data, other._data + _srcPhraseLength + _tgtPhraseLength, data);
+ if ( _data != NULL ) {
+ delete[] _data; // !
+ }
+ _data = data; // !
+
+ //
+ _orientationInfoIndex = other._orientationInfoIndex;
+
+ }
+
+ return *this;
+}
+
+template<class OrientationIndexType, class TokenIndexType>
+typename IndexedPhrasesPair<OrientationIndexType, TokenIndexType>::alignment_t IndexedPhrasesPair<OrientationIndexType, TokenIndexType>::alignment(void) const {
+ alignment_t a;
+
+ //alignment_point_t alignmentLength = std::max(_srcPhraseLength, _tgtPhraseLength);
+ for ( size_t i = 0; i < _alignmentLength; ++i ) {
+ a.push_back(alignment_pair_t(_alignment[2*i], _alignment[2*i + 1]));
+ }
+
+ return a;
+}
+
+#ifdef USE_UNORDERED_MAP
+template<class OrientationIndexType, class TokenIndexType>
+class IndexedPhrasePairHasher: public std::unary_function<IndexedPhrasesPair<OrientationIndexType, TokenIndexType>, size_t> {
+
+ typedef typename IndexedPhrasesPair<OrientationIndexType, TokenIndexType>::alignment_point_t alignment_point_t;
+
+ std::tr1::hash<TokenIndexType> _hash;
+
+public:
+ size_t operator()(const IndexedPhrasesPair<OrientationIndexType, TokenIndexType>& phrasePair) const {
+ size_t hash = 0;
+ for ( alignment_point_t i = 0; i < phrasePair._srcPhraseLength + phrasePair._tgtPhraseLength; ++i ) {
+ hash ^= _hash(phrasePair._data[i]);
+ }
+ return hash;
+ }
+};
+
+template<class OrientationIndexType, class TokenIndexType>
+bool operator== (const IndexedPhrasesPair<OrientationIndexType, TokenIndexType>& lhs, const IndexedPhrasesPair<OrientationIndexType, TokenIndexType>& rhs) {
+
+ typedef typename IndexedPhrasesPair<OrientationIndexType, TokenIndexType>::alignment_point_t alignment_point_t;
+ typedef typename IndexedPhrasesPair<OrientationIndexType, TokenIndexType>::token_index_t string_index_t;
+
+ // Alignments comparable?
+ if ( lhs._alignmentLength != rhs._alignmentLength ) {
+ return false;
+ }
+
+ // Same alignment length -> compare alignments.
+ int cmp = memcmp(lhs._alignment, rhs._alignment, lhs._alignmentLength * 2 * sizeof(alignment_point_t));
+
+ if ( cmp != 0 ) {
+ // Alignments differ.
+ return false;
+ }
+
+ // Alignments are equal, compare phrases (data).
+
+ if ( lhs._srcPhraseLength != rhs._srcPhraseLength ) {
+ // Source phrase lengths differs.
+ return false;
+ }
+
+ if ( lhs._tgtPhraseLength != rhs._tgtPhraseLength ) {
+ // Target phrase lengths differs.
+ return false;
+ }
+
+ // Phrases have matching lengths, compare the data in the end:
+ cmp = memcmp(lhs._data, rhs._data, (lhs._srcPhraseLength + lhs._tgtPhraseLength) * sizeof(string_index_t));
+
+ if ( cmp != 0 ) {
+ // Data differ.
+ return false;
+ }
+
+ // Compare orientation info in the end.
+ return lhs._orientationInfoIndex == rhs._orientationInfoIndex;
+}
+#else
+template<class OrientationIndexType, class StringIndexType>
+bool operator< (const IndexedPhrasesPair<OrientationIndexType, StringIndexType>& lhs, const IndexedPhrasesPair<OrientationIndexType, StringIndexType>& rhs) {
+
+ typedef typename IndexedPhrasesPair<OrientationIndexType, StringIndexType>::alignment_point_t alignment_point_t;
+ typedef typename IndexedPhrasesPair<OrientationIndexType, StringIndexType>::token_index_t string_index_t;
+
+ // Alignments comparable?
+ if ( lhs._alignmentLength != rhs._alignmentLength ) {
+ // Shorter alignment length => lesser item.
+ return lhs._alignmentLength < rhs._alignmentLength;
+ }
+
+ // Same alignment length -> compare alignments.
+ int cmp = memcmp(lhs._alignment, rhs._alignment, lhs._alignmentLength * 2 * sizeof(alignment_point_t));
+
+ if ( cmp != 0 ) {
+ // Alignments differ.
+ return cmp < 0;
+ }
+
+ // Alignments are equal, compare phrases (data).
+
+ if ( lhs._srcPhraseLength != rhs._srcPhraseLength ) {
+ // Source phrase lengths differs.
+ return lhs._srcPhraseLength < rhs._srcPhraseLength;
+ }
+
+ if ( lhs._tgtPhraseLength != rhs._tgtPhraseLength ) {
+ // Target phrase lengths differs.
+ return lhs._tgtPhraseLength < rhs._tgtPhraseLength;
+ }
+
+ // Phrases have matching lengths, compare the data in the end:
+ cmp = memcmp(lhs._data, rhs._data, (lhs._srcPhraseLength + lhs._tgtPhraseLength) * sizeof(string_index_t));
+ if ( cmp != 0 ) {
+ // Data differ.
+ return cmp < 0;
+ }
+
+ // Compare orientation info in the end.
+ return lhs._orientationInfoIndex < rhs._orientationInfoIndex;
+}
+#endif
+
+#endif /* INDEXEDPHRASESPAIR_H */
diff --git a/scripts/training/eppex/LossyCounter.h b/scripts/training/eppex/LossyCounter.h
new file mode 100644
index 000000000..57cce079d
--- /dev/null
+++ b/scripts/training/eppex/LossyCounter.h
@@ -0,0 +1,388 @@
+/**
+ * LossyCounter - implementation of Lossy Counting algorithm as described in:
+ * Approximate Frequency Counts over Data Streams, G.S.Manku & R.Motwani, (2002)
+ *
+ * (C) Ceslav Przywara, UFAL MFF UK, 2011
+ *
+ * Implementation note: define USE_UNORDERED_MAP to use std::tr1::unordered_map
+ * instead std::map for storage of lossy counted items.
+ *
+ * $Id$
+ */
+
+#ifndef LOSSYCOUNTER_H
+#define LOSSYCOUNTER_H
+
+#include <stddef.h>
+#include <math.h>
+#ifdef USE_UNORDERED_MAP
+#include <tr1/unordered_map>
+#else
+#include <map>
+#endif
+#include <iterator>
+
+
+// Iterators:
+template<class T>
+class LossyCounterIterator;
+
+template<class T>
+class LossyCounterErasingIterator;
+
+
+////////////////////////////////////////////////////////////////////////////////
+/////////////////////////// Lossy Counter Interface ////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Implementation of Lossy Counting algorithm as described in:
+ * Approximate Frequency Counts over Data Streams, G.S.Manku & R.Motwani, (2002)
+ */
+template<class T>
+class LossyCounter {
+
+public:
+
+ // Error parameter type definition.
+ typedef double error_t;
+
+ // Support parameter type definition.
+ typedef double support_t;
+
+ // Counters type definition.
+ typedef size_t counter_t;
+
+ // Frequency counter type definition (f).
+ typedef counter_t frequency_t;
+
+ // Maximum error counter type definition (Δ).
+ typedef counter_t maximum_error_t;
+
+ // Pair: frequency (f) and possible maximum error (Δ).
+ typedef std::pair<frequency_t, maximum_error_t> item_counts_t;
+#ifdef USE_UNORDERED_MAP
+ typedef std::tr1::unordered_map<T, item_counts_t, typename T::Hash> storage_t;
+#else
+ // Mapping: counted item and its frequency and max. error counts.
+ typedef std::map<T, item_counts_t> storage_t;
+#endif
+ // We provide own version of const iterator.
+ typedef LossyCounterIterator<T> const_iterator;
+
+ // Special type of iterator: leaves no item behind!
+ typedef LossyCounterErasingIterator<T> erasing_iterator;
+
+ /** @var Error parameter value (ε) */
+ const error_t error;
+
+ /** @var Supprort parameter value (s) */
+ const support_t support;
+
+ /** @var Width of single bucket (w) */
+ const counter_t bucketWidth; // ceil(1/error)
+
+private:
+
+ /** @var Current epoch bucket ID (b-current) */
+ counter_t _bucketId;
+
+ /** @var Count of items read in so far (N) */
+ counter_t _count;
+
+ /** @var Items storage (ÆŠ) */
+ storage_t _storage;
+
+public:
+
+ /**
+ * Set error to 0 to disable lossy-pruning.
+ * @param _error Value from interval [0.0, 1.0).
+ * @param _support Value from interval [0.0, 1.0).
+ */
+ LossyCounter<T>(error_t _error, support_t _support):
+ error(_error), support(_support), bucketWidth(_error > 0.0 ? ceil(1/_error) : 0), _bucketId(1), _count(0), _storage() {}
+
+ /**
+ * @param item Item to be added to storage.
+ */
+ void add(const T& item);
+
+ /**
+ * @return Constant iterator pointing to the beginning of storage.
+ */
+ const_iterator begin(void) const { return LossyCounterIterator<T>(threshold(), _storage.begin(), _storage.end()); }
+
+ /**
+ * @return Constant iterator pointing to the end of storage.
+ */
+ const_iterator end(void) const { return LossyCounterIterator<T>(_storage.end()); }
+
+ /**
+ * @return Erasing iterator pointing to the beginning of storage.
+ */
+ erasing_iterator beginErase(void) { return LossyCounterErasingIterator<T>(threshold(), _storage); }
+
+ /**
+ * @return Erasing iterator pointing to the end of storage.
+ */
+ erasing_iterator endErase(void) { return LossyCounterErasingIterator<T>(_storage); }
+
+ /**
+ * @return Current bucket ID.
+ */
+ counter_t bucketId(void) const { return _bucketId; }
+
+ /**
+ * @return Number of items added to storage so far (N).
+ */
+ counter_t count(void) const { return _count; }
+
+ /**
+ * @return Number of items currently in storage.
+ */
+ size_t size(void) const { return _storage.size(); }
+
+ /**
+ * @param positive Return sN value instead of (s-ε)N?
+ * @return Threshold (either positive or negative) value.
+ */
+ double threshold(bool positive = false) const { return positive ? support * _count : (support - error) * _count; }
+
+ /**
+ * @return The maximum value of which estimated frequencies are less than the true frequencies.
+ */
+ double maxError(void) const { return error * _count; }
+
+ /**
+ * @return True, if it's prunning time right now!
+ */
+ bool aboutToPrune(void) const { return (bucketWidth != 0) && ((_count % bucketWidth) == 0); }
+
+private:
+
+ /**
+ * Prunes counts table.
+ */
+ void prune(void);
+
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+/////////////////////// Lossy Counter Iterator Interface ///////////////////////
+////////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Lossy counter iterator is designed to iterate over items passing the current
+ * threshold.
+ */
+template<class T>
+class LossyCounterIterator: public std::iterator<std::forward_iterator_tag, typename LossyCounter<T>::storage_t::value_type> {
+public:
+
+ typedef LossyCounterIterator<T> self_type;
+
+ typedef typename LossyCounter<T>::storage_t::const_iterator const_iterator;
+
+protected:
+
+ /** @var Minimum frequency threshold */
+ const double _threshold;
+
+ /** @var Current position of iterator (based on underlying container) */
+ const_iterator _current;
+
+ /** @var End position in underlying container */
+ const const_iterator _end;
+
+public:
+
+ // Constructors.
+
+ LossyCounterIterator<T>(const_iterator end):
+ _threshold(0), _current(_end), _end(end) {}
+
+ LossyCounterIterator<T>(double threshold, const_iterator begin, const_iterator end):
+ _threshold(threshold), _current(begin), _end(end) {
+ // Forward the iterator to the first valid item (with frequency above threshold)!
+ this->forward(true);
+ }
+
+ // Operators.
+
+ /**
+ * Only items passing the threshold are included in iteration.
+ */
+ LossyCounterIterator<T> operator++(void); // ++this
+
+ /**
+ * Only items passing the threshold are included in iteration.
+ */
+ LossyCounterIterator<T> operator++(int junk); // this++
+
+ bool operator==(const self_type& rhs) const { return _current == rhs._current; }
+
+ bool operator!=(const self_type& rhs) const { return _current != rhs._current; }
+
+ // Interface.
+
+ /**
+ * @return Current item.
+ */
+ const T& item(void) const { return _current->first; }
+
+ /**
+ * @return Current item's frequency.
+ */
+ typename LossyCounter<T>::frequency_t frequency(void) const { return _current->second.first; }
+
+ /**
+ * @return Current item's maximum error.
+ */
+ typename LossyCounter<T>::error_t max_error(void) const { return _current->second.second; }
+
+protected:
+
+ /**
+ * @param init Check also the item that iterator _current points to? Useful when initializing.
+ */
+ void forward(bool init);
+
+};
+
+/**
+ * Lossy counter iterator erasing all items passed by.
+ */
+template<class T>
+class LossyCounterErasingIterator: public LossyCounterIterator<T> {
+public:
+
+ typedef typename LossyCounter<T>::storage_t storage_t;
+
+private:
+
+ storage_t& _storage;
+
+public:
+
+ // Constructors - have to be aware of the "mother" container.
+
+ LossyCounterErasingIterator<T>(storage_t& storage): LossyCounterIterator<T>(storage.end()), _storage(storage) {}
+
+ LossyCounterErasingIterator<T>(double threshold, storage_t& storage): LossyCounterIterator<T>(threshold, storage.begin(), storage.end()), _storage(storage) {}
+
+protected:
+
+ /**
+ * @param init Check also the item that iterator _current points to? Useful when initializing.
+ */
+ void forward(bool init);
+
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+//////////////////////// Lossy Counter Implementation //////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+
+template<class T>
+void LossyCounter<T>::add(const T& item) {
+
+ typename storage_t::iterator iter = _storage.find(item);
+
+ if ( iter == _storage.end() ) {
+ // Insert new item with appropriate frequency and maximum-possible-error.
+ _storage.insert(std::make_pair(item, item_counts_t(1, _bucketId - 1)));
+ }
+ else {
+ // Update frequency of existing.
+ iter->second.first += 1;
+ }
+
+ // Finally increment the counter and check if the table shall be pruned.
+ ++_count;
+ if ( this->aboutToPrune() ) {
+ this->prune();
+ ++_bucketId;
+ }
+}
+
+
+template<class T>
+void LossyCounter<T>::prune(void) {
+
+ for ( typename storage_t::iterator iter = _storage.begin(); iter != _storage.end(); /* Incrementation step missing intentionally! */ ) {
+ // Prune, if: maximum possible error + frequency <= ID of current bucket
+ if ( (iter->second.first + iter->second.second) <= _bucketId ) {
+ _storage.erase(iter++); // Post increment!
+ }
+ else {
+ ++iter;
+ }
+ }
+
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+//////////////////// Lossy Counter Iterator Implementation /////////////////////
+////////////////////////////////////////////////////////////////////////////////
+
+template<class T>
+LossyCounterIterator<T> LossyCounterIterator<T>::operator++(void) {
+ this->forward();
+ return *this;
+}
+
+
+template<class T>
+LossyCounterIterator<T> LossyCounterIterator<T>::operator++(int junk) {
+ self_type iter = *this;
+ this->forward();
+ return iter;
+}
+
+template<class T>
+void LossyCounterIterator<T>::forward(bool init = false) {
+ if ( _current == _end ) {
+ return; // Nowhere to go, we're at the end already.
+ }
+ if ( init && (this->frequency() >= _threshold) ) {
+ // Ok, we're initing and we're already at the item passing the threshold.
+ return;
+ }
+ // Keep going until we reach the end or the next item with frequency NOT below the threshold.
+ while ( (++_current != _end) && (this->frequency() < _threshold) );
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+//////////////// Lossy Counter Erasing Iterator Implementation /////////////////
+////////////////////////////////////////////////////////////////////////////////
+
+template<class T>
+void LossyCounterErasingIterator<T>::forward(bool init = false) {
+ if (this->_current == this->_end ) {
+ return; // Nowhere to go, we're at the end already.
+ }
+ if ( init && (this->frequency() >= this->_threshold) ) {
+ // Ok, we're initing and we're already at the item passing the threshold.
+ return;
+ }
+ // This is where erasing forward() and std forward() differ:
+ typename LossyCounterIterator<T>::const_iterator previous = this->_current;
+ // Keep going...
+ while ( ++this->_current != this->_end ) {
+ if ( this->frequency() < this->_threshold ) {
+ // Get rid of previous, cause we'll go on.
+ _storage.erase(previous);
+ previous = this->_current;
+ } else {
+ break;
+ }
+ }
+ _storage.erase(previous); // !
+}
+
+#endif /* LOSSYCOUNTER_H */
diff --git a/scripts/training/eppex/Makefile.am b/scripts/training/eppex/Makefile.am
new file mode 100644
index 000000000..970cc5d61
--- /dev/null
+++ b/scripts/training/eppex/Makefile.am
@@ -0,0 +1,28 @@
+# eppex - epochal phrase table extraction for Statistical Machine Translation
+# Ceslav Przywara, UFAL MFF UK, Prague, 2011
+# $Id: $
+
+# Process this file with automake to produce Makefile.in
+
+ACLOCAL_AMFLAGS = -I m4
+
+AUTOMAKE_OPTIONS = foreign
+# Note: during development eppex has been compiled with -O6, but this flag
+# gets overwritten by -O2 set by automake.
+AM_CXXFLAGS = $(BOOST_CPPFLAGS) -Wall
+
+bin_PROGRAMS = counter eppex
+
+# Counter shares only some functionality of phrase-extract module.
+counter_CXXFLAGS = -DGET_COUNTS_ONLY
+
+# Uncomment to use std::tr1::unordered_map insteap of std::map in Lossy Counter implementation.
+# This is NOT recommended in the moment (hashing function needs to be optimized).
+#eppex_CXXFLAGS = -DUSE_UNORDERED_MAP
+
+counter_SOURCES = ../phrase-extract/tables-core.h ../phrase-extract/SentenceAlignment.h config.h phrase-extract.h shared.h IndexedPhrasesPair.h LossyCounter.h \
+ ../phrase-extract/tables-core.cpp ../phrase-extract/SentenceAlignment.cpp phrase-extract.cpp shared.cpp counter.cpp
+
+eppex_SOURCES = ../phrase-extract/tables-core.h ../phrase-extract/SentenceAlignment.h config.h phrase-extract.h shared.h IndexedPhrasesPair.h LossyCounter.h \
+ ../phrase-extract/tables-core.cpp ../phrase-extract/SentenceAlignment.cpp phrase-extract.cpp shared.cpp eppex.cpp
+
diff --git a/scripts/training/eppex/Makefile.in b/scripts/training/eppex/Makefile.in
new file mode 100644
index 000000000..80fca7ce6
--- /dev/null
+++ b/scripts/training/eppex/Makefile.in
@@ -0,0 +1,762 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# eppex - epochal phrase table extraction for Statistical Machine Translation
+# Ceslav Przywara, UFAL MFF UK, Prague, 2011
+# $Id: $
+
+# Process this file with automake to produce Makefile.in
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+bin_PROGRAMS = counter$(EXEEXT) eppex$(EXEEXT)
+subdir = .
+DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+ $(top_srcdir)/configure depcomp install-sh missing
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_boost_base.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_counter_OBJECTS = counter-tables-core.$(OBJEXT) \
+ counter-SentenceAlignment.$(OBJEXT) \
+ counter-phrase-extract.$(OBJEXT) counter-shared.$(OBJEXT) \
+ counter-counter.$(OBJEXT)
+counter_OBJECTS = $(am_counter_OBJECTS)
+counter_LDADD = $(LDADD)
+counter_LINK = $(CXXLD) $(counter_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+am_eppex_OBJECTS = tables-core.$(OBJEXT) SentenceAlignment.$(OBJEXT) \
+ phrase-extract.$(OBJEXT) shared.$(OBJEXT) eppex.$(OBJEXT)
+eppex_OBJECTS = $(am_eppex_OBJECTS)
+eppex_LDADD = $(LDADD)
+DEFAULT_INCLUDES = -I.@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(counter_SOURCES) $(eppex_SOURCES)
+DIST_SOURCES = $(counter_SOURCES) $(eppex_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ { test ! -d "$(distdir)" \
+ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -fr "$(distdir)"; }; }
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BOOST_CPPFLAGS = @BOOST_CPPFLAGS@
+BOOST_LDFLAGS = @BOOST_LDFLAGS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ACLOCAL_AMFLAGS = -I m4
+AUTOMAKE_OPTIONS = foreign
+# Note: during development eppex has been compiled with -O6, but this flag
+# gets overwritten by -O2 set by automake.
+AM_CXXFLAGS = $(BOOST_CPPFLAGS) -Wall
+
+# Counter shares only some functionality of phrase-extract module.
+counter_CXXFLAGS = -DGET_COUNTS_ONLY
+
+# Uncomment to use std::tr1::unordered_map insteap of std::map in Lossy Counter implementation.
+# This is NOT recommended in the moment (hashing function needs to be optimized).
+#eppex_CXXFLAGS = -DUSE_UNORDERED_MAP
+counter_SOURCES = ../phrase-extract/tables-core.h ../phrase-extract/SentenceAlignment.h config.h phrase-extract.h shared.h IndexedPhrasesPair.h LossyCounter.h \
+ ../phrase-extract/tables-core.cpp ../phrase-extract/SentenceAlignment.cpp phrase-extract.cpp shared.cpp counter.cpp
+
+eppex_SOURCES = ../phrase-extract/tables-core.h ../phrase-extract/SentenceAlignment.h config.h phrase-extract.h shared.h IndexedPhrasesPair.h LossyCounter.h \
+ ../phrase-extract/tables-core.cpp ../phrase-extract/SentenceAlignment.cpp phrase-extract.cpp shared.cpp eppex.cpp
+
+all: config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .o .obj
+am--refresh:
+ @:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+ @if test ! -f $@; then \
+ rm -f stamp-h1; \
+ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
+ else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in: $(am__configure_deps)
+ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+ rm -f stamp-h1
+ touch $@
+
+distclean-hdr:
+ -rm -f config.h stamp-h1
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p; \
+ then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+counter$(EXEEXT): $(counter_OBJECTS) $(counter_DEPENDENCIES)
+ @rm -f counter$(EXEEXT)
+ $(counter_LINK) $(counter_OBJECTS) $(counter_LDADD) $(LIBS)
+eppex$(EXEEXT): $(eppex_OBJECTS) $(eppex_DEPENDENCIES)
+ @rm -f eppex$(EXEEXT)
+ $(CXXLINK) $(eppex_OBJECTS) $(eppex_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SentenceAlignment.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/counter-SentenceAlignment.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/counter-counter.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/counter-phrase-extract.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/counter-shared.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/counter-tables-core.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eppex.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/phrase-extract.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shared.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tables-core.Po@am__quote@
+
+.cpp.o:
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+counter-tables-core.o: ../phrase-extract/tables-core.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(counter_CXXFLAGS) $(CXXFLAGS) -MT counter-tables-core.o -MD -MP -MF $(DEPDIR)/counter-tables-core.Tpo -c -o counter-tables-core.o `test -f '../phrase-extract/tables-core.cpp' || echo '$(srcdir)/'`../phrase-extract/tables-core.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/counter-tables-core.Tpo $(DEPDIR)/counter-tables-core.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../phrase-extract/tables-core.cpp' object='counter-tables-core.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(counter_CXXFLAGS) $(CXXFLAGS) -c -o counter-tables-core.o `test -f '../phrase-extract/tables-core.cpp' || echo '$(srcdir)/'`../phrase-extract/tables-core.cpp
+
+counter-tables-core.obj: ../phrase-extract/tables-core.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(counter_CXXFLAGS) $(CXXFLAGS) -MT counter-tables-core.obj -MD -MP -MF $(DEPDIR)/counter-tables-core.Tpo -c -o counter-tables-core.obj `if test -f '../phrase-extract/tables-core.cpp'; then $(CYGPATH_W) '../phrase-extract/tables-core.cpp'; else $(CYGPATH_W) '$(srcdir)/../phrase-extract/tables-core.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/counter-tables-core.Tpo $(DEPDIR)/counter-tables-core.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../phrase-extract/tables-core.cpp' object='counter-tables-core.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(counter_CXXFLAGS) $(CXXFLAGS) -c -o counter-tables-core.obj `if test -f '../phrase-extract/tables-core.cpp'; then $(CYGPATH_W) '../phrase-extract/tables-core.cpp'; else $(CYGPATH_W) '$(srcdir)/../phrase-extract/tables-core.cpp'; fi`
+
+counter-SentenceAlignment.o: ../phrase-extract/SentenceAlignment.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(counter_CXXFLAGS) $(CXXFLAGS) -MT counter-SentenceAlignment.o -MD -MP -MF $(DEPDIR)/counter-SentenceAlignment.Tpo -c -o counter-SentenceAlignment.o `test -f '../phrase-extract/SentenceAlignment.cpp' || echo '$(srcdir)/'`../phrase-extract/SentenceAlignment.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/counter-SentenceAlignment.Tpo $(DEPDIR)/counter-SentenceAlignment.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../phrase-extract/SentenceAlignment.cpp' object='counter-SentenceAlignment.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(counter_CXXFLAGS) $(CXXFLAGS) -c -o counter-SentenceAlignment.o `test -f '../phrase-extract/SentenceAlignment.cpp' || echo '$(srcdir)/'`../phrase-extract/SentenceAlignment.cpp
+
+counter-SentenceAlignment.obj: ../phrase-extract/SentenceAlignment.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(counter_CXXFLAGS) $(CXXFLAGS) -MT counter-SentenceAlignment.obj -MD -MP -MF $(DEPDIR)/counter-SentenceAlignment.Tpo -c -o counter-SentenceAlignment.obj `if test -f '../phrase-extract/SentenceAlignment.cpp'; then $(CYGPATH_W) '../phrase-extract/SentenceAlignment.cpp'; else $(CYGPATH_W) '$(srcdir)/../phrase-extract/SentenceAlignment.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/counter-SentenceAlignment.Tpo $(DEPDIR)/counter-SentenceAlignment.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../phrase-extract/SentenceAlignment.cpp' object='counter-SentenceAlignment.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(counter_CXXFLAGS) $(CXXFLAGS) -c -o counter-SentenceAlignment.obj `if test -f '../phrase-extract/SentenceAlignment.cpp'; then $(CYGPATH_W) '../phrase-extract/SentenceAlignment.cpp'; else $(CYGPATH_W) '$(srcdir)/../phrase-extract/SentenceAlignment.cpp'; fi`
+
+counter-phrase-extract.o: phrase-extract.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(counter_CXXFLAGS) $(CXXFLAGS) -MT counter-phrase-extract.o -MD -MP -MF $(DEPDIR)/counter-phrase-extract.Tpo -c -o counter-phrase-extract.o `test -f 'phrase-extract.cpp' || echo '$(srcdir)/'`phrase-extract.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/counter-phrase-extract.Tpo $(DEPDIR)/counter-phrase-extract.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='phrase-extract.cpp' object='counter-phrase-extract.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(counter_CXXFLAGS) $(CXXFLAGS) -c -o counter-phrase-extract.o `test -f 'phrase-extract.cpp' || echo '$(srcdir)/'`phrase-extract.cpp
+
+counter-phrase-extract.obj: phrase-extract.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(counter_CXXFLAGS) $(CXXFLAGS) -MT counter-phrase-extract.obj -MD -MP -MF $(DEPDIR)/counter-phrase-extract.Tpo -c -o counter-phrase-extract.obj `if test -f 'phrase-extract.cpp'; then $(CYGPATH_W) 'phrase-extract.cpp'; else $(CYGPATH_W) '$(srcdir)/phrase-extract.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/counter-phrase-extract.Tpo $(DEPDIR)/counter-phrase-extract.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='phrase-extract.cpp' object='counter-phrase-extract.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(counter_CXXFLAGS) $(CXXFLAGS) -c -o counter-phrase-extract.obj `if test -f 'phrase-extract.cpp'; then $(CYGPATH_W) 'phrase-extract.cpp'; else $(CYGPATH_W) '$(srcdir)/phrase-extract.cpp'; fi`
+
+counter-shared.o: shared.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(counter_CXXFLAGS) $(CXXFLAGS) -MT counter-shared.o -MD -MP -MF $(DEPDIR)/counter-shared.Tpo -c -o counter-shared.o `test -f 'shared.cpp' || echo '$(srcdir)/'`shared.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/counter-shared.Tpo $(DEPDIR)/counter-shared.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='shared.cpp' object='counter-shared.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(counter_CXXFLAGS) $(CXXFLAGS) -c -o counter-shared.o `test -f 'shared.cpp' || echo '$(srcdir)/'`shared.cpp
+
+counter-shared.obj: shared.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(counter_CXXFLAGS) $(CXXFLAGS) -MT counter-shared.obj -MD -MP -MF $(DEPDIR)/counter-shared.Tpo -c -o counter-shared.obj `if test -f 'shared.cpp'; then $(CYGPATH_W) 'shared.cpp'; else $(CYGPATH_W) '$(srcdir)/shared.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/counter-shared.Tpo $(DEPDIR)/counter-shared.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='shared.cpp' object='counter-shared.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(counter_CXXFLAGS) $(CXXFLAGS) -c -o counter-shared.obj `if test -f 'shared.cpp'; then $(CYGPATH_W) 'shared.cpp'; else $(CYGPATH_W) '$(srcdir)/shared.cpp'; fi`
+
+counter-counter.o: counter.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(counter_CXXFLAGS) $(CXXFLAGS) -MT counter-counter.o -MD -MP -MF $(DEPDIR)/counter-counter.Tpo -c -o counter-counter.o `test -f 'counter.cpp' || echo '$(srcdir)/'`counter.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/counter-counter.Tpo $(DEPDIR)/counter-counter.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='counter.cpp' object='counter-counter.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(counter_CXXFLAGS) $(CXXFLAGS) -c -o counter-counter.o `test -f 'counter.cpp' || echo '$(srcdir)/'`counter.cpp
+
+counter-counter.obj: counter.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(counter_CXXFLAGS) $(CXXFLAGS) -MT counter-counter.obj -MD -MP -MF $(DEPDIR)/counter-counter.Tpo -c -o counter-counter.obj `if test -f 'counter.cpp'; then $(CYGPATH_W) 'counter.cpp'; else $(CYGPATH_W) '$(srcdir)/counter.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/counter-counter.Tpo $(DEPDIR)/counter-counter.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='counter.cpp' object='counter-counter.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(counter_CXXFLAGS) $(CXXFLAGS) -c -o counter-counter.obj `if test -f 'counter.cpp'; then $(CYGPATH_W) 'counter.cpp'; else $(CYGPATH_W) '$(srcdir)/counter.cpp'; fi`
+
+tables-core.o: ../phrase-extract/tables-core.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tables-core.o -MD -MP -MF $(DEPDIR)/tables-core.Tpo -c -o tables-core.o `test -f '../phrase-extract/tables-core.cpp' || echo '$(srcdir)/'`../phrase-extract/tables-core.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/tables-core.Tpo $(DEPDIR)/tables-core.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../phrase-extract/tables-core.cpp' object='tables-core.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tables-core.o `test -f '../phrase-extract/tables-core.cpp' || echo '$(srcdir)/'`../phrase-extract/tables-core.cpp
+
+tables-core.obj: ../phrase-extract/tables-core.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tables-core.obj -MD -MP -MF $(DEPDIR)/tables-core.Tpo -c -o tables-core.obj `if test -f '../phrase-extract/tables-core.cpp'; then $(CYGPATH_W) '../phrase-extract/tables-core.cpp'; else $(CYGPATH_W) '$(srcdir)/../phrase-extract/tables-core.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/tables-core.Tpo $(DEPDIR)/tables-core.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../phrase-extract/tables-core.cpp' object='tables-core.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tables-core.obj `if test -f '../phrase-extract/tables-core.cpp'; then $(CYGPATH_W) '../phrase-extract/tables-core.cpp'; else $(CYGPATH_W) '$(srcdir)/../phrase-extract/tables-core.cpp'; fi`
+
+SentenceAlignment.o: ../phrase-extract/SentenceAlignment.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SentenceAlignment.o -MD -MP -MF $(DEPDIR)/SentenceAlignment.Tpo -c -o SentenceAlignment.o `test -f '../phrase-extract/SentenceAlignment.cpp' || echo '$(srcdir)/'`../phrase-extract/SentenceAlignment.cpp
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/SentenceAlignment.Tpo $(DEPDIR)/SentenceAlignment.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../phrase-extract/SentenceAlignment.cpp' object='SentenceAlignment.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SentenceAlignment.o `test -f '../phrase-extract/SentenceAlignment.cpp' || echo '$(srcdir)/'`../phrase-extract/SentenceAlignment.cpp
+
+SentenceAlignment.obj: ../phrase-extract/SentenceAlignment.cpp
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SentenceAlignment.obj -MD -MP -MF $(DEPDIR)/SentenceAlignment.Tpo -c -o SentenceAlignment.obj `if test -f '../phrase-extract/SentenceAlignment.cpp'; then $(CYGPATH_W) '../phrase-extract/SentenceAlignment.cpp'; else $(CYGPATH_W) '$(srcdir)/../phrase-extract/SentenceAlignment.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/SentenceAlignment.Tpo $(DEPDIR)/SentenceAlignment.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='../phrase-extract/SentenceAlignment.cpp' object='SentenceAlignment.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SentenceAlignment.obj `if test -f '../phrase-extract/SentenceAlignment.cpp'; then $(CYGPATH_W) '../phrase-extract/SentenceAlignment.cpp'; else $(CYGPATH_W) '$(srcdir)/../phrase-extract/SentenceAlignment.cpp'; fi`
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ -test -n "$(am__skip_mode_fix)" \
+ || find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+
+dist-lzma: distdir
+ tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+ $(am__remove_distdir)
+
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+ $(am__remove_distdir)
+
+dist-tarZ: distdir
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__remove_distdir)
+
+dist-shar: distdir
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__remove_distdir)
+
+dist dist-all: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lzma*) \
+ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+ *.tar.xz*) \
+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir); chmod a+w $(distdir)
+ mkdir $(distdir)/_build
+ mkdir $(distdir)/_inst
+ chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && am__cwd=`pwd` \
+ && $(am__cd) $(distdir)/_build \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @$(am__cd) '$(distuninstallcheck_dir)' \
+ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) config.h
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-hdr distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: all install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \
+ clean-binPROGRAMS clean-generic ctags dist dist-all dist-bzip2 \
+ dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
+ distcheck distclean distclean-compile distclean-generic \
+ distclean-hdr distclean-tags distcleancheck distdir \
+ distuninstallcheck dvi dvi-am html html-am info info-am \
+ install install-am install-binPROGRAMS install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+ uninstall-am uninstall-binPROGRAMS
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/scripts/training/eppex/SafeGetline.h b/scripts/training/eppex/SafeGetline.h
new file mode 100644
index 000000000..6030359dc
--- /dev/null
+++ b/scripts/training/eppex/SafeGetline.h
@@ -0,0 +1,38 @@
+/***********************************************************************
+ Moses - factored phrase-based language decoder
+ Copyright (C) 2010 University of Edinburgh
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ ***********************************************************************/
+
+// This is non "using namespace std" version of:
+// ../phrase-extract/SafeGetline.h
+
+#pragma once
+#ifndef SAFE_GETLINE_INCLUDED_
+#define SAFE_GETLINE_INCLUDED_
+
+#define SAFE_GETLINE(_IS, _LINE, _SIZE, _DELIM, _FILE) { \
+ _IS.getline(_LINE, _SIZE, _DELIM); \
+ if(_IS.fail() && !_IS.bad() && !_IS.eof()) _IS.clear(); \
+ if (_IS.gcount() == _SIZE-1) { \
+ std::cerr << "Line too long! Buffer overflow. Delete lines >=" \
+ << _SIZE << " chars or raise LINE_MAX_LENGTH in " << _FILE \
+ << std::endl; \
+ exit(1); \
+ } \
+ }
+
+#endif
diff --git a/scripts/training/eppex/aclocal.m4 b/scripts/training/eppex/aclocal.m4
new file mode 100644
index 000000000..c0ce22463
--- /dev/null
+++ b/scripts/training/eppex/aclocal.m4
@@ -0,0 +1,952 @@
+# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],,
+[m4_warning([this file was generated for autoconf 2.67.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.11'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.11.1], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.11.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 10
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
+ [$1], CXX, [depcc="$CXX" am_compiler_list=],
+ [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], UPC, [depcc="$UPC" am_compiler_list=],
+ [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ am__universal=false
+ m4_case([$1], [CC],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac],
+ [CXX],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac])
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvisualcpp | msvcmsys)
+ # This compiler won't grok `-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 5
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Autoconf 2.62 quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running `make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 16
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES(CC)],
+ [define([AC_PROG_CC],
+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES(CXX)],
+ [define([AC_PROG_CXX],
+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES(OBJC)],
+ [define([AC_PROG_OBJC],
+ defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+ [[\\/$]]* | ?:[[\\/]]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+ [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+ [m4_case([$1], [ustar],, [pax],,
+ [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar;
+ do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([m4/ax_boost_base.m4])
diff --git a/scripts/training/eppex/config.h.in b/scripts/training/eppex/config.h.in
new file mode 100644
index 000000000..51e717c8b
--- /dev/null
+++ b/scripts/training/eppex/config.h.in
@@ -0,0 +1,76 @@
+/* config.h.in. Generated from configure.ac by autoheader. */
+
+/* define if the Boost library is available */
+#undef HAVE_BOOST
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if stdbool.h conforms to C99. */
+#undef HAVE_STDBOOL_H
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#undef HAVE_STDDEF_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if the system has the type `_Bool'. */
+#undef HAVE__BOOL
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+ calls it, or to nothing if 'inline' is not supported under any name. */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
diff --git a/scripts/training/eppex/configure b/scripts/training/eppex/configure
new file mode 100755
index 000000000..6aab92d7b
--- /dev/null
+++ b/scripts/training/eppex/configure
@@ -0,0 +1,6342 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.67 for eppex 1.0.
+#
+# Report bugs to <ceslav at przywara.cz>.
+#
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ # We cannot yet assume a decent shell, so we have to provide a
+ # neutralization value for shells without unset; and this also
+ # works around shells that cannot unset nonexistent variables.
+ BASH_ENV=/dev/null
+ ENV=/dev/null
+ (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf@gnu.org and ceslav at
+$0: przywara.cz about your system, including any error
+$0: possibly output before this message. Then install a
+$0: modern shell, or manually run the script under such a
+$0: shell if you do have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='eppex'
+PACKAGE_TARNAME='eppex'
+PACKAGE_VERSION='1.0'
+PACKAGE_STRING='eppex 1.0'
+PACKAGE_BUGREPORT='ceslav at przywara.cz'
+PACKAGE_URL=''
+
+ac_unique_file="eppex.cpp"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+EGREP
+GREP
+CXXCPP
+BOOST_LDFLAGS
+BOOST_CPPFLAGS
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+ac_ct_CC
+CFLAGS
+CC
+am__fastdepCXX_FALSE
+am__fastdepCXX_TRUE
+CXXDEPMODE
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CXX
+CPPFLAGS
+LDFLAGS
+CXXFLAGS
+CXX
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_dependency_tracking
+with_boost
+with_boost_libdir
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CXX
+CXXFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CCC
+CC
+CFLAGS
+CXXCPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used" >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures eppex 1.0 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/eppex]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of eppex 1.0:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-boost[=DIR] use boost (default is yes) - it is possible to
+ specify the root directory for boost (optional)
+ --with-boost-libdir=LIB_DIR
+ Force given directory for boost libraries. Note that
+ this will overwrite library path detection, so use
+ this parameter only if default library detection
+ fails and you know exactly where your boost
+ libraries are located.
+
+Some influential environment variables:
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CC C compiler command
+ CFLAGS C compiler flags
+ CXXCPP C++ preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <ceslav at przywara.cz>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+eppex configure 1.0
+generated by GNU Autoconf 2.67
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_cxx_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_compile
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_cxx_try_cpp LINENO
+# ------------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+ test ! -s conftest.err
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_cpp
+
+# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES
+# ---------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_cxx_check_header_mongrel ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if eval "test \"\${$3+set}\"" = set; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_header_compiler=yes
+else
+ ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <$2>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+ ac_header_preproc=yes
+else
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #((
+ yes:no: )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ------------------------------------ ##
+## Report this to ceslav at przywara.cz ##
+## ------------------------------------ ##"
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_cxx_check_header_mongrel
+
+# ac_fn_cxx_try_run LINENO
+# ------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_cxx_try_run ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=$ac_status
+fi
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_run
+
+# ac_fn_cxx_check_header_compile LINENO HEADER VAR INCLUDES
+# ---------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_cxx_check_header_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_cxx_check_header_compile
+
+# ac_fn_cxx_check_type LINENO TYPE VAR INCLUDES
+# ---------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_cxx_check_type ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=no"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+ eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_cxx_check_type
+
+# ac_fn_cxx_try_link LINENO
+# -------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_cxx_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_link
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by eppex $as_me 1.0, which was
+generated by GNU Autoconf 2.67. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5 ; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+am__api_version='1.11'
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+alias in your environment" "$LINENO" 5
+ fi
+
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if test "${ac_cv_path_mkdir+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+ [\\/$]* | ?:[\\/]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='eppex'
+ VERSION='1.0'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+# Checks for programs.
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+ if test -n "$CCC"; then
+ CXX=$CCC
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CXX+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CXX" && break
+done
+
+ if test "x$ac_ct_CXX" = x; then
+ CXX="g++"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CXX=$ac_ct_CXX
+ fi
+fi
+
+ fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5
+$as_echo_n "checking whether the C++ compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+if test -z "$ac_file"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C++ compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5
+$as_echo_n "checking for C++ compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C++ compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5 ; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if test "${ac_cv_objext+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GXX=yes
+else
+ GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if test "${ac_cv_prog_cxx_g+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+ ac_cxx_werror_flag=yes
+ ac_cv_prog_cxx_g=no
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_prog_cxx_g=yes
+else
+ CXXFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+
+depcc="$CXX" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CXX_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvisualcpp | msvcmsys)
+ # This compiler won't grok `-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CXX_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+ am__fastdepCXX_TRUE=
+ am__fastdepCXX_FALSE='#'
+else
+ am__fastdepCXX_TRUE='#'
+ am__fastdepCXX_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5 ; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+depcc="$CC" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvisualcpp | msvcmsys)
+ # This compiler won't grok `-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+
+# Checks for libraries.
+
+
+
+# Check whether --with-boost was given.
+if test "${with_boost+set}" = set; then :
+ withval=$with_boost;
+ if test "$withval" = "no"; then
+ want_boost="no"
+ elif test "$withval" = "yes"; then
+ want_boost="yes"
+ ac_boost_path=""
+ else
+ want_boost="yes"
+ ac_boost_path="$withval"
+ fi
+
+else
+ want_boost="yes"
+fi
+
+
+
+
+# Check whether --with-boost-libdir was given.
+if test "${with_boost_libdir+set}" = set; then :
+ withval=$with_boost_libdir;
+ if test -d $withval
+ then
+ ac_boost_lib_path="$withval"
+ else
+ as_fn_error $? "--with-boost-libdir expected directory name" "$LINENO" 5
+ fi
+
+else
+ ac_boost_lib_path=""
+
+fi
+
+
+if test "x$want_boost" = "xyes"; then
+ boost_lib_version_req=1.35.0
+ boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([0-9]*\.[0-9]*\)'`
+ boost_lib_version_req_major=`expr $boost_lib_version_req : '\([0-9]*\)'`
+ boost_lib_version_req_minor=`expr $boost_lib_version_req : '[0-9]*\.\([0-9]*\)'`
+ boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[0-9]*\.[0-9]*\.\([0-9]*\)'`
+ if test "x$boost_lib_version_req_sub_minor" = "x" ; then
+ boost_lib_version_req_sub_minor="0"
+ fi
+ WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for boostlib >= $boost_lib_version_req" >&5
+$as_echo_n "checking for boostlib >= $boost_lib_version_req... " >&6; }
+ succeeded=no
+
+ if test "$ac_boost_path" != ""; then
+ BOOST_LDFLAGS="-L$ac_boost_path/lib"
+ BOOST_CPPFLAGS="-I$ac_boost_path/include"
+ else
+ for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do
+ if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then
+ BOOST_LDFLAGS="-L$ac_boost_path_tmp/lib"
+ BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include"
+ break;
+ fi
+ done
+ fi
+
+ if test "$ac_boost_lib_path" != ""; then
+ BOOST_LDFLAGS="-L$ac_boost_lib_path"
+ fi
+
+ CPPFLAGS_SAVED="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
+ export CPPFLAGS
+
+ LDFLAGS_SAVED="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
+ export LDFLAGS
+
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <boost/version.hpp>
+
+int
+main ()
+{
+
+ #if BOOST_VERSION >= $WANT_BOOST_VERSION
+ // Everything is okay
+ #else
+ # error Boost version is too old
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ succeeded=yes
+ found_system=yes
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+
+ if test "x$succeeded" != "xyes"; then
+ _version=0
+ if test "$ac_boost_path" != ""; then
+ if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
+ for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
+ _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
+ V_CHECK=`expr $_version_tmp \> $_version`
+ if test "$V_CHECK" = "1" ; then
+ _version=$_version_tmp
+ fi
+ VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
+ BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE"
+ done
+ fi
+ else
+ for ac_boost_path in /usr /usr/local /opt /opt/local ; do
+ if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
+ for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
+ _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
+ V_CHECK=`expr $_version_tmp \> $_version`
+ if test "$V_CHECK" = "1" ; then
+ _version=$_version_tmp
+ best_path=$ac_boost_path
+ fi
+ done
+ fi
+ done
+
+ VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
+ BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE"
+ if test "$ac_boost_lib_path" = ""
+ then
+ BOOST_LDFLAGS="-L$best_path/lib"
+ fi
+
+ if test "x$BOOST_ROOT" != "x"; then
+ if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/lib" && test -r "$BOOST_ROOT/stage/lib"; then
+ version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'`
+ stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'`
+ stage_version_shorten=`expr $stage_version : '\([0-9]*\.[0-9]*\)'`
+ V_CHECK=`expr $stage_version_shorten \>\= $_version`
+ if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: We will use a staged boost library from $BOOST_ROOT" >&5
+$as_echo "$as_me: We will use a staged boost library from $BOOST_ROOT" >&6;}
+ BOOST_CPPFLAGS="-I$BOOST_ROOT"
+ BOOST_LDFLAGS="-L$BOOST_ROOT/stage/lib"
+ fi
+ fi
+ fi
+ fi
+
+ CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
+ export CPPFLAGS
+ LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
+ export LDFLAGS
+
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <boost/version.hpp>
+
+int
+main ()
+{
+
+ #if BOOST_VERSION >= $WANT_BOOST_VERSION
+ // Everything is okay
+ #else
+ # error Boost version is too old
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ succeeded=yes
+ found_system=yes
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ fi
+
+ if test "$succeeded" != "yes" ; then
+ if test "$_version" = "0" ; then
+ as_fn_error $? "We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation." "$LINENO" 5
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Your boost libraries seems to old (version $_version)." >&5
+$as_echo "$as_me: Your boost libraries seems to old (version $_version)." >&6;}
+ fi
+ else
+
+
+
+$as_echo "#define HAVE_BOOST /**/" >>confdefs.h
+
+ fi
+
+ CPPFLAGS="$CPPFLAGS_SAVED"
+ LDFLAGS="$LDFLAGS_SAVED"
+fi
+
+
+
+# Checks for header files.
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
+$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
+if test -z "$CXXCPP"; then
+ if test "${ac_cv_prog_CXXCPP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ # Double quotes because CXXCPP needs to be expanded
+ for CXXCPP in "$CXX -E" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+ break
+fi
+
+ done
+ ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+ CXXCPP=$ac_cv_prog_CXXCPP
+else
+ ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
+$as_echo "$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_header_stdc=yes
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then :
+ :
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_run "$LINENO"; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_cxx_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in stddef.h stdlib.h string.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+# Checks for typedefs, structures, and compiler characteristics.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5
+$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
+if test "${ac_cv_header_stdbool_h+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <stdbool.h>
+#ifndef bool
+ "error: bool is not defined"
+#endif
+#ifndef false
+ "error: false is not defined"
+#endif
+#if false
+ "error: false is not 0"
+#endif
+#ifndef true
+ "error: true is not defined"
+#endif
+#if true != 1
+ "error: true is not 1"
+#endif
+#ifndef __bool_true_false_are_defined
+ "error: __bool_true_false_are_defined is not defined"
+#endif
+
+ struct s { _Bool s: 1; _Bool t; } s;
+
+ char a[true == 1 ? 1 : -1];
+ char b[false == 0 ? 1 : -1];
+ char c[__bool_true_false_are_defined == 1 ? 1 : -1];
+ char d[(bool) 0.5 == true ? 1 : -1];
+ bool e = &s;
+ char f[(_Bool) 0.0 == false ? 1 : -1];
+ char g[true];
+ char h[sizeof (_Bool)];
+ char i[sizeof s.t];
+ enum { j = false, k = true, l = false * true, m = true * 256 };
+ /* The following fails for
+ HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
+ _Bool n[m];
+ char o[sizeof n == m * sizeof n[0] ? 1 : -1];
+ char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
+# if defined __xlc__ || defined __GNUC__
+ /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0
+ reported by James Lemley on 2005-10-05; see
+ http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
+ This test is not quite right, since xlc is allowed to
+ reject this program, as the initializer for xlcbug is
+ not one of the forms that C requires support for.
+ However, doing the test right would require a runtime
+ test, and that would make cross-compilation harder.
+ Let us hope that IBM fixes the xlc bug, and also adds
+ support for this kind of constant expression. In the
+ meantime, this test will reject xlc, which is OK, since
+ our stdbool.h substitute should suffice. We also test
+ this with GCC, where it should work, to detect more
+ quickly whether someone messes up the test in the
+ future. */
+ char digs[] = "0123456789";
+ int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1);
+# endif
+ /* Catch a bug in an HP-UX C compiler. See
+ http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+ http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+ */
+ _Bool q = true;
+ _Bool *pq = &q;
+
+int
+main ()
+{
+
+ *pq |= q;
+ *pq |= ! q;
+ /* Refer to every declared value, to avoid compiler optimizations. */
+ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
+ + !m + !n + !o + !p + !q + !pq);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_header_stdbool_h=yes
+else
+ ac_cv_header_stdbool_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5
+$as_echo "$ac_cv_header_stdbool_h" >&6; }
+ac_fn_cxx_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
+if test "x$ac_cv_type__Bool" = x""yes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE__BOOL 1
+_ACEOF
+
+
+fi
+
+if test $ac_cv_header_stdbool_h = yes; then
+
+$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
+$as_echo_n "checking for inline... " >&6; }
+if test "${ac_cv_c_inline+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_c_inline=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
+$as_echo "$ac_cv_c_inline" >&6; }
+
+case $ac_cv_c_inline in
+ inline | yes) ;;
+ *)
+ case $ac_cv_c_inline in
+ no) ac_val=;;
+ *) ac_val=$ac_cv_c_inline;;
+ esac
+ cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+ ;;
+esac
+
+ac_fn_cxx_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = x""yes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+
+# Checks for library functions.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5
+$as_echo_n "checking for error_at_line... " >&6; }
+if test "${ac_cv_lib_error_at_line+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <error.h>
+int
+main ()
+{
+error_at_line (0, 0, "", 0, "an error occurred");
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ ac_cv_lib_error_at_line=yes
+else
+ ac_cv_lib_error_at_line=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5
+$as_echo "$ac_cv_lib_error_at_line" >&6; }
+if test $ac_cv_lib_error_at_line = no; then
+ case " $LIBOBJS " in
+ *" error.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS error.$ac_objext"
+ ;;
+esac
+
+fi
+
+
+ac_config_files="$ac_config_files Makefile"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ test "x$cache_file" != "x/dev/null" &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ cat confcache >$cache_file
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+ if test -n "$EXEEXT"; then
+ am__EXEEXT_TRUE=
+ am__EXEEXT_FALSE='#'
+else
+ am__EXEEXT_TRUE='#'
+ am__EXEEXT_FALSE=
+fi
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by eppex $as_me 1.0, which was
+generated by GNU Autoconf 2.67. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <ceslav at przywara.cz>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+eppex config.status 1.0
+configured by $0, generated by GNU Autoconf 2.67,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+ --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp=
+ trap 'exit_status=$?
+ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_t"; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", prefix defundef, macro, "*/"
+ next
+ }
+ }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$tmp/stdin"
+ case $ac_file in
+ -) cat "$tmp/out" && rm -f "$tmp/out";;
+ *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+ if test x"$ac_file" != x-; then
+ {
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+ } >"$tmp/config.h" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f "$ac_file"
+ mv "$tmp/config.h" "$ac_file" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ fi
+ else
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+ || as_fn_error $? "could not create -" "$LINENO" 5
+ fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$_am_arg" : 'X\(//\)[^/]' \| \
+ X"$_am_arg" : 'X\(//\)$' \| \
+ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+ # Autoconf 2.62 quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running `make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir=$dirpart/$fdir; as_fn_mkdir_p
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+ ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
diff --git a/scripts/training/eppex/configure.ac b/scripts/training/eppex/configure.ac
new file mode 100644
index 000000000..6c64b77af
--- /dev/null
+++ b/scripts/training/eppex/configure.ac
@@ -0,0 +1,33 @@
+# eppex - epochal phrase table extraction for Statistical Machine Translation
+# Ceslav Przywara, UFAL MFF UK, Prague, 2011
+# $Id: $
+
+# Process this file with autoconf to produce a configure script.
+
+AC_PREREQ([2.63])
+AC_INIT([eppex], [1.0], [ceslav at przywara.cz])
+AM_INIT_AUTOMAKE
+AC_CONFIG_SRCDIR([eppex.cpp])
+AC_CONFIG_HEADERS([config.h])
+AC_LANG([C++])
+
+# Checks for programs.
+AC_PROG_CXX
+AC_PROG_CC
+
+# Checks for libraries.
+AX_BOOST_BASE([1.35.0])
+
+# Checks for header files.
+AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_HEADER_STDBOOL
+AC_C_INLINE
+AC_TYPE_SIZE_T
+
+# Checks for library functions.
+AC_FUNC_ERROR_AT_LINE
+
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
diff --git a/scripts/training/eppex/counter.cpp b/scripts/training/eppex/counter.cpp
new file mode 100644
index 000000000..403e18a08
--- /dev/null
+++ b/scripts/training/eppex/counter.cpp
@@ -0,0 +1,81 @@
+/**
+ * Epochal Phrase Extraction - extracted phrase pairs counter. Run this program
+ * the same way as phrase-extract/extract (without output files). Numbers of
+ * extracted phrase pairs for each length up to max-phrase-length will be
+ * reported.
+ *
+ * (C) Moses: http://www.statmt.org/moses/
+ * (C) Ceslav Przywara, UFAL MFF UK, 2011
+ *
+ * $Id$
+ */
+
+#include <string>
+#include <iostream>
+#include <fstream>
+#include <stdlib.h>
+#include <iomanip>
+
+#include "phrase-extract.h"
+#include "shared.h"
+
+#define REQUIRED_PARAMS_NUM 4
+
+
+void usage(const char* programName) {
+ std::cerr << "syntax: " << std::string(programName) << " tgt src align max-phrase-length [orientation [ --model [wbe|phrase|hier]-[msd|mslr|mono] ]]]\n";
+ exit(1);
+}
+
+
+/*******************************************************************************
+ * MAIN *
+ ******************************************************************************/
+int main(int argc, char** argv) {
+
+ if (argc <= REQUIRED_PARAMS_NUM) {
+ usage(argv[0]);
+ }
+
+ const char* fileNameE = argv[1];
+ const char* fileNameF = argv[2];
+ const char* fileNameA = argv[3];
+ maxPhraseLength = std::atoi(argv[4]);
+
+ //
+ read_optional_params(argc, argv, 5);
+
+ // Init phrase pairs counters (add +1 for dummy zero-length counter).
+ phrasePairsCounters.resize(maxPhraseLength + 1, 0);
+
+ std::cerr << "Starting phrase pairs counter ..." << std::endl;
+
+ // open input files
+ std::ifstream eFile(fileNameE);
+ std::ifstream fFile(fileNameF);
+ std::ifstream aFile(fileNameA);
+
+ //
+ readInput(eFile, fFile, aFile);
+
+ std::cerr << std::endl; // Leave the progress bar end on previous line.
+
+ // close input files
+ eFile.close();
+ fFile.close();
+ aFile.close();
+
+ std::cout
+ << "############################" << std::endl
+ << "# len # phrase pairs count #" << std::endl
+ << "############################" << std::endl;
+
+ for ( size_t i = 1; i < phrasePairsCounters.size(); ++i ) {
+ std::cout << "# " << std::setw(3) << i << " # " << std::setw(18) << phrasePairsCounters[i] << " #" << std::endl;
+ }
+
+ std::cout
+ << "############################" << std::endl;
+
+}
+
diff --git a/scripts/training/eppex/depcomp b/scripts/training/eppex/depcomp
new file mode 100755
index 000000000..04701da53
--- /dev/null
+++ b/scripts/training/eppex/depcomp
@@ -0,0 +1,530 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2005-07-09.11
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+ '')
+ echo "$0: No command. Try \`$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+ depmode Dependency tracking mode.
+ source Source file read by `PROGRAMS ARGS'.
+ object Object file output by `PROGRAMS ARGS'.
+ DEPDIR directory where to store dependencies.
+ depfile Dependency file to output.
+ tmpdepfile Temporary file to use when outputing dependencies.
+ libtool Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "depcomp $scriptversion"
+ exit $?
+ ;;
+esac
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
+ exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+ sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags. We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write. Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+ # HP compiler uses -M and no extra arg.
+ gccflag=-M
+ depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+ # This is just like dashmstdout with a different argument.
+ dashmflag=-xM
+ depmode=dashmstdout
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff. Hmm.
+ "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ mv "$tmpdepfile" "$depfile"
+ ;;
+
+gcc)
+## There are various ways to get dependency output from gcc. Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+## up in a subdir. Having to rename by hand is ugly.
+## (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+## -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+## than renaming).
+ if test -z "$gccflag"; then
+ gccflag=-MD,
+ fi
+ "$@" -Wp,"$gccflag$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+ sed -e 's/^[^:]*: / /' \
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header). We avoid this by adding
+## dummy dependencies for each header file. Too bad gcc doesn't do
+## this for us directly.
+ tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'. On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like `#:fec' to the end of the
+ # dependency line.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+ tr '
+' ' ' >> $depfile
+ echo >> $depfile
+
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> $depfile
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+aix)
+ # The C for AIX Compiler uses -M and outputs the dependencies
+ # in a .u file. In older versions, this file always lives in the
+ # current directory. Also, the AIX compiler puts `$object:' at the
+ # start of each line; $object doesn't have directory information.
+ # Version 6 uses the directory in both cases.
+ stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
+ tmpdepfile="$stripped.u"
+ if test "$libtool" = yes; then
+ "$@" -Wc,-M
+ else
+ "$@" -M
+ fi
+ stat=$?
+
+ if test -f "$tmpdepfile"; then :
+ else
+ stripped=`echo "$stripped" | sed 's,^.*/,,'`
+ tmpdepfile="$stripped.u"
+ fi
+
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+
+ if test -f "$tmpdepfile"; then
+ outname="$stripped.o"
+ # Each line is of the form `foo.o: dependent.h'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+ sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+icc)
+ # Intel's C compiler understands `-MD -MF file'. However on
+ # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+ # ICC 7.0 will fill foo.d with something like
+ # foo.o: sub/foo.c
+ # foo.o: sub/foo.h
+ # which is wrong. We want:
+ # sub/foo.o: sub/foo.c
+ # sub/foo.o: sub/foo.h
+ # sub/foo.c:
+ # sub/foo.h:
+ # ICC 7.1 will output
+ # foo.o: sub/foo.c sub/foo.h
+ # and will wrap long lines using \ :
+ # foo.o: sub/foo.c ... \
+ # sub/foo.h ... \
+ # ...
+
+ "$@" -MD -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each line is of the form `foo.o: dependent.h',
+ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+ sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+tru64)
+ # The Tru64 compiler uses -MD to generate dependencies as a side
+ # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+ # dependencies in `foo.d' instead, so we check for that too.
+ # Subdirectories are respected.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+ if test "$libtool" = yes; then
+ # With Tru64 cc, shared objects can also be used to make a
+ # static library. This mecanism is used in libtool 1.4 series to
+ # handle both shared and static libraries in a single compilation.
+ # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+ #
+ # With libtool 1.5 this exception was removed, and libtool now
+ # generates 2 separate objects for the 2 libraries. These two
+ # compilations output dependencies in in $dir.libs/$base.o.d and
+ # in $dir$base.o.d. We have to check for both files, because
+ # one of the two compilations can be disabled. We should prefer
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+ # automatically cleaned when .libs/ is deleted, while ignoring
+ # the former would cause a distcleancheck panic.
+ tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
+ tmpdepfile2=$dir$base.o.d # libtool 1.5
+ tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
+ tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1=$dir$base.o.d
+ tmpdepfile2=$dir$base.d
+ tmpdepfile3=$dir$base.d
+ tmpdepfile4=$dir$base.d
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+ # That's a tab and a space in the [].
+ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+ else
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+#nosideeffect)
+ # This comment above is used by automake to tell side-effect
+ # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout, regardless of -o.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test $1 != '--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove `-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ test -z "$dashmflag" && dashmflag=-M
+ # Require at least two characters before searching for `:'
+ # in the target name. This is to cope with DOS-style filenames:
+ # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+ "$@" $dashmflag |
+ sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+dashXmstdout)
+ # This case only exists to satisfy depend.m4. It is never actually
+ # run, as this mode is specially recognized in the preamble.
+ exit 1
+ ;;
+
+makedepend)
+ "$@" || exit $?
+ # Remove any Libtool call
+ if test "$libtool" = yes; then
+ while test $1 != '--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+ # X makedepend
+ shift
+ cleared=no
+ for arg in "$@"; do
+ case $cleared in
+ no)
+ set ""; shift
+ cleared=yes ;;
+ esac
+ case "$arg" in
+ -D*|-I*)
+ set fnord "$@" "$arg"; shift ;;
+ # Strip any option that makedepend may not understand. Remove
+ # the object too, otherwise makedepend will parse it as a source file.
+ -*|$object)
+ ;;
+ *)
+ set fnord "$@" "$arg"; shift ;;
+ esac
+ done
+ obj_suffix="`echo $object | sed 's/^.*\././'`"
+ touch "$tmpdepfile"
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
+ ;;
+
+cpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test $1 != '--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove `-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ "$@" -E |
+ sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+ sed '$ s: \\$::' > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ cat < "$tmpdepfile" >> "$depfile"
+ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvisualcpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout, regardless of -o,
+ # because we must use -o when running libtool.
+ "$@" || exit $?
+ IFS=" "
+ for arg
+ do
+ case "$arg" in
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ set fnord "$@"
+ shift
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift
+ shift
+ ;;
+ esac
+ done
+ "$@" -E |
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
+ echo " " >> "$depfile"
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+none)
+ exec "$@"
+ ;;
+
+*)
+ echo "Unknown depmode $depmode" 1>&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/scripts/training/eppex/eppex.cpp b/scripts/training/eppex/eppex.cpp
new file mode 100644
index 000000000..d382890d2
--- /dev/null
+++ b/scripts/training/eppex/eppex.cpp
@@ -0,0 +1,217 @@
+/**
+ * Epochal Phrase Extraction.
+ *
+ * (C) Moses: http://www.statmt.org/moses/
+ * (C) Ceslav Przywara, UFAL MFF UK, 2011
+ *
+ * $Id$
+ */
+
+
+#include <string>
+#include <iostream>
+#include <fstream>
+#include <string.h>
+
+#include "config.h"
+#include "phrase-extract.h"
+#include "shared.h"
+
+
+#define REQUIRED_PARAMS_NUM 5
+
+
+//// Output processor declaration.
+
+class FlushingOutputProcessor: public OutputProcessor {
+
+private:
+ const bool _compactOutputFlag;
+
+public:
+ FlushingOutputProcessor(bool compactOutputFlag): _compactOutputFlag(compactOutputFlag) {}
+
+ void operator() (const std::string& srcPhrase, const std::string& tgtPhrase, const std::string& orientationInfo, const alignment_t& alignment, const size_t frequency, int mode);
+};
+
+
+//// Global variables.
+
+// output files
+std::ofstream extractFile; // extract
+std::ofstream extractFileInv; // extract.inv
+std::ofstream extractFileOrientation; // extract.o
+
+////
+bool compactOutputFlag = false; // Generate compact output:
+// Each phrase pair is printed only once with its frequency prepended.
+// Note that compacted output is not compatible with std phrase-extract format.
+
+
+//// Functions.
+
+void program_info(void) {
+ std::cerr
+ << "Epochal Phrase Extraction (" << PACKAGE_STRING << ") written by Ceslav Przywara (based on PhraseExtract v1.4 by Philipp Koehn).\n"
+ << "Compiled with "
+#ifdef USE_UNORDERED_MAP
+ << "std::tr1::unordered_map"
+#else
+ << "std::map"
+#endif
+ << " implementation.\n"
+ ;
+}
+
+void read_optional_params(int argc, char* argv[], int optionalParamsStart);
+
+void usage(const char* programName) {
+ std::cerr << std::endl << "Syntax: " << std::string(programName) << " tgt src align extract lossy-counter [lossy-counter-2 [...]] [--compact] [--sort] [orientation [ --model [wbe|phrase|hier]-[msd|mslr|mono] ]]" << std::endl;
+ std::cerr << get_lossy_counting_params_format();
+ exit(1);
+}
+
+
+/*******************************************************************************
+ * MAIN *
+ ******************************************************************************/
+int main(int argc, char* argv[]) {
+
+ // Welcome user with program info!
+ program_info();
+
+ if (argc <= REQUIRED_PARAMS_NUM) {
+ usage(argv[0]);
+ }
+
+ const char* fileNameE = argv[1];
+ const char* fileNameF = argv[2];
+ const char* fileNameA = argv[3];
+ std::string fileNameExtract = std::string(argv[4]);
+
+ // Init lossy counters.
+ std::string lossyCountersParams;
+ int paramIdx = 5;
+
+ while ( (argc > paramIdx) && (*argv[paramIdx] != '-') ) {
+ std::string param = std::string(argv[paramIdx]);
+ if ( !parse_lossy_counting_params(param) ) {
+ usage(argv[0]);
+ }
+ lossyCountersParams += (" " + param);
+ ++paramIdx;
+ }
+
+ if ( paramIdx == REQUIRED_PARAMS_NUM ) {
+ std::cerr << "ERROR: no Lossy Counting parameters specified!" << std::endl;
+ usage(argv[0]);
+ }
+
+ for ( size_t i = 1; i < lossyCounters.size(); ++i ) {
+ if ( lossyCounters[i] == NULL ) {
+ std::cerr << "ERROR: max phrase length set to " << maxPhraseLength << ", but no Lossy Counting parameters specified for phrase pairs of length " << i << "!" << std::endl;
+ usage(argv[0]);
+ }
+ }
+
+ if ( (argc > paramIdx) && (strcmp(argv[paramIdx], "--compact") == 0) ) {
+ compactOutputFlag = true;
+ ++paramIdx;
+ }
+
+ if ( (argc > paramIdx) && (strcmp(argv[paramIdx], "--sort") == 0) ) {
+ sortedOutput = true;
+ ++paramIdx;
+ }
+
+ //
+ read_optional_params(argc, argv, paramIdx);
+
+ std::cerr << "Starting epochal phrase table extraction with params:" << lossyCountersParams << std::endl;
+ std::cerr << "Output will be " << (sortedOutput ? "sorted" : "unsorted") << "." << std::endl;
+
+ // open input files
+ std::ifstream eFile(fileNameE);
+ std::ifstream fFile(fileNameF);
+ std::ifstream aFile(fileNameA);
+
+ // open output files
+ if (translationFlag) {
+ if (sortedOutput) {
+ extractFile.open((fileNameExtract + ".sorted").c_str());
+ extractFileInv.open((fileNameExtract + ".inv.sorted").c_str());
+ }
+ else {
+ extractFile.open(fileNameExtract.c_str());
+ extractFileInv.open((fileNameExtract + ".inv").c_str());
+ }
+ }
+ if (orientationFlag) {
+ extractFileOrientation.open((fileNameExtract + ".o").c_str());
+ }
+
+ //
+ readInput(eFile, fFile, aFile);
+
+ std::cerr << std::endl; // Leave the progress bar end on previous line.
+
+ // close input files
+ eFile.close();
+ fFile.close();
+ aFile.close();
+
+ FlushingOutputProcessor processor(compactOutputFlag);
+ processOutput(processor);
+
+ // close output files
+ if (translationFlag) {
+ extractFile.close();
+ extractFileInv.close();
+ }
+ if (orientationFlag) {
+ extractFileOrientation.close();
+ }
+
+ printStats();
+
+} // end of main()
+
+
+void FlushingOutputProcessor::operator()(const std::string& srcPhrase, const std::string& tgtPhrase, const std::string& orientationInfo, const alignment_t& alignment, const size_t frequency, int mode) {
+
+ size_t m = frequency;
+
+ if ( _compactOutputFlag ) {
+ // Prepend frequency.
+ if (translationFlag && (mode >= 0)) extractFile << frequency << " ||| ";
+ if (translationFlag && (mode <= 0)) extractFileInv << frequency << " ||| ";
+ if (orientationFlag && (mode >= 0)) extractFileOrientation << frequency << " ||| ";
+ m = 1; // Loop only once!
+ }
+
+ for ( size_t i = 0; i < m; ++i ) {
+
+ // alignment
+ if (translationFlag) {
+
+ if (mode >= 0) extractFile << srcPhrase << " ||| " << tgtPhrase << " |||";
+ if (mode <= 0) extractFileInv << tgtPhrase << " ||| " << srcPhrase << " |||";
+
+ for ( alignment_t::const_iterator alignIter = alignment.begin(); alignIter != alignment.end(); ++alignIter ) {
+ // Note that unsigned char isn't treated as numeric value by stream operators,
+ // so casting is necessary.
+ if (mode >= 0) extractFile << " " << (int) alignIter->first << "-" << (int) alignIter->second;
+ if (mode <= 0) extractFileInv << " " << (int) alignIter->second << "-" << (int) alignIter->first;
+ }
+
+ if (mode >= 0) extractFile << "\n";
+ if (mode <= 0) extractFileInv << "\n";
+ }
+
+ if (orientationFlag && (mode >= 0)) {
+ extractFileOrientation << srcPhrase << " ||| " << tgtPhrase << " ||| " << orientationInfo << "\n";
+ }
+
+ }
+
+}
diff --git a/scripts/training/eppex/install-sh b/scripts/training/eppex/install-sh
new file mode 100755
index 000000000..4d4a9519e
--- /dev/null
+++ b/scripts/training/eppex/install-sh
@@ -0,0 +1,323 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2005-05-14.22
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch. It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+chmodcmd="$chmodprog 0755"
+chowncmd=
+chgrpcmd=
+stripcmd=
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=
+dst=
+dir_arg=
+dstarg=
+no_target_directory=
+
+usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+-c (ignored)
+-d create directories instead of installing files.
+-g GROUP $chgrpprog installed files to GROUP.
+-m MODE $chmodprog installed files to MODE.
+-o USER $chownprog installed files to USER.
+-s $stripprog installed files.
+-t DIRECTORY install into DIRECTORY.
+-T report an error if DSTFILE is a directory.
+--help display this help and exit.
+--version display version info and exit.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+"
+
+while test -n "$1"; do
+ case $1 in
+ -c) shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) chmodcmd="$chmodprog $2"
+ shift
+ shift
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd=$stripprog
+ shift
+ continue;;
+
+ -t) dstarg=$2
+ shift
+ shift
+ continue;;
+
+ -T) no_target_directory=true
+ shift
+ continue;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ *) # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ test -n "$dir_arg$dstarg" && break
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dstarg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dstarg"
+ shift # fnord
+ fi
+ shift # arg
+ dstarg=$arg
+ done
+ break;;
+ esac
+done
+
+if test -z "$1"; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call `install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+for src
+do
+ # Protect names starting with `-'.
+ case $src in
+ -*) src=./$src ;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ src=
+
+ if test -d "$dst"; then
+ mkdircmd=:
+ chmodcmd=
+ else
+ mkdircmd=$mkdirprog
+ fi
+ else
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dstarg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+
+ dst=$dstarg
+ # Protect names starting with `-'.
+ case $dst in
+ -*) dst=./$dst ;;
+ esac
+
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ if test -n "$no_target_directory"; then
+ echo "$0: $dstarg: Is a directory" >&2
+ exit 1
+ fi
+ dst=$dst/`basename "$src"`
+ fi
+ fi
+
+ # This sed command emulates the dirname command.
+ dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
+
+ # Make sure that the destination directory exists.
+
+ # Skip lots of stat calls in the usual case.
+ if test ! -d "$dstdir"; then
+ defaultIFS='
+ '
+ IFS="${IFS-$defaultIFS}"
+
+ oIFS=$IFS
+ # Some sh's can't handle IFS=/ for some reason.
+ IFS='%'
+ set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+ shift
+ IFS=$oIFS
+
+ pathcomp=
+
+ while test $# -ne 0 ; do
+ pathcomp=$pathcomp$1
+ shift
+ if test ! -d "$pathcomp"; then
+ $mkdirprog "$pathcomp"
+ # mkdir can fail with a `File exist' error in case several
+ # install-sh are creating the directory concurrently. This
+ # is OK.
+ test -d "$pathcomp" || exit
+ fi
+ pathcomp=$pathcomp/
+ done
+ fi
+
+ if test -n "$dir_arg"; then
+ $doit $mkdircmd "$dst" \
+ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
+ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
+ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
+ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
+
+ else
+ dstfile=`basename "$dst"`
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+ trap '(exit $?); exit' 1 2 13 15
+
+ # Copy the file name to the temp name.
+ $doit $cpprog "$src" "$dsttmp" &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
+ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
+ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
+ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
+
+ # Now rename the file to the real destination.
+ { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
+ || {
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ if test -f "$dstdir/$dstfile"; then
+ $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
+ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
+ || {
+ echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+ (exit 1); exit 1
+ }
+ else
+ :
+ fi
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+ }
+ }
+ fi || { (exit 1); exit 1; }
+done
+
+# The final little trick to "correctly" pass the exit status to the exit trap.
+{
+ (exit 0); exit 0
+}
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/scripts/training/eppex/m4/ax_boost_base.m4 b/scripts/training/eppex/m4/ax_boost_base.m4
new file mode 100644
index 000000000..2e5afd091
--- /dev/null
+++ b/scripts/training/eppex/m4/ax_boost_base.m4
@@ -0,0 +1,223 @@
+# ===========================================================================
+# http://autoconf-archive.cryp.to/ax_boost_base.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_BOOST_BASE([MINIMUM-VERSION])
+#
+# DESCRIPTION
+#
+# Test for the Boost C++ libraries of a particular version (or newer)
+#
+# If no path to the installed boost library is given the macro searchs
+# under /usr, /usr/local, /opt and /opt/local and evaluates the
+# $BOOST_ROOT environment variable. Further documentation is available at
+# <http://randspringer.de/boost/index.html>.
+#
+# This macro calls:
+#
+# AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS)
+#
+# And sets:
+#
+# HAVE_BOOST
+#
+# LAST MODIFICATION
+#
+# 2008-04-12
+#
+# COPYLEFT
+#
+# Copyright (c) 2008 Thomas Porschberg <thomas@randspringer.de>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved.
+
+AC_DEFUN([AX_BOOST_BASE],
+[
+AC_ARG_WITH([boost],
+ AS_HELP_STRING([--with-boost@<:@=DIR@:>@], [use boost (default is yes) - it is possible to specify the root directory for boost (optional)]),
+ [
+ if test "$withval" = "no"; then
+ want_boost="no"
+ elif test "$withval" = "yes"; then
+ want_boost="yes"
+ ac_boost_path=""
+ else
+ want_boost="yes"
+ ac_boost_path="$withval"
+ fi
+ ],
+ [want_boost="yes"])
+
+
+AC_ARG_WITH([boost-libdir],
+ AS_HELP_STRING([--with-boost-libdir=LIB_DIR],
+ [Force given directory for boost libraries. Note that this will overwrite library path detection, so use this parameter only if default library detection fails and you know exactly where your boost libraries are located.]),
+ [
+ if test -d $withval
+ then
+ ac_boost_lib_path="$withval"
+ else
+ AC_MSG_ERROR(--with-boost-libdir expected directory name)
+ fi
+ ],
+ [ac_boost_lib_path=""]
+)
+
+if test "x$want_boost" = "xyes"; then
+ boost_lib_version_req=ifelse([$1], ,1.20.0,$1)
+ boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'`
+ boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'`
+ boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'`
+ boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
+ if test "x$boost_lib_version_req_sub_minor" = "x" ; then
+ boost_lib_version_req_sub_minor="0"
+ fi
+ WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor`
+ AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req)
+ succeeded=no
+
+ dnl first we check the system location for boost libraries
+ dnl this location ist chosen if boost libraries are installed with the --layout=system option
+ dnl or if you install boost with RPM
+ if test "$ac_boost_path" != ""; then
+ BOOST_LDFLAGS="-L$ac_boost_path/lib"
+ BOOST_CPPFLAGS="-I$ac_boost_path/include"
+ else
+ for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do
+ if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then
+ BOOST_LDFLAGS="-L$ac_boost_path_tmp/lib"
+ BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include"
+ break;
+ fi
+ done
+ fi
+
+ dnl overwrite ld flags if we have required special directory with
+ dnl --with-boost-libdir parameter
+ if test "$ac_boost_lib_path" != ""; then
+ BOOST_LDFLAGS="-L$ac_boost_lib_path"
+ fi
+
+ CPPFLAGS_SAVED="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
+ export CPPFLAGS
+
+ LDFLAGS_SAVED="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
+ export LDFLAGS
+
+ AC_LANG_PUSH(C++)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ @%:@include <boost/version.hpp>
+ ]], [[
+ #if BOOST_VERSION >= $WANT_BOOST_VERSION
+ // Everything is okay
+ #else
+ # error Boost version is too old
+ #endif
+ ]])],[
+ AC_MSG_RESULT(yes)
+ succeeded=yes
+ found_system=yes
+ ],[
+ ])
+ AC_LANG_POP([C++])
+
+
+
+ dnl if we found no boost with system layout we search for boost libraries
+ dnl built and installed without the --layout=system option or for a staged(not installed) version
+ if test "x$succeeded" != "xyes"; then
+ _version=0
+ if test "$ac_boost_path" != ""; then
+ if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
+ for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
+ _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
+ V_CHECK=`expr $_version_tmp \> $_version`
+ if test "$V_CHECK" = "1" ; then
+ _version=$_version_tmp
+ fi
+ VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
+ BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE"
+ done
+ fi
+ else
+ for ac_boost_path in /usr /usr/local /opt /opt/local ; do
+ if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
+ for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
+ _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
+ V_CHECK=`expr $_version_tmp \> $_version`
+ if test "$V_CHECK" = "1" ; then
+ _version=$_version_tmp
+ best_path=$ac_boost_path
+ fi
+ done
+ fi
+ done
+
+ VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
+ BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE"
+ if test "$ac_boost_lib_path" = ""
+ then
+ BOOST_LDFLAGS="-L$best_path/lib"
+ fi
+
+ if test "x$BOOST_ROOT" != "x"; then
+ if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/lib" && test -r "$BOOST_ROOT/stage/lib"; then
+ version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'`
+ stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'`
+ stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'`
+ V_CHECK=`expr $stage_version_shorten \>\= $_version`
+ if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then
+ AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT)
+ BOOST_CPPFLAGS="-I$BOOST_ROOT"
+ BOOST_LDFLAGS="-L$BOOST_ROOT/stage/lib"
+ fi
+ fi
+ fi
+ fi
+
+ CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
+ export CPPFLAGS
+ LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
+ export LDFLAGS
+
+ AC_LANG_PUSH(C++)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ @%:@include <boost/version.hpp>
+ ]], [[
+ #if BOOST_VERSION >= $WANT_BOOST_VERSION
+ // Everything is okay
+ #else
+ # error Boost version is too old
+ #endif
+ ]])],[
+ AC_MSG_RESULT(yes)
+ succeeded=yes
+ found_system=yes
+ ],[
+ ])
+ AC_LANG_POP([C++])
+ fi
+
+ if test "$succeeded" != "yes" ; then
+ if test "$_version" = "0" ; then
+ AC_MSG_ERROR([[We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation.]])
+ else
+ AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).])
+ fi
+ else
+ AC_SUBST(BOOST_CPPFLAGS)
+ AC_SUBST(BOOST_LDFLAGS)
+ AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available])
+ fi
+
+ CPPFLAGS="$CPPFLAGS_SAVED"
+ LDFLAGS="$LDFLAGS_SAVED"
+fi
+
+])
diff --git a/scripts/training/eppex/missing b/scripts/training/eppex/missing
new file mode 100755
index 000000000..894e786e1
--- /dev/null
+++ b/scripts/training/eppex/missing
@@ -0,0 +1,360 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2005-06-08.21
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+fi
+
+run=:
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+ configure_ac=configure.ac
+else
+ configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case "$1" in
+--run)
+ # Try to run requested program, and just exit if it succeeds.
+ run=
+ shift
+ "$@" && exit 0
+ # Exit code 63 means version mismatch. This often happens
+ # when the user try to use an ancient version of a tool on
+ # a file that requires a minimum version. In this case we
+ # we should proceed has if the program had been absent, or
+ # if --run hadn't been passed.
+ if test $? = 63; then
+ run=:
+ msg="probably too old"
+ fi
+ ;;
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+ --run try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+ aclocal touch file \`aclocal.m4'
+ autoconf touch file \`configure'
+ autoheader touch file \`config.h.in'
+ automake touch all \`Makefile.in' files
+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
+ flex create \`lex.yy.c', if possible, from existing .c
+ help2man touch the output file
+ lex create \`lex.yy.c', if possible, from existing .c
+ makeinfo touch the output file
+ tar try tar, gnutar, gtar, then tar without non-portable flags
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Send bug reports to <bug-automake@gnu.org>."
+ exit $?
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing $scriptversion (GNU Automake)"
+ exit $?
+ ;;
+
+ -*)
+ echo 1>&2 "$0: Unknown \`$1' option"
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+ ;;
+
+esac
+
+# Now exit if we have it, but it failed. Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program).
+case "$1" in
+ lex|yacc)
+ # Not GNU programs, they don't have --version.
+ ;;
+
+ tar)
+ if test -n "$run"; then
+ echo 1>&2 "ERROR: \`tar' requires --run"
+ exit 1
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+ exit 1
+ fi
+ ;;
+
+ *)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+ # Could not run --version or --help. This is probably someone
+ # running `$TOOL --version' or `$TOOL --help' to check whether
+ # $TOOL exists and not knowing $TOOL uses missing.
+ exit 1
+ fi
+ ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case "$1" in
+ aclocal*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`acinclude.m4' or \`${configure_ac}'. You might want
+ to install the \`Automake' and \`Perl' packages. Grab them from
+ any GNU archive site."
+ touch aclocal.m4
+ ;;
+
+ autoconf)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`${configure_ac}'. You might want to install the
+ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
+ archive site."
+ touch configure
+ ;;
+
+ autoheader)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`acconfig.h' or \`${configure_ac}'. You might want
+ to install the \`Autoconf' and \`GNU m4' packages. Grab them
+ from any GNU archive site."
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+ test -z "$files" && files="config.h"
+ touch_files=
+ for f in $files; do
+ case "$f" in
+ *:*) touch_files="$touch_files "`echo "$f" |
+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+ *) touch_files="$touch_files $f.in";;
+ esac
+ done
+ touch $touch_files
+ ;;
+
+ automake*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+ You might want to install the \`Automake' and \`Perl' packages.
+ Grab them from any GNU archive site."
+ find . -type f -name Makefile.am -print |
+ sed 's/\.am$/.in/' |
+ while read f; do touch "$f"; done
+ ;;
+
+ autom4te)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them.
+ You can get \`$1' as part of \`Autoconf' from any GNU
+ archive site."
+
+ file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
+ test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
+ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo "#! /bin/sh"
+ echo "# Created by GNU Automake missing as a replacement of"
+ echo "# $ $@"
+ echo "exit 0"
+ chmod +x $file
+ exit 1
+ fi
+ ;;
+
+ bison|yacc)
+ echo 1>&2 "\
+WARNING: \`$1' $msg. You should only need it if
+ you modified a \`.y' file. You may need the \`Bison' package
+ in order for those modifications to take effect. You can get
+ \`Bison' from any GNU archive site."
+ rm -f y.tab.c y.tab.h
+ if [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -f y.tab.h ]; then
+ echo >y.tab.h
+ fi
+ if [ ! -f y.tab.c ]; then
+ echo 'main() { return 0; }' >y.tab.c
+ fi
+ ;;
+
+ lex|flex)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a \`.l' file. You may need the \`Flex' package
+ in order for those modifications to take effect. You can get
+ \`Flex' from any GNU archive site."
+ rm -f lex.yy.c
+ if [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -f lex.yy.c ]; then
+ echo 'main() { return 0; }' >lex.yy.c
+ fi
+ ;;
+
+ help2man)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a dependency of a manual page. You may need the
+ \`Help2man' package in order for those modifications to take
+ effect. You can get \`Help2man' from any GNU archive site."
+
+ file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+ if test -z "$file"; then
+ file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
+ fi
+ if [ -f "$file" ]; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo ".ab help2man is required to generate this page"
+ exit 1
+ fi
+ ;;
+
+ makeinfo)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a \`.texi' or \`.texinfo' file, or any other file
+ indirectly affecting the aspect of the manual. The spurious
+ call might also be the consequence of using a buggy \`make' (AIX,
+ DU, IRIX). You might want to install the \`Texinfo' package or
+ the \`GNU make' package. Grab either from any GNU archive site."
+ # The file to touch is that specified with -o ...
+ file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+ if test -z "$file"; then
+ # ... or it is the one specified with @setfilename ...
+ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
+ # ... or it is derived from the source name (dir/f.texi becomes f.info)
+ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+ fi
+ # If the file does not exist, the user really needs makeinfo;
+ # let's fail without touching anything.
+ test -f $file || exit 1
+ touch $file
+ ;;
+
+ tar)
+ shift
+
+ # We have already tried tar in the generic part.
+ # Look for gnutar/gtar before invocation to avoid ugly error
+ # messages.
+ if (gnutar --version > /dev/null 2>&1); then
+ gnutar "$@" && exit 0
+ fi
+ if (gtar --version > /dev/null 2>&1); then
+ gtar "$@" && exit 0
+ fi
+ firstarg="$1"
+ if shift; then
+ case "$firstarg" in
+ *o*)
+ firstarg=`echo "$firstarg" | sed s/o//`
+ tar "$firstarg" "$@" && exit 0
+ ;;
+ esac
+ case "$firstarg" in
+ *h*)
+ firstarg=`echo "$firstarg" | sed s/h//`
+ tar "$firstarg" "$@" && exit 0
+ ;;
+ esac
+ fi
+
+ echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+ You may want to install GNU tar or Free paxutils, or check the
+ command line arguments."
+ exit 1
+ ;;
+
+ *)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them. Check the \`README' file,
+ it often tells you about the needed prerequisites for installing
+ this package. You may also peek at any GNU archive site, in case
+ some other package would contain this missing \`$1' program."
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/scripts/training/eppex/phrase-extract.cpp b/scripts/training/eppex/phrase-extract.cpp
new file mode 100644
index 000000000..5dff43b78
--- /dev/null
+++ b/scripts/training/eppex/phrase-extract.cpp
@@ -0,0 +1,805 @@
+/**
+ * Common lossy counting phrase extraction functionality implementation.
+ *
+ * Note: The bulk of this unit is based on Philipp Koehn's code from
+ * phrase-extract/extract.cpp.
+ *
+ * (C) Moses: http://www.statmt.org/moses/
+ * (C) Ceslav Przywara, UFAL MFF UK, 2011
+ *
+ * $Id$
+ */
+
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+
+#include "phrase-extract.h"
+#include "ISS.h"
+// I'm using my own version of SafeGetline (without "using namespace std;"):
+#include "SafeGetline.h"
+
+
+#define LINE_MAX_LENGTH 60000
+
+
+//////// Helping functions ////////
+
+// For sorted output.
+typedef std::pair<indexed_phrases_pair_t, PhrasePairsLossyCounter::frequency_t> output_pair_t;
+typedef std::vector<output_pair_t> output_vector_t;
+
+class PhraseComp {
+ /** @var If true, sort by target phrase first. */
+ bool _inverted;
+
+ bool compareAlignments(const indexed_phrases_pair_t& a, const indexed_phrases_pair_t& b);
+
+ int comparePhrases(const indexed_phrases_pair_t::phrase_t& a, const indexed_phrases_pair_t::phrase_t& b);
+
+public:
+ PhraseComp(bool inverted): _inverted(inverted) {}
+
+ bool operator()(const output_pair_t& a, const output_pair_t& b);
+};
+
+void processSortedOutput(OutputProcessor& processor);
+
+void processUnsortedOutput(OutputProcessor& processor);
+
+void flushPhrasePair(OutputProcessor& processor, const indexed_phrases_pair_t& indexedPhrasePair, PhrasePairsLossyCounter::frequency_t frequency, int mode);
+
+
+//////// Define variables declared as extern in the header /////////////////////
+bool allModelsOutputFlag = false;
+
+bool wordModel = false; // IBM word model.
+REO_MODEL_TYPE wordType = REO_MSD;
+bool phraseModel = false; // Std phrase-based model.
+REO_MODEL_TYPE phraseType = REO_MSD;
+bool hierModel = false; // Hierarchical model.
+REO_MODEL_TYPE hierType = REO_MSD;
+
+int maxPhraseLength = 0; // Eg. 7
+bool translationFlag = true; // Generate extract and extract.inv
+bool orientationFlag = false; // Ordering info needed?
+bool sortedOutput = false; // Sort output?
+
+LossyCountersVector lossyCounters;
+
+#ifdef GET_COUNTS_ONLY
+std::vector<size_t> phrasePairsCounters;
+#endif
+
+
+//////// Internal module variables /////////////////////////////////////////////
+
+IndexedStringsStorage<word_index_t> strings;
+IndexedStringsStorage<orientation_info_index_t> orientations;
+
+
+//////// Untouched Philipp Koehn's code :) /////////////////////////////////////
+
+REO_POS getOrientWordModel(SentenceAlignment & sentence, REO_MODEL_TYPE modelType,
+ bool connectedLeftTop, bool connectedRightTop,
+ int startF, int endF, int startE, int endE, int countF, int zero, int unit,
+ bool (*ge)(int, int), bool (*lt)(int, int) )
+{
+
+ if( connectedLeftTop && !connectedRightTop)
+ return LEFT;
+ if(modelType == REO_MONO)
+ return UNKNOWN;
+ if (!connectedLeftTop && connectedRightTop)
+ return RIGHT;
+ if(modelType == REO_MSD)
+ return UNKNOWN;
+ for(int indexF=startF-2*unit; (*ge)(indexF, zero) && !connectedLeftTop; indexF=indexF-unit)
+ connectedLeftTop = isAligned(sentence, indexF, startE-unit);
+ for(int indexF=endF+2*unit; (*lt)(indexF,countF) && !connectedRightTop; indexF=indexF+unit)
+ connectedRightTop = isAligned(sentence, indexF, startE-unit);
+ if(connectedLeftTop && !connectedRightTop)
+ return DRIGHT;
+ else if(!connectedLeftTop && connectedRightTop)
+ return DLEFT;
+ return UNKNOWN;
+}
+
+// to be called with countF-1 instead of countF
+REO_POS getOrientPhraseModel (SentenceAlignment & sentence, REO_MODEL_TYPE modelType,
+ bool connectedLeftTop, bool connectedRightTop,
+ int startF, int endF, int startE, int endE, int countF, int zero, int unit,
+ bool (*ge)(int, int), bool (*lt)(int, int),
+ const HSentenceVertices & inBottomRight, const HSentenceVertices & inBottomLeft)
+{
+
+ HSentenceVertices::const_iterator it;
+
+ if((connectedLeftTop && !connectedRightTop) ||
+ //(startE == 0 && startF == 0) ||
+ //(startE == sentence.target.size()-1 && startF == sentence.source.size()-1) ||
+ ((it = inBottomRight.find(startE - unit)) != inBottomRight.end() &&
+ it->second.find(startF-unit) != it->second.end()))
+ return LEFT;
+ if(modelType == REO_MONO)
+ return UNKNOWN;
+ if((!connectedLeftTop && connectedRightTop) ||
+ ((it = inBottomLeft.find(startE - unit)) != inBottomLeft.end() && it->second.find(endF + unit) != it->second.end()))
+ return RIGHT;
+ if(modelType == REO_MSD)
+ return UNKNOWN;
+ connectedLeftTop = false;
+ for(int indexF=startF-2*unit; (*ge)(indexF, zero) && !connectedLeftTop; indexF=indexF-unit)
+ if(connectedLeftTop = (it = inBottomRight.find(startE - unit)) != inBottomRight.end() &&
+ it->second.find(indexF) != it->second.end())
+ return DRIGHT;
+ connectedRightTop = false;
+ for(int indexF=endF+2*unit; (*lt)(indexF, countF) && !connectedRightTop; indexF=indexF+unit)
+ if(connectedRightTop = (it = inBottomLeft.find(startE - unit)) != inBottomRight.end() &&
+ it->second.find(indexF) != it->second.end())
+ return DLEFT;
+ return UNKNOWN;
+}
+
+// to be called with countF-1 instead of countF
+REO_POS getOrientHierModel (SentenceAlignment & sentence, REO_MODEL_TYPE modelType,
+ bool connectedLeftTop, bool connectedRightTop,
+ int startF, int endF, int startE, int endE, int countF, int zero, int unit,
+ bool (*ge)(int, int), bool (*lt)(int, int),
+ const HSentenceVertices & inBottomRight, const HSentenceVertices & inBottomLeft,
+ const HSentenceVertices & outBottomRight, const HSentenceVertices & outBottomLeft,
+ REO_POS phraseOrient)
+{
+
+ HSentenceVertices::const_iterator it;
+
+ if(phraseOrient == LEFT ||
+ (connectedLeftTop && !connectedRightTop) ||
+ // (startE == 0 && startF == 0) ||
+ //(startE == sentence.target.size()-1 && startF == sentence.source.size()-1) ||
+ ((it = inBottomRight.find(startE - unit)) != inBottomRight.end() &&
+ it->second.find(startF-unit) != it->second.end()) ||
+ ((it = outBottomRight.find(startE - unit)) != outBottomRight.end() &&
+ it->second.find(startF-unit) != it->second.end()))
+ return LEFT;
+ if(modelType == REO_MONO)
+ return UNKNOWN;
+ if(phraseOrient == RIGHT ||
+ (!connectedLeftTop && connectedRightTop) ||
+ ((it = inBottomLeft.find(startE - unit)) != inBottomLeft.end() &&
+ it->second.find(endF + unit) != it->second.end()) ||
+ ((it = outBottomLeft.find(startE - unit)) != outBottomLeft.end() &&
+ it->second.find(endF + unit) != it->second.end()))
+ return RIGHT;
+ if(modelType == REO_MSD)
+ return UNKNOWN;
+ if(phraseOrient != UNKNOWN)
+ return phraseOrient;
+ connectedLeftTop = false;
+ for(int indexF=startF-2*unit; (*ge)(indexF, zero) && !connectedLeftTop; indexF=indexF-unit) {
+ if((connectedLeftTop = (it = inBottomRight.find(startE - unit)) != inBottomRight.end() &&
+ it->second.find(indexF) != it->second.end()) ||
+ (connectedLeftTop = (it = outBottomRight.find(startE - unit)) != outBottomRight.end() &&
+ it->second.find(indexF) != it->second.end()))
+ return DRIGHT;
+ }
+ connectedRightTop = false;
+ for(int indexF=endF+2*unit; (*lt)(indexF, countF) && !connectedRightTop; indexF=indexF+unit) {
+ if((connectedRightTop = (it = inBottomLeft.find(startE - unit)) != inBottomRight.end() &&
+ it->second.find(indexF) != it->second.end()) ||
+ (connectedRightTop = (it = outBottomLeft.find(startE - unit)) != outBottomRight.end() &&
+ it->second.find(indexF) != it->second.end()))
+ return DLEFT;
+ }
+ return UNKNOWN;
+}
+
+void insertVertex( HSentenceVertices & corners, int x, int y )
+{
+ std::set<int> tmp;
+ tmp.insert(x);
+ std::pair< HSentenceVertices::iterator, bool > ret = corners.insert( std::pair<int, std::set<int> > (y, tmp) );
+ if(ret.second == false) {
+ ret.first->second.insert(x);
+ }
+}
+
+void insertPhraseVertices(
+ HSentenceVertices & topLeft,
+ HSentenceVertices & topRight,
+ HSentenceVertices & bottomLeft,
+ HSentenceVertices & bottomRight,
+ int startF, int startE, int endF, int endE)
+{
+
+ insertVertex(topLeft, startF, startE);
+ insertVertex(topRight, endF, startE);
+ insertVertex(bottomLeft, startF, endE);
+ insertVertex(bottomRight, endF, endE);
+}
+
+std::string getOrientString(REO_POS orient, REO_MODEL_TYPE modelType)
+{
+ switch(orient) {
+ case LEFT:
+ return "mono";
+ break;
+ case RIGHT:
+ return "swap";
+ break;
+ case DRIGHT:
+ return "dright";
+ break;
+ case DLEFT:
+ return "dleft";
+ break;
+ case UNKNOWN:
+ switch(modelType) {
+ case REO_MONO:
+ return "nomono";
+ break;
+ case REO_MSD:
+ return "other";
+ break;
+ case REO_MSLR:
+ return "dright";
+ break;
+ }
+ break;
+ }
+}
+
+bool ge(int first, int second)
+{
+ return first >= second;
+}
+
+bool le(int first, int second)
+{
+ return first <= second;
+}
+
+bool lt(int first, int second)
+{
+ return first < second;
+}
+
+bool isAligned ( SentenceAlignment &sentence, int fi, int ei )
+{
+ if (ei == -1 && fi == -1)
+ return true;
+ if (ei <= -1 || fi <= -1)
+ return false;
+ if (ei == sentence.target.size() && fi == sentence.source.size())
+ return true;
+ if (ei >= sentence.target.size() || fi >= sentence.source.size())
+ return false;
+ for(int i=0; i<sentence.alignedToT[ei].size(); i++)
+ if (sentence.alignedToT[ei][i] == fi)
+ return true;
+ return false;
+}
+
+//////// END OF untouched Philipp Koehn's code :) //////////////////////////////
+
+
+/////// Slightly modified Philipp Koehn's code :) //////////////////////////////
+
+void extract(SentenceAlignment &sentence) {
+
+ int countE = sentence.target.size();
+ int countF = sentence.source.size();
+
+ HPhraseVector inboundPhrases;
+
+ HSentenceVertices inTopLeft;
+ HSentenceVertices inTopRight;
+ HSentenceVertices inBottomLeft;
+ HSentenceVertices inBottomRight;
+
+ HSentenceVertices outTopLeft;
+ HSentenceVertices outTopRight;
+ HSentenceVertices outBottomLeft;
+ HSentenceVertices outBottomRight;
+
+ HSentenceVertices::const_iterator it;
+
+ bool relaxLimit = hierModel;
+ bool buildExtraStructure = phraseModel || hierModel;
+
+ // check alignments for target phrase startE...endE
+ // loop over extracted phrases which are compatible with the word-alignments
+ for (int startE = 0; startE < countE; startE++) {
+ for (
+ int endE = startE;
+ ((endE < countE) && (relaxLimit || (endE < (startE + maxPhraseLength))));
+ endE++
+ ) {
+
+ int minF = 9999;
+ int maxF = -1;
+ std::vector< int > usedF = sentence.alignedCountS;
+
+ for (int ei = startE; ei <= endE; ei++) {
+ for (int i = 0; i < sentence.alignedToT[ei].size(); i++) {
+ int fi = sentence.alignedToT[ei][i];
+ if (fi < minF) {
+ minF = fi;
+ }
+ if (fi > maxF) {
+ maxF = fi;
+ }
+ usedF[ fi ]--;
+ }
+ }
+
+ if (maxF >= 0 && // aligned to any source words at all
+ (relaxLimit || maxF-minF < maxPhraseLength)) { // source phrase within limits
+
+ // check if source words are aligned to out of bound target words
+ bool out_of_bounds = false;
+
+ for (int fi=minF; fi<=maxF && !out_of_bounds; fi++) {
+ if (usedF[fi]>0) {
+ // cout << "ouf of bounds: " << fi << "\n";
+ out_of_bounds = true;
+ }
+ }
+
+ // cout << "doing if for ( " << minF << "-" << maxF << ", " << startE << "," << endE << ")\n";
+ if (!out_of_bounds) {
+ // start point of source phrase may retreat over unaligned
+ for (int startF=minF;
+ (startF>=0 &&
+ (relaxLimit || startF>maxF-maxPhraseLength) && // within length limit
+ (startF==minF || sentence.alignedCountS[startF]==0)); // unaligned
+ startF--
+ )
+ // end point of source phrase may advance over unaligned
+ for (int endF=maxF;
+ (endF<countF &&
+ (relaxLimit || endF<startF+maxPhraseLength) && // within length limit
+ (endF==maxF || sentence.alignedCountS[endF]==0)); // unaligned
+ endF++
+ ) { // at this point we have extracted a phrase
+ if (buildExtraStructure) { // phrase || hier
+ if (endE-startE < maxPhraseLength && endF-startF < maxPhraseLength) { // within limit
+ inboundPhrases.push_back(
+ HPhrase(HPhraseVertex(startF,startE), HPhraseVertex(endF,endE))
+ );
+ insertPhraseVertices(
+ inTopLeft, inTopRight, inBottomLeft, inBottomRight,
+ startF, startE, endF, endE
+ );
+ } else {
+ insertPhraseVertices(
+ outTopLeft, outTopRight, outBottomLeft, outBottomRight,
+ startF, startE, endF, endE
+ );
+ }
+ } else {
+ std::string orientationInfo = "";
+ if (orientationFlag && wordModel) { // Added orientationFlag check.
+ REO_POS wordPrevOrient, wordNextOrient;
+ bool connectedLeftTopP = isAligned( sentence, startF-1, startE-1 );
+ bool connectedRightTopP = isAligned( sentence, endF+1, startE-1 );
+ bool connectedLeftTopN = isAligned( sentence, endF+1, endE+1 );
+ bool connectedRightTopN = isAligned( sentence, startF-1, endE+1 );
+ wordPrevOrient = getOrientWordModel(sentence, wordType, connectedLeftTopP, connectedRightTopP, startF, endF, startE, endE, countF, 0, 1, &ge, &lt);
+ wordNextOrient = getOrientWordModel(sentence, wordType, connectedLeftTopN, connectedRightTopN, endF, startF, endE, startE, 0, countF, -1, &lt, &ge);
+ orientationInfo += getOrientString(wordPrevOrient, wordType) + " " + getOrientString(wordNextOrient, wordType);
+ }
+ addPhrase(sentence, startE, endE, startF, endF, orientationInfo);
+ }
+ }
+ }
+ }
+ }
+ } // end of main for loop
+
+ if (buildExtraStructure) { // phrase || hier
+ std::string orientationInfo = "";
+ REO_POS wordPrevOrient, wordNextOrient, phrasePrevOrient, phraseNextOrient, hierPrevOrient, hierNextOrient;
+
+ for (int i = 0; i < inboundPhrases.size(); i++) {
+ int startF = inboundPhrases[i].first.first;
+ int startE = inboundPhrases[i].first.second;
+ int endF = inboundPhrases[i].second.first;
+ int endE = inboundPhrases[i].second.second;
+
+ if ( orientationFlag ) { // Added orientationFlag check.
+
+ bool connectedLeftTopP = isAligned( sentence, startF-1, startE-1 );
+ bool connectedRightTopP = isAligned( sentence, endF+1, startE-1 );
+ bool connectedLeftTopN = isAligned( sentence, endF+1, endE+1 );
+ bool connectedRightTopN = isAligned( sentence, startF-1, endE+1 );
+
+ if (wordModel) {
+ wordPrevOrient = getOrientWordModel(sentence, wordType,
+ connectedLeftTopP, connectedRightTopP,
+ startF, endF, startE, endE, countF, 0, 1,
+ &ge, &lt);
+
+ wordNextOrient = getOrientWordModel(sentence, wordType,
+ connectedLeftTopN, connectedRightTopN,
+ endF, startF, endE, startE, 0, countF, -1,
+ &lt, &ge);
+ }
+ if (phraseModel) {
+ phrasePrevOrient = getOrientPhraseModel(sentence, phraseType,
+ connectedLeftTopP, connectedRightTopP,
+ startF, endF, startE, endE, countF-1, 0, 1, &ge, &lt, inBottomRight, inBottomLeft);
+ phraseNextOrient = getOrientPhraseModel(sentence, phraseType,
+ connectedLeftTopN, connectedRightTopN,
+ endF, startF, endE, startE, 0, countF-1, -1, &lt, &ge, inBottomLeft, inBottomRight);
+ } else {
+ phrasePrevOrient = phraseNextOrient = UNKNOWN;
+ }
+ if(hierModel) {
+ hierPrevOrient = getOrientHierModel(sentence, hierType,
+ connectedLeftTopP, connectedRightTopP,
+ startF, endF, startE, endE, countF-1, 0, 1, &ge, &lt, inBottomRight, inBottomLeft, outBottomRight, outBottomLeft, phrasePrevOrient);
+ hierNextOrient = getOrientHierModel(sentence, hierType,
+ connectedLeftTopN, connectedRightTopN,
+ endF, startF, endE, startE, 0, countF-1, -1, &lt, &ge, inBottomLeft, inBottomRight, outBottomLeft, outBottomRight, phraseNextOrient);
+ }
+
+ orientationInfo = ((wordModel)? getOrientString(wordPrevOrient, wordType) + " " + getOrientString(wordNextOrient, wordType) : "") + " | " +
+ ((phraseModel)? getOrientString(phrasePrevOrient, phraseType) + " " + getOrientString(phraseNextOrient, phraseType) : "") + " | " +
+ ((hierModel)? getOrientString(hierPrevOrient, hierType) + " " + getOrientString(hierNextOrient, hierType) : "");
+ }
+
+ addPhrase(sentence, startE, endE, startF, endF, orientationInfo);
+
+ } // end of for loop through inbound phrases
+
+ } // end if buildExtraStructure
+
+} // end of extract()
+
+
+/**
+ * @param sentence
+ * @param startE
+ * @param endE
+ * @param startF
+ * @param endF
+ * @param orientationInfo
+ */
+void addPhrase(SentenceAlignment &sentence, int startE, int endE, int startF, int endF, std::string &orientationInfo) {
+
+#ifdef GET_COUNTS_ONLY
+ // Just get the length of phrase pair (which is now defined as maximum of the two).
+ phrasePairsCounters[std::max(endF - startF, endE - startE) + 1] += 1; // Don't forget +1 (span is inclusive)!
+#else
+ alignment_t alignment;
+
+ // alignment
+ for (int ei = startE; ei <= endE; ++ei) {
+ for (int i = 0; i < sentence.alignedToT[ei].size(); ++i) {
+ int fi = sentence.alignedToT[ei][i];
+ alignment.push_back(alignment_t::value_type(fi-startF, ei-startE));
+ }
+ }
+
+ indexed_phrases_pair_t::phrase_t srcPhraseIndices, tgtPhraseIndices;
+
+ // source phrase
+ for (int fi = startF; fi <= endF; ++fi) {
+ srcPhraseIndices.push_back(strings.put(sentence.source[fi].c_str()));
+ }
+
+ // target phrase
+ for (int ei = startE; ei <= endE; ++ei) {
+ tgtPhraseIndices.push_back(strings.put(sentence.target[ei].c_str()));
+ }
+
+ // TODO: Allow for switching between min and max here.
+ size_t idx = std::max(srcPhraseIndices.size(), tgtPhraseIndices.size());
+
+ // Add phrase pair.
+ lossyCounters[idx]->lossyCounter.add(indexed_phrases_pair_t(srcPhraseIndices, tgtPhraseIndices, orientations.put(orientationInfo.c_str()), alignment));
+ //
+ if ( lossyCounters[idx]->lossyCounter.aboutToPrune() ) {
+ // Next addition will lead to pruning, inform:
+ std::cerr << 'P' << idx << std::flush;
+ }
+#endif
+} // end of addPhrase()
+
+
+/////// Lossy Counting related code ////////////////////////////////////////////
+
+void readInput(std::istream& eFile, std::istream& fFile, std::istream& aFile) {
+
+ // Note: moved out of the loop.
+ char englishString[LINE_MAX_LENGTH];
+ char foreignString[LINE_MAX_LENGTH];
+ char alignmentString[LINE_MAX_LENGTH];
+
+ int i = 0;
+
+ while(true) {
+ // Report progress?
+ if (++i%10000 == 0) std::cerr << "." << std::flush;
+
+ SAFE_GETLINE(eFile, englishString, LINE_MAX_LENGTH, '\n', __FILE__);
+ if (eFile.eof()) break;
+ SAFE_GETLINE(fFile, foreignString, LINE_MAX_LENGTH, '\n', __FILE__);
+ SAFE_GETLINE(aFile, alignmentString, LINE_MAX_LENGTH, '\n', __FILE__);
+
+ SentenceAlignment sentence;
+
+ if (sentence.create(englishString, foreignString, alignmentString, i)) {
+ extract(sentence);
+ }
+ }
+
+}
+
+
+void processOutput(OutputProcessor& processor) {
+ if ( sortedOutput ) {
+ processSortedOutput(processor);
+ }
+ else {
+ processUnsortedOutput(processor);
+ }
+}
+
+
+bool PhraseComp::operator()(const output_pair_t& a, const output_pair_t& b) {
+
+ int cmp = _inverted ? comparePhrases(a.first.tgtPhrase(), b.first.tgtPhrase()) : comparePhrases(a.first.srcPhrase(), b.first.srcPhrase());
+
+ if ( cmp == 0 ) {
+ // First part of pairs matches, compare the second part.
+ cmp = _inverted ? comparePhrases(a.first.srcPhrase(), b.first.srcPhrase()) : comparePhrases(a.first.tgtPhrase(), b.first.tgtPhrase());
+
+ if ( cmp == 0 ) {
+ // Also second part matches, compare alignments.
+ return compareAlignments(a.first, b.first);
+ }
+ else {
+ return cmp < 0;
+ }
+ }
+ else {
+ return cmp < 0;
+ }
+
+}
+
+
+bool PhraseComp::compareAlignments(const indexed_phrases_pair_t& a, const indexed_phrases_pair_t& b) {
+
+ size_t aSize = a.alignmentLength();
+ size_t bSize = b.alignmentLength();
+ size_t min = std::min(aSize, bSize);
+ const indexed_phrases_pair_t::alignment_point_t * aAlignment = a.alignmentData();
+ const indexed_phrases_pair_t::alignment_point_t * bAlignment = b.alignmentData();
+
+ int cmp = 0;
+ for ( size_t i = 0; i < min; ++i ) {
+ // Important: alignments have to be eventually inverted as well!
+ if ( _inverted ) {
+ // Inverted = compare TGT phrase alignment points first.
+ cmp = memcmp(aAlignment + i*2 + 1, bAlignment + i*2 + 1, sizeof(indexed_phrases_pair_t::alignment_point_t));
+ }
+ else{
+ // NOT inverted = compare SRC phrase alignment points first.
+ cmp = memcmp(aAlignment+ i*2, bAlignment + i*2, sizeof(indexed_phrases_pair_t::alignment_point_t));
+ }
+ if ( cmp == 0 ) {
+ if ( _inverted ) {
+ // Inverted = compare SRC phrase alignment points second.
+ cmp = memcmp(aAlignment + i*2, bAlignment + i*2, sizeof(indexed_phrases_pair_t::alignment_point_t));
+ }
+ else{
+ // NOT inverted = compare TGT phrase alignment points second.
+ cmp = memcmp(aAlignment + i*2 + 1, bAlignment + i*2 + 1, sizeof(indexed_phrases_pair_t::alignment_point_t));
+ }
+ if ( cmp != 0 ) {
+ return cmp < 0;
+ } // Otherwise continue looping.
+ }
+ else {
+ return cmp < 0;
+ }
+ }
+
+ // Note: LC_ALL=C GNU sort treats shorter item as lesser than longer one.
+ return (cmp == 0) ? (aSize < bSize) : (cmp < 0);
+
+}
+
+
+int PhraseComp::comparePhrases(const indexed_phrases_pair_t::phrase_t& a, const indexed_phrases_pair_t::phrase_t& b) {
+
+ size_t aSize = a.size();
+ size_t bSize = b.size();
+ size_t min = std::min(aSize, bSize);
+ int cmp = 0;
+
+ for ( size_t i = 0; i < min; ++i ) {
+ cmp = strcmp(strings.get(a[i]), strings.get(b[i]));
+ if ( cmp != 0 ) {
+ return cmp;
+ }
+ }
+
+ if ( aSize == bSize ) {
+ return 0;
+ }
+
+ if ( aSize < bSize ) {
+ return strcmp("|||", strings.get(b[min]));
+ }
+ else {
+ return strcmp(strings.get(a[min]), "|||");
+ }
+
+}
+
+
+void processSortedOutput(OutputProcessor& processor) {
+
+ output_vector_t output;
+
+ LossyCountersVector::value_type current = NULL, prev = NULL;
+
+ for ( size_t i = 1; i < lossyCounters.size(); ++i ) { // Intentionally skip 0.
+ current = lossyCounters[i];
+ if ( current != prev ) {
+ PhrasePairsLossyCounter& lossyCounter = current->lossyCounter;
+ for ( PhrasePairsLossyCounter::erasing_iterator phraseIter = lossyCounter.beginErase(); phraseIter != lossyCounter.endErase(); ++phraseIter ) {
+ // Store and...
+ output.push_back(std::make_pair(phraseIter.item(), phraseIter.frequency()));
+ // ...update counters.
+ current->outputMass += phraseIter.frequency();
+ current->outputSize += 1;
+ }
+ //
+ prev = current;
+ //delete current;
+ }
+ }
+
+ // Sort by source phrase.
+ std::sort(output.begin(), output.end(), PhraseComp(false));
+
+ // Print.
+ for ( output_vector_t::const_iterator iter = output.begin(); iter != output.end(); ++iter ) {
+ flushPhrasePair(processor, iter->first, iter->second, 1);
+ }
+
+ // Sort by target phrase.
+ std::sort(output.begin(), output.end(), PhraseComp(true));
+
+ // Print.
+ for ( output_vector_t::const_iterator iter = output.begin(); iter != output.end(); ++iter ) {
+ flushPhrasePair(processor, iter->first, iter->second, -1);
+ }
+
+}
+
+
+void processUnsortedOutput(OutputProcessor& processor) {
+
+ LossyCountersVector::value_type current = NULL, prev = NULL;
+
+ for ( size_t i = 1; i < lossyCounters.size(); ++i ) { // Intentionally skip 0.
+
+ current = lossyCounters[i];
+
+ if ( current != prev ) {
+
+ const PhrasePairsLossyCounter& lossyCounter = current->lossyCounter;
+
+ for ( PhrasePairsLossyCounter::const_iterator phraseIter = lossyCounter.begin(); phraseIter != lossyCounter.end(); ++phraseIter ) {
+ // Flush and...
+ flushPhrasePair(processor, phraseIter.item(), phraseIter.frequency(), 0);
+ // ...update counters.
+ current->outputMass += phraseIter.frequency();
+ current->outputSize += 1;
+ }
+
+ //
+ prev = current;
+ }
+ }
+
+}
+
+
+void flushPhrasePair(OutputProcessor& processor, const indexed_phrases_pair_t& indexedPhrasePair, PhrasePairsLossyCounter::frequency_t frequency, int mode = 0) {
+
+ const indexed_phrases_pair_t::phrase_t srcPhraseIndices = indexedPhrasePair.srcPhrase();
+ const indexed_phrases_pair_t::phrase_t tgtPhraseIndices = indexedPhrasePair.tgtPhrase();
+
+ std::string srcPhrase, tgtPhrase;
+
+ for ( indexed_phrases_pair_t::phrase_t::const_iterator indexIter = srcPhraseIndices.begin(); indexIter != srcPhraseIndices.end(); ++indexIter ) {
+ srcPhrase += std::string(strings.get(*indexIter)) + " ";
+ }
+ srcPhrase.resize(srcPhrase.size() - 1); // Trim the trailing " "
+
+ for ( indexed_phrases_pair_t::phrase_t::const_iterator indexIter = tgtPhraseIndices.begin(); indexIter != tgtPhraseIndices.end(); ++indexIter ) {
+ tgtPhrase += std::string(strings.get(*indexIter)) + " ";
+ }
+ tgtPhrase.resize(tgtPhrase.size() - 1); // Trim the trailing " "
+
+ // Actual processing is done via call to functor:
+ processor(srcPhrase, tgtPhrase, orientations.get(indexedPhrasePair.orientationInfo()), indexedPhrasePair.alignment(), frequency, mode);
+}
+
+
+void printStats(void) {
+
+ // Total counters.
+ size_t outputMass = 0, outputSize = 0, N = 0;
+
+ const std::string hline = "####################################################################################################################";
+
+ std::cerr << "Lossy Counting Phrase Extraction statistics:" << std::endl;
+
+ // Print header: | 3 | 15 | 15 | 15 | 7 | 10 | 10 | 10 |
+ std::cerr
+ << hline << std::endl
+ << "# length # unique out # total out # total in (N) # out/in (%) # pos. thr. # neg. thr. # max. err. #" << std::endl
+ << hline << std::endl;
+
+ LossyCountersVector::value_type current = NULL, prev = NULL;
+ size_t from = 1, to = 1;
+
+ for ( size_t i = 1; i <= lossyCounters.size(); ++i ) { // Intentionally skip 0, intentionally increment till == size().
+
+ current = (i < lossyCounters.size()) ? lossyCounters[i] : NULL;
+
+ if ( (current == NULL) || ((current != prev) && (prev != NULL)) ) {
+ // Time to print.
+ to = i-1;
+
+ // Increment overall stats.
+ outputMass += prev->outputMass;
+ outputSize += prev->outputSize;
+ N += prev->lossyCounter.count();
+
+ // Print.
+ if ( from == to ) {
+ std::cerr << "# " << std::setw(6) << to << " # ";
+ }
+ else {
+ std::stringstream strStr;
+ strStr << from << "-" << to;
+ std::cerr << "# " << std::setw(6) << strStr.str() << " # ";
+ }
+ // Print the rest of record.
+ std::cerr
+ << std::setw(15) << prev->outputSize << " # "
+ << std::setw(15) << prev->outputMass << " # "
+ << std::setw(15) << prev->lossyCounter.count() << " # "
+ << std::setw(10) << std::setprecision(4) << (static_cast<double>(prev->outputMass) / static_cast<double>(prev->lossyCounter.count())) * 100 << " # "
+ << std::setw(10) << prev->lossyCounter.threshold(true) << " # "
+ << std::setw(10) << prev->lossyCounter.threshold() << " # "
+ << std::setw(10) << prev->lossyCounter.maxError() << " #"
+ << std::endl << hline << std::endl;
+
+ from = i;
+ }
+
+ prev = current;
+
+ }
+
+ // Print summary:
+ std::cerr
+ << "# TOTAL # "
+ << std::setw(15) << outputSize << " # "
+ << std::setw(15) << outputMass << " # "
+ << std::setw(15) << N << " # "
+ << std::setw(10) << std::setprecision(4) << (static_cast<double>(outputMass) / static_cast<double>(N)) * 100 << " #"
+ << std::endl
+ << "#############################################################################" << std::endl;
+
+}
diff --git a/scripts/training/eppex/phrase-extract.h b/scripts/training/eppex/phrase-extract.h
new file mode 100644
index 000000000..c01dd3ee2
--- /dev/null
+++ b/scripts/training/eppex/phrase-extract.h
@@ -0,0 +1,133 @@
+/**
+ * Common lossy counting phrase extraction functionality declaration.
+ *
+ * Note: The bulk of this unit is based on Philipp Koehn's code from
+ * phrase-extract/extract.cpp.
+ *
+ * (C) Moses: http://www.statmt.org/moses/
+ * (C) Ceslav Przywara, UFAL MFF UK, 2011
+ *
+ * $Id$
+ */
+
+#ifndef PHRASE_EXTRACT_H
+#define PHRASE_EXTRACT_H
+
+#include <fstream>
+#include <map>
+#include <set>
+#include <string>
+#include <vector>
+
+#include "../phrase-extract/SentenceAlignment.h"
+
+#include "typedefs.h"
+
+
+//////// Types definitions /////////////////////////////////////////////////////
+
+// HPhraseVertex represents a point in the alignment matrix
+typedef std::pair<int, int> HPhraseVertex;
+
+// Phrase represents a bi-phrase; each bi-phrase is defined by two points in the alignment matrix:
+// bottom-left and top-right
+typedef std::pair<HPhraseVertex, HPhraseVertex> HPhrase;
+
+// HPhraseVector is a vector of HPhrases
+typedef std::vector<HPhrase> HPhraseVector;
+
+// SentenceVertices represents, from all extracted phrases, all vertices that have the same positioning
+// The key of the map is the English index and the value is a set of the source ones
+typedef std::map<int, std::set<int> > HSentenceVertices;
+
+//
+typedef std::pair<PhrasePairsLossyCounter::error_t, PhrasePairsLossyCounter::support_t> params_pair_t;
+//
+typedef std::vector<PhrasePairsLossyCounter *> PhrasePairsLossyCountersVector;
+
+// MSD - monotone, swap, discontinuous.
+enum REO_MODEL_TYPE {REO_MSD, REO_MSLR, REO_MONO};
+enum REO_POS {LEFT, RIGHT, DLEFT, DRIGHT, UNKNOWN};
+
+struct LossyCounterInstance {
+ // Statistics not provided by the lossy counter must be computed during
+ // phrases flushing (ie. when input processing is done):
+ size_t outputMass; // unique * freq
+ size_t outputSize; // unique
+ //
+ PhrasePairsLossyCounter lossyCounter;
+
+ LossyCounterInstance(PhrasePairsLossyCounter::error_t error, PhrasePairsLossyCounter::support_t support): outputMass(0), outputSize(0), lossyCounter(error, support) {}
+};
+
+//
+typedef std::vector<LossyCounterInstance *> LossyCountersVector;
+
+struct OutputProcessor {
+ virtual void operator() (const std::string& srcPhrase, const std::string& tgtPhrase, const std::string& orientationInfo, const alignment_t& alignment, const size_t frequency, int mode) = 0;
+};
+
+
+//////// Functions declarations ////////////////////////////////////////////////
+
+//// Untouched ////
+REO_POS getOrientWordModel(SentenceAlignment &, REO_MODEL_TYPE, bool, bool,
+ int, int, int, int, int, int, int,
+ bool (*)(int, int), bool (*)(int, int));
+
+REO_POS getOrientPhraseModel(SentenceAlignment &, REO_MODEL_TYPE, bool, bool,
+ int, int, int, int, int, int, int,
+ bool (*)(int, int), bool (*)(int, int),
+ const HSentenceVertices &, const HSentenceVertices &);
+
+REO_POS getOrientHierModel(SentenceAlignment &, REO_MODEL_TYPE, bool, bool,
+ int, int, int, int, int, int, int,
+ bool (*)(int, int), bool (*)(int, int),
+ const HSentenceVertices &, const HSentenceVertices &,
+ const HSentenceVertices &, const HSentenceVertices &,
+ REO_POS);
+
+void insertVertex(HSentenceVertices &, int, int);
+void insertPhraseVertices(HSentenceVertices &, HSentenceVertices &, HSentenceVertices &, HSentenceVertices &, int, int, int, int);
+
+std::string getOrientString(REO_POS, REO_MODEL_TYPE);
+
+bool ge(int, int);
+bool le(int, int);
+bool lt(int, int);
+bool isAligned (SentenceAlignment &, int, int);
+void extract(SentenceAlignment &);
+
+//// Modified ////
+void addPhrase(SentenceAlignment &, int, int, int, int, std::string &);
+
+//// Added ////
+void readInput(std::istream& eFile, std::istream& fFile, std::istream& aFile);
+void processOutput(OutputProcessor& processor);
+void printStats(void);
+
+
+//////// Extern variables //////////////////////////////////////////////////////
+
+extern bool allModelsOutputFlag;
+
+// Some default setting, I guess...
+extern bool wordModel; // IBM word model.
+extern REO_MODEL_TYPE wordType;
+extern bool phraseModel; // Std phrase-based model.
+extern REO_MODEL_TYPE phraseType;
+extern bool hierModel; // Hierarchical model.
+extern REO_MODEL_TYPE hierType;
+
+extern int maxPhraseLength; // Eg. 7
+extern bool translationFlag; // Generate extract and extract.inv
+extern bool orientationFlag; // Ordering info needed?
+extern bool sortedOutput; // Sort output?
+
+extern LossyCountersVector lossyCounters;
+
+#ifdef GET_COUNTS_ONLY
+extern std::vector<size_t> phrasePairsCounters;
+#endif
+
+#endif /* PHRASE_EXTRACT_H */
diff --git a/scripts/training/eppex/shared.cpp b/scripts/training/eppex/shared.cpp
new file mode 100644
index 000000000..670df1c0f
--- /dev/null
+++ b/scripts/training/eppex/shared.cpp
@@ -0,0 +1,194 @@
+/**
+ * Implementation of functionality shared between counter, eppex and
+ * (not yet finished) memscoring eppex.
+ *
+ * (C) Moses: http://www.statmt.org/moses/
+ * (C) Ceslav Przywara, UFAL MFF UK, 2011
+ *
+ * $Id$
+ */
+
+#include <string.h>
+#include <boost/tokenizer.hpp>
+#include <iostream>
+
+#include "typedefs.h"
+#include "phrase-extract.h"
+#include "shared.h"
+
+
+std::string get_lossy_counting_params_format(void) {
+ return "\n"
+ "You may specify separate Lossy Counter (LC) for each phrase length or\n"
+ "use shared LC for all phrase pairs with length from given inclusive interval.\n"
+ "Every LC is defined by parameter in form phrase-length:error:support, where:\n"
+ " phrase-length ... a single number (eg. 2) or interval (eg. 2-4)\n"
+ " error ... error parameter for lossy counting\n"
+ " support ... support parameter for lossy counting\n"
+ "\n"
+ "Example of LC params: 1:0:0 2-4:1e-7:4e-7 5-7:2e-8:8e-8\n"
+ " - phrase pairs of length 1 will NOT be pruned\n"
+ " - phrase pairs of length from 2 to 4 (inclusive) will be pruned altogether by LC\n"
+ " with parameters support=4e-7 and error=1e-7\n"
+ " - phrase pairs of length from 5 to 7 (inclusive) will be pruned altogether by LC\n"
+ " with parameters support=8e-8 and error=2e-8\n"
+ " - max phrase length extracted will be set to 7\n"
+ "\n"
+ "Note: there has to be Lossy Counter defined for every phrase pair length\n"
+ "up to the maximum phrase length! Following will not work: 1:0:0 5-7:2e-8:8e-8\n"
+ "\n"
+ "To count phrase pairs by their length a separate program (counter) may be used.\n"
+ "\n"
+ ;
+}
+
+bool parse_lossy_counting_params(const std::string& param) {
+
+ // See: http://www.boost.org/doc/libs/1_42_0/libs/tokenizer/char_separator.htm
+ boost::char_separator<char> separators(",:");
+ boost::tokenizer<boost::char_separator<char> > tokens(param, separators);
+ boost::tokenizer<boost::char_separator<char> >::iterator iter = tokens.begin();
+
+ std::string interval = *iter;
+
+ if ( ++iter == tokens.end() ) {
+ std::cerr << "ERROR: Failed to proccess Lossy Counting param \"" << param << "\": invalid format, missing error and support parameters specification!" << std::endl;
+ return false;
+ }
+ PhrasePairsLossyCounter::error_t error = atof((*iter).c_str());
+
+ if ( ++iter == tokens.end() ) {
+ std::cerr << "ERROR: Failed to proccess Lossy Counting param \"" << param << "\": invalid format, missing support parameter specification!" << std::endl;
+ return false;
+ }
+ PhrasePairsLossyCounter::support_t support = atof((*iter).c_str());
+
+ if ( (error > 0) && !(error < support) ) {
+ std::cerr << "ERROR: Failed to proccess Lossy Counting param \"" << param << "\": support parameter (" << support << ") is not greater than error (" << error << ")!" << std::endl;
+ return false;
+ }
+
+ // Split interval.
+ boost::char_separator<char> separator("-");
+ boost::tokenizer<boost::char_separator<char> > intervalTokens(interval, separator);
+ iter = intervalTokens.begin();
+
+ int from = 0, to = 0;
+
+ from = atoi((*iter).c_str());
+ if ( ++iter == intervalTokens.end() )
+ to = from;
+ else
+ to = atoi((*iter).c_str());
+
+ if ( ! (from <= to) ) {
+ std::cerr << "ERROR: Failed to proccess Lossy Counting param \"" << param << "\": invalid interval " << from << "-" << to << " specified!" << std::endl;
+ return false;
+ }
+
+ LossyCounterInstance* lci = new LossyCounterInstance(error, support);
+
+ if ( lossyCounters.size() <= to ) {
+ lossyCounters.resize(to + 1, NULL);
+ }
+
+ for ( size_t i = from; i <= to; ++i ) {
+ if ( lossyCounters[i] != NULL ) {
+ std::cerr << "ERROR: Failed to proccess Lossy Counting param \"" << param << "\": Lossy Counter for phrases of length " << i << " is already defined!" << std::endl;
+ return false;
+ }
+ lossyCounters[i] = lci;
+ }
+
+ // Set maximum phrase length accordingly:
+ if ( maxPhraseLength < to )
+ maxPhraseLength = to;
+
+ return true;
+}
+
+void read_optional_params(int argc, char* argv[], int optionalParamsStart) {
+
+ for ( int i = optionalParamsStart; i < argc; i++ ) {
+ if (strcmp(argv[i],"--OnlyOutputSpanInfo") == 0) {
+ std::cerr << "Error: option --OnlyOutputSpanInfo is not supported!\n";
+ exit(2);
+ } else if (strcmp(argv[i],"orientation") == 0 || strcmp(argv[i],"--Orientation") == 0) {
+ orientationFlag = true;
+ } else if (strcmp(argv[i],"--NoTTable") == 0) {
+ translationFlag = false;
+ } else if(strcmp(argv[i],"--model") == 0) {
+ if (i+1 >= argc) {
+ std::cerr << "extract: syntax error, no model's information provided to the option --model " << std::endl;
+ exit(1);
+ }
+ char* modelParams = argv[++i];
+ const char* modelName = strtok(modelParams, "-");
+ const char* modelType = strtok(NULL, "-");
+
+ if(strcmp(modelName, "wbe") == 0) {
+ wordModel = true;
+ if(strcmp(modelType, "msd") == 0) {
+ wordType = REO_MSD;
+ }
+ else if(strcmp(modelType, "mslr") == 0) {
+ wordType = REO_MSLR;
+ }
+ else if(strcmp(modelType, "mono") == 0 || strcmp(modelType, "monotonicity") == 0) {
+ wordType = REO_MONO;
+ }
+ else {
+ std::cerr << "extract: syntax error, unknown reordering model type: " << modelType << std::endl;
+ exit(1);
+ }
+ } else if(strcmp(modelName, "phrase") == 0) {
+ phraseModel = true;
+ if(strcmp(modelType, "msd") == 0) {
+ phraseType = REO_MSD;
+ }
+ else if(strcmp(modelType, "mslr") == 0) {
+ phraseType = REO_MSLR;
+ }
+ else if(strcmp(modelType, "mono") == 0 || strcmp(modelType, "monotonicity") == 0) {
+ phraseType = REO_MONO;
+ }
+ else {
+ std::cerr << "extract: syntax error, unknown reordering model type: " << modelType << std::endl;
+ exit(1);
+ }
+ } else if(strcmp(modelName, "hier") == 0) {
+ hierModel = true;
+ if(strcmp(modelType, "msd") == 0) {
+ hierType = REO_MSD;
+ }
+ else if(strcmp(modelType, "mslr") == 0) {
+ hierType = REO_MSLR;
+ }
+ else if(strcmp(modelType, "mono") == 0 || strcmp(modelType, "monotonicity") == 0) {
+ hierType = REO_MONO;
+ }
+ else {
+ std::cerr << "extract: syntax error, unknown reordering model type: " << modelType << std::endl;
+ exit(1);
+ }
+ } else {
+ std::cerr << "extract: syntax error, unknown reordering model: " << modelName << std::endl;
+ exit(1);
+ }
+
+ allModelsOutputFlag = true;
+
+ } else {
+ std::cerr << "extract: syntax error, unknown option '" << std::string(argv[i]) << "'\n";
+ exit(1);
+ }
+ }
+
+ // default reordering model if no model selected
+ // allows for the old syntax to be used
+ if(orientationFlag && !allModelsOutputFlag) {
+ wordModel = true;
+ wordType = REO_MSD;
+ }
+
+} // end of read_optional_params()
diff --git a/scripts/training/eppex/shared.h b/scripts/training/eppex/shared.h
new file mode 100644
index 000000000..2ed70d336
--- /dev/null
+++ b/scripts/training/eppex/shared.h
@@ -0,0 +1,22 @@
+/**
+ * Declaration of functionality shared between counter, eppex and
+ * (not yet finished) memscoring eppex.
+ *
+ * (C) Moses: http://www.statmt.org/moses/
+ * (C) Ceslav Przywara, UFAL MFF UK, 2011
+ *
+ * $Id$
+ */
+
+#ifndef SHARED_H
+#define SHARED_H
+
+#include <string>
+
+std::string get_lossy_counting_params_format(void);
+
+bool parse_lossy_counting_params(const std::string& param);
+
+void read_optional_params(int argc, char* argv[], int optionalParamsStart);
+
+#endif
diff --git a/scripts/training/eppex/typedefs.h b/scripts/training/eppex/typedefs.h
new file mode 100644
index 000000000..0665c4aa4
--- /dev/null
+++ b/scripts/training/eppex/typedefs.h
@@ -0,0 +1,24 @@
+/**
+ * Basic eppex configuration.
+ *
+ * $Id$
+ */
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "IndexedPhrasesPair.h"
+#include "LossyCounter.h"
+
+// Type capable of holding all words (tokens) indices:
+typedef unsigned int word_index_t;
+// Type capable of holding all orientation info indices:
+typedef unsigned char orientation_info_index_t;
+// Phrase Pair type.
+typedef IndexedPhrasesPair<orientation_info_index_t, word_index_t> indexed_phrases_pair_t;
+// Lossy Counter type.
+typedef LossyCounter<indexed_phrases_pair_t> PhrasePairsLossyCounter;
+// Shortcut to alignment interface.
+typedef indexed_phrases_pair_t::alignment_t alignment_t;
+
+#endif /* CONFIG_H */
diff --git a/scripts/training/filter-model-given-input.pl b/scripts/training/filter-model-given-input.pl
index 699df0329..a9b4ffbad 100755
--- a/scripts/training/filter-model-given-input.pl
+++ b/scripts/training/filter-model-given-input.pl
@@ -36,10 +36,12 @@ my $ZCAT = "gzip -cd";
# get optional parameters
my $opt_hierarchical = 0;
my $binarizer = undef;
+my $opt_min_non_initial_rule_count = undef;
GetOptions(
"Hierarchical" => \$opt_hierarchical,
- "Binarizer=s" => \$binarizer
+ "Binarizer=s" => \$binarizer,
+ "MinNonInitialRuleCount=i" => \$opt_min_non_initial_rule_count
) or exit(1);
# get command line parameters
@@ -55,7 +57,7 @@ $dir = ensure_full_path($dir);
# buggy directory in place?
if (-d $dir && ! -e "$dir/info") {
- print STDERR "The directory $dir exists but does not belong to me. Delete $dir!\n";
+ print STDERR "The directory $dir already exists. Please delete $dir and rerun!\n";
exit(1);
}
@@ -225,7 +227,9 @@ for(my $i=0;$i<=$#TABLE;$i++) {
if ($opt_hierarchical) {
my $tmp_input = $TMP_INPUT_FILENAME{$factors};
- open(PIPE,"$openstring $SCRIPTS_ROOTDIR/training/filter-rule-table.py $tmp_input |");
+ my $options = "";
+ $options .= "--min-non-initial-rule-count=$opt_min_non_initial_rule_count" if defined($opt_min_non_initial_rule_count);
+ open(PIPE,"$openstring $SCRIPTS_ROOTDIR/training/filter-rule-table.py $options $tmp_input |");
while (my $line = <PIPE>) {
print FILE_OUT $line
}
diff --git a/scripts/training/filter-rule-table.py b/scripts/training/filter-rule-table.py
index dff083862..cd2d34c4f 100755
--- a/scripts/training/filter-rule-table.py
+++ b/scripts/training/filter-rule-table.py
@@ -2,7 +2,7 @@
# Author: Phil Williams
-# Usage: filter-rule-table.py INPUT
+# Usage: filter-rule-table.py [--min-non-initial-rule-count=N] INPUT
#
# Given a rule table (on stdin) and an input text, filter out rules that
# couldn't be used in parsing the input and write the resulting rule table
@@ -21,6 +21,7 @@
# including JJ, with varying probabilities, so removing the rule would
# be a bad idea.)
+import optparse
import sys
class NGram(tuple):
@@ -34,19 +35,25 @@ class Gap:
return self.minSpan
def printUsage():
- sys.stderr.write("Usage: filter-rule-table.py INPUT")
+ sys.stderr.write("Usage: filter-rule-table.py [--min-non-initial-rule-count=N] INPUT")
def main():
- if len(sys.argv) != 2:
+ parser = optparse.OptionParser()
+ parser.add_option("-c", "--min-non-initial-rule-count",
+ action="store", dest="minCount", type="int", default="1",
+ help="prune non-initial rules where count is below N",
+ metavar="N")
+ (options, args) = parser.parse_args()
+ if len(args) != 1:
printUsage()
sys.exit(1)
N = 7
inputSentences = []
- for line in open(sys.argv[1]):
+ for line in open(args[0]):
inputSentences.append(line.split())
- filterRuleTable(sys.stdin, inputSentences, N)
+ filterRuleTable(sys.stdin, inputSentences, N, options)
-def filterRuleTable(ruleTable, inputSentences, N):
+def filterRuleTable(ruleTable, inputSentences, N, options):
# Map each input n-gram (n = 1..N) to a map from sentence indices to
# lists of intra-sentence indices.
occurrences = {}
@@ -61,8 +68,16 @@ def filterRuleTable(ruleTable, inputSentences, N):
prevRHS = None
prevRuleIncluded = None
for line in ruleTable:
- rhs = parseRule(line)
- if rhs == prevRHS:
+ rhs, count = parseRule(line)
+ # Prune non-initial rule if count is below threshold.
+ if count != None and count < options.minCount and isNonInitialRule(rhs):
+ if prevRHS != rhs:
+ prevRuleIncluded = None
+ prevRHS = rhs
+ continue
+ # If source RHS is same as last rule's then we already know whether to
+ # filter or not (unless it was pruned before checking).
+ if rhs == prevRHS and prevRuleIncluded != None:
if prevRuleIncluded:
print line,
continue
@@ -95,14 +110,27 @@ def filterRuleTable(ruleTable, inputSentences, N):
break
prevRuleIncluded = match
-# Parse a line of the rule table and return the list of RHS source symbols.
+# Parse a line of the rule table and return a tuple containing two items,
+# the list of RHS source symbols and the rule count (if present).
def parseRule(line):
- cols = line.split(" ||| ")
- return cols[0].split()[:-1]
+ cols = line.split("|||")
+ rhsSourceSymbols = cols[0].split()[:-1]
+ ruleCount = None
+ if len(cols) > 4:
+ counts = cols[4].split()
+ if len(counts) == 3:
+ ruleCount = float(counts[2])
+ return (rhsSourceSymbols, ruleCount)
def isNT(symbol):
return symbol[0] == '[' and symbol[-1] == ']'
+def isNonInitialRule(rhs):
+ for symbol in rhs:
+ if isNT(symbol):
+ return True
+ return False
+
def segmentRHS(rhs, N):
segments = []
terminals = []
diff --git a/scripts/training/mbr/mbr.cpp b/scripts/training/mbr/mbr.cpp
index f886fdddd..8004620cc 100644
--- a/scripts/training/mbr/mbr.cpp
+++ b/scripts/training/mbr/mbr.cpp
@@ -10,6 +10,7 @@
#include <stdio.h>
#include <unistd.h>
#include <cstring>
+#include <time.h>
using namespace std ;
diff --git a/scripts/training/mert-moses.pl b/scripts/training/mert-moses.pl
index a3f01597e..c8c04cb90 100755
--- a/scripts/training/mert-moses.pl
+++ b/scripts/training/mert-moses.pl
@@ -1,5 +1,4 @@
#!/usr/bin/perl -w
-
# $Id$
# Usage:
# mert-moses.pl <foreign> <english> <decoder-executable> <decoder-config>
@@ -9,8 +8,15 @@
# <foreign> and <english> should be raw text files, one sentence per line
# <english> can be a prefix, in which case the files are <english>0, <english>1, etc. are used
-# Revision history
+# Excerpts from revision history
+# Jul 2011 simplifications (Ondrej Bojar)
+# -- rely on moses' -show-weights instead of parsing moses.ini
+# ... so moses is also run once *before* mert starts, checking
+# the model to some extent
+# -- got rid of the 'triples' mess;
+# use --range to supply bounds for random starting values:
+# --range tm:-3..3 --range lm:-3..3
# 5 Aug 2009 Handling with different reference length policies (shortest, average, closest) for BLEU
# and case-sensistive/insensitive evaluation (Nicola Bertoldi)
# 5 Jun 2008 Forked previous version to support new mert implementation.
@@ -41,59 +47,33 @@
use FindBin qw($Bin);
use File::Basename;
+use File::Path;
my $SCRIPTS_ROOTDIR = $Bin;
$SCRIPTS_ROOTDIR =~ s/\/training$//;
$SCRIPTS_ROOTDIR = $ENV{"SCRIPTS_ROOTDIR"} if defined($ENV{"SCRIPTS_ROOTDIR"});
-# for each _d_istortion, _l_anguage _m_odel, _t_ranslation _m_odel and _w_ord penalty, there is a list
-# of [ default value, lower bound, upper bound ]-triples. In most cases, only one triple is used,
-# but the translation model has currently 5 features
-
-# defaults for initial values and ranges are:
-
-my $default_triples = {
- # these basic models exist even if not specified, they are
- # not associated with any model file
- "w" => [ [ 0.0, -1.0, 1.0 ] ], # word penalty
-};
-
-my $additional_triples = {
- # if the more lambda parameters for the weights are needed
- # (due to additional tables) use the following values for them
- "d" => [ [ 1.0, 0.0, 2.0 ] ], # lexicalized reordering model
- "lm" => [ [ 1.0, 0.0, 2.0 ] ], # language model
- "g" => [ [ 1.0, 0.0, 2.0 ], # generation model
- [ 1.0, 0.0, 2.0 ] ],
- "tm" => [ [ 0.3, 0.0, 0.5 ], # translation model
- [ 0.2, 0.0, 0.5 ],
- [ 0.3, 0.0, 0.5 ],
- [ 0.2, 0.0, 0.5 ],
- [ 0.0,-1.0, 1.0 ] ], # ... last weight is phrase penalty
- "lex"=> [ [ 0.1, 0.0, 0.2 ] ], # global lexical model
- "I" => [ [ 0.0,-1.0, 1.0 ] ], # input lattice scores
-};
- # the following models (given by shortname) use same triplet
- # for any number of lambdas, the number of the lambdas is determined
- # by the ini file
-my $additional_tripes_loop = { map { ($_, 1) } qw/ d I / };
-
-# moses.ini file uses FULL names for lambdas, while this training script internally (and on the command line)
-# uses ABBR names.
-my $ABBR_FULL_MAP = "d=weight-d lm=weight-l tm=weight-t w=weight-w g=weight-generation lex=weight-lex I=weight-i";
-my %ABBR2FULL = map {split/=/,$_,2} split /\s+/, $ABBR_FULL_MAP;
-my %FULL2ABBR = map {my ($a, $b) = split/=/,$_,2; ($b, $a);} split /\s+/, $ABBR_FULL_MAP;
-
-# We parse moses.ini to figure out how many weights do we need to optimize.
-# For this, we must know the correspondence between options defining files
-# for models and options assigning weights to these models.
-my $TABLECONFIG_ABBR_MAP = "ttable-file=tm lmodel-file=lm distortion-file=d generation-file=g global-lexical-file=lex link-param-count=I";
-my %TABLECONFIG2ABBR = map {split(/=/,$_,2)} split /\s+/, $TABLECONFIG_ABBR_MAP;
-
-# There are weights that do not correspond to any input file, they just increase the total number of lambdas we optimize
-#my $extra_lambdas_for_model = {
-# "w" => 1, # word penalty
-# "d" => 1, # basic distortion
-#};
+## We preserve this bit of comments to keep the traditional weight ranges.
+# "w" => [ [ 0.0, -1.0, 1.0 ] ], # word penalty
+# "d" => [ [ 1.0, 0.0, 2.0 ] ], # lexicalized reordering model
+# "lm" => [ [ 1.0, 0.0, 2.0 ] ], # language model
+# "g" => [ [ 1.0, 0.0, 2.0 ], # generation model
+# [ 1.0, 0.0, 2.0 ] ],
+# "tm" => [ [ 0.3, 0.0, 0.5 ], # translation model
+# [ 0.2, 0.0, 0.5 ],
+# [ 0.3, 0.0, 0.5 ],
+# [ 0.2, 0.0, 0.5 ],
+# [ 0.0,-1.0, 1.0 ] ], # ... last weight is phrase penalty
+# "lex"=> [ [ 0.1, 0.0, 0.2 ] ], # global lexical model
+# "I" => [ [ 0.0,-1.0, 1.0 ] ], # input lattice scores
+
+
+
+# moses.ini file uses FULL names for lambdas, while this training script
+# internally (and on the command line) uses ABBR names.
+my @ABBR_FULL_MAP = qw(d=weight-d lm=weight-l tm=weight-t w=weight-w
+ g=weight-generation lex=weight-lex I=weight-i);
+my %ABBR2FULL = map {split/=/,$_,2} @ABBR_FULL_MAP;
+my %FULL2ABBR = map {my ($a, $b) = split/=/,$_,2; ($b, $a);} @ABBR_FULL_MAP;
my $minimum_required_change_in_weights = 0.00001;
# stop if no lambda changes more than this
@@ -107,15 +87,18 @@ my $___DECODER = undef; # required, pathname to the decoder executable
my $___CONFIG = undef; # required, pathname to startup ini file
my $___N_BEST_LIST_SIZE = 100;
my $queue_flags = "-hard"; # extra parameters for parallelizer
- # the -l ws0ssmt is relevant only to JHU workshop
-my $___JOBS = undef; # if parallel, number of jobs to use (undef -> serial)
+ # the -l ws0ssmt was relevant only to JHU 2006 workshop
+my $___JOBS = undef; # if parallel, number of jobs to use (undef or 0 -> serial)
my $___DECODER_FLAGS = ""; # additional parametrs to pass to the decoder
-my $___LAMBDA = undef; # string specifying the seed weights and boundaries of all lambdas
my $continue = 0; # should we try to continue from the last saved step?
my $skip_decoder = 0; # and should we skip the first decoder run (assuming we got interrupted during mert)
my $___FILTER_PHRASE_TABLE = 1; # filter phrase table
my $___PREDICTABLE_SEEDS = 0;
-
+my $___START_WITH_HISTORIC_BESTS = 0; # use best settings from all previous iterations as starting points [Foster&Kuhn,2009]
+my $___RANDOM_DIRECTIONS = 0; # search in random directions only
+my $___NUM_RANDOM_DIRECTIONS = 0; # number of random directions, also works with default optimizer [Cer&al.,2008]
+my $___PAIRWISE_RANKED_OPTIMIZER = 0; # use Hopkins&May[2011]
+my $___RANDOM_RESTARTS = 20;
# Parameter for effective reference length when computing BLEU score
# Default is to use shortest reference
@@ -145,19 +128,16 @@ my $filterfile = undef;
my $qsubwrapper = undef;
my $moses_parallel_cmd = undef;
my $old_sge = 0; # assume sge<6.0
-my $___CONFIG_BAK = undef; # backup pathname to startup ini file
-my $efficient_scorenbest_flag = undef; # set to 1 to activate a time-efficient scoring of nbest lists
- # (this method is more memory-consumptive)
+my $___CONFIG_ORIG = undef; # pathname to startup ini file before filtering
my $___ACTIVATE_FEATURES = undef; # comma-separated (or blank-separated) list of features to work on
# if undef work on all features
# (others are fixed to the starting values)
+my $___RANGES = undef;
my $prev_aggregate_nbl_size = -1; # number of previous step to consider when loading data (default =-1)
# -1 means all previous, i.e. from iteration 1
# 0 means no previous data, i.e. from actual iteration
# 1 means 1 previous data , i.e. from the actual iteration and from the previous one
# and so on
-my $starting_weights_from_ini = 1;
-
my $maximum_iterations = 25;
use strict;
@@ -173,7 +153,6 @@ GetOptions(
"queue-flags=s" => \$queue_flags,
"jobs=i" => \$___JOBS,
"decoder-flags=s" => \$___DECODER_FLAGS,
- "lambdas=s" => \$___LAMBDA,
"continue" => \$continue,
"skip-decoder" => \$skip_decoder,
"shortest" => \$___SHORTEST,
@@ -191,13 +170,17 @@ GetOptions(
"qsubwrapper=s" => \$qsubwrapper, # allow to override the default location
"mosesparallelcmd=s" => \$moses_parallel_cmd, # allow to override the default location
"old-sge" => \$old_sge, #passed to moses-parallel
- "filter-phrase-table!" => \$___FILTER_PHRASE_TABLE, # allow (disallow)filtering of phrase tables
- "predictable-seeds" => \$___PREDICTABLE_SEEDS, # allow (disallow) switch on/off reseeding of random restarts
- "efficient_scorenbest_flag" => \$efficient_scorenbest_flag, # activate a time-efficient scoring of nbest lists
+ "filter-phrase-table!" => \$___FILTER_PHRASE_TABLE, # (dis)allow of phrase tables
+ "predictable-seeds" => \$___PREDICTABLE_SEEDS, # make random restarts deterministic
+ "historic-bests" => \$___START_WITH_HISTORIC_BESTS, # use best settings from all previous iterations as starting points
+ "random-directions" => \$___RANDOM_DIRECTIONS, # search only in random directions
+ "number-of-random-directions=i" => \$___NUM_RANDOM_DIRECTIONS, # number of random directions
+ "random-restarts=i" => \$___RANDOM_RESTARTS, # number of random restarts
"activate-features=s" => \$___ACTIVATE_FEATURES, #comma-separated (or blank-separated) list of features to work on (others are fixed to the starting values)
+ "range=s@" => \$___RANGES,
"prev-aggregate-nbestlist=i" => \$prev_aggregate_nbl_size, #number of previous step to consider when loading data (default =-1, i.e. all previous)
"maximum-iterations=i" => \$maximum_iterations,
- "starting-weights-from-ini!" => \$starting_weights_from_ini,
+ "pairwise-ranked" => \$___PAIRWISE_RANKED_OPTIMIZER
) or exit(1);
# the 4 required parameters can be supplied on the command line directly
@@ -211,7 +194,7 @@ if (scalar @ARGV == 4) {
}
if ($usage || !defined $___DEV_F || !defined $___DEV_E || !defined $___DECODER || !defined $___CONFIG) {
- print STDERR "usage: mert-moses.pl input-text references decoder-executable decoder.ini
+ print STDERR "usage: $0 input-text references decoder-executable decoder.ini
Options:
--working-dir=mert-dir ... where all the files are created
--nbest=100 ... how big nbestlist to generate
@@ -223,12 +206,6 @@ Options:
--queue-flags=' '
(i.e. a space between the quotes).
--decoder-flags=STRING ... extra parameters for the decoder
- --lambdas=STRING ... default values and ranges for lambdas, a
- complex string such as
- 'd:1,0.5-1.5 lm:1,0.5-1.5 tm:0.3,0.25-0.75;0.2,0.25-0.75;0.2,0.25-0.75;0.3,0.25-0.75;0,-0.5-0.5 w:0,-0.5-0.5'
- --allow-unknown-lambda ... keep going even if someone supplies a new
- lambda in the lambdas option (such as
- 'superbmodel:1,0-1'); optimize it, too
--continue ... continue from the last successful iteration
--skip-decoder ... skip the decoder run for the first time,
assuming that we got interrupted during
@@ -253,10 +230,19 @@ Options:
default is 0)
--no-filter-phrase-table ... disallow filtering of phrase tables
(useful if binary phrase tables are available)
+ --random-restarts=INT ... number of random restarts (default: 20)
--predictable-seeds ... provide predictable seeds to mert so that random
restarts are the same on every run
- --efficient_scorenbest_flag ... time-efficient scoring of nbest lists
- (this method is more memory-consumptive)
+ --range=tm:0..1,-1..1 ... specify min and max value for some features
+ --range can be repeated as needed.
+ The order of the various --range specifications
+ is important only within a feature name.
+ E.g.:
+ --range=tm:0..1,-1..1 --range=tm:0..2
+ is identical to:
+ --range=tm:0..1,-1..1,0..2
+ but not to:
+ --range=tm:0..2 --range=tm:0..1,-1..1
--activate-features=STRING ... comma-separated list of features to optimize,
others are fixed to the starting values
default: optimize all features
@@ -269,10 +255,9 @@ Options:
N means this and N previous iterations
--maximum-iterations=ITERS ... Maximum number of iterations. Default: $maximum_iterations
- --starting-weights-from-ini ... use the weights given in moses.ini file as
- the starting weights (and also as the fixed
- weights if --activate-features is used).
- default: yes (used to be 'no')
+ --random-directions ... search only in random directions
+ --number-of-random-directions=int ... number of random directions
+ (also works with regular optimizer, default: 0)
";
exit 1;
}
@@ -285,6 +270,12 @@ print STDERR "Using SCRIPTS_ROOTDIR: $SCRIPTS_ROOTDIR\n";
# path of script for filtering phrase tables and running the decoder
$filtercmd="$SCRIPTS_ROOTDIR/training/filter-model-given-input.pl" if !defined $filtercmd;
+if ( ! -x $filtercmd && ! $___FILTER_PHRASE_TABLE) {
+ print STDERR "Filtering command not found: $filtercmd.\n";
+ print STDERR "Use --filtercmd=PATH to specify a valid one or --no-filter-phrase-table\n";
+ exit 1;
+}
+
$qsubwrapper="$SCRIPTS_ROOTDIR/generic/qsub-wrapper.pl" if !defined $qsubwrapper;
$moses_parallel_cmd = "$SCRIPTS_ROOTDIR/generic/moses-parallel.pl"
@@ -303,6 +294,15 @@ my $mert_mert_cmd = "$mertdir/mert";
die "Not executable: $mert_extract_cmd" if ! -x $mert_extract_cmd;
die "Not executable: $mert_mert_cmd" if ! -x $mert_mert_cmd;
+my $pro_optimizer = "$mertdir/megam_i686.opt"; # or set to your installation
+if ($___PAIRWISE_RANKED_OPTIMIZER && ! -x $pro_optimizer) {
+ print "did not find $pro_optimizer, installing it in $mertdir\n";
+ `cd $mertdir; wget http://www.cs.utah.edu/~hal/megam/megam_i686.opt.gz;`;
+ `gunzip $pro_optimizer.gz`;
+ `chmod +x $pro_optimizer`;
+ die("ERROR: Installation of megam_i686.opt failed! Install by hand from http://www.cs.utah.edu/~hal/megam/") unless -x $pro_optimizer;
+}
+
$mertargs = "" if !defined $mertargs;
my $scconfig = undef;
@@ -362,7 +362,7 @@ $___DEV_F = $input_abs;
my $pass_old_sge = $old_sge ? "-old-sge" : "";
my $decoder_abs = ensure_full_path($___DECODER);
-die "File not found: $___DECODER (interpreted as $decoder_abs)."
+die "File not executable: $___DECODER (interpreted as $decoder_abs)."
if ! -x $decoder_abs;
$___DECODER = $decoder_abs;
@@ -388,47 +388,6 @@ die "File not found: $___CONFIG (interpreted as $config_abs)."
if ! -e $config_abs;
$___CONFIG = $config_abs;
-
-
-# check validity of moses.ini and collect number of models and lambdas per model
-# need to make a copy of $extra_lambdas_for_model, scan_config spoils it
-#my %copy_of_extra_lambdas_for_model = %$extra_lambdas_for_model;
-my %used_triples = %{$default_triples};
-my ($models_used) = scan_config($___CONFIG);
-
-# Parse the lambda config string and convert it to a nice structure in the same format as $used_triples
-if (defined $___LAMBDA) {
- my %specified_triples;
- # interpreting lambdas from command line
- foreach (split(/\s+/,$___LAMBDA)) {
- my ($name,$values) = split(/:/);
- die "Malformed setting: '$_', expected name:values\n" if !defined $name || !defined $values;
- foreach my $startminmax (split/;/,$values) {
- if ($startminmax =~ /^(-?[\.\d]+),(-?[\.\d]+)-(-?[\.\d]+)$/) {
- my $start = $1;
- my $min = $2;
- my $max = $3;
- push @{$specified_triples{$name}}, [$start, $min, $max];
- }
- else {
- die "Malformed feature range definition: $name => $startminmax\n";
- }
- }
- }
- # sanity checks for specified lambda triples
- foreach my $name (keys %used_triples) {
- die "No lambdas specified for '$name', but ".($#{$used_triples{$name}}+1)." needed.\n"
- unless defined($specified_triples{$name});
- die "Number of lambdas specified for '$name' (".($#{$specified_triples{$name}}+1).") does not match number needed (".($#{$used_triples{$name}}+1).")\n"
- if (($#{$used_triples{$name}}) != ($#{$specified_triples{$name}}));
- }
- foreach my $name (keys %specified_triples) {
- die "Lambdas specified for '$name' ".(@{$specified_triples{$name}}).", but none needed.\n"
- unless defined($used_triples{$name});
- }
- %used_triples = %specified_triples;
-}
-
# moses should use our config
if ($___DECODER_FLAGS =~ /(^|\s)-(config|f) /
|| $___DECODER_FLAGS =~ /(^|\s)-(ttable-file|t) /
@@ -446,20 +405,13 @@ my $need_to_normalize = 1;
-my @order_of_lambdas_from_decoder = ();
-# this will store the labels of scores coming out of the decoder (and hence the order of lambdas coming out of mert)
-# we will use the array to interpret the lambdas
-# the array gets filled with labels only after first nbestlist was generated
-
-
-
#store current directory and create the working directory (if needed)
my $cwd = `pawd 2>/dev/null`;
if(!$cwd){$cwd = `pwd`;}
chomp($cwd);
-safesystem("mkdir -p $___WORKING_DIR") or die "Can't mkdir $___WORKING_DIR";
+mkpath($___WORKING_DIR);
{
# open local scope
@@ -481,6 +433,75 @@ my $devbleu = undef;
my $prev_feature_file = undef;
my $prev_score_file = undef;
+my $prev_init_file = undef;
+
+
+if ($___FILTER_PHRASE_TABLE) {
+ my $outdir = "filtered";
+ if (-e "$outdir/moses.ini") {
+ print STDERR "Assuming the tables are already filtered, reusing $outdir/moses.ini\n";
+ } else {
+ # filter the phrase tables with respect to input, use --decoder-flags
+ print STDERR "filtering the phrase tables... ".`date`;
+ my $___FILTER_F = $___DEV_F;
+ $___FILTER_F = $filterfile if (defined $filterfile);
+ my $cmd = "$filtercmd ./$outdir $___CONFIG $___FILTER_F";
+ if (defined $___JOBS && $___JOBS > 0) {
+ safesystem("$qsubwrapper $pass_old_sge -command='$cmd' -queue-parameter=\"$queue_flags\" -stdout=filterphrases.out -stderr=filterphrases.err" )
+ or die "Failed to submit filtering of tables to the queue (via $qsubwrapper)";
+ } else {
+ safesystem($cmd) or die "Failed to filter the tables.";
+ }
+ }
+
+ # make a backup copy of startup ini filepath
+ $___CONFIG_ORIG = $___CONFIG;
+ # the decoder should now use the filtered model
+ $___CONFIG = "$outdir/moses.ini";
+}
+else{
+ # do not filter phrase tables (useful if binary phrase tables are available)
+ # use the original configuration file
+ $___CONFIG_ORIG = $___CONFIG;
+}
+
+
+# we run moses to check validity of moses.ini and to obtain all the feature
+# names
+my $featlist = get_featlist_from_moses($___CONFIG);
+$featlist = insert_ranges_to_featlist($featlist, $___RANGES);
+
+# Mark which features are disabled:
+if (defined $___ACTIVATE_FEATURES) {
+ my %enabled = map { ($_, 1) } split /[, ]+/, $___ACTIVATE_FEATURES;
+ my %cnt;
+ for(my $i=0; $i<scalar(@{$featlist->{"names"}}); $i++) {
+ my $name = $featlist->{"names"}->[$i];
+ $cnt{$name} = 0 if !defined $cnt{$name};
+ $featlist->{"enabled"}->[$i] = $enabled{$name."_".$cnt{$name}};
+ $cnt{$name}++;
+ }
+} else {
+ # all enabled
+ for(my $i=0; $i<scalar(@{$featlist->{"names"}}); $i++) {
+ $featlist->{"enabled"}->[$i] = 1;
+ }
+}
+
+print STDERR "MERT starting values and ranges for random generation:\n";
+for(my $i=0; $i<scalar(@{$featlist->{"names"}}); $i++) {
+ my $name = $featlist->{"names"}->[$i];
+ my $val = $featlist->{"values"}->[$i];
+ my $min = $featlist->{"mins"}->[$i];
+ my $max = $featlist->{"maxs"}->[$i];
+ my $enabled = $featlist->{"enabled"}->[$i];
+ printf STDERR " %5s = %7.3f", $name, $val;
+ if ($enabled) {
+ printf STDERR " (%5.2f .. %5.2f)\n", $min, $max;
+ } else {
+ print STDERR " --- inactive, not optimized ---\n";
+ }
+}
if ($continue) {
# getting the last finished step
@@ -529,6 +550,16 @@ if ($continue) {
$prev_score_file = "run$prevstep.scores.dat";
}
}
+ if (! -e "run$prevstep.${weights_in_file}"){
+ die "Can't start from step $step, because run$prevstep.${weights_in_file} was not found!";
+ }else{
+ if (defined $prev_init_file){
+ $prev_init_file = "${prev_init_file},run$prevstep.${weights_in_file}";
+ }
+ else{
+ $prev_init_file = "run$prevstep.${weights_in_file}";
+ }
+ }
}
if (! -e "run$step.weights.txt"){
die "Can't start from step $step, because run$step.weights.txt was not found!";
@@ -557,57 +588,28 @@ if ($continue) {
my @newweights = split /\s+/, $bestpoint;
-
- print STDERR "Reading last cached lambda values (result from step $step)\n";
- @order_of_lambdas_from_decoder = get_order_of_scores_from_nbestlist("gunzip -c < run$step.best$___N_BEST_LIST_SIZE.out.gz |");
-
+ # Sanity check: order of lambdas must match
+ sanity_check_order_of_lambdas($featlist,
+ "gunzip -c < run$step.best$___N_BEST_LIST_SIZE.out.gz |");
# update my cache of lambda values
- store_new_lambda_values(\%used_triples, \@order_of_lambdas_from_decoder, \@newweights);
+ $featlist->{"values"} = \@newweights;
}
else{
- print STDERR "No pevious data are needed\n";
+ print STDERR "No previous data are needed\n";
}
$start_run = $step +1;
}
-if ($___FILTER_PHRASE_TABLE){
- # filter the phrase tables wih respect to input, use --decoder-flags
- print "filtering the phrase tables... ".`date`;
- my $___FILTER_F = $___DEV_F;
- $___FILTER_F = $filterfile if (defined $filterfile);
- my $cmd = "$filtercmd ./filtered $___CONFIG $___FILTER_F";
- if (defined $___JOBS) {
- safesystem("$qsubwrapper $pass_old_sge -command='$cmd' -queue-parameter=\"$queue_flags\" -stdout=filterphrases.out -stderr=filterphrases.err" )
- or die "Failed to submit filtering of tables to the queue (via $qsubwrapper)";
- } else {
- safesystem($cmd) or die "Failed to filter the tables.";
- }
-
- # make a backup copy of startup ini file
- $___CONFIG_BAK = $___CONFIG;
- # the decoder should now use the filtered model
- $___CONFIG = "filtered/moses.ini";
-}
-else{
- # do not filter phrase tables (useful if binary phrase tables are available)
- # use the original configuration file
- $___CONFIG_BAK = $___CONFIG;
-}
-
-my $PARAMETERS;
-#$PARAMETERS = $___DECODER_FLAGS . " -config $___CONFIG -inputtype $___INPUTTYPE";
-$PARAMETERS = $___DECODER_FLAGS;
+###### MERT MAIN LOOP
my $run=$start_run-1;
my $oldallsorted = undef;
my $allsorted = undef;
-my $cmd;
-# features and scores from the last run.
my $nbest_file=undef;
while(1) {
@@ -622,13 +624,13 @@ while(1) {
print "run $run start at ".`date`;
# In case something dies later, we might wish to have a copy
- create_config($___CONFIG, "./run$run.moses.ini", \%used_triples, $run, (defined$devbleu?$devbleu:"--not-estimated--"));
+ create_config($___CONFIG, "./run$run.moses.ini", $featlist, $run, (defined$devbleu?$devbleu:"--not-estimated--"));
# skip if the user wanted
if (!$skip_decoder) {
print "($run) run decoder to produce n-best lists\n";
- $nbest_file = run_decoder(\%used_triples, $PARAMETERS, $run, \@order_of_lambdas_from_decoder, $need_to_normalize);
+ $nbest_file = run_decoder($featlist, $run, $need_to_normalize);
$need_to_normalize = 0;
safesystem("gzip -f $nbest_file") or die "Failed to gzip run*out";
$nbest_file = $nbest_file.".gz";
@@ -636,9 +638,6 @@ while(1) {
else {
$nbest_file="run$run.best$___N_BEST_LIST_SIZE.out.gz";
print "skipped decoder run $run\n";
- if (0 == scalar @order_of_lambdas_from_decoder) {
- @order_of_lambdas_from_decoder = get_order_of_scores_from_nbestlist("gunzip -dc $nbest_file | head -1 |");
- }
$skip_decoder = 0;
$need_to_normalize = 0;
}
@@ -653,45 +652,29 @@ while(1) {
my $feature_file = "run$run.${base_feature_file}";
my $score_file = "run$run.${base_score_file}";
- $cmd = "$mert_extract_cmd $mert_extract_args --scfile $score_file --ffile $feature_file -r ".join(",", @references)." -n $nbest_file";
+ my $cmd = "$mert_extract_cmd $mert_extract_args --scfile $score_file --ffile $feature_file -r ".join(",", @references)." -n $nbest_file";
- if (defined $___JOBS) {
+ if (defined $___JOBS && $___JOBS > 0) {
safesystem("$qsubwrapper $pass_old_sge -command='$cmd' -queue-parameter=\"$queue_flags\" -stdout=extract.out -stderr=extract.err" )
or die "Failed to submit extraction to queue (via $qsubwrapper)";
} else {
safesystem("$cmd > extract.out 2> extract.err") or die "Failed to do extraction of statistics.";
}
- # Create the initial weights file for mert, in init.opt
- # mert reads in the file init.opt containing the current
- # values of lambda.
+ # Create the initial weights file for mert: init.opt
- # We need to prepare the files and **the order of the lambdas must
- # correspond to the order @order_of_lambdas_from_decoder
-
- my @MIN = (); # lower bounds
- my @MAX = (); # upper bounds
- my @CURR = (); # the starting values
- my @NAME = (); # to which model does the lambda belong
+ my @MIN = @{$featlist->{"mins"}};
+ my @MAX = @{$featlist->{"maxs"}};
+ my @CURR = @{$featlist->{"values"}};
+ my @NAME = @{$featlist->{"names"}};
- my %visited = ();
- foreach my $name (@order_of_lambdas_from_decoder) {
- if (!defined $visited{$name}) {
- $visited{$name} = 0;
- } else {
- $visited{$name}++;
- }
- my ($val, $min, $max) = @{$used_triples{$name}->[$visited{$name}]};
- push @CURR, $val;
- push @MIN, $min;
- push @MAX, $max;
- push @NAME, $name;
- }
-
- open(OUT,"> $weights_in_file") or die "Can't write $weights_in_file (WD now $___WORKING_DIR)";
+ open(OUT,"> $weights_in_file")
+ or die "Can't write $weights_in_file (WD now $___WORKING_DIR)";
print OUT join(" ", @CURR)."\n";
+ print OUT join(" ", @MIN)."\n"; # this is where we could pass MINS
+ print OUT join(" ", @MAX)."\n"; # this is where we could pass MAXS
close(OUT);
- print join(" ", @NAME)."\n";
+ # print join(" ", @NAME)."\n";
# make a backup copy labelled with this run number
safesystem("\\cp -f $weights_in_file run$run.$weights_in_file") or die;
@@ -699,11 +682,20 @@ while(1) {
my $DIM = scalar(@CURR); # number of lambdas
# run mert
- $cmd = "$mert_mert_cmd -d $DIM $mert_mert_args -n 20";
+ $cmd = "$mert_mert_cmd -d $DIM $mert_mert_args -n $___RANDOM_RESTARTS";
if ($___PREDICTABLE_SEEDS) {
my $seed = $run * 1000;
$cmd = $cmd." -r $seed";
}
+ if ($___RANDOM_DIRECTIONS) {
+ if ($___NUM_RANDOM_DIRECTIONS == 0) {
+ $cmd .= " -m 50";
+ }
+ $cmd = $cmd." -t random-direction";
+ }
+ if ($___NUM_RANDOM_DIRECTIONS) {
+ $cmd .= " -m $___NUM_RANDOM_DIRECTIONS";
+ }
if (defined $prev_feature_file) {
$cmd = $cmd." --ffile $prev_feature_file,$feature_file";
@@ -717,12 +709,21 @@ while(1) {
else{
$cmd = $cmd." --scfile $score_file";
}
+ if ($___START_WITH_HISTORIC_BESTS && defined $prev_init_file) {
+ $cmd = $cmd." --ifile $prev_init_file,run$run.$weights_in_file";
+ }
+ else{
+ $cmd = $cmd." --ifile run$run.$weights_in_file";
+ }
- $cmd = $cmd." --ifile run$run.$weights_in_file";
+ if ($___PAIRWISE_RANKED_OPTIMIZER) {
+ $cmd .= " --pro pro.data ; echo 'not used' > $weights_out_file; $pro_optimizer -fvals -maxi 30 -nobias binary pro.data";
+ }
- if (defined $___JOBS) {
+ if (defined $___JOBS && $___JOBS > 0) {
safesystem("$qsubwrapper $pass_old_sge -command='$cmd' -stdout=$mert_outfile -stderr=$mert_logfile -queue-parameter=\"$queue_flags\"") or die "Failed to start mert (via qsubwrapper $qsubwrapper)";
- } else {
+ }
+ else {
safesystem("$cmd > $mert_outfile 2> $mert_logfile") or die "Failed to run mert";
}
die "Optimization failed, file $weights_out_file does not exist or is empty"
@@ -732,6 +733,7 @@ while(1) {
# backup copies
safesystem ("\\cp -f extract.err run$run.extract.err") or die;
safesystem ("\\cp -f extract.out run$run.extract.out") or die;
+ if ($___PAIRWISE_RANKED_OPTIMIZER) { safesystem ("\\cp -f pro.data run$run.pro.data") or die; }
safesystem ("\\cp -f $mert_outfile run$run.$mert_outfile") or die;
safesystem ("\\cp -f $mert_logfile run$run.$mert_logfile") or die;
safesystem ("touch $mert_logfile run$run.$mert_logfile") or die;
@@ -741,23 +743,40 @@ while(1) {
$bestpoint = undef;
$devbleu = undef;
- open(IN,"run$run.$mert_logfile") or die "Can't open run$run.$mert_logfile";
- while (<IN>) {
- if (/Best point:\s*([\s\d\.\-e]+?)\s*=> ([\-\d\.]+)/) {
- $bestpoint = $1;
- $devbleu = $2;
- last;
+ if ($___PAIRWISE_RANKED_OPTIMIZER) {
+ open(IN,"run$run.$mert_outfile") or die "Can't open run$run.$mert_outfile";
+ my (@WEIGHT,$sum);
+ foreach (@CURR) { push @WEIGHT, 0; }
+ while(<IN>) {
+ if (/^F(\d+) ([\-\.\de]+)/) {
+ $WEIGHT[$1] = $2;
+ $sum += abs($2);
+ }
}
+ $devbleu = "unknown";
+ foreach (@WEIGHT) { $_ /= $sum; }
+ $bestpoint = join(" ",@WEIGHT);
+ close IN;
+ }
+ else {
+ open(IN,"run$run.$mert_logfile") or die "Can't open run$run.$mert_logfile";
+ while (<IN>) {
+ if (/Best point:\s*([\s\d\.\-e]+?)\s*=> ([\-\d\.]+)/) {
+ $bestpoint = $1;
+ $devbleu = $2;
+ last;
+ }
+ }
+ close IN;
}
- close IN;
die "Failed to parse mert.log, missed Best point there."
if !defined $bestpoint || !defined $devbleu;
print "($run) BEST at $run: $bestpoint => $devbleu at ".`date`;
+ # update my cache of lambda values
my @newweights = split /\s+/, $bestpoint;
- # update my cache of lambda values
- store_new_lambda_values(\%used_triples, \@order_of_lambdas_from_decoder, \@newweights);
+ $featlist->{"values"} = \@newweights;
## additional stopping criterion: weights have not changed
my $shouldstop = 1;
@@ -774,7 +793,6 @@ while(1) {
print F $run."\n";
close F;
-
if ($shouldstop) {
print STDERR "None of the weights changed more than $minimum_required_change_in_weights. Stopping.\n";
last;
@@ -791,6 +809,7 @@ while(1) {
print "loading data from $firstrun to $run (prev_aggregate_nbl_size=$prev_aggregate_nbl_size)\n";
$prev_feature_file = undef;
$prev_score_file = undef;
+ $prev_init_file = undef;
for (my $i=$firstrun;$i<=$run;$i++){
if (defined $prev_feature_file){
$prev_feature_file = "${prev_feature_file},run${i}.${base_feature_file}";
@@ -804,9 +823,16 @@ while(1) {
else{
$prev_score_file = "run${i}.${base_score_file}";
}
+ if (defined $prev_init_file){
+ $prev_init_file = "${prev_init_file},run${i}.${weights_in_file}";
+ }
+ else{
+ $prev_init_file = "run${i}.${weights_in_file}";
+ }
}
print "loading data from $prev_feature_file\n" if defined($prev_feature_file);
print "loading data from $prev_score_file\n" if defined($prev_score_file);
+ print "loading data from $prev_init_file\n" if defined($prev_init_file);
}
print "Training finished at ".`date`;
@@ -815,7 +841,7 @@ if (defined $allsorted){ safesystem ("\\rm -f $allsorted") or die; };
safesystem("\\cp -f $weights_in_file run$run.$weights_in_file") or die;
safesystem("\\cp -f $mert_logfile run$run.$mert_logfile") or die;
-create_config($___CONFIG_BAK, "./moses.ini", \%used_triples, $run, $devbleu);
+create_config($___CONFIG_ORIG, "./moses.ini", $featlist, $run, $devbleu);
# just to be sure that we have the really last finished step marked
open F, "> finished_step.txt" or die "Can't mark finished step";
@@ -828,99 +854,147 @@ chdir($cwd);
} # end of local scope
-sub store_new_lambda_values {
- # given new lambda values (in given order), replace the 'val' element in our triples
- my $triples = shift;
- my $names = shift;
- my $values = shift;
-
- my %idx = ();
- foreach my $i (0..scalar(@$values)-1) {
- my $name = $names->[$i];
- die "Missed name for lambda $values->[$i] (in @$values; names: @$names)"
- if !defined $name;
- if (!defined $idx{$name}) {
- $idx{$name} = 0;
- } else {
- $idx{$name}++;
- }
- die "We did not optimize '$name', but moses returned it back to us"
- if !defined $triples->{$name};
- die "Moses gave us too many lambdas for '$name', we had ".scalar(@{$triples->{$name}})
- ." but we got at least ".$idx{$name}+1
- if !defined $triples->{$name}->[$idx{$name}];
-
- # set the corresponding field in triples
- # print STDERR "Storing $i-th score as $name: $idx{$name}: $values->[$i]\n";
- $triples->{$name}->[$idx{$name}]->[0] = $values->[$i];
- }
-}
-
-sub dump_triples {
- my $triples = shift;
-
- foreach my $name (keys %$triples) {
- foreach my $triple (@{$triples->{$name}}) {
- my ($val, $min, $max) = @$triple;
- print STDERR "Triples: $name\t$val\t$min\t$max ($triple)\n";
- }
- }
-}
-
-
sub run_decoder {
- my ($triples, $parameters, $run, $output_order_of_lambdas, $need_to_normalize) = @_;
+ my ($featlist, $run, $need_to_normalize) = @_;
my $filename_template = "run%d.best$___N_BEST_LIST_SIZE.out";
my $filename = sprintf($filename_template, $run);
- print "params = $parameters\n";
- # prepare the decoder config:
- my $decoder_config = "";
- my @vals = ();
- foreach my $name (keys %$triples) {
- $decoder_config .= "-$name ";
- foreach my $triple (@{$triples->{$name}}) {
- my ($val, $min, $max) = @$triple;
- $decoder_config .= "%.6f ";
- push @vals, $val;
- }
- }
+ # user-supplied parameters
+ print "params = $___DECODER_FLAGS\n";
+
+ # parameters to set all model weights (to override moses.ini)
+ my @vals = @{$featlist->{"values"}};
if ($need_to_normalize) {
print STDERR "Normalizing lambdas: @vals\n";
my $totlambda=0;
grep($totlambda+=abs($_),@vals);
grep($_/=$totlambda,@vals);
}
+ # moses now does not seem accept "-tm X -tm Y" but needs "-tm X Y"
+ my %model_weights;
+ for(my $i=0; $i<scalar(@{$featlist->{"names"}}); $i++) {
+ my $name = $featlist->{"names"}->[$i];
+ $model_weights{$name} = "-$name" if !defined $model_weights{$name};
+ $model_weights{$name} .= sprintf " %.6f", $vals[$i];
+ }
+ my $decoder_config = join(" ", values %model_weights);
print STDERR "DECODER_CFG = $decoder_config\n";
- print STDERR " values = @vals\n";
- $decoder_config = sprintf($decoder_config, @vals);
print "decoder_config = $decoder_config\n";
# run the decoder
- my $nBest_cmd = "-n-best-size $___N_BEST_LIST_SIZE";
+ my $nBest_cmd = "-n-best-size $___N_BEST_LIST_SIZE";
my $decoder_cmd;
- if (defined $___JOBS) {
- $decoder_cmd = "$moses_parallel_cmd $pass_old_sge -config $___CONFIG -inputtype $___INPUTTYPE -qsub-prefix mert$run -queue-parameters \"$queue_flags\" -decoder-parameters \"$parameters $decoder_config\" -n-best-list \"$filename $___N_BEST_LIST_SIZE\" -input-file $___DEV_F -jobs $___JOBS -decoder $___DECODER > run$run.out";
+ if (defined $___JOBS && $___JOBS > 0) {
+ $decoder_cmd = "$moses_parallel_cmd $pass_old_sge -config $___CONFIG -inputtype $___INPUTTYPE -qsub-prefix mert$run -queue-parameters \"$queue_flags\" -decoder-parameters \"$___DECODER_FLAGS $decoder_config\" -n-best-list \"$filename $___N_BEST_LIST_SIZE\" -input-file $___DEV_F -jobs $___JOBS -decoder $___DECODER > run$run.out";
} else {
- $decoder_cmd = "$___DECODER $parameters -config $___CONFIG -inputtype $___INPUTTYPE $decoder_config -n-best-list $filename $___N_BEST_LIST_SIZE -input-file $___DEV_F > run$run.out";
+ $decoder_cmd = "$___DECODER $___DECODER_FLAGS -config $___CONFIG -inputtype $___INPUTTYPE $decoder_config -n-best-list $filename $___N_BEST_LIST_SIZE -input-file $___DEV_F > run$run.out";
}
safesystem($decoder_cmd) or die "The decoder died. CONFIG WAS $decoder_config \n";
- if (0 == scalar @$output_order_of_lambdas) {
- # we have to peek at the nbestlist
- @$output_order_of_lambdas = get_order_of_scores_from_nbestlist($filename);
- }
- # we have checked the nbestlist already, we trust the order of output scores does not change
- return $filename;
+ sanity_check_order_of_lambdas($featlist, $filename);
+ return $filename;
}
+
+sub insert_ranges_to_featlist {
+ my $featlist = shift;
+ my $ranges = shift;
+
+ $ranges = [] if !defined $ranges;
+
+ # first collect the ranges from options
+ my $niceranges;
+ foreach my $range (@$ranges) {
+ my $name = undef;
+ foreach my $namedpair (split /,/, $range) {
+ if ($namedpair =~ /^(.*?):/) {
+ $name = $1;
+ $namedpair =~ s/^.*?://;
+ die "Unrecognized name '$name' in --range=$range"
+ if !defined $ABBR2FULL{$name};
+ }
+ my ($min, $max) = split /\.\./, $namedpair;
+ die "Bad min '$min' in --range=$range" if $min !~ /^-?[0-9.]+$/;
+ die "Bad max '$max' in --range=$range" if $min !~ /^-?[0-9.]+$/;
+ die "No name given in --range=$range" if !defined $name;
+ push @{$niceranges->{$name}}, [$min, $max];
+ }
+ }
+
+ # now populate featlist
+ my $seen = undef;
+ for(my $i=0; $i<scalar(@{$featlist->{"names"}}); $i++) {
+ my $name = $featlist->{"names"}->[$i];
+ $seen->{$name} ++;
+ my $min = 0.0;
+ my $max = 1.0;
+ if (defined $niceranges->{$name}) {
+ my $minmax = shift @{$niceranges->{$name}};
+ ($min, $max) = @$minmax if defined $minmax;
+ }
+ $featlist->{"mins"}->[$i] = $min;
+ $featlist->{"maxs"}->[$i] = $max;
+ }
+ return $featlist;
+}
+
+sub sanity_check_order_of_lambdas {
+ my $featlist = shift;
+ my $filename_or_stream = shift;
+
+ my @expected_lambdas = @{$featlist->{"names"}};
+ my @got = get_order_of_scores_from_nbestlist($filename_or_stream);
+ die "Mismatched lambdas. Decoder returned @got, we expected @expected_lambdas"
+ if "@got" ne "@expected_lambdas";
+}
+
+
+sub get_featlist_from_moses {
+ # run moses with the given config file and return the list of features and
+ # their initial values
+ my $configfn = shift;
+ my $featlistfn = "./features.list";
+ if (-e $featlistfn) {
+ print STDERR "Using cached features list: $featlistfn\n";
+ } else {
+ print STDERR "Asking moses for feature names and values from $___CONFIG\n";
+ my $cmd = "$___DECODER $___DECODER_FLAGS -config $configfn -inputtype $___INPUTTYPE -show-weights > $featlistfn";
+ safesystem($cmd) or die "Failed to run moses with the config $configfn";
+ }
+
+ # read feature list
+ my @names = ();
+ my @startvalues = ();
+ open(INI,$featlistfn) or die "Can't read $featlistfn";
+ my $nr = 0;
+ my @errs = ();
+ while (<INI>) {
+ $nr++;
+ chomp;
+ my ($longname, $feature, $value) = split / /;
+ push @errs, "$featlistfn:$nr:Bad initial value of $feature: $value\n"
+ if $value !~ /^[+-]?[0-9.e]+$/;
+ push @errs, "$featlistfn:$nr:Unknown feature '$feature', please add it to \@ABBR_FULL_MAP\n"
+ if !defined $ABBR2FULL{$feature};
+ push @names, $feature;
+ push @startvalues, $value;
+ }
+ close INI;
+ if (scalar @errs) {
+ print STDERR join("", @errs);
+ exit 1;
+ }
+ return {"names"=>\@names, "values"=>\@startvalues};
+}
+
+
sub get_order_of_scores_from_nbestlist {
# read the first line and interpret the ||| label: num num num label2: num ||| column in nbestlist
# return the score labels in order
my $fname_or_source = shift;
- print STDERR "Peeking at the beginning of nbestlist to get order of scores: $fname_or_source\n";
+ # print STDERR "Peeking at the beginning of nbestlist to get order of scores: $fname_or_source\n";
open IN, $fname_or_source or die "Failed to get order of scores from nbestlist '$fname_or_source'";
my $line = <IN>;
close IN;
@@ -950,7 +1024,7 @@ sub get_order_of_scores_from_nbestlist {
sub create_config {
my $infn = shift; # source config
my $outfn = shift; # where to save the config
- my $triples = shift; # the lambdas we should write
+ my $featlist = shift; # the lambdas we should write
my $iteration = shift; # just for verbosity
my $bleu_achieved = shift; # just for verbosity
@@ -975,17 +1049,21 @@ sub create_config {
}
}
+ # First delete all weights params from the input, we're overwriting them.
+ # Delete both short and long-named version.
+ for(my $i=0; $i<scalar(@{$featlist->{"names"}}); $i++) {
+ my $name = $featlist->{"names"}->[$i];
+ delete($P{$name});
+ delete($P{$ABBR2FULL{$name}});
+ }
+
# Convert weights to elements in P
- foreach my $abbr (keys %$triples) {
- # First delete all weights params from the input, in short or long-named version
- delete($P{$abbr});
- delete($P{$ABBR2FULL{$abbr}});
- # Then feed P with the current values
- foreach my $feature (@{$used_triples{$abbr}}) {
- my ($val, $min, $max) = @$feature;
- my $name = defined $ABBR2FULL{$abbr} ? $ABBR2FULL{$abbr} : $abbr;
- push @{$P{$name}}, $val;
- }
+ for(my $i=0; $i<scalar(@{$featlist->{"names"}}); $i++) {
+ my $name = $featlist->{"names"}->[$i];
+ my $val = $featlist->{"values"}->[$i];
+ $name = defined $ABBR2FULL{$name} ? $ABBR2FULL{$name} : $name;
+ # ensure long name
+ push @{$P{$name}}, $val;
}
# create new moses.ini decoder config file by cloning and overriding the original one
@@ -1093,177 +1171,4 @@ $PATH =~ s/\/nfsmnt//;
-sub scan_config {
- my $ini = shift;
- my $inishortname = $ini; $inishortname =~ s/^.*\///; # for error reporting
- # we get a pre-filled counts, because some lambdas are always needed (word penalty, for instance)
- # as we walk though the ini file, we record how many extra lambdas do we need
- # and finally, we report it
-
- # in which field (counting from zero) is the filename to check?
- my %where_is_filename = (
- "ttable-file" => 4,
- "generation-file" => 3,
- "lmodel-file" => 3,
- "distortion-file" => 3,
- "global-lexical-file" => 1,
- );
- # by default, each line of each section means one lambda, but some sections
- # explicitly state a custom number of lambdas
- my %where_is_lambda_count = (
- "ttable-file" => 3,
- "generation-file" => 2,
- "distortion-file" => 2,
- "link-param-count" => 0,
- );
-
- my %weight_section_short_names = (%FULL2ABBR,
- map { ($_, $_) } keys %ABBR2FULL);
- # maps both long and short names of weight sections to the short names
-
- my $config_weights;
- # to collect all weight values from moses.ini
- # $config_weights->{shortname} is a reference to array of features
-
- open INI, $ini or die "Can't read $ini";
- my $section = undef; # name of the section we are reading
- my $shortname = undef; # the corresponding short name
- my $nr = 0;
- my $error = 0;
- my %defined_files;
- my %defined_steps; # check the ini file for compatible mapping steps and actually defined files
- while (<INI>) {
- $nr++;
- chomp;
- next if /^\s*#/; # skip comments
- next if /^\s*$/; # skip blank lines
- if (/^\[([^\]]*)\]\s*$/) {
- $section = $1;
- $shortname = $TABLECONFIG2ABBR{$section};
- next;
- }
- if (defined $section && defined $weight_section_short_names{$section}) {
- # this is a weight, store it
- my $weightname = $weight_section_short_names{$section};
- $config_weights->{$weightname} = []
- if ! defined $config_weights->{$weightname};
- push @{$config_weights->{$weightname}}, $_;
- }
- if (defined $section && $section eq "mapping") {
- # keep track of mapping steps used
- $defined_steps{$1}++ if /^([TG])/ || /^\d+ ([TG])/;
- }
- if (defined $section
- && (defined $where_is_filename{$section}
- || defined $where_is_lambda_count{$section})) {
- # this ini section is relevant to lambdas
- my @flds = split / +/;
- my $filenamefield = $where_is_filename{$section};
- if (defined $filenamefield) {
- my $fn = $flds[$filenamefield];
- print STDERR "Checking the filename in $section: $fn\n"
- if $verbose;
- if (defined $fn && $fn !~ /^\s+$/) {
- # this is a filename! check it
- if ($fn !~ /^\//) {
- $error = 1;
- print STDERR "$inishortname:$nr:Filename not absolute: $fn\n";
- }
- if (! -s $fn && ! -s "$fn.gz" && ! -s "$fn.binphr.idx"
- && ! -s "$fn.binlexr.idx" ) {
- $error = 1;
- print STDERR "$inishortname:$nr:File does not exist or empty: $fn\n";
- }
- # remember the number of files used, to know how many lambdas do we need
- die "No short name was defined for section $section!"
- if ! defined $shortname;
- $defined_files{$shortname}++;
- }
- }
-
- my $lambdacountfield = $where_is_lambda_count{$section};
- # how many lambdas does this model need?
- # either specified explicitly, or the default, i.e. one
- my $needlambdas = defined $lambdacountfield
- ? $flds[$lambdacountfield] : 1;
-
- print STDERR "Config needs $needlambdas lambdas for $section (i.e. $shortname)\n" if $verbose;
- if (!defined $___LAMBDA # user provides all lambdas on his own
- && (!defined $additional_triples->{$shortname}
- || scalar(@{$additional_triples->{$shortname}}) < $needlambdas)
- && (!defined $additional_tripes_loop->{$shortname})
- ) {
- # Add triples with default values
- if (!defined $additional_triples->{$shortname}) {
- $additional_triples->{$shortname} = ();
- }
- while (scalar(@{$additional_triples->{$shortname}}) < $needlambdas) {
- push @{$additional_triples->{$shortname}}, [1,-1,1];
- }
-
- }
- # note: models may use less parameters than the maximum number
- # of triples, but it is actually bad, because then the ranges
- # may be meant for another parameter
- my @triplets = @{$additional_triples->{$shortname}};
- for(my $lambda=0;$lambda<$needlambdas;$lambda++) {
- my $triplet = $lambda;
- $triplet %= scalar(@triplets)
- if $additional_tripes_loop->{$shortname};
- my ($start, $min, $max)
- = @{$triplets[$triplet]};
- push @{$used_triples{$shortname}}, [$start, $min, $max];
- }
- }
- }
- die "$inishortname: File was empty!" if !$nr;
- close INI;
- for my $pair (qw/T=tm=translation G=g=generation/) {
- my ($tg, $shortname, $label) = split /=/, $pair;
- $defined_files{$shortname} = 0 if ! defined $defined_files{$shortname};
- $defined_steps{$tg} = 0 if ! defined $defined_steps{$tg};
-
- if ($defined_files{$shortname} != $defined_steps{$tg}) {
- print STDERR "$inishortname: You defined $defined_files{$shortname} files for $label but use $defined_steps{$tg} in [mapping]!\n";
- $error = 1;
- }
- }
-
- # The distance-based reordering model is never mentioned in moses.ini,
- # except there is one extra weight-d in the list. So if we spot this
- # one extra weight-d, we actually insert the triple for it.
- # Hierarchical moses has no distance-based reordering.
- push @{$used_triples{"d"}}, [1.0, 0.0, 2.0]
- if defined $config_weights->{"d"}
- && (!defined $used_triples{"d"}
- || scalar @{$config_weights->{"d"}}
- == scalar @{$used_triples{"d"}} +1);
-
- # check the weights provided in the ini file and plug them into the triples
- # if --starting-weights-from_ini
- foreach my $weightname (keys %used_triples) {
- if (!defined $config_weights->{$weightname}) {
- print STDERR "$inishortname:Model requires weights '$weightname' but none were found in the ini file.\n";
- $error = 1;
- next;
- }
- my $thesetriplets = $used_triples{$weightname};
- my $theseconfig_weights = $config_weights->{$weightname};
- if (scalar(@$thesetriplets) != scalar(@$theseconfig_weights)) {
- print STDERR "$inishortname:Mismatched number of weights for '$weightname'. Expected "
- .scalar(@$thesetriplets) .", got ".scalar(@$theseconfig_weights)."\n";
- $error = 1;
- next;
- }
- if ($starting_weights_from_ini) {
- # copy weights from moses.ini to the starting value of used_triplets
- for (my $i=0; $i < @$theseconfig_weights; $i++) {
- $thesetriplets->[$i]->[0] = $theseconfig_weights->[$i];
- }
- }
- }
-
- exit(1) if $error;
- return (\%defined_files);
-}
diff --git a/scripts/training/phrase-extract/Makefile b/scripts/training/phrase-extract/Makefile
index 789c2c9c5..ee0b71d60 100644
--- a/scripts/training/phrase-extract/Makefile
+++ b/scripts/training/phrase-extract/Makefile
@@ -1,5 +1,5 @@
-all: consolidate consolidate-direct extract extract-rules relax-parse \
- score statistics
+all: consolidate consolidate-direct consolidate-reverse extract extract-rules relax-parse \
+ score statistics extract-lex
clean:
rm -f *.o
@@ -13,17 +13,25 @@ extract: tables-core.o SentenceAlignment.o extract.o
extract-rules: tables-core.o SentenceAlignment.o SentenceAlignmentWithSyntax.o SyntaxTree.o XmlTree.o HoleCollection.o extract-rules.o
$(CXX) $^ -o extract-rules
+extract-lex: extract-lex.o
+ $(CXX) $^ -o extract-lex
+
score: tables-core.o AlignmentPhrase.o score.o PhraseAlignment.o InputFileStream.o
$(CXX) $^ -lz -o score
-consolidate: consolidate.o
- $(CXX) $^ -o consolidate
+consolidate: consolidate.o tables-core.o InputFileStream.o
+ $(CXX) $^ -lz -o consolidate
consolidate-direct: consolidate-direct.o InputFileStream.o
$(CXX) $^ -lz -o consolidate-direct
+consolidate-reverse: consolidate-reverse.o tables-core.o InputFileStream.o
+ $(CXX) $^ -lz -o consolidate-reverse
+
relax-parse: tables-core.o SyntaxTree.o XmlTree.o relax-parse.o
$(CXX) $^ -o relax-parse
statistics: tables-core.o AlignmentPhrase.o statistics.o
$(CXX) $^ -o statistics
+
+
diff --git a/scripts/training/phrase-extract/PhraseAlignment.cpp b/scripts/training/phrase-extract/PhraseAlignment.cpp
index d6f88503b..c6e6fb92c 100644
--- a/scripts/training/phrase-extract/PhraseAlignment.cpp
+++ b/scripts/training/phrase-extract/PhraseAlignment.cpp
@@ -125,4 +125,37 @@ bool PhraseAlignment::match( const PhraseAlignment& other )
return true;
}
+int PhraseAlignment::Compare(const PhraseAlignment &other) const
+{
+ if (this == &other) // comparing with itself
+ return 0;
+
+ if (GetTarget() != other.GetTarget())
+ return ( GetTarget() < other.GetTarget() ) ? -1 : +1;
+
+ if (GetSource() != other.GetSource())
+ return ( GetSource() < other.GetSource() ) ? -1 : +1;
+
+ if (!hierarchicalFlag)
+ return 0;
+
+ // loop over all words (note: 0 = left hand side of rule)
+ for(int i=0; i<phraseT.size()-1; i++) {
+ if (isNonTerminal( vcbT.getWord( phraseT[i] ) )) {
+ size_t thisAlign = *(alignedToT[i].begin());
+ size_t otherAlign = *(other.alignedToT[i].begin());
+
+ if (alignedToT[i].size() != 1 ||
+ other.alignedToT[i].size() != 1 ||
+ thisAlign != otherAlign)
+ {
+ int ret = (thisAlign < otherAlign) ? -1 : +1;
+ return ret;
+ }
+ }
+ }
+ return 0;
+
+}
+
diff --git a/scripts/training/phrase-extract/PhraseAlignment.h b/scripts/training/phrase-extract/PhraseAlignment.h
index 433d162c8..d3557e4a8 100644
--- a/scripts/training/phrase-extract/PhraseAlignment.h
+++ b/scripts/training/phrase-extract/PhraseAlignment.h
@@ -30,6 +30,12 @@ public:
bool equals( const PhraseAlignment& );
bool match( const PhraseAlignment& );
+ int Compare(const PhraseAlignment &compare) const;
+ inline bool operator<(const PhraseAlignment &compare) const
+ {
+ return Compare(compare) < 0;
+ }
+
const PHRASE &GetSource() const {
return phraseS;
}
diff --git a/scripts/training/phrase-extract/consolidate-direct.cpp b/scripts/training/phrase-extract/consolidate-direct.cpp
index e87b7caaf..be8a5f9b5 100644
--- a/scripts/training/phrase-extract/consolidate-direct.cpp
+++ b/scripts/training/phrase-extract/consolidate-direct.cpp
@@ -17,6 +17,7 @@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
***********************************************************************/
+#include <string.h>
#include <fstream>
#include <vector>
#include <string>
@@ -86,13 +87,22 @@ int main(int argc, char* argv[])
istream &fileDirectP = fileDirect;
char* &fileNameConsolidated = argv[2];
- ofstream fileConsolidated;
- fileConsolidated.open(fileNameConsolidated);
- if (fileConsolidated.fail()) {
- cerr << "ERROR: could not open output file " << fileNameConsolidated << endl;
- exit(1);
- }
-
+ ostream *fileConsolidated;
+
+ if (strcmp(fileNameConsolidated, "-") == 0) {
+ fileConsolidated = &cout;
+ }
+ else {
+ ofstream *outputFile = new ofstream();
+ outputFile->open(fileNameConsolidated);
+ if (outputFile->fail()) {
+ cerr << "ERROR: could not open file phrase table file "
+ << fileNameConsolidated << endl;
+ exit(1);
+ }
+ fileConsolidated = outputFile;
+ }
+
int i=0;
while(true) {
i++;
@@ -104,19 +114,25 @@ int main(int argc, char* argv[])
if (! getLine(fileDirectP, itemDirect ))
break;
- fileConsolidated << itemDirect[0] << " ||| " << itemDirect[1] << " ||| ";
+ (*fileConsolidated) << itemDirect[0] << " ||| " << itemDirect[1] << " ||| ";
// output alignment and probabilities
- fileConsolidated << itemDirect[2] // prob direct
+ (*fileConsolidated) << itemDirect[2] // prob direct
<< " 2.718" // phrase count feature
<< " ||| " << itemDirect[3]; // alignment
// counts
- fileConsolidated << "||| 0 " << itemDirect[4]; // indirect
- fileConsolidated << endl;
+ (*fileConsolidated) << "||| 0 " << itemDirect[4]; // indirect
+ (*fileConsolidated) << endl;
}
+ fileConsolidated->flush();
+ if (fileConsolidated != &cout) {
+ (dynamic_cast<ofstream*>(fileConsolidated))->close();
+ delete fileConsolidated;
+ }
+
cerr << "Finished" << endl;
}
diff --git a/scripts/training/phrase-extract/consolidate-direct.vcproj b/scripts/training/phrase-extract/consolidate-direct.vcproj
deleted file mode 100644
index 371a3d3eb..000000000
--- a/scripts/training/phrase-extract/consolidate-direct.vcproj
+++ /dev/null
@@ -1,207 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="consolidate-direct"
- ProjectGUID="{33775109-60CF-4C1C-A869-5450B3DD88B3}"
- RootNamespace="consolidatedirect"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="zlib.lib"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="zlib.lib"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\consolidate-direct.cpp"
- >
- </File>
- <File
- RelativePath=".\InputFileStream.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath=".\InputFileStream.h"
- >
- </File>
- <File
- RelativePath=".\SafeGetline.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/scripts/training/phrase-extract/consolidate-direct.vcxproj b/scripts/training/phrase-extract/consolidate-direct.vcxproj
new file mode 100644
index 000000000..2da413163
--- /dev/null
+++ b/scripts/training/phrase-extract/consolidate-direct.vcxproj
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{33775109-60CF-4C1C-A869-5450B3DD88B3}</ProjectGuid>
+ <RootNamespace>consolidatedirect</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="consolidate-direct.cpp" />
+ <ClCompile Include="InputFileStream.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="InputFileStream.h" />
+ <ClInclude Include="SafeGetline.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/scripts/training/phrase-extract/consolidate-reverse.cpp b/scripts/training/phrase-extract/consolidate-reverse.cpp
new file mode 100644
index 000000000..c86d870c8
--- /dev/null
+++ b/scripts/training/phrase-extract/consolidate-reverse.cpp
@@ -0,0 +1,245 @@
+/***********************************************************************
+ Moses - factored phrase-based language decoder
+ Copyright (C) 2009 University of Edinburgh
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ ***********************************************************************/
+
+#include <cstdio>
+#include <iostream>
+#include <fstream>
+#include <vector>
+#include <string>
+#include <sstream>
+#include <cstdlib>
+#include <cstring>
+
+#include "tables-core.h"
+#include "SafeGetline.h"
+#include "InputFileStream.h"
+
+#define LINE_MAX_LENGTH 10000
+
+using namespace std;
+
+bool hierarchicalFlag = false;
+bool onlyDirectFlag = false;
+bool phraseCountFlag = true;
+bool logProbFlag = false;
+char line[LINE_MAX_LENGTH];
+
+void processFiles( char*, char*, char* );
+bool getLine( istream &fileP, vector< string > &item );
+string reverseAlignment(const string &alignments);
+vector< string > splitLine();
+
+inline void Tokenize(std::vector<std::string> &output
+ , const std::string& str
+ , const std::string& delimiters = " \t")
+{
+ // Skip delimiters at beginning.
+ std::string::size_type lastPos = str.find_first_not_of(delimiters, 0);
+ // Find first "non-delimiter".
+ std::string::size_type pos = str.find_first_of(delimiters, lastPos);
+
+ while (std::string::npos != pos || std::string::npos != lastPos) {
+ // Found a token, add it to the vector.
+ output.push_back(str.substr(lastPos, pos - lastPos));
+ // Skip delimiters. Note the "not_of"
+ lastPos = str.find_first_not_of(delimiters, pos);
+ // Find next "non-delimiter"
+ pos = str.find_first_of(delimiters, lastPos);
+ }
+}
+
+int main(int argc, char* argv[])
+{
+ cerr << "Consolidate v2.0 written by Philipp Koehn\n"
+ << "consolidating direct and indirect rule tables\n";
+
+ if (argc < 4) {
+ cerr << "syntax: consolidate phrase-table.direct phrase-table.indirect phrase-table.consolidated [--Hierarchical] [--OnlyDirect]\n";
+ exit(1);
+ }
+ char* &fileNameDirect = argv[1];
+ char* &fileNameIndirect = argv[2];
+ char* &fileNameConsolidated = argv[3];
+
+ for(int i=4; i<argc; i++) {
+ if (strcmp(argv[i],"--Hierarchical") == 0) {
+ hierarchicalFlag = true;
+ cerr << "processing hierarchical rules\n";
+ } else if (strcmp(argv[i],"--OnlyDirect") == 0) {
+ onlyDirectFlag = true;
+ cerr << "only including direct translation scores p(e|f)\n";
+ } else if (strcmp(argv[i],"--NoPhraseCount") == 0) {
+ phraseCountFlag = false;
+ cerr << "not including the phrase count feature\n";
+ } else if (strcmp(argv[i],"--LogProb") == 0) {
+ logProbFlag = true;
+ cerr << "using log-probabilities\n";
+ } else {
+ cerr << "ERROR: unknown option " << argv[i] << endl;
+ exit(1);
+ }
+ }
+
+ processFiles( fileNameDirect, fileNameIndirect, fileNameConsolidated );
+}
+
+void processFiles( char* fileNameDirect, char* fileNameIndirect, char* fileNameConsolidated )
+{
+ // open input files
+ Moses::InputFileStream fileDirect(fileNameDirect);
+ Moses::InputFileStream fileIndirect(fileNameIndirect);
+
+ if (fileDirect.fail()) {
+ cerr << "ERROR: could not open phrase table file " << fileNameDirect << endl;
+ exit(1);
+ }
+ istream &fileDirectP = fileDirect;
+
+ if (fileIndirect.fail()) {
+ cerr << "ERROR: could not open phrase table file " << fileNameIndirect << endl;
+ exit(1);
+ }
+ istream &fileIndirectP = fileIndirect;
+
+ // open output file: consolidated phrase table
+ ofstream fileConsolidated;
+ fileConsolidated.open(fileNameConsolidated);
+ if (fileConsolidated.fail()) {
+ cerr << "ERROR: could not open output file " << fileNameConsolidated << endl;
+ exit(1);
+ }
+
+ // loop through all extracted phrase translations
+ int i=0;
+ while(true) {
+ i++;
+ if (i%100000 == 0) cerr << "." << flush;
+
+ vector< string > itemDirect, itemIndirect;
+ if (! getLine(fileIndirectP,itemIndirect) ||
+ ! getLine(fileDirectP, itemDirect ))
+ break;
+
+ // direct: target source alignment probabilities
+ // indirect: source target probabilities
+
+ // consistency checks
+ if (itemDirect[0].compare( itemIndirect[0] ) != 0) {
+ cerr << "ERROR: target phrase does not match in line " << i << ": '"
+ << itemDirect[0] << "' != '" << itemIndirect[0] << "'" << endl;
+ exit(1);
+ }
+
+ if (itemDirect[1].compare( itemIndirect[1] ) != 0) {
+ cerr << "ERROR: source phrase does not match in line " << i << ": '"
+ << itemDirect[1] << "' != '" << itemIndirect[1] << "'" << endl;
+ exit(1);
+ }
+
+ // output hierarchical phrase pair (with separated labels)
+ fileConsolidated << itemDirect[1] << " ||| " << itemDirect[0];
+
+ // probs
+ fileConsolidated << " ||| ";
+ if (!onlyDirectFlag) {
+ fileConsolidated << itemDirect[2]; // prob indirect
+ }
+ fileConsolidated << " " << itemIndirect[2]; // prob direct
+ if (phraseCountFlag) {
+ fileConsolidated << " " << (logProbFlag ? 1 : 2.718); // phrase count feature
+ }
+
+ // alignment
+ fileConsolidated << " ||| " << reverseAlignment(itemDirect[3]);
+
+ // counts, for debugging
+ vector<string> directCounts = tokenize(itemDirect[4].c_str());
+ vector<string> indirectCounts = tokenize(itemIndirect[4].c_str());
+ fileConsolidated << "||| " << directCounts[0] << " " << indirectCounts[0];
+ // output rule count if present in either file
+ if (indirectCounts.size() > 1) {
+ fileConsolidated << " " << indirectCounts[1];
+ } else if (directCounts.size() > 1) {
+ fileConsolidated << " " << directCounts[1];
+ }
+
+ fileConsolidated << endl;
+ }
+ fileDirect.Close();
+ fileIndirect.Close();
+ fileConsolidated.close();
+}
+
+bool getLine( istream &fileP, vector< string > &item )
+{
+ if (fileP.eof())
+ return false;
+
+ SAFE_GETLINE((fileP), line, LINE_MAX_LENGTH, '\n', __FILE__);
+ if (fileP.eof())
+ return false;
+
+ item = splitLine();
+
+ return true;
+}
+
+vector< string > splitLine()
+{
+ vector< string > item;
+ bool betweenWords = true;
+ int start=0;
+ int i=0;
+ for(; line[i] != '\0'; i++) {
+ if (line[i] == ' ' &&
+ line[i+1] == '|' &&
+ line[i+2] == '|' &&
+ line[i+3] == '|' &&
+ line[i+4] == ' ') {
+ if (start > i) start = i; // empty item
+ item.push_back( string( line+start, i-start ) );
+ start = i+5;
+ i += 3;
+ }
+ }
+ item.push_back( string( line+start, i-start ) );
+
+ return item;
+}
+
+string reverseAlignment(const string &alignments)
+{
+ stringstream ret("");
+
+ vector<string> alignToks = tokenize(alignments.c_str());
+
+ for (size_t i = 0; i < alignToks.size(); ++i)
+ {
+ string &alignPair = alignToks[i];
+ vector<string> alignPoints;
+ Tokenize(alignPoints, alignPair, "-");
+ assert(alignPoints.size() == 2);
+
+ ret << alignPoints[1] << "-" << alignPoints[0] << " ";
+ }
+
+ return ret.str();
+}
+
+
diff --git a/scripts/training/phrase-extract/consolidate.cpp b/scripts/training/phrase-extract/consolidate.cpp
index 8677ac59f..53a141221 100644
--- a/scripts/training/phrase-extract/consolidate.cpp
+++ b/scripts/training/phrase-extract/consolidate.cpp
@@ -25,7 +25,9 @@
#include <cstdlib>
#include <cstring>
+#include "tables-core.h"
#include "SafeGetline.h"
+#include "InputFileStream.h"
#define LINE_MAX_LENGTH 10000
@@ -79,16 +81,15 @@ int main(int argc, char* argv[])
void processFiles( char* fileNameDirect, char* fileNameIndirect, char* fileNameConsolidated )
{
// open input files
- ifstream fileDirect,fileIndirect;
+ Moses::InputFileStream fileDirect(fileNameDirect);
+ Moses::InputFileStream fileIndirect(fileNameIndirect);
- fileDirect.open(fileNameDirect);
if (fileDirect.fail()) {
cerr << "ERROR: could not open phrase table file " << fileNameDirect << endl;
exit(1);
}
istream &fileDirectP = fileDirect;
- fileIndirect.open(fileNameIndirect);
if (fileIndirect.fail()) {
cerr << "ERROR: could not open phrase table file " << fileNameIndirect << endl;
exit(1);
@@ -118,23 +119,6 @@ void processFiles( char* fileNameDirect, char* fileNameIndirect, char* fileNameC
// indirect: source target probabilities
// consistency checks
- /*
- size_t expectedSize = (hierarchicalFlag ? 5 : 4);
- if (itemDirect.size() != expectedSize)
- {
- cerr << "ERROR: expected " << expectedSize << " items in file "
- << fileNameDirect << ", line " << i << endl;
- exit(1);
- }
-
- if (itemIndirect.size() != 4)
- {
- cerr << "ERROR: expected 4 items in file "
- << fileNameIndirect << ", line " << i << endl;
- exit(1);
- }
- */
-
if (itemDirect[0].compare( itemIndirect[0] ) != 0) {
cerr << "ERROR: target phrase does not match in line " << i << ": '"
<< itemDirect[0] << "' != '" << itemIndirect[0] << "'" << endl;
@@ -164,13 +148,20 @@ void processFiles( char* fileNameDirect, char* fileNameIndirect, char* fileNameC
fileConsolidated << " ||| " << itemDirect[3];
// counts, for debugging
- fileConsolidated << "||| " << itemIndirect[4] << " " // indirect
- << itemDirect[4]; // direct
+ vector<string> directCounts = tokenize(itemDirect[4].c_str());
+ vector<string> indirectCounts = tokenize(itemIndirect[4].c_str());
+ fileConsolidated << "||| " << indirectCounts[0] << " " << directCounts[0];
+ // output rule count if present in either file
+ if (directCounts.size() > 1) {
+ fileConsolidated << " " << directCounts[1];
+ } else if (indirectCounts.size() > 1) {
+ fileConsolidated << " " << indirectCounts[1];
+ }
fileConsolidated << endl;
}
- fileDirect.close();
- fileIndirect.close();
+ fileDirect.Close();
+ fileIndirect.Close();
fileConsolidated.close();
}
diff --git a/scripts/training/phrase-extract/consolidate.vcproj b/scripts/training/phrase-extract/consolidate.vcproj
deleted file mode 100644
index eea09b390..000000000
--- a/scripts/training/phrase-extract/consolidate.vcproj
+++ /dev/null
@@ -1,197 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="consolidate"
- ProjectGUID="{45410EFE-65C0-4078-82E4-D636258F9225}"
- RootNamespace="consolidate"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\consolidate.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath=".\SafeGetline.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/scripts/training/phrase-extract/consolidate.vcxproj b/scripts/training/phrase-extract/consolidate.vcxproj
new file mode 100644
index 000000000..3e76cadc7
--- /dev/null
+++ b/scripts/training/phrase-extract/consolidate.vcxproj
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{45410EFE-65C0-4078-82E4-D636258F9225}</ProjectGuid>
+ <RootNamespace>consolidate</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ <AdditionalDependencies>zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ <AdditionalDependencies>zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="consolidate.cpp" />
+ <ClCompile Include="InputFileStream.cpp" />
+ <ClCompile Include="tables-core.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="InputFileStream.h" />
+ <ClInclude Include="SafeGetline.h" />
+ <ClInclude Include="tables-core.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/scripts/training/phrase-extract/extract-lex.cpp b/scripts/training/phrase-extract/extract-lex.cpp
new file mode 100644
index 000000000..f1e456d81
--- /dev/null
+++ b/scripts/training/phrase-extract/extract-lex.cpp
@@ -0,0 +1,209 @@
+#include <iostream>
+#include <fstream>
+#include <cassert>
+#include <vector>
+#include "extract-lex.h"
+
+using namespace std;
+
+float COUNT_INCR = 1;
+
+void fix(std::ostream& stream)
+{
+ stream.setf(std::ios::fixed);
+ stream.precision(7);
+}
+
+int main(int argc, char* argv[])
+{
+ cerr << "Starting...\n";
+
+ assert(argc == 6);
+ char* &filePathTarget = argv[1];
+ char* &filePathSource = argv[2];
+ char* &filePathAlign = argv[3];
+ char* &filePathLexS2T = argv[4];
+ char* &filePathLexT2S = argv[5];
+
+ ifstream streamTarget;
+ ifstream streamSource;
+ ifstream streamAlign;
+ streamTarget.open(filePathTarget);
+ streamSource.open(filePathSource);
+ streamAlign.open(filePathAlign);
+
+ ofstream streamLexS2T;
+ ofstream streamLexT2S;
+ streamLexS2T.open(filePathLexS2T);
+ streamLexT2S.open(filePathLexT2S);
+
+ fix(streamLexS2T);
+ fix(streamLexT2S);
+
+ ExtractLex extractSingleton;
+
+ size_t lineCount = 0;
+ string lineTarget, lineSource, lineAlign;
+ while (getline(streamTarget, lineTarget))
+ {
+ if (lineCount % 10000 == 0)
+ cerr << lineCount << " ";
+
+ istream &isSource = getline(streamSource, lineSource);
+ assert(isSource);
+ istream &isAlign = getline(streamAlign, lineAlign);
+ assert(isAlign);
+
+ vector<string> toksTarget, toksSource, toksAlign;
+ Tokenize(toksTarget, lineTarget);
+ Tokenize(toksSource, lineSource);
+ Tokenize(toksAlign, lineAlign);
+
+ /*
+ cerr << endl
+ << toksTarget.size() << " " << lineTarget << endl
+ << toksSource.size() << " " << lineSource << endl
+ << toksAlign.size() << " " << lineAlign << endl;
+ */
+
+ extractSingleton.Process(toksTarget, toksSource, toksAlign);
+
+ ++lineCount;
+ }
+
+ extractSingleton.Output(streamLexS2T, streamLexT2S);
+
+ streamLexS2T.close();
+ streamLexT2S.close();
+
+ cerr << "\nFinished\n";
+}
+
+const std::string *Vocab::GetOrAdd(const std::string &word)
+{
+ const string *ret = &(*m_coll.insert(word).first);
+ return ret;
+}
+
+void ExtractLex::Process(vector<string> &toksTarget, vector<string> &toksSource, vector<string> &toksAlign)
+{
+ std::vector<bool> m_sourceAligned(toksSource.size(), false)
+ , m_targetAligned(toksTarget.size(), false);
+
+ vector<string>::const_iterator iterAlign;
+ for (iterAlign = toksAlign.begin(); iterAlign != toksAlign.end(); ++iterAlign)
+ {
+ const string &alignTok = *iterAlign;
+
+ vector<size_t> alignPos;
+ Tokenize(alignPos, alignTok, "-");
+ assert(alignPos.size() == 2);
+ assert(alignPos[0] < toksSource.size());
+ assert(alignPos[1] < toksTarget.size());
+
+ m_sourceAligned[ alignPos[0] ] = true;
+ m_targetAligned[ alignPos[1] ] = true;
+
+ const string &tmpSource = toksSource[ alignPos[0] ];
+ const string &tmpTarget = toksTarget[ alignPos[1] ];
+
+ const string *source = m_vocab.GetOrAdd(tmpSource);
+ const string *target = m_vocab.GetOrAdd(tmpTarget);
+
+ Process(target, source);
+
+ }
+
+ ProcessUnaligned(toksTarget, toksSource, m_sourceAligned, m_targetAligned);
+}
+
+void ExtractLex::Process(const std::string *target, const std::string *source)
+{
+ WordCount &wcS2T = m_collS2T[source];
+ WordCount &wcT2S = m_collT2S[target];
+
+ wcS2T.AddCount(COUNT_INCR);
+ wcT2S.AddCount(COUNT_INCR);
+
+ Process(wcS2T, target);
+ Process(wcT2S, source);
+}
+
+void ExtractLex::Process(WordCount &wcIn, const std::string *out)
+{
+ std::map<const std::string*, WordCount> &collOut = wcIn.GetColl();
+ WordCount &wcOut = collOut[out];
+ wcOut.AddCount(COUNT_INCR);
+}
+
+void ExtractLex::ProcessUnaligned(vector<string> &toksTarget, vector<string> &toksSource
+ , const std::vector<bool> &m_sourceAligned, const std::vector<bool> &m_targetAligned)
+{
+ const string *nullWord = m_vocab.GetOrAdd("NULL");
+
+ for (size_t pos = 0; pos < m_sourceAligned.size(); ++pos)
+ {
+ bool isAlignedCurr = m_sourceAligned[pos];
+ if (!isAlignedCurr)
+ {
+ const string &tmpWord = toksSource[pos];
+ const string *sourceWord = m_vocab.GetOrAdd(tmpWord);
+
+ Process(nullWord, sourceWord);
+ }
+ }
+
+ for (size_t pos = 0; pos < m_targetAligned.size(); ++pos)
+ {
+ bool isAlignedCurr = m_targetAligned[pos];
+ if (!isAlignedCurr)
+ {
+ const string &tmpWord = toksTarget[pos];
+ const string *targetWord = m_vocab.GetOrAdd(tmpWord);
+
+ Process(targetWord, nullWord);
+ }
+ }
+
+}
+
+void ExtractLex::Output(std::ofstream &streamLexS2T, std::ofstream &streamLexT2S)
+{
+ Output(m_collS2T, streamLexS2T);
+ Output(m_collT2S, streamLexT2S);
+}
+
+void ExtractLex::Output(const std::map<const std::string*, WordCount> &coll, std::ofstream &outStream)
+{
+ std::map<const std::string*, WordCount>::const_iterator iterOuter;
+ for (iterOuter = coll.begin(); iterOuter != coll.end(); ++iterOuter)
+ {
+ const string &inStr = *iterOuter->first;
+ const WordCount &inWC = iterOuter->second;
+
+ const std::map<const std::string*, WordCount> &outColl = inWC.GetColl();
+
+ std::map<const std::string*, WordCount>::const_iterator iterInner;
+ for (iterInner = outColl.begin(); iterInner != outColl.end(); ++iterInner)
+ {
+ const string &outStr = *iterInner->first;
+ const WordCount &outWC = iterInner->second;
+
+ float prob = outWC.GetCount() / inWC.GetCount();
+ outStream << outStr << " " << inStr << " " << prob << endl;
+ }
+ }
+}
+
+std::ostream& operator<<(std::ostream &out, const WordCount &obj)
+{
+ out << "(" << obj.GetCount() << ")";
+ return out;
+}
+
+void WordCount::AddCount(float incr)
+{
+ m_count += incr;
+}
+
+
diff --git a/scripts/training/phrase-extract/extract-lex.h b/scripts/training/phrase-extract/extract-lex.h
new file mode 100644
index 000000000..cd705a034
--- /dev/null
+++ b/scripts/training/phrase-extract/extract-lex.h
@@ -0,0 +1,117 @@
+#pragma once
+
+#include <map>
+#include <set>
+#include <sstream>
+#include <fstream>
+#include <iostream>
+
+
+//! convert string to variable of type T. Used to reading floats, int etc from files
+template<typename T>
+inline T Scan(const std::string &input)
+{
+ std::stringstream stream(input);
+ T ret;
+ stream >> ret;
+ return ret;
+}
+
+
+//! speeded up version of above
+template<typename T>
+inline void Scan(std::vector<T> &output, const std::vector< std::string > &input)
+{
+ output.resize(input.size());
+ for (size_t i = 0 ; i < input.size() ; i++)
+ {
+ output[i] = Scan<T>( input[i] );
+ }
+}
+
+
+inline void Tokenize(std::vector<std::string> &output
+ , const std::string& str
+ , const std::string& delimiters = " \t")
+{
+ // Skip delimiters at beginning.
+ std::string::size_type lastPos = str.find_first_not_of(delimiters, 0);
+ // Find first "non-delimiter".
+ std::string::size_type pos = str.find_first_of(delimiters, lastPos);
+
+ while (std::string::npos != pos || std::string::npos != lastPos) {
+ // Found a token, add it to the vector.
+ output.push_back(str.substr(lastPos, pos - lastPos));
+ // Skip delimiters. Note the "not_of"
+ lastPos = str.find_first_not_of(delimiters, pos);
+ // Find next "non-delimiter"
+ pos = str.find_first_of(delimiters, lastPos);
+ }
+}
+
+// speeded up version of above
+template<typename T>
+inline void Tokenize( std::vector<T> &output
+ , const std::string &input
+ , const std::string& delimiters = " \t")
+{
+ std::vector<std::string> stringVector;
+ Tokenize(stringVector, input, delimiters);
+ return Scan<T>(output, stringVector );
+}
+
+class WordCount
+{
+ friend std::ostream& operator<<(std::ostream&, const WordCount&);
+public:
+ float m_count;
+
+ std::map<const std::string*, WordCount> m_coll;
+
+ WordCount()
+ :m_count(0)
+ {}
+
+ //WordCount(const WordCount &copy);
+
+ WordCount(float count)
+ :m_count(count)
+ {}
+
+ void AddCount(float incr);
+
+ std::map<const std::string*, WordCount> &GetColl()
+ { return m_coll; }
+ const std::map<const std::string*, WordCount> &GetColl() const
+ { return m_coll; }
+
+ const float GetCount() const
+ { return m_count; }
+
+};
+
+class Vocab
+{
+ std::set<std::string> m_coll;
+public:
+ const std::string *GetOrAdd(const std::string &word);
+};
+
+class ExtractLex
+{
+ Vocab m_vocab;
+ std::map<const std::string*, WordCount> m_collS2T, m_collT2S;
+
+ void Process(const std::string *target, const std::string *source);
+ void Process(WordCount &wcIn, const std::string *out);
+ void ProcessUnaligned(std::vector<std::string> &toksTarget, std::vector<std::string> &toksSource
+ , const std::vector<bool> &m_sourceAligned, const std::vector<bool> &m_targetAligned);
+
+ void Output(const std::map<const std::string*, WordCount> &coll, std::ofstream &outStream);
+
+public:
+ void Process(std::vector<std::string> &toksTarget, std::vector<std::string> &toksSource, std::vector<std::string> &toksAlign);
+ void Output(std::ofstream &streamLexS2T, std::ofstream &streamLexT2S);
+
+};
+
diff --git a/scripts/training/phrase-extract/extract-lex.vcxproj b/scripts/training/phrase-extract/extract-lex.vcxproj
new file mode 100644
index 000000000..44615ac53
--- /dev/null
+++ b/scripts/training/phrase-extract/extract-lex.vcxproj
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="extract-lex.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="extract-lex.h" />
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{808BF985-CA18-4E55-8AAC-70E04DC25117}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>extractlex</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/scripts/training/phrase-extract/extract-rules.cpp b/scripts/training/phrase-extract/extract-rules.cpp
index e9c1dc5fe..15367f900 100644
--- a/scripts/training/phrase-extract/extract-rules.cpp
+++ b/scripts/training/phrase-extract/extract-rules.cpp
@@ -32,7 +32,7 @@
#ifdef WIN32
// Include Visual Leak Detector
-#include <vld.h>
+//#include <vld.h>
#endif
#include "ExtractedRule.h"
@@ -69,7 +69,6 @@ void addHieroRule( SentenceAlignmentWithSyntax &sentence, int startT, int endT,
inline string IntToString( int i )
{
- string s;
stringstream out;
out << i;
return out.str();
@@ -463,7 +462,7 @@ string printTargetHieroPhrase(SentenceAlignmentWithSyntax &sentence
sentence.targetTree.GetNodes(currPos,hole.GetEnd(1))[ labelI ]->GetLabel() : "X";
hole.SetLabel(targetLabel, 1);
- out += " [" + sourceLabel + "][" + targetLabel + "]";
+ out += "[" + sourceLabel + "][" + targetLabel + "] ";
currPos = hole.GetEnd(1);
hole.SetPos(outPos, 1);
@@ -471,14 +470,14 @@ string printTargetHieroPhrase(SentenceAlignmentWithSyntax &sentence
holeCount++;
} else {
indexT[currPos] = outPos;
- out += " " + sentence.target[currPos];
+ out += sentence.target[currPos] + " ";
}
outPos++;
}
assert(iterHoleList == holeColl.GetHoles().end());
- return out.substr(1);
+ return out.erase(out.size()-1);
}
string printSourceHieroPhrase( SentenceAlignmentWithSyntax &sentence
@@ -505,21 +504,21 @@ string printSourceHieroPhrase( SentenceAlignmentWithSyntax &sentence
assert(targetLabel != "");
const string &sourceLabel = hole.GetLabel(0);
- out += " [" + sourceLabel + "][" + targetLabel + "]";
+ out += "[" + sourceLabel + "][" + targetLabel + "] ";
currPos = hole.GetEnd(0);
hole.SetPos(outPos, 0);
++iterHoleList;
++holeCount;
} else {
- out += " " + sentence.source[currPos];
+ out += sentence.source[currPos] + " ";
}
outPos++;
}
assert(iterHoleList == holeColl.GetSortedSourceHoles().end());
- return out.substr(1);
+ return out.erase(out.size()-1);
}
void printHieroAlignment(SentenceAlignmentWithSyntax &sentence
@@ -528,12 +527,15 @@ void printHieroAlignment(SentenceAlignmentWithSyntax &sentence
{
// print alignment of words
for(int ti=startT; ti<=endT; ti++) {
- if (indexT.find(ti) != indexT.end()) { // does word still exist?
+ WordIndex::const_iterator p = indexT.find(ti);
+ if (p != indexT.end()) { // does word still exist?
for(int i=0; i<sentence.alignedToT[ti].size(); i++) {
int si = sentence.alignedToT[ti][i];
- rule.alignment += " " + IntToString(indexS.find(si)->second) + "-" + IntToString(indexT.find(ti)->second);
+ std::string sourceSymbolIndex = IntToString(indexS.find(si)->second);
+ std::string targetSymbolIndex = IntToString(p->second);
+ rule.alignment += sourceSymbolIndex + "-" + targetSymbolIndex + " ";
if (! options.onlyDirectFlag)
- rule.alignmentInv += " " + IntToString(indexT.find(ti)->second) + "-" + IntToString(indexS.find(si)->second);
+ rule.alignmentInv += targetSymbolIndex + "-" + sourceSymbolIndex + " ";
}
}
}
@@ -541,14 +543,17 @@ void printHieroAlignment(SentenceAlignmentWithSyntax &sentence
// print alignment of non terminals
HoleList::const_iterator iterHole;
for (iterHole = holeColl.GetHoles().begin(); iterHole != holeColl.GetHoles().end(); ++iterHole) {
- rule.alignment += " " + IntToString(iterHole->GetPos(0)) + "-" + IntToString(iterHole->GetPos(1));
+ std::string sourceSymbolIndex = IntToString(iterHole->GetPos(0));
+ std::string targetSymbolIndex = IntToString(iterHole->GetPos(1));
+ rule.alignment += sourceSymbolIndex + "-" + targetSymbolIndex + " ";
if (!options.onlyDirectFlag)
- rule.alignmentInv += " " + IntToString(iterHole->GetPos(1)) + "-" + IntToString(iterHole->GetPos(0));
+ rule.alignmentInv += targetSymbolIndex + "-" + sourceSymbolIndex + " ";
}
- rule.alignment = rule.alignment.substr(1);
- if (!options.onlyDirectFlag)
- rule.alignmentInv = rule.alignmentInv.substr(1);
+ rule.alignment.erase(rule.alignment.size()-1);
+ if (!options.onlyDirectFlag) {
+ rule.alignmentInv.erase(rule.alignmentInv.size()-1);
+ }
}
void printHieroPhrase( SentenceAlignmentWithSyntax &sentence, int startT, int endT, int startS, int endS
@@ -783,29 +788,30 @@ void addRule( SentenceAlignmentWithSyntax &sentence, int startT, int endT, int s
// source
rule.source = "";
for(int si=startS; si<=endS; si++)
- rule.source += " " + sentence.source[si];
- rule.source += " [" + sourceLabel + "]";
- rule.source = rule.source.substr(1);
+ rule.source += sentence.source[si] + " ";
+ rule.source += "[" + sourceLabel + "]";
// target
rule.target = "";
for(int ti=startT; ti<=endT; ti++)
- rule.target += " " + sentence.target[ti];
- rule.target += " [" + targetLabel + "]";
- rule.target = rule.target.substr(1);
+ rule.target += sentence.target[ti] + " ";
+ rule.target += "[" + targetLabel + "]";
// alignment
for(int ti=startT; ti<=endT; ti++) {
for(int i=0; i<sentence.alignedToT[ti].size(); i++) {
int si = sentence.alignedToT[ti][i];
- rule.alignment += " " + IntToString(si-startS) + "-" + IntToString(ti-startT);
+ std::string sourceSymbolIndex = IntToString(si-startS);
+ std::string targetSymbolIndex = IntToString(ti-startT);
+ rule.alignment += sourceSymbolIndex + "-" + targetSymbolIndex + " ";
if (!options.onlyDirectFlag)
- rule.alignmentInv += " " + IntToString(ti-startT) + "-" + IntToString(si-startS);
+ rule.alignmentInv += targetSymbolIndex + "-" + sourceSymbolIndex + " ";
}
}
- rule.alignment = rule.alignment.substr(1);
+
+ rule.alignment.erase(rule.alignment.size()-1);
if (!options.onlyDirectFlag)
- rule.alignmentInv = rule.alignmentInv.substr(1);
+ rule.alignmentInv.erase(rule.alignmentInv.size()-1);
addRuleToCollection( rule );
}
diff --git a/scripts/training/phrase-extract/extract-rules.vcproj b/scripts/training/phrase-extract/extract-rules.vcproj
deleted file mode 100644
index 6f2dc3bdc..000000000
--- a/scripts/training/phrase-extract/extract-rules.vcproj
+++ /dev/null
@@ -1,245 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="extract-rules"
- ProjectGUID="{3C5CFAEC-6830-4491-9008-1C9E8C381C50}"
- RootNamespace="extractrules"
- Keyword="Win32Proj"
- TargetFrameworkVersion="196613"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- EnableIntrinsicFunctions="true"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\extract-rules.cpp"
- >
- </File>
- <File
- RelativePath=".\HoleCollection.cpp"
- >
- </File>
- <File
- RelativePath=".\SentenceAlignment.cpp"
- >
- </File>
- <File
- RelativePath=".\SentenceAlignmentWithSyntax.cpp"
- >
- </File>
- <File
- RelativePath=".\SyntaxTree.cpp"
- >
- </File>
- <File
- RelativePath=".\tables-core.cpp"
- >
- </File>
- <File
- RelativePath=".\XmlTree.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath=".\Hole.h"
- >
- </File>
- <File
- RelativePath=".\HoleCollection.h"
- >
- </File>
- <File
- RelativePath=".\SentenceAlignment.h"
- >
- </File>
- <File
- RelativePath=".\SentenceAlignmentWithSyntax.h"
- >
- </File>
- <File
- RelativePath=".\SyntaxTree.h"
- >
- </File>
- <File
- RelativePath=".\tables-core.h"
- >
- </File>
- <File
- RelativePath=".\XmlTree.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/scripts/training/phrase-extract/extract-rules.vcxproj b/scripts/training/phrase-extract/extract-rules.vcxproj
new file mode 100644
index 000000000..4170eeba5
--- /dev/null
+++ b/scripts/training/phrase-extract/extract-rules.vcxproj
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{3C5CFAEC-6830-4491-9008-1C9E8C381C50}</ProjectGuid>
+ <RootNamespace>extractrules</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="extract-rules.cpp" />
+ <ClCompile Include="HoleCollection.cpp" />
+ <ClCompile Include="SentenceAlignment.cpp" />
+ <ClCompile Include="SentenceAlignmentWithSyntax.cpp" />
+ <ClCompile Include="SyntaxTree.cpp" />
+ <ClCompile Include="tables-core.cpp" />
+ <ClCompile Include="XmlTree.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="Hole.h" />
+ <ClInclude Include="HoleCollection.h" />
+ <ClInclude Include="SentenceAlignment.h" />
+ <ClInclude Include="SentenceAlignmentWithSyntax.h" />
+ <ClInclude Include="SyntaxTree.h" />
+ <ClInclude Include="tables-core.h" />
+ <ClInclude Include="XmlTree.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/scripts/training/phrase-extract/extract.vcproj b/scripts/training/phrase-extract/extract.vcproj
deleted file mode 100644
index f593a57a5..000000000
--- a/scripts/training/phrase-extract/extract.vcproj
+++ /dev/null
@@ -1,212 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="extract"
- ProjectGUID="{2475F8E8-A5C9-4785-8B09-5F4E120FC518}"
- RootNamespace="extract"
- Keyword="Win32Proj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="0"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="0"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\extract.cpp"
- >
- </File>
- <File
- RelativePath=".\SentenceAlignment.cpp"
- >
- </File>
- <File
- RelativePath=".\tables-core.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath=".\SentenceAlignment.h"
- >
- </File>
- <File
- RelativePath=".\tables-core.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/scripts/training/phrase-extract/extract.vcxproj b/scripts/training/phrase-extract/extract.vcxproj
new file mode 100644
index 000000000..f5a266b51
--- /dev/null
+++ b/scripts/training/phrase-extract/extract.vcxproj
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{2475F8E8-A5C9-4785-8B09-5F4E120FC518}</ProjectGuid>
+ <RootNamespace>extract</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="extract.cpp" />
+ <ClCompile Include="SentenceAlignment.cpp" />
+ <ClCompile Include="tables-core.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="SentenceAlignment.h" />
+ <ClInclude Include="tables-core.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/scripts/training/phrase-extract/extract.xcodeproj/project.pbxproj b/scripts/training/phrase-extract/extract.xcodeproj/project.pbxproj
index f9af8e506..addb596c5 100644
--- a/scripts/training/phrase-extract/extract.xcodeproj/project.pbxproj
+++ b/scripts/training/phrase-extract/extract.xcodeproj/project.pbxproj
@@ -37,6 +37,7 @@
1CFE962611762A20006FF13B /* consolidate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CFE962411762A20006FF13B /* consolidate.cpp */; };
1CFE962711762A2A006FF13B /* consolidate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CFE962411762A20006FF13B /* consolidate.cpp */; };
1CFE962911762A3A006FF13B /* consolidate-direct.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CFE962311762A20006FF13B /* consolidate-direct.cpp */; };
+ 1E3EF2A013DBEAF300C1D54A /* extract-lex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E3EF29E13DBEAF300C1D54A /* extract-lex.cpp */; };
1EB1C8321200D5C00079FCBB /* PhraseAlignment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EB1C8311200D5C00079FCBB /* PhraseAlignment.cpp */; };
1EB8A212129C024C00041956 /* InputFileStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EB8A211129C024C00041956 /* InputFileStream.cpp */; };
1EB8A261129C04C700041956 /* InputFileStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EB8A211129C024C00041956 /* InputFileStream.cpp */; };
@@ -84,6 +85,8 @@
1CE8CE4C0FC6EAA200924FEA /* tables-core.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "tables-core.h"; sourceTree = "<group>"; };
1CFE962311762A20006FF13B /* consolidate-direct.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "consolidate-direct.cpp"; sourceTree = "<group>"; };
1CFE962411762A20006FF13B /* consolidate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = consolidate.cpp; sourceTree = "<group>"; };
+ 1E3EF29E13DBEAF300C1D54A /* extract-lex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "extract-lex.cpp"; sourceTree = "<group>"; };
+ 1E3EF29F13DBEAF300C1D54A /* extract-lex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "extract-lex.h"; sourceTree = "<group>"; };
1E7C2CF611F1146200213451 /* extract */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = extract; sourceTree = BUILT_PRODUCTS_DIR; };
1E7C2CF811F1146200213451 /* score */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = score; sourceTree = BUILT_PRODUCTS_DIR; };
1E7C2CFA11F1146300213451 /* consolidate */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = consolidate; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -157,6 +160,8 @@
08FB7795FE84155DC02AAC07 /* Source */ = {
isa = PBXGroup;
children = (
+ 1E3EF29E13DBEAF300C1D54A /* extract-lex.cpp */,
+ 1E3EF29F13DBEAF300C1D54A /* extract-lex.h */,
1C6A83031111F5A300059E7F /* AlignmentPhrase.cpp */,
1C6A83041111F5A300059E7F /* AlignmentPhrase.h */,
1CFE962311762A20006FF13B /* consolidate-direct.cpp */,
@@ -419,6 +424,7 @@
1CE8CE4D0FC6EAA200924FEA /* tables-core.cpp in Sources */,
1C05B9EC1174CC24003585B2 /* SentenceAlignment.cpp in Sources */,
1EB8A212129C024C00041956 /* InputFileStream.cpp in Sources */,
+ 1E3EF2A013DBEAF300C1D54A /* extract-lex.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/scripts/training/phrase-extract/phrase-extract.sln b/scripts/training/phrase-extract/phrase-extract.sln
index dbf9023fa..800c26192 100644
--- a/scripts/training/phrase-extract/phrase-extract.sln
+++ b/scripts/training/phrase-extract/phrase-extract.sln
@@ -1,17 +1,19 @@

-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual C++ Express 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "score", "score.vcproj", "{34AC84C7-62A1-4BBE-BCA9-4E95B2341039}"
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual C++ Express 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "score", "score.vcxproj", "{34AC84C7-62A1-4BBE-BCA9-4E95B2341039}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "extract", "extract.vcproj", "{2475F8E8-A5C9-4785-8B09-5F4E120FC518}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "extract", "extract.vcxproj", "{2475F8E8-A5C9-4785-8B09-5F4E120FC518}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "symal", "..\symal\symal.vcproj", "{6716FB26-8298-47A3-A915-958AF0AC80F8}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "symal", "..\symal\symal.vcxproj", "{6716FB26-8298-47A3-A915-958AF0AC80F8}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "extract-rules", "extract-rules.vcproj", "{3C5CFAEC-6830-4491-9008-1C9E8C381C50}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "extract-rules", "extract-rules.vcxproj", "{3C5CFAEC-6830-4491-9008-1C9E8C381C50}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "consolidate", "consolidate.vcproj", "{45410EFE-65C0-4078-82E4-D636258F9225}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "consolidate", "consolidate.vcxproj", "{45410EFE-65C0-4078-82E4-D636258F9225}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "consolidate-direct", "consolidate-direct.vcproj", "{33775109-60CF-4C1C-A869-5450B3DD88B3}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "consolidate-direct", "consolidate-direct.vcxproj", "{33775109-60CF-4C1C-A869-5450B3DD88B3}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "extract-lex", "extract-lex.vcxproj", "{808BF985-CA18-4E55-8AAC-70E04DC25117}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -43,6 +45,10 @@ Global
{33775109-60CF-4C1C-A869-5450B3DD88B3}.Debug|Win32.Build.0 = Debug|Win32
{33775109-60CF-4C1C-A869-5450B3DD88B3}.Release|Win32.ActiveCfg = Release|Win32
{33775109-60CF-4C1C-A869-5450B3DD88B3}.Release|Win32.Build.0 = Release|Win32
+ {808BF985-CA18-4E55-8AAC-70E04DC25117}.Debug|Win32.ActiveCfg = Debug|Win32
+ {808BF985-CA18-4E55-8AAC-70E04DC25117}.Debug|Win32.Build.0 = Debug|Win32
+ {808BF985-CA18-4E55-8AAC-70E04DC25117}.Release|Win32.ActiveCfg = Release|Win32
+ {808BF985-CA18-4E55-8AAC-70E04DC25117}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/scripts/training/phrase-extract/score.cpp b/scripts/training/phrase-extract/score.cpp
index 08ae9890f..8a09c519e 100644
--- a/scripts/training/phrase-extract/score.cpp
+++ b/scripts/training/phrase-extract/score.cpp
@@ -57,13 +57,11 @@ public:
vector<string> tokenize( const char [] );
void computeCountOfCounts( char* fileNameExtract, int maxLines );
-void processPhrasePairs( vector< PhraseAlignment > & );
-PhraseAlignment* findBestAlignment( vector< PhraseAlignment* > & );
-void outputPhrasePair( vector< PhraseAlignment * > &, float );
+void processPhrasePairs( vector< PhraseAlignment > & , ostream &phraseTableFile);
+PhraseAlignment* findBestAlignment(const PhraseAlignmentCollection & );
+void outputPhrasePair(const PhraseAlignmentCollection &, float, ostream &phraseTableFile );
double computeLexicalTranslation( const PHRASE &, const PHRASE &, PhraseAlignment * );
-ofstream phraseTableFile;
-
LexicalTable lexTable;
bool inverseFlag = false;
bool hierarchicalFlag = false;
@@ -76,6 +74,7 @@ bool lexFlag = true;
int countOfCounts[GT_MAX+1];
float discountFactor[GT_MAX+1];
int maxLinesGTDiscount = -1;
+bool phrasePairCountFlag = false;
int main(int argc, char* argv[])
{
@@ -83,7 +82,7 @@ int main(int argc, char* argv[])
<< "scoring methods for extracted rules\n";
if (argc < 4) {
- cerr << "syntax: score extract lex phrase-table [--Inverse] [--Hierarchical] [--LogProb] [--NegLogProb] [--NoLex] [--GoodTuring] [--WordAlignment file]\n";
+ cerr << "syntax: score extract lex phrase-table [--Inverse] [--Hierarchical] [--LogProb] [--NegLogProb] [--NoLex] [--GoodTuring] [--WordAlignment] [--MaxLinesGTDiscount num] [--PhrasePairCount]\n";
exit(1);
}
char* fileNameExtract = argv[1];
@@ -117,6 +116,9 @@ int main(int argc, char* argv[])
++i;
maxLinesGTDiscount = atoi(argv[i]);
cerr << "maxLinesGTDiscount=" << maxLinesGTDiscount << endl;
+ } else if (strcmp(argv[i],"--PhrasePairCount") == 0) {
+ phrasePairCountFlag = true;
+ cerr << "outputting phrase pair counts" << endl;
} else {
cerr << "ERROR: unknown option " << argv[i] << endl;
exit(1);
@@ -141,13 +143,22 @@ int main(int argc, char* argv[])
istream &extractFileP = extractFile;
// output file: phrase translation table
- phraseTableFile.open(fileNamePhraseTable);
- if (phraseTableFile.fail()) {
- cerr << "ERROR: could not open file phrase table file "
- << fileNamePhraseTable << endl;
- exit(1);
- }
-
+ ostream *phraseTableFile;
+
+ if (strcmp(fileNamePhraseTable, "-") == 0) {
+ phraseTableFile = &cout;
+ }
+ else {
+ ofstream *outputFile = new ofstream();
+ outputFile->open(fileNamePhraseTable);
+ if (outputFile->fail()) {
+ cerr << "ERROR: could not open file phrase table file "
+ << fileNamePhraseTable << endl;
+ exit(1);
+ }
+ phraseTableFile = outputFile;
+ }
+
// loop through all extracted phrase translations
float lastCount = 0.0f;
vector< PhraseAlignment > phrasePairsWithSameF;
@@ -157,7 +168,11 @@ int main(int argc, char* argv[])
PhraseAlignment *lastPhrasePair = NULL;
while(true) {
if (extractFileP.eof()) break;
- if (++i % 100000 == 0) cerr << "." << flush;
+ if (++i % 100000 == 0)
+ {
+ cerr << i << " " << flush;
+ }
+
SAFE_GETLINE((extractFileP), line, LINE_MAX_LENGTH, '\n', __FILE__);
if (extractFileP.eof()) break;
@@ -182,7 +197,8 @@ int main(int argc, char* argv[])
// if new source phrase, process last batch
if (lastPhrasePair != NULL &&
lastPhrasePair->GetSource() != phrasePair.GetSource()) {
- processPhrasePairs( phrasePairsWithSameF );
+
+ processPhrasePairs( phrasePairsWithSameF, *phraseTableFile );
phrasePairsWithSameF.clear();
lastPhrasePair = NULL;
}
@@ -191,8 +207,13 @@ int main(int argc, char* argv[])
phrasePairsWithSameF.push_back( phrasePair );
lastPhrasePair = &phrasePairsWithSameF.back();
}
- processPhrasePairs( phrasePairsWithSameF );
- phraseTableFile.close();
+ processPhrasePairs( phrasePairsWithSameF, *phraseTableFile );
+
+ phraseTableFile->flush();
+ if (phraseTableFile != &cout) {
+ (dynamic_cast<ofstream*>(phraseTableFile))->close();
+ delete phraseTableFile;
+ }
}
void computeCountOfCounts( char* fileNameExtract, int maxLines )
@@ -269,45 +290,50 @@ void computeCountOfCounts( char* fileNameExtract, int maxLines )
}
}
-void processPhrasePairs( vector< PhraseAlignment > &phrasePair )
+void processPhrasePairs( vector< PhraseAlignment > &phrasePair, ostream &phraseTableFile )
{
if (phrasePair.size() == 0) return;
// group phrase pairs based on alignments that matter
// (i.e. that re-arrange non-terminals)
- vector< vector< PhraseAlignment * > > phrasePairGroup;
+ PhrasePairGroup phrasePairGroup;
float totalSource = 0;
+ //cerr << "phrasePair.size() = " << phrasePair.size() << endl;
+
// loop through phrase pairs
for(size_t i=0; i<phrasePair.size(); i++) {
// add to total count
+ PhraseAlignment &currPhrasePair = phrasePair[i];
+
totalSource += phrasePair[i].count;
- bool matched = false;
// check for matches
- for(size_t g=0; g<phrasePairGroup.size(); g++) {
- vector< PhraseAlignment* > &group = phrasePairGroup[g];
- // matched? place into same group
- if ( group[0]->match( phrasePair[i] )) {
- group.push_back( &phrasePair[i] );
- matched = true;
- }
- }
- // not matched? create new group
- if (! matched) {
- vector< PhraseAlignment* > newGroup;
- newGroup.push_back( &phrasePair[i] );
- phrasePairGroup.push_back( newGroup );
+ //cerr << "phrasePairGroup.size() = " << phrasePairGroup.size() << endl;
+
+ PhraseAlignmentCollection phraseAlignColl;
+ phraseAlignColl.push_back(&currPhrasePair);
+ pair<PhrasePairGroup::iterator, bool> retInsert;
+ retInsert = phrasePairGroup.insert(phraseAlignColl);
+ if (!retInsert.second)
+ { // already exist. Add to that collection instead
+ PhraseAlignmentCollection &existingColl = const_cast<PhraseAlignmentCollection&>(*retInsert.first);
+ existingColl.push_back(&currPhrasePair);
}
+
}
- for(size_t g=0; g<phrasePairGroup.size(); g++) {
- vector< PhraseAlignment* > &group = phrasePairGroup[g];
- outputPhrasePair( group, totalSource );
+ const PhrasePairGroup::SortedColl &sortedColl = phrasePairGroup.GetSortedColl();
+ PhrasePairGroup::SortedColl::const_iterator iter;
+
+ for(iter = sortedColl.begin(); iter != sortedColl.end(); ++iter)
+ {
+ const PhraseAlignmentCollection &group = **iter;
+ outputPhrasePair( group, totalSource, phraseTableFile );
}
}
-PhraseAlignment* findBestAlignment( vector< PhraseAlignment* > &phrasePair )
+PhraseAlignment* findBestAlignment(const PhraseAlignmentCollection &phrasePair )
{
float bestAlignmentCount = -1;
PhraseAlignment* bestAlignment;
@@ -322,7 +348,7 @@ PhraseAlignment* findBestAlignment( vector< PhraseAlignment* > &phrasePair )
return bestAlignment;
}
-void outputPhrasePair( vector< PhraseAlignment* > &phrasePair, float totalCount )
+void outputPhrasePair(const PhraseAlignmentCollection &phrasePair, float totalCount, ostream &phraseTableFile )
{
if (phrasePair.size() == 0) return;
@@ -333,6 +359,7 @@ void outputPhrasePair( vector< PhraseAlignment* > &phrasePair, float totalCount
for(size_t i=0; i<phrasePair.size(); i++) {
count += phrasePair[i]->count;
}
+ const float originalCount = count;
const PHRASE &phraseS = phrasePair[0]->GetSource();
const PHRASE &phraseT = phrasePair[0]->GetTarget();
@@ -406,6 +433,9 @@ void outputPhrasePair( vector< PhraseAlignment* > &phrasePair, float totalCount
}
phraseTableFile << " ||| " << totalCount;
+ if (phrasePairCountFlag) {
+ phraseTableFile << " " << originalCount;
+ }
phraseTableFile << endl;
}
@@ -468,3 +498,18 @@ void LexicalTable::load( char *fileName )
cerr << endl;
}
+
+std::pair<PhrasePairGroup::Coll::iterator,bool> PhrasePairGroup::insert ( const PhraseAlignmentCollection& obj )
+{
+ std::pair<iterator,bool> ret = m_coll.insert(obj);
+
+ if (ret.second)
+ { // obj inserted. Also add to sorted vector
+ const PhraseAlignmentCollection &insertedObj = *ret.first;
+ m_sortedColl.push_back(&insertedObj);
+ }
+
+ return ret;
+}
+
+
diff --git a/scripts/training/phrase-extract/score.h b/scripts/training/phrase-extract/score.h
index 8760656ae..ea50d8cb7 100644
--- a/scripts/training/phrase-extract/score.h
+++ b/scripts/training/phrase-extract/score.h
@@ -8,11 +8,60 @@
*
*/
#include <string>
+#include <vector>
+class PhraseAlignment;
+typedef std::vector<PhraseAlignment*> PhraseAlignmentCollection;
+//typedef std::vector<PhraseAlignmentCollection> PhrasePairGroup;
+
+class PhraseAlignmentCollectionOrderer
+{
+public:
+ bool operator()(const PhraseAlignmentCollection &collA, const PhraseAlignmentCollection &collB) const
+ {
+ assert(collA.size() > 0);
+ assert(collB.size() > 0);
+
+ const PhraseAlignment &objA = *collA[0];
+ const PhraseAlignment &objB = *collB[0];
+ bool ret = objA < objB;
+
+ return ret;
+ }
+};
+
+
+//typedef std::set<PhraseAlignmentCollection, PhraseAlignmentCollectionOrderer> PhrasePairGroup;
+
+class PhrasePairGroup
+{
+private:
+ typedef std::set<PhraseAlignmentCollection, PhraseAlignmentCollectionOrderer> Coll;
+ Coll m_coll;
+
+
+public:
+ typedef Coll::iterator iterator;
+ typedef Coll::const_iterator const_iterator;
+ typedef std::vector<const PhraseAlignmentCollection *> SortedColl;
+
+ std::pair<Coll::iterator,bool> insert ( const PhraseAlignmentCollection& obj );
+
+ const SortedColl &GetSortedColl() const
+ { return m_sortedColl; }
+
+private:
+ SortedColl m_sortedColl;
+
+};
+
+// other functions *********************************************
inline bool isNonTerminal( std::string &word )
{
return (word.length()>=3 &&
word.substr(0,1).compare("[") == 0 &&
word.substr(word.length()-1,1).compare("]") == 0);
}
+
+
diff --git a/scripts/training/phrase-extract/score.vcproj b/scripts/training/phrase-extract/score.vcproj
deleted file mode 100644
index a746e7f7e..000000000
--- a/scripts/training/phrase-extract/score.vcproj
+++ /dev/null
@@ -1,230 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="score"
- ProjectGUID="{34AC84C7-62A1-4BBE-BCA9-4E95B2341039}"
- RootNamespace="score"
- Keyword="Win32Proj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="zlib.lib"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="1"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="0"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="1"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="zlib.lib"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="0"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\AlignmentPhrase.cpp"
- >
- </File>
- <File
- RelativePath=".\InputFileStream.cpp"
- >
- </File>
- <File
- RelativePath=".\PhraseAlignment.cpp"
- >
- </File>
- <File
- RelativePath=".\score.cpp"
- >
- </File>
- <File
- RelativePath=".\tables-core.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath=".\AlignmentPhrase.h"
- >
- </File>
- <File
- RelativePath=".\InputFileStream.h"
- >
- </File>
- <File
- RelativePath=".\PhraseAlignment.h"
- >
- </File>
- <File
- RelativePath=".\tables-core.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/scripts/training/phrase-extract/score.vcxproj b/scripts/training/phrase-extract/score.vcxproj
new file mode 100644
index 000000000..d4e5b2eb7
--- /dev/null
+++ b/scripts/training/phrase-extract/score.vcxproj
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{34AC84C7-62A1-4BBE-BCA9-4E95B2341039}</ProjectGuid>
+ <RootNamespace>score</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="AlignmentPhrase.cpp" />
+ <ClCompile Include="InputFileStream.cpp" />
+ <ClCompile Include="PhraseAlignment.cpp" />
+ <ClCompile Include="score.cpp" />
+ <ClCompile Include="tables-core.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="AlignmentPhrase.h" />
+ <ClInclude Include="InputFileStream.h" />
+ <ClInclude Include="PhraseAlignment.h" />
+ <ClInclude Include="tables-core.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/scripts/training/train-model.perl b/scripts/training/train-model.perl
index 748fabb40..d754aa885 100755
--- a/scripts/training/train-model.perl
+++ b/scripts/training/train-model.perl
@@ -28,12 +28,13 @@ my($_ROOT_DIR, $_CORPUS_DIR, $_GIZA_E2F, $_GIZA_F2E, $_MODEL_DIR, $_TEMP_DIR, $_
$_TRANSLATION_FACTORS, $_REORDERING_FACTORS, $_GENERATION_FACTORS,
$_DECODING_GRAPH_BACKOFF,
$_DECODING_STEPS, $_PARALLEL, $_FACTOR_DELIMITER, @_PHRASE_TABLE,
- @_REORDERING_TABLE, @_GENERATION_TABLE, @_GENERATION_TYPE, $_DONT_ZIP, $_MGIZA, $_MGIZA_CPUS, $_HMM_ALIGN, $_CONFIG,
+ @_REORDERING_TABLE, @_GENERATION_TABLE, @_GENERATION_TYPE, $_GENERATION_CORPUS,
+ $_DONT_ZIP, $_MGIZA, $_MGIZA_CPUS, $_HMM_ALIGN, $_CONFIG,
$_HIERARCHICAL,$_XML,$_SOURCE_SYNTAX,$_TARGET_SYNTAX,$_GLUE_GRAMMAR,$_GLUE_GRAMMAR_FILE,$_UNKNOWN_WORD_LABEL_FILE,$_EXTRACT_OPTIONS,$_SCORE_OPTIONS,
$_PHRASE_WORD_ALIGNMENT,$_FORCE_FACTORED_FILENAMES,
$_MEMSCORE, $_FINAL_ALIGNMENT_MODEL,
$_CONTINUE,$_MAX_LEXICAL_REORDERING,$_DO_STEPS,
- $_DICTIONARY);
+ $_DICTIONARY, $_EPPEX);
my $debug = 0; # debug this script, do not delete any files in debug mode
@@ -87,6 +88,7 @@ $_HELP = 1
'scripts-root-dir=s' => \$SCRIPTS_ROOTDIR,
'factor-delimiter=s' => \$_FACTOR_DELIMITER,
'phrase-translation-table=s' => \@_PHRASE_TABLE,
+ 'generation-corpus=s' => \$_GENERATION_CORPUS,
'generation-table=s' => \@_GENERATION_TABLE,
'reordering-table=s' => \@_REORDERING_TABLE,
'generation-type=s' => \@_GENERATION_TYPE,
@@ -107,6 +109,7 @@ $_HELP = 1
'memscore:s' => \$_MEMSCORE,
'force-factored-filenames' => \$_FORCE_FACTORED_FILENAMES,
'dictionary=s' => \$_DICTIONARY,
+ 'eppex:s' => \$_EPPEX,
);
if ($_HELP) {
@@ -193,6 +196,7 @@ my $PHRASE_EXTRACT = "$SCRIPTS_ROOTDIR/training/phrase-extract/extract";
my $RULE_EXTRACT = "$SCRIPTS_ROOTDIR/training/phrase-extract/extract-rules";
my $LEXICAL_REO_SCORER = "$SCRIPTS_ROOTDIR/training/lexical-reordering/score";
my $MEMSCORE = "$SCRIPTS_ROOTDIR/training/memscore/memscore";
+my $EPPEX = "$SCRIPTS_ROOTDIR/training/eppex/eppex";
my $SYMAL = "$SCRIPTS_ROOTDIR/training/symal/symal";
my $GIZA2BAL = "$SCRIPTS_ROOTDIR/training/symal/giza2bal.pl";
my $PHRASE_SCORE = "$SCRIPTS_ROOTDIR/training/phrase-extract/score";
@@ -1130,11 +1134,11 @@ sub get_lexical {
my $alignment_id = 0;
while(my $e = <E>) {
if (($alignment_id++ % 1000) == 0) { print STDERR "!"; }
- chomp($e);
+ chomp($e); fix_spaces(\$e);
my @ENGLISH = split(/ /,$e);
- my $f = <F>; chomp($f);
+ my $f = <F>; chomp($f); fix_spaces(\$f);
my @FOREIGN = split(/ /,$f);
- my $a = <A>; chomp($a);
+ my $a = <A>; chomp($a); fix_spaces(\$a);
my (%FOREIGN_ALIGNED,%ENGLISH_ALIGNED);
foreach (split(/ /,$a)) {
@@ -1300,11 +1304,17 @@ sub extract_phrase {
}
else
{
+ if ( $_EPPEX ) {
+ # eppex sets max_phrase_length itself (as the maximum phrase length for which any Lossy Counter is defined)
+ $cmd = "$EPPEX $alignment_file_e $alignment_file_f $alignment_file_a $extract_file $_EPPEX";
+ }
+ else {
my $max_length = &get_max_phrase_length($table_number);
print "MAX $max_length $reordering_flag $table_number\n";
$max_length = &get_max_phrase_length(-1) if $reordering_flag;
$cmd = "$PHRASE_EXTRACT $alignment_file_e $alignment_file_f $alignment_file_a $extract_file $max_length";
+ }
if ($reordering_flag) {
$cmd .= " orientation";
$cmd .= get_extract_reordering_flags();
@@ -1362,9 +1372,9 @@ sub score_phrase {
sub score_phrase_phrase_extract {
my ($ttable_file,$lexical_file,$extract_file) = @_;
- my $ONLY_DIRECT = ($_SCORE_OPTIONS =~ /OnlyDirect/);
- my $PHRASE_COUNT = ($_SCORE_OPTIONS !~ /NoPhraseCount/);
- my $CORE_SCORE_OPTIONS = $_SCORE_OPTIONS;
+ my $ONLY_DIRECT = (defined($_SCORE_OPTIONS) && $_SCORE_OPTIONS =~ /OnlyDirect/);
+ my $PHRASE_COUNT = (!defined($_SCORE_OPTIONS) || $_SCORE_OPTIONS !~ /NoPhraseCount/);
+ my $CORE_SCORE_OPTIONS = defined($_SCORE_OPTIONS) ? $_SCORE_OPTIONS : "";
$CORE_SCORE_OPTIONS =~ s/\-+OnlyDirect//i;
$CORE_SCORE_OPTIONS =~ s/\-+NoPhraseCount//i;
my $substep = 1;
@@ -1528,13 +1538,15 @@ sub get_generation_factored {
if (defined $___GENERATION_FACTORS) {
my @SPECIFIED_TABLE = @_GENERATION_TABLE;
my @TYPE = @_GENERATION_TYPE;
+ my $corpus = $___CORPUS.".".$___E.$___CORPUS_COMPRESSION;
+ $corpus = $_GENERATION_CORPUS if defined($_GENERATION_CORPUS);
foreach my $factor (split(/\+/,$___GENERATION_FACTORS)) {
my ($factor_e_source,$factor_e) = split(/\-/,$factor);
my $file = "$___MODEL_DIR/generation.$factor";
$file = shift @SPECIFIED_TABLE if scalar(@SPECIFIED_TABLE);
my $type = "double";
$type = shift @TYPE if scalar @TYPE;
- &get_generation($file,$type,$factor,$factor_e_source,$factor_e);
+ &get_generation($file,$type,$factor,$factor_e_source,$factor_e,$corpus);
}
}
else {
@@ -1543,7 +1555,7 @@ sub get_generation_factored {
}
sub get_generation {
- my ($file,$type,$factor,$factor_e_source,$factor_e) = @_;
+ my ($file,$type,$factor,$factor_e_source,$factor_e,$corpus) = @_;
print STDERR "(8) [$factor] generate generation table @ ".`date`;
$file = "$___MODEL_DIR/generation.$factor" unless $file;
my (%WORD_TRANSLATION,%TOTAL_FOREIGN,%TOTAL_ENGLISH);
@@ -1558,7 +1570,7 @@ sub get_generation {
}
my (%GENERATION,%GENERATION_TOTAL_SOURCE,%GENERATION_TOTAL_TARGET);
- *E = open_or_zcat($___CORPUS.".".$___E.$___CORPUS_COMPRESSION);
+ *E = open_or_zcat($corpus);
while(<E>) {
chomp;
foreach (split) {
@@ -1677,9 +1689,9 @@ sub create_ini {
$file = shift @SPECIFIED_TABLE if scalar(@SPECIFIED_TABLE);
my $phrase_table_impl = ($_HIERARCHICAL ? 6 : 0);
my $basic_weight_count = 4; # both directions, lex and phrase
- $basic_weight_count /= 2 if $_SCORE_OPTIONS =~ /OnlyDirect/;
- $basic_weight_count /= 2 if $_SCORE_OPTIONS =~ /NoLex/;
- $basic_weight_count++ unless $_SCORE_OPTIONS =~ /NoPhraseCount/; # phrase count feature
+ $basic_weight_count /= 2 if defined($_SCORE_OPTIONS) && $_SCORE_OPTIONS =~ /OnlyDirect/;
+ $basic_weight_count /= 2 if defined($_SCORE_OPTIONS) && $_SCORE_OPTIONS =~ /NoLex/;
+ $basic_weight_count++ unless defined($_SCORE_OPTIONS) && $_SCORE_OPTIONS =~ /NoPhraseCount/; # phrase count feature
print INI "$phrase_table_impl $ff $basic_weight_count $file\n";
}
if ($_GLUE_GRAMMAR) {
@@ -1699,7 +1711,7 @@ sub create_ini {
my @SPECIFIED_TABLE = @_GENERATION_TABLE;
foreach my $f (split(/\+/,$___GENERATION_FACTORS)) {
my $weights_per_generation_model = 2;
- $weights_per_generation_model = 1 if (shift @TYPE) eq 'single';
+ $weights_per_generation_model = 1 if scalar(@TYPE) && (shift @TYPE) eq 'single';
$cnt++;
my $ff = $f;
$ff =~ s/\-/ /;
@@ -1772,9 +1784,9 @@ sub create_ini {
print INI "\n\n# translation model weights\n[weight-t]\n";
foreach my $f (split(/\+/,$___TRANSLATION_FACTORS)) {
my $basic_weight_count = 4; # both directions, lex and phrase
- $basic_weight_count /= 2 if $_SCORE_OPTIONS =~ /OnlyDirect/;
- $basic_weight_count /= 2 if $_SCORE_OPTIONS =~ /NoLex/;
- $basic_weight_count++ unless $_SCORE_OPTIONS =~ /NoPhraseCount/; # phrase count feature
+ $basic_weight_count /= 2 if defined($_SCORE_OPTIONS) && $_SCORE_OPTIONS =~ /OnlyDirect/;
+ $basic_weight_count /= 2 if defined($_SCORE_OPTIONS) && $_SCORE_OPTIONS =~ /NoLex/;
+ $basic_weight_count++ unless defined($_SCORE_OPTIONS) && $_SCORE_OPTIONS =~ /NoPhraseCount/; # phrase count feature
for(1..$basic_weight_count) {
printf INI "%.2f\n", 1/$basic_weight_count;
}
@@ -1787,7 +1799,7 @@ sub create_ini {
my @TYPE = @_GENERATION_TYPE;
foreach my $f (split(/\+/,$___GENERATION_FACTORS)) {
print INI "0.3\n";
- print INI "0\n" unless (shift @TYPE) eq 'single';
+ print INI "0\n" unless scalar(@TYPE) && (shift @TYPE) eq 'single';
}
} else {
print INI "\n# no generation models, no weight-generation section\n";
@@ -1798,7 +1810,6 @@ sub create_ini {
if ($_HIERARCHICAL) {
print INI "[unknown-lhs]\n$_UNKNOWN_WORD_LABEL_FILE\n\n" if $_TARGET_SYNTAX && defined($_UNKNOWN_WORD_LABEL_FILE);
print INI "[cube-pruning-pop-limit]\n1000\n\n";
- print INI "[glue-rule-type]\n0\n\n";
print INI "[non-terminals]\nX\n\n";
print INI "[search-algorithm]\n3\n\n";
print INI "[inputtype]\n3\n\n";
@@ -1868,3 +1879,8 @@ sub open_or_zcat {
return $hdl;
}
+sub fix_spaces(){
+ my ($in) = @_;
+ $$in =~ s/[ \t]+/ /g; $$in =~ s/[ \t]$//; $$in =~ s/^[ \t]//;
+}
+
diff --git a/server/client.perl b/server/client.perl
index 14b6a26b1..eca5e388f 100755
--- a/server/client.perl
+++ b/server/client.perl
@@ -1,7 +1,8 @@
#!/usr/bin/env perl
#
-# Sample client for mosesserver, illustrating allignment info
+# Sample client for mosesserver, illustrating allignment info and
+# report all factors
#
use Encode;
@@ -16,7 +17,7 @@ $text = "il a souhaité que la présidence trace à nice le chemin pour l' aveni
# Work-around for XMLRPC::Lite bug
$encoded = SOAP::Data->type(string => Encode::encode("utf8",$text));
-my %param = ("text" => $encoded, "align" => "true");
+my %param = ("text" => $encoded, "align" => "true", "report-all-factors" => "true");
$result = $proxy->call("translate",\%param)->result;
print $result->{'text'} . "\n";
if ($result->{'align'}) {
diff --git a/server/mosesserver.cpp b/server/mosesserver.cpp
index 8363e4587..7577837fb 100644
--- a/server/mosesserver.cpp
+++ b/server/mosesserver.cpp
@@ -11,6 +11,10 @@
#include "StaticData.h"
#include "PhraseDictionaryDynSuffixArray.h"
#include "TranslationSystem.h"
+#include "LMList.h"
+#ifdef LM_ORLM
+# include "LanguageModelORLM.h"
+#endif
using namespace Moses;
using namespace std;
@@ -49,6 +53,9 @@ public:
PhraseDictionaryDynSuffixArray* pdsa = (PhraseDictionaryDynSuffixArray*) pdf->GetDictionary();
cerr << "Inserting into address " << pdsa << endl;
pdsa->insertSnt(source_, target_, alignment_);
+ if(add2ORLM_) {
+ updateORLM();
+ }
cerr << "Done inserting\n";
//PhraseDictionary* pdsa = (PhraseDictionary*) pdf->GetDictionary(*dummy);
map<string, xmlrpc_c::value> retData;
@@ -58,7 +65,56 @@ public:
*retvalP = xmlrpc_c::value_string("Phrase table updated");
}
string source_, target_, alignment_;
- bool bounded_;
+ bool bounded_, add2ORLM_;
+ void updateORLM() {
+#ifdef LM_ORLM
+ vector<string> vl;
+ map<vector<string>, int> ngSet;
+ LMList lms = StaticData::Instance().GetLMList(); // get LM
+ LMList::const_iterator lmIter = lms.begin();
+ const LanguageModel* lm = *lmIter;
+ /* currently assumes a single LM that is a ORLM */
+#ifdef WITH_THREADS
+ boost::shared_ptr<LanguageModelORLM> orlm;
+ orlm = boost::dynamic_pointer_cast<LanguageModelORLM>(lm->GetLMImplementation());
+#else
+ LanguageModelORLM* orlm;
+ orlm = (LanguageModelORLM*)lm->GetLMImplementation();
+#endif
+ if(orlm == 0) {
+ cerr << "WARNING: Unable to add target sentence to ORLM\n";
+ return;
+ }
+ // break out new ngrams from sentence
+ const int ngOrder(orlm->GetNGramOrder());
+ const std::string sBOS = orlm->GetSentenceStart()->GetString();
+ const std::string sEOS = orlm->GetSentenceEnd()->GetString();
+ Utils::splitToStr(target_, vl, " ");
+ // insert BOS and EOS
+ vl.insert(vl.begin(), sBOS);
+ vl.insert(vl.end(), sEOS);
+ for(int j=0; j < vl.size(); ++j) {
+ int i = (j<ngOrder) ? 0 : j-ngOrder+1;
+ for(int t=j; t >= i; --t) {
+ vector<string> ngVec;
+ for(int s=t; s<=j; ++s) {
+ ngVec.push_back(vl[s]);
+ //cerr << vl[s] << " ";
+ }
+ ngSet[ngVec]++;
+ //cerr << endl;
+ }
+ }
+ // insert into LM in order from 1grams up (for LM well-formedness)
+ cerr << "Inserting " << ngSet.size() << " ngrams into ORLM...\n";
+ for(int i=1; i <= ngOrder; ++i) {
+ iterate(ngSet, it) {
+ if(it->first.size() == i)
+ orlm->UpdateORLM(it->first, it->second);
+ }
+ }
+#endif
+ }
void breakOutParams(const params_t& params) {
params_t::const_iterator si = params.find("source");
if(si == params.end())
@@ -77,6 +133,8 @@ public:
cerr << "alignment = " << alignment_ << endl;
si = params.find("bounded");
bounded_ = (si != params.end());
+ si = params.find("updateORLM");
+ add2ORLM_ = (si != params.end());
}
};
@@ -113,6 +171,8 @@ public:
bool addGraphInfo = (si != params.end());
si = params.find("topt");
bool addTopts = (si != params.end());
+ si = params.find("report-all-factors");
+ bool reportAllFactors = (si != params.end());
const StaticData &staticData = StaticData::Instance();
@@ -133,7 +193,7 @@ public:
vector<xmlrpc_c::value> alignInfo;
stringstream out, graphInfo, transCollOpts;
- outputHypo(out,hypo,addAlignInfo,alignInfo);
+ outputHypo(out,hypo,addAlignInfo,alignInfo,reportAllFactors);
map<string, xmlrpc_c::value> retData;
pair<string, xmlrpc_c::value>
@@ -154,15 +214,19 @@ public:
*retvalP = xmlrpc_c::value_struct(retData);
}
- void outputHypo(ostream& out, const Hypothesis* hypo, bool addAlignmentInfo, vector<xmlrpc_c::value>& alignInfo) {
+ void outputHypo(ostream& out, const Hypothesis* hypo, bool addAlignmentInfo, vector<xmlrpc_c::value>& alignInfo, bool reportAllFactors = false) {
if (hypo->GetPrevHypo() != NULL) {
- outputHypo(out,hypo->GetPrevHypo(),addAlignmentInfo, alignInfo);
- TargetPhrase p = hypo->GetTargetPhrase();
- for (size_t pos = 0 ; pos < p.GetSize() ; pos++) {
- const Factor *factor = p.GetFactor(pos, 0);
- out << *factor << " ";
-
+ outputHypo(out,hypo->GetPrevHypo(),addAlignmentInfo, alignInfo, reportAllFactors);
+ Phrase p = hypo->GetTargetPhrase();
+ if(reportAllFactors) {
+ out << p << " ";
+ } else {
+ for (size_t pos = 0 ; pos < p.GetSize() ; pos++) {
+ const Factor *factor = p.GetFactor(pos, 0);
+ out << *factor << " ";
+ }
}
+
if (addAlignmentInfo) {
/**
* Add the alignment info to the array. This is in target order and consists of
diff --git a/sigtest-filter/Makefile b/sigtest-filter/Makefile
index f347fe785..ddefc907b 100644
--- a/sigtest-filter/Makefile
+++ b/sigtest-filter/Makefile
@@ -1,4 +1,4 @@
-SALMDIR=/chomes/redpony/salm
+SALMDIR=/Users/hieuhoang/workspace/salm
FLAVOR?=o32
INC=-I$(SALMDIR)/Src/Shared -I$(SALMDIR)/Src/SuffixArrayApplications -I$(SALMDIR)/Src/SuffixArrayApplications/SuffixArraySearch
OBJS=$(SALMDIR)/Distribution/Linux/Objs/Search/_SuffixArrayApplicationBase.$(FLAVOR) $(SALMDIR)/Distribution/Linux/Objs/Search/_SuffixArraySearchApplicationBase.$(FLAVOR) $(SALMDIR)/Distribution/Linux/Objs/Shared/_String.$(FLAVOR) $(SALMDIR)/Distribution/Linux/Objs/Shared/_IDVocabulary.$(FLAVOR)
diff --git a/sigtest-filter/filter-pt.cpp b/sigtest-filter/filter-pt.cpp
index 745e559f3..b0828ae33 100644
--- a/sigtest-filter/filter-pt.cpp
+++ b/sigtest-filter/filter-pt.cpp
@@ -1,4 +1,5 @@
+#include <cstring>
#include <cassert>
#include <cstdio>
#include <cstdlib>
diff --git a/synlm/hhmm/LICENSE b/synlm/hhmm/LICENSE
new file mode 100644
index 000000000..25b5b7097
--- /dev/null
+++ b/synlm/hhmm/LICENSE
@@ -0,0 +1,695 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
+
+MOSES EXCEPTION TO THE GPL
+
+Certain source files distributed by ModelBlocks developers are
+subject to the following clarification and special exception to the GPL, but
+only where ModelBlocks developers have expressly included in the particular source file's header
+the words "ModelBlocks developers designate this particular file as subject to the "Moses"
+exception as provided by ModelBlocks developers in the LICENSE file that accompanies this code."
+
+ Linking this library statically or dynamically with other modules is making
+ a combined work based on this library. Thus, the terms and conditions of
+ the GNU General Public License cover the whole combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to compile and link this library with Moses modules to produce an
+ executable, and to copy and distribute the resulting executable under the terms
+ of the Moses license, provided that you also meet the terms and conditions of that license.
+ If you modify this library, you may extend this exception to your version of
+ the library, but you are not obligated to do so. If you do not wish to do
+ so, delete this exception statement from your version.
diff --git a/synlm/hhmm/rvtl/include/nl-archetypeset.h b/synlm/hhmm/rvtl/include/nl-archetypeset.h
new file mode 100644
index 000000000..914e85e92
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-archetypeset.h
@@ -0,0 +1,180 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NL_ARCHETYPESET_
+#define _NL_ARCHETYPESET_
+
+#include <boost/thread/thread.hpp>
+#include <boost/thread/mutex.hpp>
+#include <boost/bind.hpp>
+#include "nl-minheap.h"
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class S, class T>
+class Scored : public T {
+ public:
+ S scr;
+ Scored<S,T> ( ) : T() , scr() { }
+ Scored<S,T> ( S s ) : T() , scr(s) { }
+ Scored<S,T> ( S s, T& t ) : T(t), scr(s) { }
+ S& setScore() { return scr; }
+ S getScore() const { return scr; }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+template<char* SD1,class I,char* SD2,class T,char* SD3>
+class Numbered : public T {
+ private:
+ // Data members...
+ I i;
+ public:
+ // Constructor / destructor methods...
+ Numbered<SD1,I,SD2,T,SD3> ( ) { }
+ Numbered<SD1,I,SD2,T,SD3> ( char* ps ) { ps>>*this>>"\0"; }
+ Numbered<SD1,I,SD2,T,SD3> ( const I& iA, const T& tA ) : T(tA), i(iA) { }
+ // Specification methods...
+ I& setNumber ( ) { return i; }
+ T& setT ( ) { return *this; }
+ // Extraction methods...
+ const I& getNumber ( ) const { return i; }
+ const T& getT ( ) const { return *this; }
+ // Input / output methods...
+ friend ostream& operator<< ( ostream& os, const Numbered<SD1,I,SD2,T,SD3>& rv ) { return os<<SD1<<rv.i<<SD2<<rv.getT()<<SD3; }
+ friend String& operator<< ( String& str, const Numbered<SD1,I,SD2,T,SD3>& rv ) { return str<<SD1<<rv.i<<SD2<<rv.getT()<<SD3; }
+ friend pair<StringInput,Numbered<SD1,I,SD2,T,SD3>*> operator>> ( StringInput ps, Numbered<SD1,I,SD2,T,SD3>& rv ) { return pair<StringInput,Numbered<SD1,I,SD2,T,SD3>*>(ps,&rv); }
+ friend StringInput operator>> ( pair<StringInput,Numbered<SD1,I,SD2,T,SD3>*> delimbuff, const char* psPostDelim ) {
+ return ( (SD3[0]=='\0') ? delimbuff.first>>SD1>>delimbuff.second->i>>SD2>>delimbuff.second->setT()>>psPostDelim
+ : delimbuff.first>>SD1>>delimbuff.second->i>>SD2>>delimbuff.second->setT()>>SD3>>psPostDelim );
+ }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+template<class V>
+class ArchetypeSet : public multimap<typename V::ElementType,Numbered<psX,int,psBar,V,psX> > {
+ private:
+ // Static data members...
+ static const int FIRST_INDEX_TO_CHECK = 0;
+ typedef Numbered<psX,int,psBar,V,psX> NV;
+ typedef multimap<typename V::ElementType,NV> MapType;
+ // Data members...
+ MinHeap<Scored<typename V::ElementType,pair<int,SafePtr<const NV> > > > hsivCalc;
+ public:
+ ArchetypeSet<V> ( ) { }
+ ArchetypeSet<V> ( const ArchetypeSet<V>& aa ) : MapType(aa) { cerr<<"\nCOPY!!!!\n\n"; }
+ ArchetypeSet<V>& operator= ( const ArchetypeSet<V>& aa ) { cerr<<"\nCOPY2!!!!\n\n"; MapType::operator=(aa); return *this; }
+ // Specification methods...
+ void add ( const V& );
+ // Extraction methods...
+ bool isEmpty ( ) const { return MapType::empty(); }
+ pair<typename V::ElementType,int> getDistanceOfNearest ( const V& ) const;
+ void dump ( ) { for(typename MapType::const_iterator ii=MapType::begin(); ii!=MapType::end(); ii++) cerr<<ii->second<<"\n"; }
+};
+
+////////////////////
+template<class V>
+void ArchetypeSet<V>::add ( const V& v ) {
+ //cerr<<"adding "<<v.get(FIRST_INDEX_TO_CHECK)<<" "<<MapType::size()<<" "<<v<<"\n";
+ MapType::insert ( pair<typename V::ElementType,NV>(v.get(FIRST_INDEX_TO_CHECK),NV(MapType::size()+1,v) ) );
+ ////cerr<<"adding "<<v.second.get(1)<<" ln"<<MapType::lower_bound(v.second.get(1))->second.lineNum.toInt()<<"\n";
+}
+
+////////////////////
+template<class V>
+pair<typename V::ElementType,int> ArchetypeSet<V>::getDistanceOfNearest ( const V& v ) const {
+ //const Scored<typename V::ElementType,pair<int,SafePtr<const V> > > sipvDummy ( DBL_MAX );
+ //MinHeap<Scored<typename V::ElementType,pair<int,SafePtr<const V> > > > hsiv ( MapType::size()+1, sipvDummy );
+ MinHeap<Scored<typename V::ElementType,pair<int,SafePtr<const NV> > > >& hsiv =
+ const_cast<MinHeap<Scored<typename V::ElementType,pair<int,SafePtr<const NV> > > >&> ( hsivCalc );
+ hsiv.clear();
+
+ typename MapType::const_iterator iUpper = MapType::upper_bound(v.get(FIRST_INDEX_TO_CHECK));
+ typename MapType::const_iterator iLower = iUpper; if(iLower!=MapType::begin())iLower--;
+ ////cerr<<"seeking "<<v.get(0)<<" (upper=ln"<<(&iUpper->second)<<" "<<((iUpper!=MapType::end())?iUpper->first:-1)<<", lower=ln"<<&iLower->second<<" "<<iLower->first<<")\n";
+ int iNext = 0;
+ if ( iUpper!=MapType::end() ) {
+ hsiv.set(iNext).first = FIRST_INDEX_TO_CHECK;
+ hsiv.set(iNext).second = SafePtr<const NV> ( iUpper->second );
+ typename V::ElementType d = v.getMarginalDistance ( hsiv.get(iNext).first, hsiv.get(iNext).second.getRef() );
+ hsiv.set(iNext).setScore() = d;
+ //hsiv.set(iNext).setScore() = v.getMarginalDistance ( hsiv.getMin().first, iUpper->second.second );
+ ////int j =
+ hsiv.fixDecr(iNext);
+ ////cerr<<" adding ln"<<&hsiv.get(j).second.getRef()<<" marg-dist="<<d<<" new-score="<<double(hsiv.get(j).getScore())<<" new-pos="<<j<<"\n";
+ iNext++;
+ ////for(int i=0;i<iNext;i++) cerr<<" "<<i<<": ln"<<hsiv.get(i).second.getRef().lineNum.toInt()<<" new-score="<<double(hsiv.get(i).getScore())<<"\n";
+ }
+ hsiv.set(iNext).first = FIRST_INDEX_TO_CHECK;
+ hsiv.set(iNext).second = SafePtr<const NV> ( iLower->second );
+ typename V::ElementType d = v.getMarginalDistance ( hsiv.get(iNext).first, hsiv.get(iNext).second.getRef() );
+ hsiv.set(iNext).setScore() = d;
+ //hsiv.set(iNext).setScore() = v.getMarginalDistance ( hsiv.getMin().first, iLower->second.second );
+ ////int j =
+ hsiv.fixDecr(iNext);
+ ////cerr<<" adding ln"<<&hsiv.get(j).second.getRef()<<" marg-dist="<<d<<" new-score="<<double(hsiv.get(j).getScore())<<" new-pos="<<j<<"\n";
+ iNext++;
+ ////for(int i=0;i<iNext;i++) cerr<<" "<<i<<": ln"<<hsiv.get(i).second.getRef().lineNum.toInt()<<" new-score="<<double(hsiv.get(i).getScore())<<"\n";
+ while ( hsiv.getMin().first < V::SIZE-1 ) {
+ typename V::ElementType d = v.getMarginalDistance ( ++hsiv.setMin().first, hsiv.getMin().second.getRef() );
+ hsiv.setMin().setScore() += d;
+ ////cerr<<" matching ln"<<&hsiv.getMin().second.getRef()<<" i="<<hsiv.setMin().first<<" marg-dist="<<d<<" new-score="<<hsiv.getMin().getScore();
+ ////int j =
+ hsiv.fixIncr(0);
+ ////cerr<<" new-pos="<<j<<"\n";
+ ////if(j!=0) for(int i=0;i<iNext;i++) cerr<<" "<<i<<": ln"<<hsiv.get(i).second.getRef().lineNum.toInt()<<" new-score="<<double(hsiv.get(i).getScore())<<"\n";
+ if ( iUpper!=MapType::end() && &hsiv.getMin().second.getRef() == &iUpper->second ) {
+ iUpper++;
+ if ( iUpper!=MapType::end() ) {
+ hsiv.set(iNext).first = FIRST_INDEX_TO_CHECK;
+ hsiv.set(iNext).second = SafePtr<const NV> ( iUpper->second );
+ typename V::ElementType d = v.getMarginalDistance ( hsiv.get(iNext).first, hsiv.get(iNext).second.getRef() );
+ hsiv.set(iNext).setScore() = d;
+ ////int j =
+ hsiv.fixDecr(iNext);
+ ////cerr<<" adding ln"<<&hsiv.get(j).second.getRef()<<" marg-dist="<<d<<" new-score="<<double(hsiv.get(j).getScore())<<" new-pos="<<j<<"\n";
+ iNext++;
+ ////for(int i=0;i<iNext;i++) cerr<<" "<<i<<": ln"<<hsiv.get(i).second.getRef().lineNum.toInt()<<" new-score="<<double(hsiv.get(i).getScore())<<"\n";
+ }
+ }
+ if ( iLower!=MapType::begin() && &hsiv.getMin().second.getRef() == &iLower->second ) {
+ iLower--;
+ hsiv.set(iNext).first = FIRST_INDEX_TO_CHECK;
+ hsiv.set(iNext).second = SafePtr<const NV> ( iLower->second );
+ typename V::ElementType d = v.getMarginalDistance ( hsiv.get(iNext).first, hsiv.get(iNext).second.getRef() );
+ hsiv.set(iNext).setScore() = d;
+ ////int j =
+ hsiv.fixDecr(iNext);
+ ////cerr<<" adding ln"<<&hsiv.get(j).second.getRef()<<" marg-dist="<<d<<" new-score="<<double(hsiv.get(j).getScore())<<" new-pos="<<j<<"\n";
+ iNext++;
+ ////for(int i=0;i<iNext;i++) cerr<<" "<<i<<": ln"<<hsiv.get(i).second.getRef().lineNum.toInt()<<" new-score="<<double(hsiv.get(i).getScore())<<"\n";
+ }
+ }
+ return pair<typename V::ElementType,int> ( hsiv.getMin().getScore(), hsiv.getMin().second.getRef().getNumber() );
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+#endif //_NL_ARCHITYPESET_
diff --git a/synlm/hhmm/rvtl/include/nl-array.h b/synlm/hhmm/rvtl/include/nl-array.h
new file mode 100644
index 000000000..0dfb74b44
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-array.h
@@ -0,0 +1,163 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _NL_ARRAY__
+#define _NL_ARRAY__
+
+#include <cassert>
+#include <iostream>
+using namespace std;
+
+////////////////////////////////////////////////////////////////////////////////
+
+template<class T>
+class Array {
+ private:
+
+ T* pt;
+ unsigned int iNextOpen;
+ unsigned int iCapacity;
+
+ static const T tDummy;
+
+ public:
+
+ class const_iterator;
+ class iterator : public pair<Array<T>*,int> {
+ typedef pair<Array<T>*,int> parent;
+ public:
+ iterator ( Array<T>* pat, int i ) : parent(pat,i) { }
+ bool operator== ( const iterator& it ) { return (parent::first==it.first && parent::second==it.second); }
+ bool operator== ( const const_iterator& it ) { return (parent::first==it.first && parent::second==it.second); }
+ bool operator!= ( const iterator& it ) { return (parent::first!=it.first || parent::second!=it.second); }
+ bool operator!= ( const const_iterator& it ) { return (parent::first!=it.first || parent::second!=it.second); }
+ T* operator-> ( ) { return &parent::first->set(parent::second); }
+ iterator& operator++ ( ) { ++parent::second; return *this; }
+ iterator next ( ) { return iterator ( parent::first, parent::second+1 ); }
+ };
+ class const_iterator : public pair<const Array<T>*,int> {
+ typedef pair<const Array<T>*,int> parent;
+ public:
+ const_iterator ( const iterator& it ) : parent(it) { }
+ const_iterator ( const Array<T>* pat, int i ) : parent(pat,i) { }
+ bool operator== ( const iterator& it ) { return (parent::first==it.first && parent::second==it.second); }
+ bool operator== ( const const_iterator& it ) { return (parent::first==it.first && parent::second==it.second); }
+ bool operator!= ( const iterator& it ) { return (parent::first!=it.first || parent::second!=it.second); }
+ bool operator!= ( const const_iterator& it ) { return (parent::first!=it.first || parent::second!=it.second); }
+ const T* operator-> ( ) { return &parent::first->get(parent::second); }
+ const_iterator& operator++ ( ) { ++parent::second; return *this; }
+ const_iterator next ( ) { return const_iterator ( parent::first, parent::second+1 ); }
+ };
+
+ // Constructor / destructor methods...
+ Array ( ) : pt(new T[1]), iNextOpen(0), iCapacity(1) { }
+ Array ( unsigned int i ) : pt(new T[i]), iNextOpen(0), iCapacity(i) { }
+ Array ( unsigned int i, const T& t ) : pt(new T[i]), iNextOpen(0), iCapacity(i) { for(unsigned int j=0; j<iCapacity; j++) pt[j]=t; }
+ Array ( const Array<T>& at ) : pt(new T[at.iCapacity]), iNextOpen(at.iNextOpen), iCapacity(at.iCapacity)
+ { for(unsigned int i=0; i<iNextOpen; i++) pt[i]=at.pt[i]; }
+ ~Array() { delete[] pt; }
+
+ // Specification methods...
+ Array<T>& operator= ( const Array<T>& at ) { delete[] pt; pt=new T[at.iCapacity]; iNextOpen=at.iNextOpen; iCapacity=at.iCapacity;
+ for(unsigned int i=0; i<iNextOpen; i++) pt[i]=at.pt[i]; return *this; }
+ void clear ( ) { iNextOpen=0; }
+ void clearEnd ( unsigned int i ) { iNextOpen=i; }
+ T& add ( ) { return operator[](iNextOpen); }
+ void addReserve ( unsigned int i ) { ensureCapacity(iNextOpen+i); }
+ Array<T>& ensureCapacity ( unsigned int i ) {
+ if ( i>=iCapacity ) {
+ T* ptTmp = pt;
+ iCapacity = (i<iCapacity*2) ? iCapacity*2 : i+1;
+ pt=new T[iCapacity];
+ for ( unsigned int j=0; j<iNextOpen; j++ )
+ pt[j]=ptTmp[j];
+ delete[] ptTmp;
+ }
+ return *this;
+ }
+
+ // Iterator methods...
+ iterator begin ( ) { return iterator(this,0); }
+ const_iterator& begin ( ) const { return const_iterator(this,0); }
+ iterator end ( ) { return iterator(this,iNextOpen); }
+ const_iterator& end ( ) const { return const_iterator(this,iNextOpen); }
+
+ // Indexing methods...
+ const T& operator[](unsigned int i) const { return get(i); }
+ T& operator[](unsigned int i) { return set(i); }
+ const T& get(unsigned int i) const { if (i>=iCapacity) return tDummy; /*assert(i<iCapacity);*/ return pt[i]; }
+ T& set(unsigned int i) { ensureCapacity(i); if(i>=iNextOpen)iNextOpen=i+1; return pt[i]; }
+
+ // Aliasing methods...
+ T* c_array ( ) { return pt; } // NOTE: now it's risky!
+ const T* c_array ( ) const { return pt; }
+
+ // Extraction methods...
+ unsigned int size() const { return iNextOpen; }
+ unsigned int getSize() const { return iNextOpen; }
+ bool operator== ( const Array<T>& a ) const {
+ if ( size() != a.size() ) return false;
+ for ( unsigned int i=0; i<a.size(); i++ )
+ if ( get(i) != a.get(i) ) return false;
+ return true;
+ }
+ bool operator!= ( const Array<T>& a ) const { return !(*this==a); }
+
+ // Input / output methods...
+ friend ostream& operator<< ( ostream& os, const Array<T>& at ) { for(unsigned int i=0;i<at.getSize();i++) os<<at.get(i)<<"\n"; return os; }
+};
+
+template<class T> const T Array<T>::tDummy = T();
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+template<class T>
+class SubArray {
+ private:
+ T* pat;
+ unsigned int length;
+ public:
+ // Constructor / destructor methods...
+ SubArray ( ) : pat(NULL), length(0) { }
+ SubArray ( Array<T>& at ) : pat(&at.set(0)), length(at.size()) { }
+ SubArray ( Array<T>& at, unsigned int i ) : pat(&at.set(i)), length(at.size()-i) { }
+ SubArray ( Array<T>& at, unsigned int i, unsigned int j ) : pat(&at.set(i)), length(j-i) { }
+ SubArray ( SubArray<T>& at, unsigned int i ) : pat(&at.set(i)), length(at.size()-i) { }
+ SubArray ( SubArray<T>& at, unsigned int i, unsigned int j ) : pat(&at.set(i)), length(j-i) { }
+ // Indexing methods...
+ const T& operator[] ( unsigned int i ) const { return get(i); }
+ T& operator[] ( unsigned int i ) { return set(i); }
+ const T& get ( unsigned int i ) const { assert(i<length); return pat[i]; }
+ T& set ( unsigned int i ) { assert(i<length); return pat[i]; }
+ // Extraction methods...
+ unsigned int size() const { return length; }
+ unsigned int getSize() const { return length; }
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+#endif //_NL_ARRAY__
+
diff --git a/synlm/hhmm/rvtl/include/nl-beam.h b/synlm/hhmm/rvtl/include/nl-beam.h
new file mode 100644
index 000000000..398babe21
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-beam.h
@@ -0,0 +1,164 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NL_BEAM__
+#define _NL_BEAM__
+
+#include "nl-heap.h"
+#include "nl-hash.h"
+//#include <boost/thread/thread.hpp>
+//#include <boost/thread/mutex.hpp>
+#include <tr1/unordered_map>
+
+////////////////////////////////////////////////////////////////////////////////
+
+/*
+template <class R>
+class SafePtr {
+ private:
+ R* pr;
+ static R rDummy;
+ public:
+ SafePtr<R> ( ) : pr(NULL) { }
+ SafePtr<R> ( R& r ) : pr(&r) { }
+ bool operator== ( const SafePtr<R>& spr ) const { return(pr==spr.pr); }
+ bool operator!= ( const SafePtr<R>& spr ) const { return(!(pr==spr.pr)); }
+ R& set ( ) { assert(pr); return (pr!=NULL) ? *pr : rDummy; }
+ const R& get ( ) const { return (pr!=NULL) ? *pr : rDummy; }
+};
+template <class R>
+R SafePtr<R>::rDummy = R();
+
+template <class S, class R>
+class ScoredPtr : public SafePtr<R> {
+ public:
+ S scr;
+ ScoredPtr<S,R> ( ) : SafePtr<R>() , scr() { }
+ ScoredPtr<S,R> ( S s, R& r ) : SafePtr<R>(r), scr(s) { }
+ S& setScore() { return scr; }
+ S getScore() const { return scr; }
+};
+*/
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class S, class C>
+class ScoredIter : public C::iterator {
+ private:
+ //static C cDummy;
+ S s;
+ public:
+ ScoredIter<S,C> ( ) : C::iterator(0,0), s() { }
+ ScoredIter<S,C> ( S s1, const typename C::iterator& i1 ) : C::iterator(i1), s(s1) { }
+ //ScoredIter<S,C> ( ) : C::iterator(cDummy.end()), s() { }
+ S& setScore() { return s; }
+ S getScore() const { return s; }
+};
+//template <class S, class C> C ScoredIter<S,C>::cDummy;
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class S,class K,class D>
+class Beam {
+ public:
+ typedef std::pair<int,D> ID;
+ typedef std::pair<K,std::pair<int,D> > KID;
+ typedef std::tr1::unordered_multimap<K,ID,SimpleHashFn<K>,SimpleHashEqual<K> > BeamMap;
+ typedef MinHeap<ScoredIter<S,BeamMap> > BeamHeap;
+ private:
+ BeamMap mkid;
+ BeamHeap hspkid;
+ public:
+ // Constructor methods...
+ Beam<S,K,D> ( int i ) : mkid(2*i), hspkid(i) { for(int j=0;j<i;j++)set(j,K(),D(),S()); }
+ // Specification methods...
+ bool tryAdd ( const K&, const D&, const S& ) ;
+ void set ( int i, const K& k, const D& d, const S& s ) { hspkid.set(i) = ScoredIter<S,BeamMap>(s,mkid.insert(KID(k,ID(i,d)))); }
+ // Extraction methods...
+ const ScoredIter<S,BeamMap>& getMin ( ) const { return hspkid.getMin(); }
+ const ScoredIter<S,BeamMap>& get ( int i ) const { return hspkid.get(i); }
+ void sort ( SafeArray1D<Id<int>,std::pair<std::pair<K,D>,S> >& ) ;
+ void write(FILE *pf){
+/* for (typename BeamMap::const_iterator i = mkid.begin(); i != mkid.end(); i++){
+ i->first.write(pf);
+ fprintf(pf, " %d ", i->second.first);
+// i->second.second.write(pf);
+ fprintf(pf, "\n");
+ }
+*/
+ for(int i=0; i<hspkid.getSize(); i++){
+ fprintf(pf, "%d ", hspkid.get(i).getScore().toInt());
+ hspkid.get(i)->first.write(pf);
+ fprintf(pf, "\n");
+ }
+ }
+};
+
+template <class S,class K,class D>
+bool Beam<S,K,D>::tryAdd ( const K& k, const D& d, const S& s ) {
+ // If score good enough to get into beam...
+ if ( s > hspkid.getMin().getScore() ) {
+ typename BeamMap::const_iterator i = mkid.find(k);
+ // If key in beam already...
+ if ( i != mkid.end() ) {
+ // If same key in beam now has better score...
+ if ( s > hspkid.get(i->second.first).getScore() ) {
+ // Update score (and data associated with that score)...
+ hspkid.set(i->second.first).setScore() = s;
+ hspkid.set(i->second.first)->second.second = d;
+ // Update heap...
+ int iStart = i->second.first; int iDeeper = hspkid.fixIncr(iStart);
+ // Fix pointers in hash...
+ for ( int j = iDeeper+1; j>=iStart+1; j/=2 ) hspkid.set(j-1)->second.first = j-1;
+ }
+ }
+ // If x not in beam already, add...
+ else {
+ // Remove min from map (via pointer in heap)...
+ mkid.erase ( hspkid.getMin() );
+ // Insert new entry at min...
+ set(0,k,d,s);
+ // Update heap...
+ int iStart = 0; int iDeeper = hspkid.fixIncr(iStart);
+ // Fix pointers in hash...
+ for ( int j = iDeeper+1; j>=iStart+1; j/=2 ) hspkid.set(j-1)->second.first = j-1;
+ }
+ }
+ return ( LogProb() != hspkid.getMin().getScore() ); // true = beam full, false = beam still has gaps
+}
+
+template <class S,class K,class D>
+void Beam<S,K,D>::sort ( SafeArray1D<Id<int>,std::pair<std::pair<K,D>,S> >& akdsOut ) {
+ for ( int i=0; i<hspkid.getSize(); i++ ) {
+ akdsOut.set(hspkid.getSize()-i-1).first.first = hspkid.getMin()->first; // copy min key to output key.
+ akdsOut.set(hspkid.getSize()-i-1).first.second = hspkid.getMin()->second.second; // copy min dat to output dat.
+ akdsOut.set(hspkid.getSize()-i-1).second = hspkid.getMin().getScore(); // copy min scr to output scr.
+ hspkid.setMin().setScore() = LogProb(1); // get min out of the way.
+ hspkid.fixIncr(0); // repair heap.
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+
+#endif //_NL_BEAM__
diff --git a/synlm/hhmm/rvtl/include/nl-const.h b/synlm/hhmm/rvtl/include/nl-const.h
new file mode 100644
index 000000000..3d6023f39
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-const.h
@@ -0,0 +1,125 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __NL_CONST_H_
+#define __NL_CONST_H_
+
+//#include <getopt.h>
+
+///////////////////////////////////////////////////////////////////////////////
+// type defs...
+
+typedef short int16 ;
+typedef int16 Sample ;
+//typedef int Mag ;
+//typedef int Gam ;
+
+///////////////////////////////////////////////////////////////////////////////
+// Misc consts...
+
+int max(int i,int j) {return (i>j)?i:j;}
+int min(int i,int j) {return (i<j)?i:j;}
+
+inline size_t rotLeft (const size_t& n, const size_t& i) { return (n << i) | (n >> (sizeof(size_t) - i)); }
+inline size_t rotRight(const size_t& n, const size_t& i) { return (n >> i) | (n << (sizeof(size_t) - i)); }
+
+//inline float abs ( float a ) { return (a>=0)?a:-a; }
+/*
+
+///////////////////////////////////////////////////////////////////////////////
+// Basic phone recognition consts...
+static const int NUM_SAMPLES_PER_FRAME = 512;
+#ifdef OLD_Q
+static const int FRAME_RATE_IN_SAMPLES = 160; //// 80
+#else
+static const int FRAME_RATE_IN_SAMPLES = 256; //// 160; //// 80
+#endif
+
+static const int LOG_NUM_FREQUENCIES = 8;
+static const int LOG_NUM_QUEFRENCIES = LOG_NUM_FREQUENCIES;
+static const int NUM_FREQUENCIES = 1<<LOG_NUM_FREQUENCIES;
+static const int NUM_QUEFRENCIES = 1<<LOG_NUM_QUEFRENCIES;
+
+///////////////////////////////////////////////////////////////////////////////
+// Output format globals
+static bool OUTPUT_QUIET = false;
+
+///////////////////////////////////////////////////////////////////////////////
+// H/O consts...
+
+static int LOG_MAX_SIGNS = 13; // NOTE: bit limit: LOG_MAX_SIGNS + 3*LOG_MAX_ENTS < 31
+static int MAX_SIGNS = 1<<LOG_MAX_SIGNS;
+static int MAX_IVS = 100;
+
+///////////////////////////////////////////////////////////////////////////////
+// H sign recognition consts...
+
+static double INSERT_PENALTY = 1.0; // MULTIPLICATIVE
+static int MAX_FANOUT = 150;
+static const int MAX_BOOLS = 2;
+static const int MAX_TRUTHVALS = 3;
+
+///////////////////////////////////////////////////////////////////////////////
+// H sem recognition consts...
+
+static int LOG_MAX_ENTS = 6;
+static int MAX_ENTS = 1<<LOG_MAX_ENTS;
+static int MAX_CONTEXTS = 100;
+static int MAX_RELNS = 100;
+static int MAX_CATS = 1000;
+
+///////////////////////////////////////////////////////////////////////////////
+// Reader consts...
+
+static int MAX_READER_FIELDS = 50; //62442; //20;
+static int LENGTH_READER_FIELDS = 1024; //512; //256;
+
+///////////////////////////////////////////////////////////////////////////////
+// HMM consts...
+
+//static const int BEAM_WIDTH = 4095;
+static int BEAM_WIDTH = 63; //255;
+//static const int BEAM_WIDTH = 1023;
+
+///////////////////////////////////////////////////////////////////////////////
+
+static const int NUM_MFCC_FILTERS = 40;
+static const int NUM_CEPSTRUM = 13;
+static const int WEIGHT_SIZE = 8;
+static const int MFCC_SIZE = 3 * NUM_CEPSTRUM;
+static const float MIN_FREQUENCY = 0; //130.0;
+static const float MAX_FREQUENCY = 8000.0; //Max allowed freq in signal is 16000Hz
+static const int MEAN_SIZE = (WEIGHT_SIZE * MFCC_SIZE);
+//Use a diagonal matrix for now
+//static const int COVARIANCE_SIZE = (MEAN_SIZE * MFCC_SIZE);
+static const int COVARIANCE_SIZE = MEAN_SIZE;
+static const int MAX_NUM_FRAMES = 10000;
+static const float PREEMPASIZE_FACTOR = 0.97;
+static const int NUM_FFT_POINTS = NUM_SAMPLES_PER_FRAME;
+static const int SAMPLING_RATE = 16000;
+
+static const bool DEBUG_MODE = false;
+
+*/
+
+#endif /*__NL_CONST_H_*/
diff --git a/synlm/hhmm/rvtl/include/nl-cpt.h b/synlm/hhmm/rvtl/include/nl-cpt.h
new file mode 100644
index 000000000..67a1a1021
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-cpt.h
@@ -0,0 +1,1332 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NL_CPT__
+#define _NL_CPT__
+
+//#include <stdlib.h>
+//#include <vector>
+//#include <string>
+//#include <cassert>
+//using namespace std;
+//#include "nl-string.h"
+//#include "nl-safeids.h"
+//#include "nl-stringindex.h"
+#include "nl-randvar.h"
+//#include "nl-probmodel.h"
+#include "nl-hash.h"
+//#include <tr1/unordered_map>
+//using namespace tr1;
+
+#include <netinet/in.h>
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// psNil
+//
+////////////////////////////////////////////////////////////////////////////////
+
+char psNil[] = "";
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// Unit
+//
+////////////////////////////////////////////////////////////////////////////////
+
+class Unit {
+ public:
+ void write(FILE* pf)const{}
+ size_t getHashKey ( ) const { return 0; }
+ bool operator== ( const Unit& u ) const { return true; }
+ bool operator< ( const Unit& u ) const { return false; }
+ friend ostream& operator<< ( ostream& os, const Unit& u ) { return os; }
+ friend String& operator<< ( String& str, const Unit& u ) { return str; }
+ friend IStream operator>> ( pair<IStream,Unit*> si_m, const char* psD ) { return si_m.first; }
+
+ // OBSOLETE!
+ friend pair<StringInput,Unit*> operator>> ( StringInput si, Unit& m ) { return pair<StringInput,Unit*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,Unit*> si_m, const char* psD ) { return si_m.first; }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// MapKeyXD
+//
+////////////////////////////////////////////////////////////////////////////////
+
+////////////////////
+template<class X1>
+class MapKey1D {
+ private:
+ X1 x1;
+ public:
+ const X1& getX1() const { return x1; }
+ size_t getHashKey ( ) const { return x1.getHashKey(); }
+ MapKey1D ( ) { }
+ MapKey1D ( const X1& a1 ) { x1=a1; }
+ bool operator== ( const MapKey1D<X1>& h ) const { return(x1==h.x1); }
+ bool operator< ( const MapKey1D<X1>& h ) const { return(x1< h.x1); }
+ friend ostream& operator<< ( ostream& os, const MapKey1D<X1>& k ) { return os<<k.x1; }
+ friend String& operator<< ( String& str, const MapKey1D<X1>& k ) { return str<<k.x1; }
+ friend IStream operator>> ( pair<IStream,MapKey1D<X1>*> is_m, const char* psD ) {
+ //MapKey1D<X1>& m = *is_m.second;
+ return is_m.first>>is_m.second->x1>>psD;
+ }
+
+ // OBSOLETE!
+ friend pair<StringInput,MapKey1D<X1>*> operator>> ( StringInput si, MapKey1D<X1>& m ) {
+ return pair<StringInput,MapKey1D<X1>*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,MapKey1D<X1>*> si_m, const char* psD ) {
+ MapKey1D<X1>& m = *si_m.second;
+ return si_m.first>>m.x1>>psD;
+ }
+};
+
+////////////////////
+template<class X1, class X2>
+class MapKey2D {
+ private:
+ X1 x1;
+ X2 x2;
+ public:
+ const X1& getX1() const { return x1; }
+ const X2& getX2() const { return x2; }
+ size_t getHashKey ( ) const { size_t k=rotLeft(x1.getHashKey(),3); k^=x2.getHashKey(); return k; }
+ MapKey2D ( ) { }
+ MapKey2D ( const X1& a1, const X2& a2 ) { x1=a1; x2=a2; }
+ bool operator== ( const MapKey2D<X1,X2>& h ) const { return(x1==h.x1 && x2==h.x2); }
+ bool operator< ( const MapKey2D<X1,X2>& h ) const {
+ return ( (x1<h.x1) ||
+ (x1==h.x1 && x2<h.x2) );
+ }
+ friend ostream& operator<< ( ostream& os, const MapKey2D<X1,X2>& k ) { return os<<k.x1<<" "<<k.x2; }
+ friend String& operator<< ( String& str, const MapKey2D<X1,X2>& k ) { return str<<k.x1<<" "<<k.x2; }
+ friend IStream operator>> ( pair<IStream,MapKey2D<X1,X2>*> is_m, const char* psD ) {
+ MapKey2D<X1,X2>& m = *is_m.second; IStream is2;
+ IStream is=is_m.first>>m.x1>>" ";
+ while((is2=is>>" ")!=IStream())is=is2;
+ return is>>m.x2>>psD;
+ }
+
+ // OBSOLETE!
+ friend pair<StringInput,MapKey2D<X1,X2>*> operator>> ( StringInput si, MapKey2D<X1,X2>& m ) {
+ return pair<StringInput,MapKey2D<X1,X2>*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,MapKey2D<X1,X2>*> si_m, const char* psD ) {
+ MapKey2D<X1,X2>& m = *si_m.second; StringInput si2;
+ StringInput si=si_m.first>>m.x1>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ return si>>m.x2>>psD;
+ }
+};
+
+////////////////////
+template<class X1, class X2, class X3>
+class MapKey3D {
+ private:
+ X1 x1;
+ X2 x2;
+ X3 x3;
+ public:
+ const X1& getX1() const { return x1; }
+ const X2& getX2() const { return x2; }
+ const X3& getX3() const { return x3; }
+ size_t getHashKey ( ) const { size_t k=rotLeft(x1.getHashKey(),3); k=rotLeft(k^x2.getHashKey(),3); k^=x3.getHashKey(); return k; }
+ MapKey3D ( ) { }
+ MapKey3D ( const X1& a1, const X2& a2, const X3& a3 ) { x1=a1; x2=a2; x3=a3; }
+ bool operator== ( const MapKey3D<X1,X2,X3>& h ) const { return(x1==h.x1 && x2==h.x2 && x3==h.x3); }
+ bool operator< ( const MapKey3D<X1,X2,X3>& h ) const {
+ return ( (x1<h.x1) ||
+ (x1==h.x1 && x2<h.x2) ||
+ (x1==h.x1 && x2==h.x2 && x3<h.x3) );
+ }
+ friend ostream& operator<< ( ostream& os, const MapKey3D<X1,X2,X3>& k ) { return os<<k.x1<<" "<<k.x2<<" "<<k.x3; }
+ friend String& operator<< ( String& str, const MapKey3D<X1,X2,X3>& k ) { return str<<k.x1<<" "<<k.x2<<" "<<k.x3; }
+ friend IStream operator>> ( pair<IStream,MapKey3D<X1,X2,X3>*> is_m, const char* psD ) {
+ MapKey3D<X1,X2,X3>& m = *is_m.second; IStream is2;
+ IStream is=is_m.first>>m.x1>>" ";
+ while((is2=is>>" ")!=IStream())is=is2;
+ is=is>>m.x2>>" ";
+ while((is2=is>>" ")!=IStream())is=is2;
+ return is>>m.x3>>psD;
+ }
+
+ // OBSOLETE!
+ friend pair<StringInput,MapKey3D<X1,X2,X3>*> operator>> ( StringInput si, MapKey3D<X1,X2,X3>& m ) {
+ return pair<StringInput,MapKey3D<X1,X2,X3>*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,MapKey3D<X1,X2,X3>*> si_m, const char* psD ) {
+ MapKey3D<X1,X2,X3>& m = *si_m.second; StringInput si2;
+ StringInput si=si_m.first>>m.x1>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>m.x2>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ return si>>m.x3>>psD;
+ }
+};
+
+////////////////////
+template<class X1, class X2, class X3, class X4>
+class MapKey4D {
+ private:
+ X1 x1;
+ X2 x2;
+ X3 x3;
+ X4 x4;
+ public:
+ const X1& getX1() const { return x1; }
+ const X2& getX2() const { return x2; }
+ const X3& getX3() const { return x3; }
+ const X4& getX4() const { return x4; }
+ size_t getHashKey ( ) const { size_t k=rotLeft(x1.getHashKey(),3); k=rotLeft(k^x2.getHashKey(),3); k=rotLeft(k^x3.getHashKey(),3); k^=x4.getHashKey(); return k; }
+ MapKey4D ( ) { }
+ MapKey4D ( const X1& a1, const X2& a2, const X3& a3, const X4& a4 ) { x1=a1; x2=a2; x3=a3; x4=a4; }
+ bool operator== ( const MapKey4D<X1,X2,X3,X4>& h ) const { return(x1==h.x1 && x2==h.x2 && x3==h.x3 && x4==h.x4); }
+ bool operator< ( const MapKey4D<X1,X2,X3,X4>& h ) const {
+ return ( (x1<h.x1) ||
+ (x1==h.x1 && x2<h.x2) ||
+ (x1==h.x1 && x2==h.x2 && x3<h.x3) ||
+ (x1==h.x1 && x2==h.x2 && x3==h.x3 && x4<h.x4) );
+ }
+ friend ostream& operator<< ( ostream& os, const MapKey4D<X1,X2,X3,X4>& k ) { return os<<k.x1<<" "<<k.x2<<" "<<k.x3<<" "<<k.x4; }
+ friend String& operator<< ( String& str, const MapKey4D<X1,X2,X3,X4>& k ) { return str<<k.x1<<" "<<k.x2<<" "<<k.x3<<" "<<k.x4; }
+ friend IStream operator>> ( pair<IStream,MapKey4D<X1,X2,X3,X4>*> is_m, const char* psD ) {
+ MapKey4D<X1,X2,X3,X4>& m = *is_m.second; IStream is2;
+ IStream is=is_m.first>>m.x1>>" ";
+ while((is2=is>>" ")!=IStream())is=is2;
+ is=is>>m.x2>>" ";
+ while((is2=is>>" ")!=IStream())is=is2;
+ is=is>>m.x3>>" ";
+ while((is2=is>>" ")!=IStream())is=is2;
+ return is>>m.x4>>psD;
+ }
+
+ // OBSOLETE!
+ friend pair<StringInput,MapKey4D<X1,X2,X3,X4>*> operator>> ( StringInput si, MapKey4D<X1,X2,X3,X4>& m ) {
+ return pair<StringInput,MapKey4D<X1,X2,X3,X4>*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,MapKey4D<X1,X2,X3,X4>*> si_m, const char* psD ) {
+ MapKey4D<X1,X2,X3,X4>& m = *si_m.second; StringInput si2;
+ StringInput si=si_m.first>>m.x1>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>m.x2>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>m.x3>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ return si>>m.x4>>psD;
+ }
+};
+
+////////////////////
+template<class X1, class X2, class X3, class X4, class X5>
+class MapKey5D {
+ private:
+ X1 x1;
+ X2 x2;
+ X3 x3;
+ X4 x4;
+ X5 x5;
+ public:
+ const X1& getX1() const { return x1; }
+ const X2& getX2() const { return x2; }
+ const X3& getX3() const { return x3; }
+ const X4& getX4() const { return x4; }
+ const X5& getX5() const { return x5; }
+ size_t getHashKey ( ) const { size_t k=rotLeft(x1.getHashKey(),3); k=rotLeft(k^x2.getHashKey(),3);
+ k=rotLeft(k^x3.getHashKey(),3); k=rotLeft(k^x4.getHashKey(),3); k^=x5.getHashKey(); return k; }
+ MapKey5D ( ) { }
+ MapKey5D ( const X1& a1, const X2& a2, const X3& a3, const X4& a4, const X5& a5 ) { x1=a1; x2=a2; x3=a3; x4=a4; x5=a5; }
+ bool operator== ( const MapKey5D<X1,X2,X3,X4,X5>& h ) const { return(x1==h.x1 && x2==h.x2 && x3==h.x3 && x4==h.x4 && x5==h.x5); }
+ bool operator< ( const MapKey5D<X1,X2,X3,X4,X5>& h ) const {
+ return ( (x1<h.x1) ||
+ (x1==h.x1 && x2<h.x2) ||
+ (x1==h.x1 && x2==h.x2 && x3<h.x3) ||
+ (x1==h.x1 && x2==h.x2 && x3==h.x3 && x4<h.x4) ||
+ (x1==h.x1 && x2==h.x2 && x3==h.x3 && x4==h.x4 && x5<h.x5) );
+ }
+ friend ostream& operator<< ( ostream& os, const MapKey5D<X1,X2,X3,X4,X5>& k ) { return os<<k.x1<<" "<<k.x2<<" "<<k.x3<<" "<<k.x4<<" "<<k.x5; }
+ friend String& operator<< ( String& str, const MapKey5D<X1,X2,X3,X4,X5>& k ) { return str<<k.x1<<" "<<k.x2<<" "<<k.x3<<" "<<k.x4<<" "<<k.x5; }
+ friend IStream operator>> ( pair<IStream,MapKey5D<X1,X2,X3,X4,X5>*> is_m, const char* psD ) {
+ MapKey5D<X1,X2,X3,X4,X5>& m = *is_m.second; IStream is2;
+ IStream is=is_m.first>>m.x1>>" ";
+ while((is2=is>>" ")!=IStream())is=is2;
+ is=is>>m.x2>>" ";
+ while((is2=is>>" ")!=IStream())is=is2;
+ is=is>>m.x3>>" ";
+ while((is2=is>>" ")!=IStream())is=is2;
+ is=is>>m.x4>>" ";
+ while((is2=is>>" ")!=IStream())is=is2;
+ return is>>m.x5>>psD;
+ }
+
+ // OBSOLETE!
+ friend pair<StringInput,MapKey5D<X1,X2,X3,X4,X5>*> operator>> ( StringInput si, MapKey5D<X1,X2,X3,X4,X5>& m ) {
+ return pair<StringInput,MapKey5D<X1,X2,X3,X4,X5>*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,MapKey5D<X1,X2,X3,X4,X5>*> si_m, const char* psD ) {
+ MapKey5D<X1,X2,X3,X4,X5>& m = *si_m.second; StringInput si2;
+ StringInput si=si_m.first>>m.x1>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>m.x2>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>m.x3>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>m.x4>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ return si>>m.x5>>psD;
+ }
+};
+
+////////////////////
+template<class X1, class X2, class X3, class X4, class X5, class X6>
+class MapKey6D {
+ private:
+ X1 x1;
+ X2 x2;
+ X3 x3;
+ X4 x4;
+ X5 x5;
+ X6 x6;
+ public:
+ const X1& getX1() const { return x1; }
+ const X2& getX2() const { return x2; }
+ const X3& getX3() const { return x3; }
+ const X4& getX4() const { return x4; }
+ const X5& getX5() const { return x5; }
+ const X5& getX6() const { return x6; }
+ size_t getHashKey ( ) const { size_t k=rotLeft(x1.getHashKey(),3); k=rotLeft(k^x2.getHashKey(),3);
+ k=rotLeft(k^x3.getHashKey(),3); k=rotLeft(k^x4.getHashKey(),3); k=rotLeft(k^x5.getHashKey(),3); k^=x6.getHashKey(); return k; }
+ MapKey6D ( ) { }
+ MapKey6D ( const X1& a1, const X2& a2, const X3& a3, const X4& a4, const X5& a5, const X6& a6 ) { x1=a1; x2=a2; x3=a3; x4=a4; x5=a5; x6=a6; }
+ bool operator== ( const MapKey6D<X1,X2,X3,X4,X5,X6>& h ) const { return(x1==h.x1 && x2==h.x2 && x3==h.x3 && x4==h.x4 && x5==h.x5 && x6==h.x6); }
+ bool operator< ( const MapKey6D<X1,X2,X3,X4,X5,X6>& h ) const {
+ return ( (x1<h.x1) ||
+ (x1==h.x1 && x2<h.x2) ||
+ (x1==h.x1 && x2==h.x2 && x3<h.x3) ||
+ (x1==h.x1 && x2==h.x2 && x3==h.x3 && x4<h.x4) ||
+ (x1==h.x1 && x2==h.x2 && x3==h.x3 && x4==h.x4 && x5<h.x5) ||
+ (x1==h.x1 && x2==h.x2 && x3==h.x3 && x4==h.x4 && x5==h.x5 && x6<h.x6) );
+ }
+ friend ostream& operator<< ( ostream& os, const MapKey6D<X1,X2,X3,X4,X5,X6>& k ) { return os<<k.x1<<" "<<k.x2<<" "<<k.x3<<" "<<k.x4<<" "<<k.x5<<" "<<k.x6; }
+ friend String& operator<< ( String& str, const MapKey6D<X1,X2,X3,X4,X5,X6>& k ) { return str<<k.x1<<" "<<k.x2<<" "<<k.x3<<" "<<k.x4<<" "<<k.x5<<" "<<k.x6; }
+ friend IStream operator>> ( pair<IStream,MapKey6D<X1,X2,X3,X4,X5,X6>*> is_m, const char* psD ) {
+ MapKey6D<X1,X2,X3,X4,X5,X6>& m = *is_m.second; IStream is2;
+ IStream is=is_m.first>>m.x1>>" ";
+ while((is2=is>>" ")!=IStream())is=is2;
+ is=is>>m.x2>>" ";
+ while((is2=is>>" ")!=IStream())is=is2;
+ is=is>>m.x3>>" ";
+ while((is2=is>>" ")!=IStream())is=is2;
+ is=is>>m.x4>>" ";
+ while((is2=is>>" ")!=IStream())is=is2;
+ is=is>>m.x5>>" ";
+ while((is2=is>>" ")!=IStream())is=is2;
+ return is>>m.x6>>psD;
+ }
+
+ // OBSOLETE!
+ friend pair<StringInput,MapKey6D<X1,X2,X3,X4,X5,X6>*> operator>> ( StringInput si, MapKey6D<X1,X2,X3,X4,X5,X6>& m ) {
+ return pair<StringInput,MapKey6D<X1,X2,X3,X4,X5,X6>*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,MapKey6D<X1,X2,X3,X4,X5,X6>*> si_m, const char* psD ) {
+ MapKey6D<X1,X2,X3,X4,X5,X6>& m = *si_m.second; StringInput si2;
+ StringInput si=si_m.first>>m.x1>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>m.x2>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>m.x3>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>m.x4>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>m.x5>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ return si>>m.x6>>psD;
+ }
+};
+
+// Declare random access conditional probability tables (un-iteratable)
+#include "nl-racpt.h"
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//
+// Multimap CPTXDModel
+//
+////////////////////////////////////////////////////////////////////////////////
+
+/*
+template<class II,class V>
+class BaseIterVal : public V {
+ public:
+ static const int NUM_ITERS = 1;
+ II iter;
+ BaseIterVal ( ) : V(), iter(typename II::first_type(0,0),typename II::second_type(0,0)) { }
+ BaseIterVal ( II ii ) : V((ii.first!=ii.second)?ii.first->first:V()), iter(ii) { }
+ BaseIterVal ( V v ) : V(v), iter(typename II::first_type(0,0),typename II::second_type(0,0)) { }
+ BaseIterVal& operator++ ( int ) { V& v=*this; iter.first++; if(iter.first!=iter.second)v=iter.first->first; return *this; }
+};
+*/
+
+////////////////////////////////////////////////////////////////////////////////
+
+
+template<class X, class Y>
+class SimpleMap : public map<X,Y> {
+ private:
+ typedef map<X,Y> OrigMap;
+ static const Y yDummy;
+
+ public:
+ // Constructor / destructor methods...
+ SimpleMap ( ) : OrigMap() { }
+ SimpleMap ( int i ) : OrigMap() { }
+ SimpleMap (const SimpleMap& s) : OrigMap(s) { }
+ // Specification methods...
+ Y& set ( const X& x ) { return OrigMap::operator[](x); }
+ // Extraction methods...
+ const Y& get ( const X& x ) const { return (OrigMap::end()!=OrigMap::find(x)) ? OrigMap::find(x)->second : yDummy; }
+ bool contains ( const X& x ) const { return (OrigMap::end()!=OrigMap::find(x)); }
+ friend ostream& operator<< ( ostream& os, const SimpleMap<X,Y>& h ) {
+ for ( typename SimpleMap<X,Y>::const_iterator it=h.begin(); it!=h.end(); it++ )
+ os<<((it==h.begin())?"":",")<<it->first<<":"<<it->second;
+ return os;
+ }
+};
+template<class X, class Y> const Y SimpleMap<X,Y>::yDummy = Y();
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+#define MAP_CONTAINER SimpleMap
+//#define MAP_CONTAINER SimpleHash
+
+template<class Y, class K, class P, const char* psLbl=psNil>
+class GenericCPTModel : public MAP_CONTAINER<K,MAP_CONTAINER<Y,P> > {
+ private:
+ typedef MAP_CONTAINER<K,MAP_CONTAINER<Y,P> > HKYP;
+ typedef typename MAP_CONTAINER<Y,P>::const_iterator IYP;
+ //HKYP h;
+
+ public:
+ typedef Y RandVarType;
+ typedef Y RVType;
+/* typedef BaseIterVal<std::pair<IYP,IYP>,Y> IterVal; */
+ typedef MAP_CONTAINER<Y,P> distribution;
+
+/* bool setFirst ( IterVal& ikyp, const K& k ) const { */
+/* const MAP_CONTAINER<Y,P>& hyp = MAP_CONTAINER<K,MAP_CONTAINER<Y,P> >::get(k); */
+/* ikyp = std::pair<IYP,IYP>(hyp.begin(),hyp.end()); */
+/* return ( ikyp.iter.first != ikyp.iter.second ); */
+/* } */
+/* bool setNext ( IterVal& ikyp, const K& k ) const { */
+/* if ( ikyp.iter.first != ikyp.iter.second ) ikyp++; */
+/* return ( ikyp.iter.first != ikyp.iter.second ); */
+/* } */
+ bool contains ( const Y& y, const K& k ) const {
+ return ( MAP_CONTAINER<K,MAP_CONTAINER<Y,P> >::get(k).contains(y) );
+ }
+ bool contains ( const K& k ) const {
+ return ( MAP_CONTAINER<K,MAP_CONTAINER<Y,P> >::contains(k) );
+ }
+/* P getProb ( const IterVal& ikyp, const K& k ) const { */
+/* if ( ikyp.iter.first == ikyp.iter.second ) { cerr<<"ERROR: no iterator to fix probability: "<<k<<endl; return P(); } */
+/* return ( ikyp.iter.first->second ); */
+/* } */
+ P getProb ( const Y& y, const K& k ) const {
+ return MAP_CONTAINER<K,MAP_CONTAINER<Y,P> >::get(k).get(y);
+ }
+ const MAP_CONTAINER<Y,P>& getDist ( const K& k ) const {
+ return MAP_CONTAINER<K,MAP_CONTAINER<Y,P> >::get(k);
+ }
+ P& setProb ( const Y& y, const K& k ) {
+ return MAP_CONTAINER<K,MAP_CONTAINER<Y,P> >::set(k).set(y);
+ }
+ void normalize ( ) {
+ for ( typename HKYP::iterator ik=HKYP::begin(); ik!=HKYP::end(); ik++ ) {
+ K k=ik->first;
+ P p=P();
+ for ( typename distribution::iterator itd = ik->second.begin(); itd != ik->second.end(); ++itd )
+ p += itd->second;
+ if (p!=P())
+ for ( typename distribution::iterator itd = ik->second.begin(); itd != ik->second.end(); ++itd )
+ itd->second /= p;
+ }
+ }
+/* void transmit ( int tSockfd, const char* psId ) const { */
+/* for ( typename HKYP::const_iterator ik=HKYP::begin(); ik!=HKYP::end(); ik++ ) { */
+/* K k=ik->first; */
+/* IterVal y; */
+/* // For each non-zero probability in model... */
+/* for ( bool b=setFirst(y,k); b; b=setNext(y,k) ) { */
+/* //if ( getProb(y,k) != P() ) { */
+/* String str(1000); */
+/* str<<psId<<" "<<k<<" : "<<y<<" = "<<getProb(y,k).toDouble()<<"\n"; */
+/* if ( send(tSockfd,str.c_array(),str.size()-1,MSG_EOR) != int(str.size()-1) ) */
+/* {cerr<<"ERROR writing to socket\n";exit(0);} */
+/* //} */
+/* } */
+/* } */
+/* } */
+ void dump ( ostream& os, const char* psId ) const {
+ for ( typename HKYP::const_iterator ik=HKYP::begin(); ik!=HKYP::end(); ik++ ) {
+ K k=ik->first;
+ const distribution& dist = ik->second;
+ for ( typename distribution::const_iterator itd = dist.begin(); itd != dist.end(); ++itd ) {
+ const Y& y = itd->first;
+ os<<psId<<" "<<k<<" : "<<y<<" = "<<getProb(y,k).toDouble()<<"\n";
+ }
+ }
+ }
+/* void subsume ( GenericCPTModel<Y,K,P>& m ) { */
+/* for ( typename HKYP::const_iterator ik=m.HKYP::begin(); ik!=m.HKYP::end(); ik++ ) { */
+/* K k=ik->first; */
+/* IterVal y; */
+/* for ( bool b=m.setFirst(y,k); b; b=m.setNext(y,k) ) */
+/* setProb(y,k) = m.getProb(y,k); */
+/* } */
+/* } */
+ void clear ( ) { MAP_CONTAINER<K,MAP_CONTAINER<Y,P> >::clear(); }
+
+ //friend pair<IStream,GenericCPTModel<Y,K,P>*> operator>> ( IStream is, GenericCPTModel<Y,K,P>& m ) {
+ // return pair<IStream,GenericCPTModel<Y,K,P>*>(is,&m); }
+ friend IStream operator>> ( pair<IStream,GenericCPTModel<Y,K,P,psLbl>*> is_m, const char* psD ) {
+ Y y; K k; IStream is,is1; GenericCPTModel<Y,K,P,psLbl>& m = *is_m.second;
+ is=is_m.first;
+ if ( is==IStream() ) return is;
+ is=is>>psLbl;
+ while((is1=is>>" ")!=IStream())is=is1;
+ ////cerr<<"reading k...\n";
+ is=is>>k>>" ";
+ ////cerr<<" ...k='"<<k<<"'\n";
+ while((is1=is>>" ")!=IStream())is=is1;
+ is=is>>": ";
+ while((is1=is>>" ")!=IStream())is=is1;
+ ////cerr<<"reading y...\n";
+ is=is>>y>>" ";
+ ////cerr<<" ...y='"<<y<<"'\n";
+ while((is1=is>>" ")!=IStream())is=is1;
+ is=is>>"= ";
+ while((is1=is>>" ")!=IStream())is=is1;
+ ////cerr<<"reading pr...\n";
+ return (is!=IStream()) ? is>>m.setProb(y,k)>>psD : is;
+ }
+
+ // OBSOLETE!
+ friend pair<StringInput,GenericCPTModel<Y,K,P,psLbl>*> operator>> ( StringInput si, GenericCPTModel<Y,K,P,psLbl>& m ) {
+ return pair<StringInput,GenericCPTModel<Y,K,P,psLbl>*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,GenericCPTModel<Y,K,P,psLbl>*> si_m, const char* psD ) {
+ Y y; K k; StringInput si,si2; GenericCPTModel<Y,K,P,psLbl>& m = *si_m.second;
+ si=si_m.first;
+ if ( si==NULL ) return si;
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>k>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>": ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>y>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>"= ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ return (si!=NULL) ? si>>m.setProb(y,k)>>psD : si;
+ }
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+////////////////////
+template<class Y, class P, const char* psLbl=psNil>
+class CPT1DModel : public GenericCPTModel<Y,MapKey1D<Unit>,P,psLbl> {
+ typedef GenericCPTModel<Y,MapKey1D<Unit>,P,psLbl> ParentType;
+ typedef CPT1DModel<Y,P,psLbl> ThisType;
+ public:
+/* typedef typename GenericCPTModel<Y,MapKey1D<Unit>,P>::IterVal IterVal; */
+
+/* bool setFirst ( IterVal& ixyp ) const { */
+/* return GenericCPTModel<Y,MapKey1D<Unit>,P>::setFirst ( ixyp, MapKey1D<Unit>(Unit()) ); */
+/* } */
+/* bool setNext ( IterVal& ixyp ) const { */
+/* return GenericCPTModel<Y,MapKey1D<Unit>,P>::setNext ( ixyp, MapKey1D<Unit>(Unit()) ); */
+/* } */
+ bool contains ( const Y& y ) const {
+ return GenericCPTModel<Y,MapKey1D<Unit>,P,psLbl>::contains ( y, MapKey1D<Unit>(Unit()) );
+ }
+/* P getProb ( const IterVal& ixyp ) const { */
+/* return GenericCPTModel<Y,MapKey1D<Unit>,P>::getProb ( ixyp, MapKey1D<Unit>(Unit()) ); */
+/* } */
+ P getProb ( const Y& y ) const {
+ return GenericCPTModel<Y,MapKey1D<Unit>,P,psLbl>::getProb ( y, MapKey1D<Unit>(Unit()) );
+ }
+ const typename GenericCPTModel<Y,MapKey1D<Unit>,P,psLbl>::distribution& getDist ( ) const {
+ return GenericCPTModel<Y,MapKey1D<Unit>,P,psLbl>::get ( MapKey1D<Unit>(Unit()) );
+ }
+ P& setProb ( const Y& y ) {
+ return GenericCPTModel<Y,MapKey1D<Unit>,P,psLbl>::setProb ( y, MapKey1D<Unit>(Unit()) );
+ }
+ bool readFields ( Array<char*>& aps ) {
+ if ( 3==aps.size() ) {
+ GenericCPTModel<Y,MapKey1D<Unit>,P,psLbl>::setProb ( Y(aps[1]), MapKey1D<Unit>(Unit()) ) = atof(aps[2]);
+ return true;
+ }
+ return false;
+ }
+ friend pair<IStream,ParentType*> operator>> ( IStream is, ThisType& m ) { return pair<IStream,ParentType*>(is,&m); }
+};
+
+
+////////////////////
+template<class Y, class X1, class P, const char* psLbl=psNil>
+class CPT2DModel : public GenericCPTModel<Y,MapKey1D<X1>,P,psLbl> {
+ typedef GenericCPTModel<Y,MapKey1D<X1>,P,psLbl> ParentType;
+ typedef CPT2DModel<Y,X1,P,psLbl> ThisType;
+ public:
+/* typedef typename GenericCPTModel<Y,MapKey1D<X1>,P>::IterVal IterVal; */
+
+/* // This stuff only for deterministic 'Determ' models... */
+/* typedef X1 Dep1Type; */
+/* typedef P ProbType; */
+/* bool hasDeterm ( const X1& x1 ) { IterVal y; bool b=setFirst(y,x1); return b; } */
+/* Y getDeterm ( const X1& x1 ) { IterVal y; bool b=setFirst(y,x1); if(!b)cerr<<"ERROR: determ case missing: "<<x1.getString()<<endl; return y; } */
+
+/* bool setFirst ( IterVal& ixyp, const X1& x1 ) const { */
+/* return GenericCPTModel<Y,MapKey1D<X1>,P>::setFirst ( ixyp, MapKey1D<X1>(x1) ); */
+/* } */
+/* bool setNext ( IterVal& ixyp, const X1& x1 ) const { */
+/* return GenericCPTModel<Y,MapKey1D<X1>,P>::setNext ( ixyp, MapKey1D<X1>(x1) ); */
+/* } */
+ bool contains ( const Y& y, const X1& x1 ) const {
+ return GenericCPTModel<Y,MapKey1D<X1>,P,psLbl>::contains ( y, MapKey1D<X1>(x1) );
+ }
+ bool contains ( const X1& x1 ) const {
+ return GenericCPTModel<Y,MapKey1D<X1>,P,psLbl>::contains ( MapKey1D<X1>(x1) );
+ }
+/* P getProb ( const IterVal& ixyp, const X1& x1 ) const { */
+/* return GenericCPTModel<Y,MapKey1D<X1>,P>::getProb ( ixyp, MapKey1D<X1>(x1) ); */
+/* } */
+ P getProb ( const Y& y, const X1& x1 ) const {
+ return GenericCPTModel<Y,MapKey1D<X1>,P,psLbl>::getProb ( y, MapKey1D<X1>(x1) );
+ }
+ const typename GenericCPTModel<Y,MapKey1D<X1>,P,psLbl>::distribution& getDist ( const X1& x1 ) const {
+ return GenericCPTModel<Y,MapKey1D<X1>,P,psLbl>::get ( MapKey1D<X1>(x1) );
+ }
+ P& setProb ( const Y& y, const X1& x1 ) {
+ return GenericCPTModel<Y,MapKey1D<X1>,P,psLbl>::setProb ( y, MapKey1D<X1>(x1) );
+ }
+ bool readFields ( Array<char*>& aps ) {
+ if ( 4==aps.size() ) {
+ GenericCPTModel<Y,MapKey1D<X1>,P,psLbl>::setProb ( Y(aps[2]), MapKey1D<X1>(aps[1]) ) = atof(aps[3]);
+ return true;
+ }
+ return false;
+ }
+ friend pair<IStream,ParentType*> operator>> ( IStream is, ThisType& m ) { return pair<IStream,ParentType*>(is,&m); }
+};
+
+
+////////////////////
+template<class Y, class X1, class X2, class P, const char* psLbl=psNil>
+class CPT3DModel : public GenericCPTModel<Y,MapKey2D<X1,X2>,P,psLbl> {
+ typedef GenericCPTModel<Y,MapKey2D<X1,X2>,P,psLbl> ParentType;
+ typedef CPT3DModel<Y,X1,X2,P,psLbl> ThisType;
+ public:
+/* typedef typename GenericCPTModel<Y,MapKey2D<X1,X2>,P>::IterVal IterVal; */
+
+/* bool setFirst ( IterVal& ixyp, const X1& x1, const X2& x2 ) const { */
+/* return GenericCPTModel<Y,MapKey2D<X1,X2>,P>::setFirst ( ixyp, MapKey2D<X1,X2>(x1,x2) ); */
+/* } */
+/* bool setNext ( IterVal& ixyp, const X1& x1, const X2& x2 ) const { */
+/* return GenericCPTModel<Y,MapKey2D<X1,X2>,P>::setNext ( ixyp, MapKey2D<X1,X2>(x1,x2) ); */
+/* } */
+ bool contains ( const Y& y, const X1& x1, const X2& x2 ) const {
+ return GenericCPTModel<Y,MapKey2D<X1,X2>,P,psLbl>::contains ( y, MapKey2D<X1,X2>(x1,x2) );
+ }
+ bool contains ( const X1& x1, const X2& x2 ) const {
+ return GenericCPTModel<Y,MapKey2D<X1,X2>,P,psLbl>::contains ( MapKey2D<X1,X2>(x1,x2) );
+ }
+/* P getProb ( const IterVal& ixyp, const X1& x1, const X2& x2 ) const { */
+/* return GenericCPTModel<Y,MapKey2D<X1,X2>,P>::getProb ( ixyp, MapKey2D<X1,X2>(x1,x2) ); */
+/* } */
+ P getProb ( const Y& y, const X1& x1, const X2& x2 ) const {
+ return GenericCPTModel<Y,MapKey2D<X1,X2>,P,psLbl>::getProb ( y, MapKey2D<X1,X2>(x1,x2) );
+ }
+ const typename GenericCPTModel<Y,MapKey2D<X1,X2>,P,psLbl>::distribution& getDist ( const X1& x1, const X2& x2 ) const {
+ return GenericCPTModel<Y,MapKey2D<X1,X2>,P,psLbl>::get ( MapKey2D<X1,X2>(x1,x2) );
+ }
+ P& setProb ( const Y& y, const X1& x1, const X2& x2 ) {
+ return GenericCPTModel<Y,MapKey2D<X1,X2>,P,psLbl>::setProb ( y, MapKey2D<X1,X2>(x1,x2) );
+ }
+ bool readFields ( Array<char*>& aps ) {
+ if ( 5==aps.size() ) {
+ GenericCPTModel<Y,MapKey2D<X1,X2>,P,psLbl>::setProb ( Y(aps[3]), MapKey2D<X1,X2>(aps[1],aps[2]) ) = atof(aps[4]);
+ return true;
+ }
+ return false;
+ }
+ friend pair<IStream,ParentType*> operator>> ( IStream is, ThisType& m ) { return pair<IStream,ParentType*>(is,&m); }
+};
+
+
+////////////////////
+template<class Y, class X1, class X2, class X3, class P, const char* psLbl=psNil>
+class CPT4DModel : public GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P,psLbl> {
+ typedef GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P,psLbl> ParentType;
+ typedef CPT4DModel<Y,X1,X2,X3,P,psLbl> ThisType;
+ public:
+/* typedef typename GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P>::IterVal IterVal; */
+
+/* bool setFirst ( IterVal& ixyp, const X1& x1, const X2& x2, const X3& x3 ) const { */
+/* return GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P>::setFirst ( ixyp, MapKey3D<X1,X2,X3>(x1,x2,x3) ); */
+/* } */
+/* bool setNext ( IterVal& ixyp, const X1& x1, const X2& x2, const X3& x3 ) const { */
+/* return GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P>::setNext ( ixyp, MapKey3D<X1,X2,X3>(x1,x2,x3) ); */
+/* } */
+ bool contains ( const Y& y, const X1& x1, const X2& x2, const X3& x3 ) const {
+ return GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P,psLbl>::contains ( y, MapKey3D<X1,X2,X3>(x1,x2,x3) );
+ }
+ bool contains ( const X1& x1, const X2& x2, const X3& x3 ) const {
+ return GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P,psLbl>::contains ( MapKey3D<X1,X2,X3>(x1,x2,x3) );
+ }
+/* P getProb ( const IterVal& ixyp, const X1& x1, const X2& x2, const X3& x3 ) const { */
+/* return GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P>::getProb ( ixyp, MapKey3D<X1,X2,X3>(x1,x2,x3) ); */
+/* } */
+ P getProb ( const Y& y, const X1& x1, const X2& x2, const X3& x3 ) const {
+ return GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P,psLbl>::getProb ( y, MapKey3D<X1,X2,X3>(x1,x2,x3) );
+ }
+ const typename GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P,psLbl>::distribution& getDist ( const X1& x1, const X2& x2, const X3& x3 ) const {
+ return GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P,psLbl>::get ( MapKey3D<X1,X2,X3>(x1,x2,x3) );
+ }
+ P& setProb ( const Y& y, const X1& x1, const X2& x2, const X3& x3 ) {
+ return GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P,psLbl>::setProb ( y, MapKey3D<X1,X2,X3>(x1,x2,x3) );
+ }
+ bool readFields ( Array<char*>& aps ) {
+ if ( 6==aps.size() ) {
+ GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P,psLbl>::setProb ( Y(aps[4]), MapKey3D<X1,X2,X3>(aps[1],aps[2],aps[3]) ) = atof(aps[5]);
+ return true;
+ }
+ return false;
+ }
+ friend pair<IStream,ParentType*> operator>> ( IStream is, ThisType& m ) { return pair<IStream,ParentType*>(is,&m); }
+};
+
+
+////////////////////
+template<class Y, class X1, class X2, class X3, class X4, class P, const char* psLbl=psNil>
+class CPT5DModel : public GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P,psLbl> {
+ typedef GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P,psLbl> ParentType;
+ typedef CPT5DModel<Y,X1,X2,X3,X4,P,psLbl> ThisType;
+ public:
+/* typedef typename GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P>::IterVal IterVal; */
+
+/* bool setFirst ( IterVal& ixyp, const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) const { */
+/* return GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P>::setFirst ( ixyp, MapKey4D<X1,X2,X3,X4>(x1,x2,x3,x4) ); */
+/* } */
+/* bool setNext ( IterVal& ixyp, const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) const { */
+/* return GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P>::setNext ( ixyp, MapKey4D<X1,X2,X3,X4>(x1,x2,x3,x4) ); */
+/* } */
+ bool contains ( const Y& y, const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) const {
+ return GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P,psLbl>::contains ( y, MapKey4D<X1,X2,X3,X4>(x1,x2,x3,x4) );
+ }
+ bool contains ( const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) const {
+ return GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P,psLbl>::contains ( MapKey4D<X1,X2,X3,X4>(x1,x2,x3,x4) );
+ }
+/* P getProb ( const IterVal& ixyp, const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) const { */
+/* return GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P>::getProb ( ixyp, MapKey4D<X1,X2,X3,X4>(x1,x2,x3,x4) ); */
+/* } */
+ P getProb ( const Y& y, const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) const {
+ return GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P,psLbl>::getProb ( y, MapKey4D<X1,X2,X3,X4>(x1,x2,x3,x4) );
+ }
+ const typename GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P,psLbl>::distribution& getDist ( const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) const {
+ return GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P,psLbl>::get ( MapKey4D<X1,X2,X3,X4>(x1,x2,x3,x4) );
+ }
+ P& setProb ( const Y& y, const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) {
+ return GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P,psLbl>::setProb ( y, MapKey4D<X1,X2,X3,X4>(x1,x2,x3,x4) );
+ }
+ bool readFields ( Array<char*>& aps ) {
+ if ( 7==aps.size() ) {
+ GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P,psLbl>::setProb ( Y(aps[5]), MapKey4D<X1,X2,X3,X4>(aps[1],aps[2],aps[3],aps[4]) ) = atof(aps[6]);
+ return true;
+ }
+ return false;
+ }
+ friend pair<IStream,ParentType*> operator>> ( IStream is, ThisType& m ) { return pair<IStream,ParentType*>(is,&m); }
+};
+
+
+////////////////////
+template<class Y, class X1, class X2, class X3, class X4, class X5, class P, const char* psLbl=psNil>
+class CPT6DModel : public GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P,psLbl> {
+ typedef GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P,psLbl> ParentType;
+ typedef CPT6DModel<Y,X1,X2,X3,X4,X5,P,psLbl> ThisType;
+ public:
+/* typedef typename GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P>::IterVal IterVal; */
+
+/* bool setFirst ( IterVal& ixyp, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) const { */
+/* return GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P>::setFirst ( ixyp, MapKey5D<X1,X2,X3,X4,X5>(x1,x2,x3,x4,x5) ); */
+/* } */
+/* bool setNext ( IterVal& ixyp, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) const { */
+/* return GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P>::setNext ( ixyp, MapKey5D<X1,X2,X3,X4,X5>(x1,x2,x3,x4,x5) ); */
+/* } */
+ bool contains ( const Y& y, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) const {
+ return GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P,psLbl>::contains ( y, MapKey5D<X1,X2,X3,X4,X5>(x1,x2,x3,x4,x5) );
+ }
+ bool contains ( const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) const {
+ return GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P,psLbl>::contains ( MapKey5D<X1,X2,X3,X4,X5>(x1,x2,x3,x4,x5) );
+ }
+/* P getProb ( const IterVal& ixyp, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) const { */
+/* return GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P>::getProb ( ixyp, MapKey5D<X1,X2,X3,X4,X5>(x1,x2,x3,x4,x5) ); */
+/* } */
+ P getProb ( const Y& y, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) const {
+ return GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P,psLbl>::getProb ( y, MapKey5D<X1,X2,X3,X4,X5>(x1,x2,x3,x4,x5) );
+ }
+ const typename GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P,psLbl>::distribution& getDist ( const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) const {
+ return GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P,psLbl>::get ( MapKey5D<X1,X2,X3,X4,X5>(x1,x2,x3,x4,x5) );
+ }
+ P& setProb ( const Y& y, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) {
+ return GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P,psLbl>::setProb ( y, MapKey5D<X1,X2,X3,X4,X5>(x1,x2,x3,x4,x5) );
+ }
+ bool readFields ( Array<char*>& aps ) {
+ if ( 8==aps.size() ) {
+ GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P,psLbl>::setProb ( Y(aps[6]), MapKey5D<X1,X2,X3,X4,X5>(aps[1],aps[2],aps[3],aps[4],aps[5]) ) = atof(aps[7]);
+ return true;
+ }
+ return false;
+ }
+ friend pair<IStream,ParentType*> operator>> ( IStream is, ThisType& m ) { return pair<IStream,ParentType*>(is,&m); }
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+
+/*
+template<class Y, class P>
+class HidVarBaseIterVal : public pair<SafePtr<const Array<pair<Y,P> > >,Id<int> > {
+ public:
+ typedef Y VAR;
+ static const int NUM_ITERS = 1;
+ operator Y ( ) const { return pair<SafePtr<const Array<pair<Y,P> > >,Id<int> >::first.getRef().get(pair<SafePtr<const Array<pair<Y,P> > >,Id<int> >::second.toInt()).first; }
+};
+*/
+
+template<class Y, class K, class P, const char* psLbl=psNil>
+//class GenericHidVarCPTModel : public SimpleHash<K,Array<pair<Y,P> > > {
+class GenericHidVarCPTModel : public SimpleHash<K,typename Y::template ArrayDistrib<P> > {
+ private:
+ //typedef SimpleHash<K,typename Y::template Distrib<P> > HKYP;
+ //typedef SimpleHash<K,Array<pair<Y,P> > > HKYP;
+ typedef SimpleHash<K,typename Y::template ArrayDistrib<P> > HKYP;
+ typedef int IYP;
+ ////HKYP h;
+
+ public:
+ typedef Y RandVarType;
+ typedef Y RVType;
+ typedef typename Y::template ArrayIterator<P> IterVal;
+
+ typename HKYP::const_iterator begin ( ) const { return HKYP::begin(); }
+ typename HKYP::iterator begin ( ) { return HKYP::begin(); }
+ typename Y::template ArrayIterator<P> begin ( const K& k ) const {
+ typename Y::template ArrayIterator<P> iyp; iyp.first = HKYP::get(k); iyp.second = 0; return iyp;
+ }
+ P setIterProb ( typename Y::template ArrayIterator<P>& iyp, const K& k, int& vctr ) const {
+ P pr;
+ // If fork happens before this var, set val to first in distrib and return prob=1.0...
+ if ( vctr < 0 ) {
+ iyp.first = HKYP::get(k);
+ iyp.second = 0;
+ pr = ( iyp.first.getRef().get(0).second != P() ) ? P(1.0) : P();
+ if (pr == P()){
+ cerr << "ERROR: Some condition has no value! Key = '" << k << "' vctr=" << vctr << "\n";
+ }
+ //return P(1.0);
+ }
+ // If fork happens at this var, set val to next in distrib and return prob of val (prob=0.0 if nothing is next)...
+ // NOTE: falling off the end of a distribution is not a model error; only failing to start a new distribution!
+ else if ( vctr == 0 ) {
+ if (iyp.second+1<iyp.first.getRef().getSize()) { iyp.second=iyp.second+1; pr = iyp.first.getRef().get(iyp.second.toInt()).second; }
+ else pr = P();
+ }
+ // If fork happens after this var, retain val and return prob of val...
+ else {
+ pr = iyp.first.getRef().get(iyp.second.toInt()).second;
+ }
+ vctr--;
+ return pr;
+ }
+ bool contains ( const Y& y, const K& k ) const {
+ cerr<<"ERROR: GenericHidVarCPTModel no support for 'contains'!\n";
+ return false;
+ }
+ bool contains ( const K& k ) const {
+ return ( HKYP::contains(k) );
+ }
+ P getProb ( const typename Y::template ArrayIterator<P>& iyp, const K& k ) const {
+ return iyp.first.getRef().get(iyp.second.toInt()).second;
+ }
+ const typename Y::template ArrayDistrib<P>& getDistrib ( const K& k ) const {
+ return HKYP::get(k);
+ }
+
+ P& setProb ( const Y& y, const K& k ) {
+ pair<typename Y::BaseType,P>& yp = HKYP::set(k).add();
+ yp.first = y;
+ return yp.second;
+ }
+ typename Y::template ArrayDistrib<P>& setDistrib ( const K& k ) {
+ return HKYP::set(k);
+ }
+ void normalize ( ) {
+ // NOTE: BEAR IN MIND, LOGPROBS CAN'T BE ADDED!!!!!
+ for ( typename HKYP::iterator ik=HKYP::begin(); ik!=HKYP::end(); ik++ ) {
+ P prTot;
+ for ( unsigned int i=0; i<ik->second.size(); i++ ) {
+ prTot += ik->second.get(i).second;
+ }
+ for ( unsigned int i=0; i<ik->second.size(); i++ ) {
+ ik->second.set(i).second /= prTot;
+ }
+ }
+ }
+ void dump ( ostream& os, const char* psId ) const {
+ for ( typename HKYP::const_iterator ik=HKYP::begin(); ik!=HKYP::end(); ik++ ) {
+ K k=ik->first;
+ //IterVal y;
+ //for ( bool b=setFirst(y,k); b; b=setNext(y,k) )
+ for ( unsigned int i=0; i<ik->second.size(); i++ ) {
+ const pair<Y,P>& yp = ik->second.get(i);
+ os<<psId<<" "<<k<<" : "<<yp.first<<" = "<<yp.second.toDouble()<<"\n";
+ }
+ }
+ }
+ void clear ( ) { HKYP::clear(); }
+
+// friend pair<IStream,GenericHidVarCPTModel<Y,K,P,psLbl>*> operator>> ( IStream is, GenericHidVarCPTModel<Y,K,P,psLbl>& m ) {
+// return pair<IStream,GenericHidVarCPTModel<Y,K,P,psLbl>*>(is,&m); }
+ friend IStream operator>> ( pair<IStream,GenericHidVarCPTModel<Y,K,P,psLbl>*> is_m, const char* psD ) {
+ Y y; K k; IStream is,is1; GenericHidVarCPTModel<Y,K,P,psLbl>& m = *is_m.second;
+ is=is_m.first;
+ if ( is==IStream() ) return is;
+ is=is>>psLbl;
+ while((is1=is>>" ")!=IStream())is=is1;
+ ////cerr<<"reading k...\n";
+ is=is>>k>>" ";
+ ////cerr<<" ...k='"<<k<<"'\n";
+ while((is1=is>>" ")!=IStream())is=is1;
+ is=is>>": ";
+ while((is1=is>>" ")!=IStream())is=is1;
+ ////cerr<<"reading y...\n";
+ is=is>>y>>" ";
+ ////cerr<<" ...y='"<<y<<"'\n";
+ while((is1=is>>" ")!=IStream())is=is1;
+ is=is>>"= ";
+ while((is1=is>>" ")!=IStream())is=is1;
+ ////cerr<<"reading pr...\n";
+ return (is!=IStream()) ? is>>m.setProb(y,k)>>psD : is;
+ }
+
+ // OBSOLETE!
+ friend pair<StringInput,GenericHidVarCPTModel<Y,K,P,psLbl>*> operator>> ( StringInput si, GenericHidVarCPTModel<Y,K,P,psLbl>& m ) {
+ return pair<StringInput,GenericHidVarCPTModel<Y,K,P,psLbl>*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,GenericHidVarCPTModel<Y,K,P,psLbl>*> si_m, const char* psD ) {
+ Y y; K k; StringInput si,si2; GenericHidVarCPTModel<Y,K,P,psLbl>& m = *si_m.second;
+ si=si_m.first;
+ if ( si==NULL ) return si;
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>k>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>": ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>y>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>"= ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ return (si!=NULL) ? si>>m.setProb(y,k)>>psD : si;
+ }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+////////////////////
+template<class Y, class P, const char* psLbl=psNil>
+class HidVarCPT1DModel : public GenericHidVarCPTModel<Y,MapKey1D<Unit>,P,psLbl> {
+ typedef GenericHidVarCPTModel<Y,MapKey1D<Unit>,P,psLbl> ParentType;
+ typedef HidVarCPT1DModel<Y,P,psLbl> ThisType;
+ public:
+ HidVarCPT1DModel ( ) { }
+ HidVarCPT1DModel ( const Y& y ) { setProb(y)=P(1.0); }
+ P setIterProb ( typename Y::template ArrayIterator<P>& iyp, int& vctr ) const {
+ return GenericHidVarCPTModel<Y,MapKey1D<Unit>,P,psLbl>::setIterProb ( iyp, MapKey1D<Unit>(), vctr );
+ }
+ P& setProb ( const Y& y ) {
+ return GenericHidVarCPTModel<Y,MapKey1D<Unit>,P,psLbl>::setProb ( y, MapKey1D<Unit>() );
+ }
+ P getProb ( const typename Y::template ArrayIterator<P>& iyp) const {
+ return GenericHidVarCPTModel<Y,MapKey1D<Unit>,P,psLbl>::getProb ( iyp, MapKey1D<Unit>() );
+ }
+ const typename Y::template ArrayDistrib<P>& getDistrib ( ) const {
+ return GenericHidVarCPTModel<Y,MapKey1D<Unit>,P,psLbl>::getDistrib ( MapKey1D<Unit>() );
+ }
+ bool contains ( ) const {
+ return GenericHidVarCPTModel<Y,MapKey1D<Unit>,P,psLbl>::contains(MapKey1D<Unit>());
+ }
+ friend pair<IStream,ParentType*> operator>> ( IStream is, ThisType& m ) { return pair<IStream,ParentType*>(is,&m); }
+};
+
+////////////////////
+template<class Y, class X1, class P, const char* psLbl=psNil>
+class HidVarCPT2DModel : public GenericHidVarCPTModel<Y,MapKey1D<X1>,P,psLbl> {
+ typedef GenericHidVarCPTModel<Y,MapKey1D<X1>,P,psLbl> ParentType;
+ typedef HidVarCPT2DModel<Y,X1,P,psLbl> ThisType;
+ public:
+ P setIterProb ( typename Y::template ArrayIterator<P>& iyp, const X1& x1, int& vctr ) const {
+ return GenericHidVarCPTModel<Y,MapKey1D<X1>,P,psLbl>::setIterProb ( iyp, MapKey1D<X1>(x1), vctr );
+ }
+ P& setProb ( const Y& y, const X1& x1 ) {
+ return GenericHidVarCPTModel<Y,MapKey1D<X1>,P,psLbl>::setProb ( y, MapKey1D<X1>(x1) );
+ }
+ typename Y::template ArrayDistrib<P>& setDistrib ( const X1& x1 ) {
+ return GenericHidVarCPTModel<Y,MapKey1D<X1>,P,psLbl>::setDistrib ( MapKey1D<X1>(x1) );
+ }
+ P getProb ( const typename Y::template ArrayIterator<P>& iyp, const X1& x1) const {
+ return GenericHidVarCPTModel<Y,MapKey1D<X1>,P,psLbl>::getProb ( iyp, MapKey1D<X1>(x1) );
+ }
+ const typename Y::template ArrayDistrib<P>& getDistrib ( const X1& x1 ) const {
+ return GenericHidVarCPTModel<Y,MapKey1D<X1>,P,psLbl>::getDistrib ( MapKey1D<X1>(x1) );
+ }
+ bool contains ( const X1& x1 ) const {
+ return GenericHidVarCPTModel<Y,MapKey1D<X1>,P,psLbl>::contains(MapKey1D<X1>(x1));
+ }
+ friend pair<IStream,ParentType*> operator>> ( IStream is, ThisType& m ) { return pair<IStream,ParentType*>(is,&m); }
+};
+
+////////////////////
+template<class Y, class X1, class X2, class P, const char* psLbl=psNil>
+class HidVarCPT3DModel : public GenericHidVarCPTModel<Y,MapKey2D<X1,X2>,P,psLbl> {
+ typedef GenericHidVarCPTModel<Y,MapKey2D<X1,X2>,P,psLbl> ParentType;
+ typedef HidVarCPT3DModel<Y,X1,X2,P,psLbl> ThisType;
+ public:
+ P setIterProb ( typename Y::template ArrayIterator<P>& iyp, const X1& x1, const X2& x2, int& vctr ) const {
+ return GenericHidVarCPTModel<Y,MapKey2D<X1,X2>,P,psLbl>::setIterProb ( iyp, MapKey2D<X1,X2>(x1,x2), vctr );
+ }
+ P& setProb ( const Y& y, const X1& x1, const X2& x2 ) {
+ return GenericHidVarCPTModel<Y,MapKey2D<X1,X2>,P,psLbl>::setProb ( y, MapKey2D<X1,X2>(x1,x2) );
+ }
+ typename Y::template ArrayDistrib<P>& setDistrib ( const X1& x1, const X2& x2 ) {
+ return GenericHidVarCPTModel<Y,MapKey2D<X1,X2>,P,psLbl>::setDistrib ( MapKey2D<X1,X2>(x1,x2) );
+ }
+ P getProb ( const typename Y::template ArrayIterator<P>& iyp, const X1& x1, const X2& x2 ) const {
+ return GenericHidVarCPTModel<Y,MapKey2D<X1,X2>,P,psLbl>::getProb ( iyp, MapKey2D<X1,X2>(x1,x2) );
+ }
+ const typename Y::template ArrayDistrib<P>& getDistrib ( const X1& x1, const X2& x2 ) const {
+ return GenericHidVarCPTModel<Y,MapKey2D<X1,X2>,P,psLbl>::getDistrib ( MapKey2D<X1,X2>(x1,x2) );
+ }
+ bool contains ( const X1& x1, const X2& x2 ) const {
+ return GenericHidVarCPTModel<Y,MapKey2D<X1,X2>,P,psLbl>::contains(MapKey2D<X1,X2>(x1,x2));
+ }
+ friend pair<IStream,ParentType*> operator>> ( IStream is, ThisType& m ) { return pair<IStream,ParentType*>(is,&m); }
+};
+
+////////////////////
+template<class Y, class X1, class X2, class X3, class P, const char* psLbl=psNil>
+class HidVarCPT4DModel : public GenericHidVarCPTModel<Y,MapKey3D<X1,X2,X3>,P,psLbl> {
+ typedef GenericHidVarCPTModel<Y,MapKey3D<X1,X2,X3>,P,psLbl> ParentType;
+ typedef HidVarCPT4DModel<Y,X1,X2,X3,P,psLbl> ThisType;
+ public:
+ P setIterProb ( typename Y::template ArrayIterator<P>& iyp, const X1& x1, const X2& x2, const X3& x3, int& vctr ) const {
+ return GenericHidVarCPTModel<Y,MapKey3D<X1,X2,X3>,P,psLbl>::setIterProb ( iyp, MapKey3D<X1,X2,X3>(x1,x2,x3), vctr );
+ }
+ P& setProb ( const Y& y, const X1& x1, const X2& x2, const X3& x3 ) {
+ return GenericHidVarCPTModel<Y,MapKey3D<X1,X2,X3>,P,psLbl>::setProb ( y, MapKey3D<X1,X2,X3>(x1,x2,x3) );
+ }
+ typename Y::template ArrayDistrib<P>& setDistrib ( const X1& x1, const X2& x2, const X3& x3 ) {
+ return GenericHidVarCPTModel<Y,MapKey3D<X1,X2,X3>,P,psLbl>::setDistrib ( MapKey3D<X1,X2,X3>(x1,x2,x3) );
+ }
+ P getProb ( const typename Y::template ArrayIterator<P>& iyp, const X1& x1, const X2& x2, const X3& x3 ) const {
+ return GenericHidVarCPTModel<Y,MapKey3D<X1,X2,X3>,P,psLbl>::getProb ( iyp, MapKey3D<X1,X2,X3>(x1,x2,x3) );
+ }
+ const typename Y::template ArrayDistrib<P>& getDistrib ( const X1& x1, const X2& x2, const X3& x3 ) const {
+ return GenericHidVarCPTModel<Y,MapKey3D<X1,X2,X3>,P,psLbl>::getDistrib ( MapKey3D<X1,X2,X3>(x1,x2,x3) );
+ }
+ bool contains ( const X1& x1, const X2& x2, const X3& x3 ) const {
+ return GenericHidVarCPTModel<Y,MapKey3D<X1,X2,X3>,P,psLbl>::contains(MapKey3D<X1,X2,X3>(x1,x2,x3));
+ }
+ friend pair<IStream,ParentType*> operator>> ( IStream is, ThisType& m ) { return pair<IStream,ParentType*>(is,&m); }
+};
+
+////////////////////
+template<class Y, class X1, class X2, class X3, class X4, class P, const char* psLbl=psNil>
+class HidVarCPT5DModel : public GenericHidVarCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P,psLbl> {
+ typedef GenericHidVarCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P,psLbl> ParentType;
+ typedef HidVarCPT5DModel<Y,X1,X2,X3,X4,P,psLbl> ThisType;
+ public:
+ P setIterProb ( typename Y::template ArrayIterator<P>& iyp, const X1& x1, const X2& x2, const X3& x3, const X4& x4, int& vctr ) const {
+ return GenericHidVarCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P,psLbl>::setIterProb ( iyp, MapKey4D<X1,X2,X3,X4>(x1,x2,x3,x4), vctr );
+ }
+ P& setProb ( const Y& y, const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) {
+ return GenericHidVarCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P,psLbl>::setProb ( y, MapKey4D<X1,X2,X3,X4>(x1,x2,x3,x4) );
+ }
+ typename Y::template ArrayDistrib<P>& setDistrib ( const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) {
+ return GenericHidVarCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P,psLbl>::setDistrib ( MapKey4D<X1,X2,X3,X4>(x1,x2,x3,x4) );
+ }
+ P getProb ( const typename Y::template ArrayIterator<P>& iyp, const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) const {
+ return GenericHidVarCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P,psLbl>::getProb ( iyp, MapKey4D<X1,X2,X3,X4>(x1,x2,x3,x4) );
+ }
+ const typename Y::template ArrayDistrib<P>& getDistrib ( const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) const {
+ return GenericHidVarCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P,psLbl>::getDistrib ( MapKey4D<X1,X2,X3,X4>(x1,x2,x3,x4) );
+ }
+ bool contains ( const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) const {
+ return GenericHidVarCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P,psLbl>::contains(MapKey4D<X1,X2,X3,X4>(x1,x2,x3,x4));
+ }
+ friend pair<IStream,ParentType*> operator>> ( IStream is, ThisType& m ) { return pair<IStream,ParentType*>(is,&m); }
+};
+
+////////////////////
+template<class Y, class X1, class X2, class X3, class X4, class X5, class P, const char* psLbl=psNil>
+class HidVarCPT6DModel : public GenericHidVarCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P,psLbl> {
+ typedef GenericHidVarCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P,psLbl> ParentType;
+ typedef HidVarCPT6DModel<Y,X1,X2,X3,X4,X5,P,psLbl> ThisType;
+ public:
+ P setIterProb ( typename Y::template ArrayIterator<P>& iyp, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, int& vctr ) const {
+ return GenericHidVarCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P,psLbl>::setIterProb ( iyp, MapKey5D<X1,X2,X3,X4,X5>(x1,x2,x3,x4,x5), vctr );
+ }
+ P& setProb ( const Y& y, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) {
+ return GenericHidVarCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P,psLbl>::setProb ( y, MapKey5D<X1,X2,X3,X4,X5>(x1,x2,x3,x4,x5) );
+ }
+ typename Y::template ArrayDistrib<P>& setDistrib ( const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) {
+ return GenericHidVarCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P,psLbl>::setDistrib ( MapKey5D<X1,X2,X3,X4,X5>(x1,x2,x3,x4,x5) );
+ }
+ P getProb ( const typename Y::template ArrayIterator<P>& iyp, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) const {
+ return GenericHidVarCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P,psLbl>::getProb ( iyp, MapKey5D<X1,X2,X3,X4,X5>(x1,x2,x3,x4,x5) );
+ }
+ const typename Y::template ArrayDistrib<P>& getDistrib ( const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) const {
+ return GenericHidVarCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P,psLbl>::getDistrib ( MapKey5D<X1,X2,X3,X4,X5>(x1,x2,x3,x4,x5) );
+ }
+ bool contains ( const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) const {
+ return GenericHidVarCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P,psLbl>::contains(MapKey5D<X1,X2,X3,X4,X5>(x1,x2,x3,x4,x5));
+ }
+ friend pair<IStream,ParentType*> operator>> ( IStream is, ThisType& m ) { return pair<IStream,ParentType*>(is,&m); }
+};
+
+////////////////////
+template<class Y, class X1, class X2, class X3, class X4, class X5, class X6, class P, const char* psLbl=psNil>
+class HidVarCPT7DModel : public GenericHidVarCPTModel<Y,MapKey6D<X1,X2,X3,X4,X5,X6>,P,psLbl> {
+ typedef GenericHidVarCPTModel<Y,MapKey6D<X1,X2,X3,X4,X5,X6>,P,psLbl> ParentType;
+ typedef HidVarCPT7DModel<Y,X1,X2,X3,X4,X5,X6,P,psLbl> ThisType;
+ public:
+ P setIterProb ( typename Y::template ArrayIterator<P>& iyp, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, int& vctr ) const {
+ return GenericHidVarCPTModel<Y,MapKey6D<X1,X2,X3,X4,X5,X6>,P,psLbl>::setIterProb ( iyp, MapKey6D<X1,X2,X3,X4,X5,X6>(x1,x2,x3,x4,x5,x6), vctr );
+ }
+ P& setProb ( const Y& y, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6 ) {
+ return GenericHidVarCPTModel<Y,MapKey6D<X1,X2,X3,X4,X5,X6>,P,psLbl>::setProb ( y, MapKey6D<X1,X2,X3,X4,X5,X6>(x1,x2,x3,x4,x5,x6) );
+ }
+ typename Y::template ArrayDistrib<P>& setDistrib ( const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6 ) {
+ return GenericHidVarCPTModel<Y,MapKey6D<X1,X2,X3,X4,X5,X6>,P,psLbl>::setDistrib ( MapKey6D<X1,X2,X3,X4,X5,X6>(x1,x2,x3,x4,x5,x6) );
+ }
+ P getProb ( const typename Y::template ArrayIterator<P>& iyp, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6 ) const {
+ return GenericHidVarCPTModel<Y,MapKey6D<X1,X2,X3,X4,X5,X6>,P,psLbl>::getProb ( iyp, MapKey6D<X1,X2,X3,X4,X5,X6>(x1,x2,x3,x4,x5,x6) );
+ }
+ const typename Y::template ArrayDistrib<P>& getDistrib ( const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6 ) const {
+ return GenericHidVarCPTModel<Y,MapKey6D<X1,X2,X3,X4,X5,X6>,P,psLbl>::getDistrib ( MapKey6D<X1,X2,X3,X4,X5,X6>(x1,x2,x3,x4,x5,x6) );
+ }
+ bool contains ( const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6 ) const {
+ return GenericHidVarCPTModel<Y,MapKey6D<X1,X2,X3,X4,X5,X6>,P,psLbl>::contains(MapKey6D<X1,X2,X3,X4,X5,X6>(x1,x2,x3,x4,x5,x6));
+ }
+ friend pair<IStream,ParentType*> operator>> ( IStream is, ThisType& m ) { return pair<IStream,ParentType*>(is,&m); }
+};
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+
+template<class M1>
+class SingleFactoredModel {
+ private:
+ M1 m1;
+ public:
+ const M1& getM1 ( ) const { return m1; }
+ M1& setM1 ( ) { return m1; }
+ void subsume ( SingleFactoredModel<M1>& fm ) { m1.subsume(fm.m1); }
+ void clear ( ) { m1.clear(); }
+ bool readFields ( Array<char*>& aps ) { return ( m1.readFields(aps) ); }
+ friend pair<StringInput,SingleFactoredModel<M1>*> operator>> ( StringInput si, SingleFactoredModel<M1>& m ) {
+ return pair<StringInput,SingleFactoredModel<M1>*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,SingleFactoredModel<M1>*> si_m, const char* psD ) {
+ return si_m.first>>si_m.second->m1>>psD; }
+};
+
+template<class M1,class M2>
+class DoubleFactoredModel {
+ private:
+ M1 m1; M2 m2;
+ public:
+ const M1& getM1 ( ) const { return m1; }
+ const M2& getM2 ( ) const { return m2; }
+ M1& setM1 ( ) { return m1; }
+ M2& setM2 ( ) { return m2; }
+ void subsume ( DoubleFactoredModel<M1,M2>& fm ) { m1.subsume(fm.m1); m2.subsume(fm.m2); }
+ void clear ( ) { m1.clear(); m2.clear(); }
+ bool readFields ( Array<char*>& aps ) { return ( m1.readFields(aps) || m2.readFields(aps) ); }
+ friend pair<StringInput,DoubleFactoredModel<M1,M2>*> operator>> ( StringInput si, DoubleFactoredModel<M1,M2>& m ) {
+ return pair<StringInput,DoubleFactoredModel<M1,M2>*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,DoubleFactoredModel<M1,M2>*> si_m, const char* psD ) {
+ StringInput si; return ( (si=si_m.first>>si_m.second->m1>>psD)!=NULL ||
+ (si=si_m.first>>si_m.second->m2>>psD)!=NULL ) ? si : NULL; }
+};
+
+template<class M1,class M2,class M3>
+class TripleFactoredModel {
+ private:
+ M1 m1; M2 m2; M3 m3;
+ public:
+ const M1& getM1 ( ) const { return m1; }
+ const M2& getM2 ( ) const { return m2; }
+ const M3& getM3 ( ) const { return m3; }
+ M1& setM1 ( ) { return m1; }
+ M2& setM2 ( ) { return m2; }
+ M3& setM3 ( ) { return m3; }
+ void subsume ( TripleFactoredModel<M1,M2,M3>& fm ) { m1.subsume(fm.m1); m2.subsume(fm.m2); m3.subsume(fm.m3); }
+ void clear ( ) { m1.clear(); m2.clear(); m3.clear(); }
+ bool readFields ( Array<char*>& aps ) { return ( m1.readFields(aps) || m2.readFields(aps) || m3.readFields(aps) ); }
+ friend pair<StringInput,TripleFactoredModel<M1,M2,M3>*> operator>> ( StringInput si, TripleFactoredModel<M1,M2,M3>& m ) {
+ return pair<StringInput,TripleFactoredModel<M1,M2,M3>*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,TripleFactoredModel<M1,M2,M3>*> si_m, const char* psD ) {
+ StringInput si; return ( (si=si_m.first>>si_m.second->m1>>psD)!=NULL ||
+ (si=si_m.first>>si_m.second->m2>>psD)!=NULL ||
+ (si=si_m.first>>si_m.second->m3>>psD)!=NULL ) ? si : NULL; }
+};
+
+template<class M1,class M2,class M3,class M4>
+class QuadrupleFactoredModel {
+ private:
+ M1 m1; M2 m2; M3 m3;M4 m4;
+ public:
+ const M1& getM1 ( ) const { return m1; }
+ const M2& getM2 ( ) const { return m2; }
+ const M3& getM3 ( ) const { return m3; }
+ const M4& getM4 ( ) const { return m4; }
+ M1& setM1 ( ) { return m1; }
+ M2& setM2 ( ) { return m2; }
+ M3& setM3 ( ) { return m3; }
+ M4& setM4 ( ) { return m4; }
+ void subsume ( QuadrupleFactoredModel<M1,M2,M3,M4>& fm ) { m1.subsume(fm.m1); m2.subsume(fm.m2); m3.subsume(fm.m3); m4.subsum(fm.m4); }
+ void clear ( ) { m1.clear(); m2.clear(); m3.clear(); m4.clear(); }
+ bool readFields ( Array<char*>& aps ) { return ( m1.readFields(aps) || m2.readFields(aps) || m3.readFields(aps) || m4.readFields(aps) ); }
+ friend pair<StringInput,QuadrupleFactoredModel<M1,M2,M3,M4>*> operator>> ( StringInput si, QuadrupleFactoredModel<M1,M2,M3,M4>& m ) {
+ return pair<StringInput,QuadrupleFactoredModel<M1,M2,M3,M4>*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,QuadrupleFactoredModel<M1,M2,M3,M4>*> si_m, const char* psD ) {
+ StringInput si; return ( (si=si_m.first>>si_m.second->m1>>psD)!=NULL ||
+ (si=si_m.first>>si_m.second->m2>>psD)!=NULL ||
+ (si=si_m.first>>si_m.second->m3>>psD)!=NULL ||
+ (si=si_m.first>>si_m.second->m4>>psD)!=NULL ) ? si : NULL; }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+
+/*
+template<class IMRV1>
+class ComplexSingleIteratedModeledRV {
+ public:
+ static const int NUM_ITERS = IMRV1::NUM_ITERS;
+ IMRV1 iter_first;
+ ComplexSingleIteratedModeledRV ( ) { }
+ ComplexSingleIteratedModeledRV ( const ComplexSingleIteratedModeledRV& imrv ) : iter_first(imrv.iter_first) { }
+ ComplexSingleIteratedModeledRV ( const IMRV1& imrv1 ) : iter_first(imrv1) { }
+ void write ( FILE* pf ) const { iter_first.write(pf); }
+ friend ostream& operator<< ( ostream& os, const ComplexSingleIteratedModeledRV<IMRV1>& rv ) { return os<<rv.iter_first; }
+};
+
+template<char* SD1,class IMRV1,char* SD2,class IMRV2,char* SD3>
+class ComplexDoubleIteratedModeledRV {
+ public:
+ static const int NUM_ITERS = IMRV1::NUM_ITERS + IMRV2::NUM_ITERS;
+// typedef DelimitedJoint2DRV<SD1,typename IMRV1::VAR,SD2,typename IMRV2::VAR,SD3> VAR;
+ IMRV1 iter_first;
+ IMRV2 iter_second;
+ ComplexDoubleIteratedModeledRV ( ) { }
+ ComplexDoubleIteratedModeledRV ( const ComplexDoubleIteratedModeledRV& imrv ) : iter_first(imrv.iter_first), iter_second(imrv.iter_second) { }
+ ComplexDoubleIteratedModeledRV ( const IMRV1& imrv1, const IMRV2& imrv2 ) : iter_first(imrv1), iter_second(imrv2) { }
+// operator VAR() { return VAR(iter_first,iter_second); }
+ void write ( FILE* pf ) const { iter_first.write(pf); fprintf(pf,","); iter_second.write(pf); }
+ friend ostream& operator<< ( ostream& os, const ComplexDoubleIteratedModeledRV<SD1,IMRV1,SD2,IMRV2,SD3>& rv ) { return os<<SD1<<rv.iter_first<<SD2<<rv.iter_second<<SD3; }
+};
+
+template<char* SD1,class IMRV1,char* SD2,class IMRV2,char* SD3,class IMRV3,char* SD4>
+class ComplexTripleIteratedModeledRV {
+ public:
+ static const int NUM_ITERS = IMRV1::NUM_ITERS + IMRV2::NUM_ITERS + IMRV3::NUM_ITERS;
+ IMRV1 iter_first;
+ IMRV2 iter_second;
+ IMRV3 iter_third;
+ ComplexTripleIteratedModeledRV ( ) { }
+ ComplexTripleIteratedModeledRV ( const ComplexTripleIteratedModeledRV& imrv ) : iter_first(imrv.iter_first), iter_second(imrv.iter_second), iter_third(imrv.iter_third) { }
+ ComplexTripleIteratedModeledRV ( const IMRV1& imrv1, const IMRV2& imrv2, const IMRV3& imrv3 ) : iter_first(imrv1), iter_second(imrv2), iter_third(imrv3) { }
+ void write ( FILE* pf ) const { iter_first.write(pf); fprintf(pf,","); iter_second.write(pf); fprintf(pf,","); iter_third.write(pf); }
+ friend ostream& operator<< ( ostream& os, const ComplexTripleIteratedModeledRV<SD1,IMRV1,SD2,IMRV2,SD3,IMRV3,SD4>& rv )
+ { return os<<SD1<<rv.iter_first<<SD2<<rv.iter_second<<SD3<<rv.iter_third<<SD4; }
+};
+
+template<char* SD1,class IMRV1,char* SD2,class IMRV2,char* SD3,class IMRV3,char* SD4,class IMRV4,char* SD5>
+class ComplexQuadrupleIteratedModeledRV {
+ public:
+ static const int NUM_ITERS = IMRV1::NUM_ITERS + IMRV2::NUM_ITERS + IMRV3::NUM_ITERS + IMRV4::NUM_ITERS;
+ IMRV1 iter_first;
+ IMRV2 iter_second;
+ IMRV3 iter_third;
+ IMRV4 iter_fourth;
+ ComplexQuadrupleIteratedModeledRV ( ) { }
+ ComplexQuadrupleIteratedModeledRV ( const ComplexQuadrupleIteratedModeledRV& imrv ) : iter_first(imrv.iter_first), iter_second(imrv.iter_second),
+ iter_third(imrv.iter_third), iter_fourth(imrv.iter_fourth) { }
+ ComplexQuadrupleIteratedModeledRV ( const IMRV1& imrv1, const IMRV2& imrv2, const IMRV3& imrv3, const IMRV4& imrv4 ) : iter_first(imrv1), iter_second(imrv2),
+ iter_third(imrv3), iter_fourth(imrv4) { }
+ void write ( FILE* pf ) const { iter_first.write(pf); fprintf(pf,","); iter_second.write(pf); fprintf(pf,","); iter_third.write(pf); fprintf(pf,","); iter_fourth.write(pf); }
+ friend ostream& operator<< ( ostream& os, const ComplexQuadrupleIteratedModeledRV<SD1,IMRV1,SD2,IMRV2,SD3,IMRV3,SD4,IMRV4,SD5>& rv )
+ { return os<<SD1<<rv.iter_first<<SD2<<rv.iter_second<<SD3<<rv.iter_third<<SD4<<rv.iter_fourth<<SD5; }
+};
+
+template<class IMRV,char* SD,int I>
+class ComplexArrayIteratedModeledRV {
+ public:
+ static const int NUM_ITERS = IMRV::NUM_ITERS * I;
+ DelimitedStaticSafeArray<I,SD,IMRV> iter_array;
+ void write ( FILE* pf ) const { for(int i=0;i<I;i++) iter_array.get(i).write(pf); }
+ friend ostream& operator<< ( ostream& os, const ComplexArrayIteratedModeledRV<IMRV,SD,I>& rv ) { return os<<rv.iter_array; }
+};
+*/
+
+
+#endif //_NL_CPT__
diff --git a/synlm/hhmm/rvtl/include/nl-crf.h b/synlm/hhmm/rvtl/include/nl-crf.h
new file mode 100644
index 000000000..44744ad03
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-crf.h
@@ -0,0 +1,359 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NL_CRF__
+#define _NL_CRF__
+
+#include "nl-safeids.h"
+#include "nl-probmodel.h"
+#include <cassert>
+#include <math.h>
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// CRFModeledRV<Y>
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template <class Y,class X1,class X2>
+class CRF3DModeledRV : public Y {
+
+ private:
+
+ // Static data members...
+ static bool bModel; // whether model defined yet
+ static int cardGlb; // global dependencies (used in all potentials)
+ static int cardOff; // offset positions in site var sequence
+ static int cardSh; // clique shapes at each offset
+ static int cardCnd; // possible condition clique configs incl non-site vars in high bits
+ static int bitsVal; // size in bits of val part of clique config
+ static int bitsValSite; // size in bits of each site var in val clique config
+ static SafeArray5D<Id<int>,int,int,int,int,float> aaaaaPotentials; // the model
+/* static SafeArray3D<int> aaaCnds; // calc features only once per frame */
+
+ public:
+
+ // Static extraction methods...
+ static const float& getPotential ( Id<int> glb, int off, int sh, int configCnd, int configVal )
+ { assert(bModel); return aaaaaPotentials.set(glb,off,sh,configCnd,configVal); }
+
+ // Static specification methods...
+ static void init ( int g, int o, int s, int c, int v, int b )
+ { cardGlb=g; cardOff=o; cardSh=s; cardCnd=c; bitsVal=v; bitsValSite=b; }
+ static float& setPotential ( Id<int> glb, int off, int sh, int configCnd, int configVal )
+ { if(!bModel){aaaaaPotentials.init(cardGlb,cardOff,cardSh,cardCnd,1<<bitsVal,1.0); bModel=true;}
+ return aaaaaPotentials.set(glb,off,sh,configCnd,configVal); }
+ static void updateObservCliques ( const X1&, const X2& ) ;
+
+ // Static input / output methods...
+ static bool readModelFields ( char*[], int ) ;
+
+ // Extraction methods...
+ Prob getProb ( const X1&, const X2& ) const ;
+
+ // Input / output methods...
+ void writeObservCliqueConfigs ( FILE*, int, const char*, const X1&, const X2&, bool ) const ;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class Y,class X1,class X2> bool CRF3DModeledRV<Y,X1,X2>::bModel = false;
+template <class Y,class X1,class X2> int CRF3DModeledRV<Y,X1,X2>::cardGlb = 0;
+template <class Y,class X1,class X2> int CRF3DModeledRV<Y,X1,X2>::cardOff = 0;
+template <class Y,class X1,class X2> int CRF3DModeledRV<Y,X1,X2>::cardSh = 0;
+template <class Y,class X1,class X2> int CRF3DModeledRV<Y,X1,X2>::cardCnd = 0;
+template <class Y,class X1,class X2> int CRF3DModeledRV<Y,X1,X2>::bitsVal = 0;
+template <class Y,class X1,class X2> int CRF3DModeledRV<Y,X1,X2>::bitsValSite = 0;
+template <class Y,class X1,class X2> SafeArray5D<Id<int>,int,int,int,int,float> CRF3DModeledRV<Y,X1,X2>::aaaaaPotentials;
+/* template <class Y,class X1,class X2> SafeArray3D<int> CRF3DModeledRV<Y,X1,X2>::aaaCnds; */
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class Y,class X1,class X2>
+Prob CRF3DModeledRV<Y,X1,X2>::getProb( const X1& x1, const X2& x2 ) const {
+
+ SafeArray2D<int,int,int> aaCnds ( cardOff, cardSh ) ;
+ SafeArray2D<int,int,double> aaTrell ( cardOff, 1<<bitsVal, 0.0 ) ;
+ double prob = 1.0;
+
+ // For each offset...
+ for ( int off=0; off<cardOff; off++ )
+ // For each shape...
+ for ( int sh=0; sh<cardSh; sh++ )
+ // Update clique config for condition...
+ aaCnds.set(off,sh) = Y::getCliqueConfigCnd ( x1, x2, off, sh ) ;
+
+ // For each offset...
+ for ( int off=0; off<cardOff; off++ ) {
+ // For each shape...
+ for ( int sh=0; sh<cardSh; sh++ )
+ // Multiply phi for feature (that is, exp lambda) into numerator...
+ prob *= getPotential(Y::getGlobalDependency(x1,x2),off,sh,
+ aaCnds.get(off,sh),
+ Y::getCliqueConfigVal(off,sh));
+
+ // If first column in trellis...
+ if ( 0==off ) {
+ // For each trellis value...
+ for ( int configVal=0; configVal<(1<<bitsVal); configVal++ ) {
+ // Add weight of each shape at current offset...
+ float prod=1.0;
+ for ( int sh=0; sh<cardSh; sh++ )
+ prod *= getPotential(Y::getGlobalDependency(x1,x2),off,sh,
+ aaCnds.get(off,sh),
+ configVal) ;
+ aaTrell.set(off,configVal) = prod ;
+ }
+ // If subsequent column in trellis...
+ } else {
+ // For each trellis transition (overlap = all but one)...
+ for ( int configRghtValSite=0; configRghtValSite<(1<<bitsValSite); configRghtValSite++ )
+ for ( int configValOverlap=0; configValOverlap<(1<<(bitsVal-bitsValSite)); configValOverlap++ ) {
+ int configRghtVal = (configValOverlap<<bitsValSite)+configRghtValSite;
+ // For each possible preceding trellis node...
+ for ( int configLeftValSite=0; configLeftValSite<(1<<bitsValSite); configLeftValSite++ ) {
+ int configLeftVal = (configLeftValSite<<(bitsVal-bitsValSite))+configValOverlap;
+ // Add product of result and previous trellis cell to current trellis cell...
+ aaTrell.set(off,configRghtVal) += aaTrell.get(off-1,configLeftVal) ;
+ }
+ // Multiply weight of each shape...
+ float prod=1.0;
+ for ( int sh=0; sh<cardSh; sh++ )
+ prod *= getPotential(Y::getGlobalDependency(x1,x2),off,sh,
+ aaCnds.get(off,sh),
+ configRghtVal);
+ aaTrell.set(off,configRghtVal) *= prod;
+ }
+ }
+ } // END EACH OFFSET
+
+ // Calc total prob mass: sum of all possible forward scores in trellis...
+ double probZ = 0.0;
+ for ( int i=0; i<(1<<bitsVal); i++ )
+ probZ += aaTrell.get(cardOff-1,i);
+ // Normalize prob by total prob mass...
+ return prob/probZ;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class Y,class X1,class X2>
+bool CRF3DModeledRV<Y,X1,X2>::readModelFields ( char* aps[], int numFields ) {
+ if ( 7==numFields )
+ setPotential ( X1(string(aps[1])), // globals
+ atoi(aps[2]), // offsets
+ atoi(aps[3]), // shapes
+ atoi(aps[4]), // cnds
+ atoi(aps[5]) ) = exp(atof(aps[6])) ; // vals
+ else return false;
+ return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class Y,class X1,class X2>
+void CRF3DModeledRV<Y,X1,X2>::writeObservCliqueConfigs ( FILE* pf, int frame, const char* psMdl,
+ const X1& x1, const X2& x2, bool bObsVal ) const {
+ fprintf ( pf, "%04d> %s ", frame, psMdl );
+ // For each shape (feature slope)...
+ for ( int sh=0; sh<cardSh; sh++ ) {
+ // Print clique config condition at each offset...
+ for ( int off=0; off<cardOff; off++ )
+ fprintf ( pf, "%c", intToTetraHex(Y::getCliqueConfigCnd(x1,x2,off,sh)) );
+ if (sh<cardSh-1) printf(","); // commas between shapes
+ }
+ printf(" : "); // cond/val delimiter
+ // Print clique config value at each offset...
+ if ( bObsVal )
+ for ( int off=0; off<cardOff; off++ )
+ fprintf ( pf, "%c", intToTetraHex(Y::getCliqueConfigVal(off,0)) );
+ else fprintf ( pf, "_" ) ;
+ printf("\n");
+}
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// CRF4DModeledRV<Y>
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template <class Y,class X1,class X2,class X3>
+class CRF4DModeledRV : public Y {
+
+ private:
+
+ // Static data members...
+ static bool bModel; // whether model defined yet
+ static int cardGlb; // global dependencies (used in all potentials)
+ static int cardOff; // offset positions in site var sequence
+ static int cardSh; // clique shapes at each offset
+ static int cardCnd; // possible condition clique configs incl non-site vars in high bits
+ static int bitsVal; // size in bits of val part of clique config
+ static int bitsValSite; // size in bits of each site var in val clique config
+ static SafeArray5D<Id<int>,int,int,int,int,float> aaaaaPotentials; // the model
+/* static SafeArray3D<int> aaaCnds; // calc features only once per frame */
+
+ public:
+
+ // Static extraction methods...
+ static const float& getPotential ( Id<int> glb, int off, int sh, int configCnd, int configVal )
+ { assert(bModel); return aaaaaPotentials.set(glb,off,sh,configCnd,configVal); }
+
+ // Static specification methods...
+ static void init ( int g, int o, int s, int c, int v, int b )
+ { cardGlb=g; cardOff=o; cardSh=s; cardCnd=c; bitsVal=v; bitsValSite=b; }
+ static float& setPotential ( Id<int> glb, int off, int sh, int configCnd, int configVal )
+ { if(!bModel){aaaaaPotentials.init(cardGlb,cardOff,cardSh,cardCnd,1<<bitsVal,1.0); bModel=true;}
+ return aaaaaPotentials.set(glb,off,sh,configCnd,configVal); }
+
+ // Static input / output methods...
+ static bool readModelFields ( char*[], int ) ;
+
+ // Extraction methods...
+ Prob getProb ( const X1&, const X2&, const X3& ) const ;
+
+ // Input / output methods...
+ void writeObservCliqueConfigs ( FILE*, int, const char*, const X1&, const X2&, const X3&, bool ) const ;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class Y,class X1,class X2,class X3> bool CRF4DModeledRV<Y,X1,X2,X3>::bModel = false;
+template <class Y,class X1,class X2,class X3> int CRF4DModeledRV<Y,X1,X2,X3>::cardGlb = 0;
+template <class Y,class X1,class X2,class X3> int CRF4DModeledRV<Y,X1,X2,X3>::cardOff = 0;
+template <class Y,class X1,class X2,class X3> int CRF4DModeledRV<Y,X1,X2,X3>::cardSh = 0;
+template <class Y,class X1,class X2,class X3> int CRF4DModeledRV<Y,X1,X2,X3>::cardCnd = 0;
+template <class Y,class X1,class X2,class X3> int CRF4DModeledRV<Y,X1,X2,X3>::bitsVal = 0;
+template <class Y,class X1,class X2,class X3> int CRF4DModeledRV<Y,X1,X2,X3>::bitsValSite = 0;
+template <class Y,class X1,class X2,class X3> SafeArray5D<Id<int>,int,int,int,int,float>
+ CRF4DModeledRV<Y,X1,X2,X3>::aaaaaPotentials;
+/* template <class Y,class X1,class X2> SafeArray3D<int> CRF4DModeledRV<Y,X1,X2>::aaaCnds; */
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class Y,class X1,class X2,class X3>
+Prob CRF4DModeledRV<Y,X1,X2,X3>::getProb( const X1& x1, const X2& x2, const X3& x3 ) const {
+
+ SafeArray2D<int,int,int> aaCnds ( cardOff, cardSh ) ;
+ SafeArray2D<int,int,double> aaTrell ( cardOff, 1<<bitsVal, 0.0 ) ;
+ double prob = 1.0;
+
+ // For each offset...
+ for ( int off=0; off<cardOff; off++ )
+ // For each shape...
+ for ( int sh=0; sh<cardSh; sh++ )
+ // Update clique config for condition...
+ aaCnds.set(off,sh) = Y::getCliqueConfigCnd ( x1, x2, x3, off, sh ) ;
+
+ // For each offset...
+ for ( int off=0; off<cardOff; off++ ) {
+ // For each shape...
+ for ( int sh=0; sh<cardSh; sh++ )
+ // Multiply phi for feature (that is, exp lambda) into numerator...
+ prob *= getPotential(Y::getGlobalDependency(x1,x2,x3),off,sh,
+ aaCnds.get(off,sh),
+ Y::getCliqueConfigVal(off,sh));
+
+ // If first column in trellis...
+ if ( 0==off ) {
+ // For each trellis value...
+ for ( int configVal=0; configVal<(1<<bitsVal); configVal++ ) {
+ // Add weight of each shape at current offset...
+ float prod=1.0;
+ for ( int sh=0; sh<cardSh; sh++ )
+ prod *= getPotential(Y::getGlobalDependency(x1,x2,x3),off,sh,
+ aaCnds.get(off,sh),
+ configVal) ;
+ aaTrell.set(off,configVal) = prod ;
+ }
+ // If subsequent column in trellis...
+ } else {
+ // For each trellis transition (overlap = all but one)...
+ for ( int configRghtValSite=0; configRghtValSite<(1<<bitsValSite); configRghtValSite++ )
+ for ( int configValOverlap=0; configValOverlap<(1<<(bitsVal-bitsValSite)); configValOverlap++ ) {
+ int configRghtVal = (configValOverlap<<bitsValSite)+configRghtValSite;
+ // For each possible preceding trellis node...
+ for ( int configLeftValSite=0; configLeftValSite<(1<<bitsValSite); configLeftValSite++ ) {
+ int configLeftVal = (configLeftValSite<<(bitsVal-bitsValSite))+configValOverlap;
+ // Add product of result and previous trellis cell to current trellis cell...
+ aaTrell.set(off,configRghtVal) += aaTrell.get(off-1,configLeftVal) ;
+ }
+ // Multiply weight of each shape...
+ float prod=1.0;
+ for ( int sh=0; sh<cardSh; sh++ )
+ prod *= getPotential(Y::getGlobalDependency(x1,x2,x3),off,sh,
+ aaCnds.get(off,sh),
+ configRghtVal);
+ aaTrell.set(off,configRghtVal) *= prod;
+ }
+ }
+ } // END EACH OFFSET
+
+ // Calc total prob mass: sum of all possible forward scores in trellis...
+ double probZ = 0.0;
+ for ( int i=0; i<(1<<bitsVal); i++ )
+ probZ += aaTrell.get(cardOff-1,i);
+ // Normalize prob by total prob mass...
+ return prob/probZ;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class Y,class X1,class X2,class X3>
+bool CRF4DModeledRV<Y,X1,X2,X3>::readModelFields ( char* aps[], int numFields ) {
+ if ( 7==numFields )
+ setPotential ( X1(string(aps[1])), // globals
+ atoi(aps[2]), // offsets
+ atoi(aps[3]), // shapes
+ atoi(aps[4]), // cnds
+ atoi(aps[5]) ) = exp(atof(aps[6])) ; // vals
+ else return false;
+ return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class Y,class X1,class X2, class X3>
+void CRF4DModeledRV<Y,X1,X2,X3>::writeObservCliqueConfigs ( FILE* pf, int frame, const char* psMdl,
+ const X1& x1, const X2& x2,
+ const X3& x3, bool bObsVal ) const {
+ fprintf ( pf, "%04d> %s ", frame, psMdl );
+ // For each shape (feature slope)...
+ for ( int sh=0; sh<cardSh; sh++ ) {
+ // Print clique config condition at each offset...
+ for ( int off=0; off<cardOff; off++ )
+ fprintf ( pf, "%c", intToTetraHex(Y::getCliqueConfigCnd(x1,x2,x3,off,sh)) );
+ if (sh<cardSh-1) printf(","); // commas between shapes
+ }
+ printf(" : "); // cond/val delimiter
+ // Print clique config value at each offset...
+ if ( bObsVal )
+ for ( int off=0; off<cardOff; off++ )
+ fprintf ( pf, "%c", intToTetraHex(Y::getCliqueConfigVal(off,0)) );
+ else fprintf ( pf, "_" ) ;
+ printf("\n");
+}
+
+#endif //_NL_CRF__
diff --git a/synlm/hhmm/rvtl/include/nl-denot.h b/synlm/hhmm/rvtl/include/nl-denot.h
new file mode 100644
index 000000000..0b50663a1
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-denot.h
@@ -0,0 +1,500 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NL_DENOT__
+#define _NL_DENOT__
+
+#include "nl-safeids.h"
+#include "nl-prob.h"
+#include "nl-const.h"
+#include "nl-randvar.h"
+#include "nl-cpt.h"
+#include <string>
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// VecE
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template<int N,class I,class RC=ReaderContext>
+class VecE : public StaticSafeArray<N,I> { // Coindexation vector
+ public:
+ typedef I IntType;
+ typedef RC RCType;
+ static const int NUM_ENTS;
+ // Constructor / destructor methods...
+ VecE ( ) : StaticSafeArray<N,I>(-1) { }
+ VecE ( const string& s, RC& rc ) : StaticSafeArray<N,I>(-1) { read(s,rc); }
+ // Specification methods...
+ void unOffset ( const ReaderContext& rc ) { }
+ void pushOffsets ( const ReaderContext& rc ) { }
+ // Extraction methods...
+ //int getHashConst ( const int m ) const { int k=1; for(int i=0;i<NUM_ENTS;i++){k=(k<<sizeof(I))%m; } return k; }
+ //int getHashKey ( const int m ) const { int k=0; for(int i=0;i<NUM_ENTS;i++){k=k<<sizeof(I); k+=abs(StaticSafeArray<N,I>::get(i)); k%=m; } return k; }
+ size_t getHashKey ( ) const { size_t k=0; for(int i=0;i<NUM_ENTS;i++){k=rotLeft(k,3); k^=StaticSafeArray<N,I>::get(i).toInt(); } return k; }
+ bool operator< (const VecE<N,I,RC>& e) const { return StaticSafeArray<N,I>::operator<(e); }
+ bool operator==(const VecE<N,I,RC>& e) const { return StaticSafeArray<N,I>::operator==(e); }
+ void readercontextPush ( const ReaderContext& rc ) const { }
+ void readercontextPop ( const ReaderContext& rc ) const { }
+ // Input / output methods...
+ void read ( char* ps, const ReaderContext& ) ;
+ void write ( FILE*, ReaderContext& ) const ;
+ void write ( FILE* pf ) const { ReaderContext rc; write(pf,rc); }
+ string getString() const { ReaderContext rc; return getString(rc); }
+ string getString( ReaderContext& ) const;
+};
+template<int N,class I,class RC> const int VecE<N,I,RC>::NUM_ENTS = N;
+
+////////////////////
+template<int N,class I, class RC>
+void VecE<N,I,RC>::read ( char* ps, const ReaderContext& rc ) {
+ /*
+ ////fprintf(stderr,"VecE::VecE in\n");
+ int i;
+ string::size_type j;
+ // Chop into individual coinds strings...
+ for ( i=0, j=0; s!="" && s!="," && j!=string::npos; i++, j=s.find_first_of(',',j), j=(-1==j)?j:j+1 )
+ StaticSafeArray<N,I>::set(i) = s.substr ( j, s.find_first_of(',',j)-j );
+ ////fprintf(stderr,"VecE::VecE out\n");
+ */
+ char* psT; int i=0;
+ for ( char* psU=strtok_r(ps,",",&psT);
+ psU && i<NUM_ENTS;
+ psU=strtok_r(NULL,",",&psT),i++ )
+ StaticSafeArray<N,I>::set(i) = psU;
+}
+
+////////////////////
+template<int N,class I, class RC>
+void VecE<N,I,RC>::write ( FILE* pf, ReaderContext& rc ) const {
+ for(int i=0; i<NUM_ENTS; i++)
+ if(StaticSafeArray<N,I>::get(i) >= 0 ) {
+ if(i) fprintf(pf,","); StaticSafeArray<N,I>::get(i).write(pf);
+ }
+}
+
+template<int N, class I, class RC>
+string VecE<N,I,RC>::getString( ReaderContext& rc ) const {
+ string rString;
+ for(int i=0; i<NUM_ENTS; i++)
+ if(StaticSafeArray<N,I>::get(i) >= 0 ) {
+ if(i) rString += ",";
+ rString += StaticSafeArray<N,I>::get(i).getString();
+ }
+ return rString;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// VecVReaderContext
+//
+////////////////////////////////////////////////////////////////////////////////
+
+class VecVReaderContext : public ReaderContext {
+ public:
+ map<string,int> msi;
+ int offset;
+ VecVReaderContext ( ) { offset=0; }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// VecV
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template<int N,class I,class RC=VecVReaderContext,int ND1=0,int ND2=0>
+class VecV : public StaticSafeArray<N,I> { // Coindexation vector
+ public:
+ typedef I IntType;
+ typedef RC RCType;
+ static const int NUM_ENTS;
+ static const int NUM_ENTS_DEP1;
+ static const int NUM_ENTS_DEP2;
+ // Constructor / destructor methods...
+ VecV ( ) : StaticSafeArray<N,I>(-1) { }
+ VecV ( const string& s, VecVReaderContext& rc ) : StaticSafeArray<N,I>(-1) { read(s,rc); }
+ // Specification methods...
+ void unOffset ( const RCType& rc ) { for(int i=0; i<NUM_ENTS; i++) if(StaticSafeArray<N,I>::get(i)!=-1) StaticSafeArray<N,I>::set(i) += -rc.offset; }
+ void pushOffsets ( RCType& rc ) { for(typename map<string,int>::iterator i=rc.msi.begin(); i!=rc.msi.end(); i++) i->second+=NUM_ENTS; }
+ // Extraction methods...
+ //int getHashConst ( const int m ) const { int k=1; for(int i=0;i<NUM_ENTS;i++){k=(k<<sizeof(I))%m; } return k; }
+ //int getHashKey ( const int m ) const { int k=0; for(int i=0;i<NUM_ENTS;i++){k=k<<sizeof(I); k+=StaticSafeArray<N,I>::get(i); k%=m; } return k; }
+ size_t getHashKey ( ) const { size_t k=0; for(int i=0;i<NUM_ENTS;i++){k=rotLeft(k,3); k^=StaticSafeArray<N,I>::get(i).toInt(); } return k; }
+ bool operator< (const VecV<N,I,RC,ND1,ND2>& v) const { return StaticSafeArray<N,I>::operator<(v); }
+ bool operator==(const VecV<N,I,RC,ND1,ND2>& v) const { return StaticSafeArray<N,I>::operator==(v); }
+ void readercontextPush ( VecVReaderContext& rc ) const { rc.offset+=N; }
+ void readercontextPop ( VecVReaderContext& rc ) const { rc.offset-=N; }
+ // Input / output methods...
+ void read ( char*, VecVReaderContext& ) ;
+ void write ( FILE*, RC& ) const ;
+ void write ( FILE* pf ) const { RC rc; write(pf,rc); }
+ string getString( RC& ) const;
+ string getString() const { RC rc; return getString(rc); }
+};
+template<int N,class I,class RC,int ND1,int ND2> const int VecV<N,I,RC,ND1,ND2>::NUM_ENTS = N;
+template<int N,class I,class RC,int ND1,int ND2> const int VecV<N,I,RC,ND1,ND2>::NUM_ENTS_DEP1 = ND1;
+template<int N,class I,class RC,int ND1,int ND2> const int VecV<N,I,RC,ND1,ND2>::NUM_ENTS_DEP2 = ND2;
+
+////////////////////
+template<int N,class I,class RC,int ND1,int ND2>
+void VecV<N,I,RC,ND1,ND2>::read ( char* ps, VecVReaderContext& rc ) {
+ ////fprintf(stderr,"VecV::VecV in %d\n",rc.offset);
+ StaticSafeArray<N,string> asV;
+
+ // Chop into individual coinds strings...
+ char* psT; int i=0;
+ for ( char* psU=strtok_r(ps,",",&psT);
+ psU && i<NUM_ENTS;
+ psU=strtok_r(NULL,",",&psT), i++ )
+ asV.set(i) = psU;
+
+// int i;
+// string::size_type j;
+//// for ( i=0, j=s.find_first_of(','); j!=string::npos; i++, j=s.find_first_of(',',j+1) )
+//// for ( i=0, j=-1; i==0 || j!=string::npos; i++, j=s.find_first_of(',',j+1) )
+// for ( i=0, j=0; s!="" && j!=string::npos; i++, j=s.find_first_of(',',j), j=(-1==j)?j:j+1 )
+// asV.set(i) = s.substr ( j, s.find_first_of(',',j)-j );
+
+ // Going backwards...
+ for ( i=i-1; i>=0; i-- ) {
+ // Add to map if new coind...
+ if (rc.msi.find(asV.get(i)) == rc.msi.end()) rc.msi[asV.get(i)]=i+rc.offset;
+ StaticSafeArray<N,I>::set(i)=rc.msi[asV.get(i)];
+ }
+ ////fprintf(stderr,"VecV::read out\n");
+ //for(int i=0; i<NUM_ENTS; i++) fprintf(stderr," %d",int(StaticSafeArray<N,I>::get(i))); fprintf(stderr,"\n");
+ //write(stderr);
+}
+
+////////////////////
+template<int N,class I,class RC,int ND1,int ND2>
+void VecV<N,I,RC,ND1,ND2>::write ( FILE* pf, RC& rc ) const {
+ for(int i=0; i<NUM_ENTS; i++)
+ ////fprintf(pf,"%sv%02d",(i)?",":"",int(StaticSafeArray<N,I>::get(i).toInt()));
+ if(StaticSafeArray<N,I>::get(i) >= 0 )
+ fprintf(pf,"%sv%02d",(i)?",":"",(rc.offset)+int(StaticSafeArray<N,I>::get(i).toInt()));
+}
+
+template<int N,class I,class RC,int ND1,int ND2>
+string VecV<N,I,RC,ND1,ND2>::getString (RC& rc) const {
+ string rString;
+ for(int i=0; i<NUM_ENTS; i++)
+ if(StaticSafeArray<N,I>::get(i) >= 0 ) {
+ rString += (i)?",":"";
+ char* tmp = new char[4];
+ // char tmp* = (char*)malloc(4*sizeof(char));
+ sprintf(tmp, "v%02d\0",(rc.offset)+int(StaticSafeArray<N,I>::get(i).toInt()));
+ rString += tmp;
+ delete tmp;
+ // free(tmp);
+ }
+ return rString;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// VecV Compositors
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template<class V1, class V2>
+class JointVecV { //// : public StaticSafeArray<V1::NUM_ENTS+V2::NUM_ENTS,I> {
+ private:
+ V1 v1;
+ V2 v2;
+ public:
+ typedef typename V1::IntType IntType;
+ typedef typename V1::RCType RCType;
+ static const int NUM_ENTS;
+ // Constructor / destructor methods...
+ JointVecV ( ) { }
+ JointVecV ( const V1& a1, const V2& a2 ) {
+ ////fprintf(stderr,"iJoin "); a1.V1::write(stderr); fprintf(stderr," "); a2.V2::write(stderr); fprintf(stderr,"\n");
+ for (int i=0; i<NUM_ENTS; i++) {
+ if ( i<V1::NUM_ENTS ) set(i) = (a1.get(i)==-1) ? IntType(-1) : (a1.get(i)<V1::NUM_ENTS) ? IntType(a1.get(i)) : a1.get(i)+V2::NUM_ENTS;
+ else set(i) = (a2.get(i-V1::NUM_ENTS)==-1) ? IntType(-1) : a2.get(i-V1::NUM_ENTS)+V1::NUM_ENTS;
+ }
+ ////fprintf(stderr,"oJoin "); JointVecV<V1,V2>::write(stderr); fprintf(stderr,"\n");
+ }
+ // Specification methods...
+ typename V1::IntType& set(int i) { assert(i>=0); assert(i<NUM_ENTS); return ((i<V1::NUM_ENTS) ? v1.set(i) : v2.set(i-V1::NUM_ENTS) ); }
+ V1& setSub1() { return v1; }
+ V2& setSub2() { return v2; }
+ void unOffset ( const RCType& rc ) { setSub1().unOffset(rc); setSub2().unOffset(rc); }
+ void pushOffsets ( RCType& rc ) { for(typename map<string,int>::iterator i=rc.msi.begin(); i!=rc.msi.end(); i++) i->second+=NUM_ENTS; }
+ // Extraction methods...
+ //int getHashConst ( const int m ) const { return((v1.getHashConst(m) * v2.getHashConst(m))%m); }
+ //int getHashKey ( const int m ) const { int k=((v1.getHashKey(m)*v2.getHashConst(m))+v2.getHashKey(m))%m; return k; }
+ size_t getHashKey ( ) const { size_t k=rotLeft(v1.getHashKey(),3); k^=v2.getHashKey(); return k; }
+ bool operator==(const JointVecV<V1,V2>& vv) const { return (v1==vv.v1 && v2==vv.v2); }
+ bool operator<(const JointVecV<V1,V2>& vv) const { return (v1<vv.v1 || (v1==vv.v1 && v2<vv.v2)); }
+ void readercontextPush ( VecVReaderContext& rc ) const { rc.offset+=NUM_ENTS; }
+ void readercontextPop ( VecVReaderContext& rc ) const { rc.offset-=NUM_ENTS; }
+ const typename V1::IntType get(int i) const { assert(i>=0); assert(i<NUM_ENTS); return ((i<V1::NUM_ENTS) ? v1.get(i) : v2.get(i-V1::NUM_ENTS) ); }
+ const V1& getSub1() const { return v1; }
+ const V2& getSub2() const { return v2; }
+ // Input / output methods...
+ void write ( FILE* pf, RCType& rc ) const { v1.write(pf,rc); /*JointVecV<V1,V2>::getSub1().readercontextPush(rc);*/ fprintf(pf,";");
+ v2.write(pf,rc); /*JointVecV<V1,V2>::getSub1().readercontextPop(rc);*/ }
+ void write ( FILE* pf ) const { RCType rc; write(pf,rc); }
+ string getString( RCType& rc ) const { return v1.getString(rc) + ";" + v2.getString(rc); }
+ string getString() const { RCType rc; return getString(rc); }
+};
+template<class V1, class V2>
+const int JointVecV<V1,V2>::NUM_ENTS = V1::NUM_ENTS+V2::NUM_ENTS;
+
+////////////////////////////////////////////////////////////
+
+template<char* SD1,class V1,char* SD2,class V2,char* SD3>
+class DelimitedJointVecV : public JointVecV<V1,V2> {
+ public:
+ typedef typename V1::RCType RCType;
+ // Constructor / destructor methods...
+ DelimitedJointVecV ( ) : JointVecV<V1,V2>() { }
+ DelimitedJointVecV ( const string& s, typename V1::RCType& rc ) : JointVecV<V1,V2>() { read(s,rc); }
+ // Extraction methods...
+ bool operator==(const DelimitedJointVecV<SD1,V1,SD2,V2,SD3>& vv) const { return JointVecV<V1,V2>::operator==(vv); }
+ bool operator<(const DelimitedJointVecV<SD1,V1,SD2,V2,SD3>& vv) const { return JointVecV<V1,V2>::operator<(vv); }
+ void readercontextPush ( typename V1::RCType& rc ) const { JointVecV<V1,V2>::getSub1().readercontextPush(rc); JointVecV<V1,V2>::getSub2().readercontextPush(rc); }
+ void readercontextPop ( typename V1::RCType& rc ) const { JointVecV<V1,V2>::getSub1().readercontextPop(rc); JointVecV<V1,V2>::getSub2().readercontextPop(rc); }
+ // Input / output methods...
+ void read ( char*, RCType& ) ;
+ void write ( FILE* pf, RCType& rc ) const {
+ fprintf(pf,"%s",SD1); JointVecV<V1,V2>::getSub1().write(pf,rc); /*JointVecV<V1,V2>::getSub1().readercontextPush(rc);*/
+ fprintf(pf,"%s",SD2); JointVecV<V1,V2>::getSub2().write(pf,rc); /*JointVecV<V1,V2>::getSub1().readercontextPop(rc);*/
+ fprintf(pf,"%s",SD3);
+ }
+ void write ( FILE* pf ) const { RCType rc; write(pf,rc); }
+ string getString(RCType& rc) const {
+ return SD1 + JointVecV<V1,V2>::getSub1().getString(rc) + SD2 + JointVecV<V1,V2>::getSub2().getString(rc) + SD3;
+ }
+ string getString() const { RCType rc; return getString(rc); }
+};
+
+////////////////////
+template<char* SD1,class V1,char* SD2,class V2,char* SD3>
+void DelimitedJointVecV<SD1,V1,SD2,V2,SD3>::read ( char* s, RCType& rc ) {
+ ////fprintf(stderr,"DelimitedJointVecV::read chopping '%s' into '%s'...'%s'...'%s'\n",s.c_str(),SD1,SD2,SD3);
+ if(0!=strncmp(SD1,s,strlen(SD1))) fprintf(stderr,"ERR: '%s' doesn't begin with '%s'\n",s,SD1);
+ if(0!=strcmp(SD3,s+strlen(s)-strlen(SD3))) fprintf(stderr,"ERR: '%s' doesn't end with '%s'\n", s,SD3);
+ /*
+ if(0!=strncmp(SD1,s.c_str(),strlen(SD1))) fprintf(stderr,"ERR: '%s' doesn't begin with '%s'\n",s.c_str(),SD1);
+ if(0!=strcmp(SD3,s.c_str()+s.length()-strlen(SD3))) fprintf(stderr,"ERR: '%s' doesn't end with '%s'\n",s.c_str(),SD3);
+ string::size_type j = s.find(SD2);
+ if(string::npos==j) fprintf(stderr,"ERR: no '%s' found in %s\n",SD2,s.c_str());
+ string s1 = s.substr ( strlen(SD1), j-strlen(SD1) );
+ string s2 = s.substr ( j+strlen(SD2), int(s.length())-int(j)-strlen(SD2)-strlen(SD3) );
+ */
+ char* s1 = s+strlen(SD1);
+ char* s2 = strstr(s,SD2); if (!s2) fprintf(stderr,"WARNING: (VecV) no '%s' found in '%s' -- assuming second string empty\n",SD2,s);
+ s[strlen(s)-strlen(SD3)]='\0';
+ if (s2) { *s2='\0'; s2+=strlen(SD2); } else { s2=s+strlen(s); }
+ //fprintf(stderr,"s1=%s, s2=%s\n",s1,s2);
+ ////fprintf(stderr,"DelimitedJointVecV::read gives `%s' and `%s'\n",s1.c_str(),s2.c_str());
+ JointVecV<V1,V2>::getSub1().readercontextPush(rc); JointVecV<V1,V2>::setSub2().read ( s2, rc ); //V1::NUM_ENTS, msi );
+ JointVecV<V1,V2>::getSub1().readercontextPop(rc); JointVecV<V1,V2>::setSub1().read ( s1, rc ); //0, msi );
+}
+
+////////////////////////////////////////////////////////////
+
+char psXX[] = ""; // Null delimiter for joint RVs
+template<char N>
+class VecVV : public DelimitedJointVecV<psXX,VecV<N,Id<char> >,psXX,VecV<N,Id<char> >,psXX> {}; // Coindexation vector, for result of binary branch rule
+
+////////////////////////////////////////////////////////////////////////////////
+
+template<class V1, class V2>
+class ComposedVecV : public JointVecV<V1,V2> {
+ public:
+ ComposedVecV ( const V1& v1, const V2& v2 ) : JointVecV<V1,V2>() {
+ ////fprintf(stderr,"iComp "); v1.write(stderr); fprintf(stderr," "); v2.write(stderr); fprintf(stderr,"\n");
+ for (int i=0; i<V1::NUM_ENTS+V2::NUM_ENTS; i++) {
+ // If in first sub-part...
+ if ( i<V1::NUM_ENTS ) {
+ // If not valid...
+ if ( v1.get(i)==-1 ) continue;
+ // If v1[i] intra-indexed...
+ else if ( v1.get(i)<V1::NUM_ENTS )
+ JointVecV<V1,V2>::set(i) = v1.get(i);
+ // If v1[i] inter-indexed...
+ else if ( v1.get(i)<V1::NUM_ENTS+V2::NUM_ENTS )
+//{
+ JointVecV<V1,V2>::set(i) = (v2.get(v1.get(i).toInt()-V1::NUM_ENTS)!=-1) ? v2.get(v1.get(i).toInt()-V1::NUM_ENTS)+V1::NUM_ENTS : -1;
+//fprintf(stderr,"??????????? %d(%d,%d)%d,%d: ",i,V1::NUM_ENTS,V2::NUM_ENTS,int(v1.get(i)),int(v2.get(13))); JointVecV<V1,V2>::write(stderr); fprintf(stderr,"\n");
+//}
+ else
+ JointVecV<V1,V2>::set(i) = v1.get(i);
+ }
+ else {
+ // If not valid...
+ if ( v2.get(i-V1::NUM_ENTS)==-1 ) continue;
+ // If in second sub-part...
+ else JointVecV<V1,V2>::set(i) = v2.get(i-V1::NUM_ENTS)+V1::NUM_ENTS;
+ }
+ }
+ ////fprintf(stderr,"oComp "); JointVecV<V1,V2>::write(stderr); fprintf(stderr,"\n");
+ }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+template<class V1, class V2>
+class CommutedVecV : public JointVecV<V1,V2> {
+ public:
+ CommutedVecV ( const JointVecV<V2,V1>& v ) : JointVecV<V1,V2>() {
+ ////fprintf(stderr,"iComm "); v.write(stderr); fprintf(stderr,"\n");
+ // Iterate backward through new coind vector...
+ for ( int i=V1::NUM_ENTS+V2::NUM_ENTS-1; i>=0; i-- ) {
+ // If in second sub part V2 (first in v)...
+ if ( i>=V1::NUM_ENTS ) {
+ // If not valid...
+ if ( v.get(i-V1::NUM_ENTS)==-1 ) continue;
+ // If v[i-w2] intra-indexed...
+ else if ( v.get(i-V1::NUM_ENTS)<V2::NUM_ENTS )
+ JointVecV<V1,V2>::set(i) = v.get(i-V1::NUM_ENTS)+V1::NUM_ENTS;
+ // If v[i-w2] cross-indexed to other sub-part (V1)...
+ else if ( v.get(i-V1::NUM_ENTS)<V2::NUM_ENTS+V1::NUM_ENTS ) {
+ if (get(v.get(i-V1::NUM_ENTS).toInt()-V2::NUM_ENTS)==-1)
+ JointVecV<V1,V2>::set(v.get(i-V1::NUM_ENTS).toInt()-V2::NUM_ENTS) = i;
+ JointVecV<V1,V2>::set(i) = get(v.get(i-V1::NUM_ENTS).toInt()-V2::NUM_ENTS);
+ }
+ // If v[i-w2] inter-indexed...
+ else JointVecV<V1,V2>::set(i) = v.get(i-V1::NUM_ENTS);
+ }
+ // If in first sub part V1 (second in v), and not coindexed already...
+ else if (JointVecV<V1,V2>::get(i)==-1) {
+ // If not valid...
+ if ( v.get(i+V2::NUM_ENTS)==-1 ) continue;
+ // If v[i+w1] intra-indexed...
+ else if ( v.get(i+V2::NUM_ENTS)<V2::NUM_ENTS+V1::NUM_ENTS ) {
+ if ( get(v.get(i+V2::NUM_ENTS).toInt()-V2::NUM_ENTS)==-1 ) // should only happen if self-coindexed
+ JointVecV<V1,V2>::set(i) = v.get(i+V2::NUM_ENTS)-V2::NUM_ENTS;
+ else
+ JointVecV<V1,V2>::set(i) = get(v.get(i+V2::NUM_ENTS).toInt()-V2::NUM_ENTS);
+ }
+ // If v[i+w1] inter-indexed...
+ else JointVecV<V1,V2>::set(i) = v.get(i+V2::NUM_ENTS);
+ }
+ //fprintf(stderr,"??????????? %d: ",i); v.write(stderr); fprintf(stderr," -> "); JointVecV<V1,V2>::write(stderr); fprintf(stderr,"\n");
+ }
+ ////fprintf(stderr,"oComm "); JointVecV<V1,V2>::write(stderr); fprintf(stderr,"\n");
+ }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+template<class V1, class V2, class V3>
+class NewCommutedVecV : public JointVecV<V1,JointVecV<V2,V3> > {
+ public:
+ NewCommutedVecV ( const JointVecV<V1,JointVecV<V3,V2> >& v ) : JointVecV<V1,JointVecV<V2,V3> >() {
+ ////fprintf(stderr,"iNewComm "); v.write(stderr); fprintf(stderr,"\n");
+ // Iterate backward through new coind vector...
+ for ( int i=V1::NUM_ENTS+V2::NUM_ENTS+V3::NUM_ENTS-1; i>=0; i-- ) {
+ // If in third sub part V3 (second in v)...
+ if ( i>=V1::NUM_ENTS+V2::NUM_ENTS ) {
+ // If not valid...
+ if ( v.get(i-V2::NUM_ENTS)==-1 ) continue;
+ // If v[i-w2] intra-indexed...
+ else if ( v.get(i-V2::NUM_ENTS)<V1::NUM_ENTS+V3::NUM_ENTS )
+ JointVecV<V1,JointVecV<V2,V3> >::set(i) = v.get(i-V2::NUM_ENTS)+V2::NUM_ENTS;
+ // If v[i-w2] cross-indexed to other sub-part (V2, third in v)...
+ else if ( v.get(i-V2::NUM_ENTS)<V1::NUM_ENTS+V3::NUM_ENTS+V2::NUM_ENTS ) {
+ if (get(v.get(i-V2::NUM_ENTS).toInt()-V3::NUM_ENTS)==-1)
+ JointVecV<V1,JointVecV<V2,V3> >::set(v.get(i-V2::NUM_ENTS).toInt()-V3::NUM_ENTS) = i;
+ JointVecV<V1,JointVecV<V2,V3> >::set(i) = get(v.get(i-V2::NUM_ENTS).toInt()-V3::NUM_ENTS);
+ }
+ // If v[i-w2] inter-indexed...
+ else JointVecV<V1,JointVecV<V2,V3> >::set(i) = v.get(i-V2::NUM_ENTS);
+ }
+ // If in second sub part V2 (third in v), and not coindexed already...
+ else if ( i>=V1::NUM_ENTS && JointVecV<V1,JointVecV<V2,V3> >::get(i)==-1 ) {
+ // If not valid...
+ if ( v.get(i+V3::NUM_ENTS)==-1 ) continue;
+ // If v[i+w1] intra-indexed...
+ else if ( v.get(i+V3::NUM_ENTS)<V1::NUM_ENTS+V3::NUM_ENTS+V2::NUM_ENTS )
+ if ( get(v.get(i+V3::NUM_ENTS).toInt()-V3::NUM_ENTS)==-1 ) // should only happen if self-coindexed
+ JointVecV<V1,JointVecV<V2,V3> >::set(i) = v.get(i+V3::NUM_ENTS)-V3::NUM_ENTS;
+ else
+ JointVecV<V1,JointVecV<V2,V3> >::set(i) = get(v.get(i+V3::NUM_ENTS).toInt()-V3::NUM_ENTS);
+ // If v[i+w1] inter-indexed...
+ else JointVecV<V1,JointVecV<V2,V3> >::set(i) = v.get(i+V3::NUM_ENTS);
+ }
+ // If in first sub part V1 (also first in v)...
+ else if ( i<V1::NUM_ENTS ) {
+ // If not valid...
+ if ( v.get(i)==-1 ) continue;
+ // If v[i] intra-indexed to V1 or inter-indexed to cond...
+ else if ( v.get(i)<V1::NUM_ENTS || v.get(i)>=V1::NUM_ENTS+V3::NUM_ENTS+V2::NUM_ENTS )
+ JointVecV<V1,JointVecV<V2,V3> >::set(i) = v.get(i);
+ // If v[i] inter-indexed to V3 (second in v)...
+ else if ( v.get(i)<V1::NUM_ENTS+V3::NUM_ENTS )
+ JointVecV<V1,JointVecV<V2,V3> >::set(i) = v.get(i)+V2::NUM_ENTS;
+ // If v[i] inter-indexed to V2 (third in v) (note: may have gotten forwarded in commute)...
+ else JointVecV<V1,JointVecV<V2,V3> >::set(i) = get(v.get(i).toInt()-V3::NUM_ENTS);
+ }
+ //fprintf(stderr,"??????????? %d: ",i); v.write(stderr); fprintf(stderr," -> "); JointVecV<V1,JointVecV<V2,V3> >::write(stderr); fprintf(stderr,"\n");
+ }
+ ////fprintf(stderr,"oNewComm\n"); //JointVecV<V2,V3>::write(stderr); fprintf(stderr,"\n");
+ }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+template<class V, class V1>
+class AssociatedVecV : public V {
+ public:
+ AssociatedVecV ( const V1& v ) {
+ // Iterate through new coind vector...
+ for ( int i=0; i<V::NUM_ENTS; i++ )
+ V::set(i) = v.get(i);
+ }
+};
+
+////////////////////////////////////////
+
+template<class V1, class V2>
+class MarginalVecV : public V1 {
+ public:
+ MarginalVecV ( const JointVecV<V1,V2>& v ) {
+ ////fprintf(stderr,"iMarg "); v.write(stderr); fprintf(stderr,"\n");
+ // Iterate through new coind vector...
+ for ( int i=0; i<V1::NUM_ENTS; i++ ) {
+ // If not valid...
+ if ( v.get(i)==-1 ) continue;
+ // If intra-coref...
+ else if (v.get(i)<V1::NUM_ENTS) V1::set(i)=v.get(i);
+ // If inter-coref to marginalized var (assume target value must be self-coref or first coref would point there)...
+ else if (v.get(i)<V1::NUM_ENTS+V2::NUM_ENTS) {
+ for (int j=0; j<=i; j++)
+ if (v.get(j)==v.get(i)) V1::set(j)=i;
+ }
+ // If inter-coref to var after marginalized var...
+ else V1::set(i)=v.get(i)-V2::NUM_ENTS;
+ }
+ ////fprintf(stderr,"oMarg "); V1::write(stderr); fprintf(stderr,"\n");
+ }
+};
+
+#endif /* _NL_DENOT__ */
diff --git a/synlm/hhmm/rvtl/include/nl-dtree-cont.h b/synlm/hhmm/rvtl/include/nl-dtree-cont.h
new file mode 100644
index 000000000..cf6b00d28
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-dtree-cont.h
@@ -0,0 +1,479 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _NL_DTREE_CONTIN__
+#define _NL_DTREE_CONTIN__
+
+#include "nl-dtree.h"
+
+typedef double Wt;
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Cont DTree Node
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template<class Y, class P>
+class ContDecisNode : public DecisNode<Y,P> {
+ private:
+ // Data members...
+ Wt wThreshold; // Threshold weight ("w_0")
+ map<A,Wt> awSeparator; // Hyperplane separator, weights on each attribute/dimension
+ Wt wSumSqr; // Sum of squares (parabolic) convolution coordinate weight
+
+ public:
+ // Constructor / destructor methods...
+ ContDecisNode ( ) : wThreshold(0.0), wSumSqr(0.0) { }
+
+ // Specification methods...
+ Wt& setWt ( ) { return wThreshold; }
+ Wt& setWt ( const A a ) { return (awSeparator.find(a)!=awSeparator.end()) ? awSeparator[a] : awSeparator[a]=0.0; }
+ Wt& setSsWt ( ) { return wSumSqr; }
+
+ // Extraction methods...
+ const Wt getWt ( ) const { return wThreshold; }
+ const Wt getWt ( const A a ) const { return ( (awSeparator.find(a)!=awSeparator.end()) ? awSeparator.find(a)->second : 0.0 ); }
+ const Wt getSsWt ( ) const { return wSumSqr; }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// ContDTree Model
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template<class Y, class X, class P>
+class ContDTree2DModel : public Generic2DModel<Y,X,P>, public Tree<ContDecisNode<Y,P> > {
+ public:
+ // Downcasts (safe b/c no new data)...
+ ContDTree2DModel<Y,X,P>& setLeft() { return static_cast<ContDTree2DModel<Y,X,P>&> ( Tree<ContDecisNode<Y,P> >::setLeft() ); }
+ ContDTree2DModel<Y,X,P>& setRight() { return static_cast<ContDTree2DModel<Y,X,P>&> ( Tree<ContDecisNode<Y,P> >::setRight() ); }
+ const ContDTree2DModel<Y,X,P>& getLeft() const { return static_cast<const ContDTree2DModel<Y,X,P>&> ( Tree<ContDecisNode<Y,P> >::getLeft() ); }
+ const ContDTree2DModel<Y,X,P>& getRight() const { return static_cast<const ContDTree2DModel<Y,X,P>&> ( Tree<ContDecisNode<Y,P> >::getRight() ); }
+ // Extraction methods...
+ const P getProb ( const Y y, const X& x ) const {
+ const Tree<ContDecisNode<Y,P> >* ptr = this;
+ while ( !ptr->isTerm() ) {
+ double sumsqr=0.0;
+ for(A a;a<X::getSize();a.setNext()) sumsqr += pow(x.get(a.toInt()),2.0) / X::getSize();
+ Wt wtdavg = -Tree<ContDecisNode<Y,P> >::getWt();
+ for(A a;a<X::getSize();a.setNext()) wtdavg += Tree<ContDecisNode<Y,P> >::getWt(a) * x.get(a.toInt());
+ wtdavg += Tree<ContDecisNode<Y,P> >::getSsWt() * sumsqr;
+ ptr = (wtdavg>0.0) ? &ptr->getRight() : &ptr->getLeft();
+ }
+ return ptr->getProb(y);
+ }
+ // Input / output methods...
+ bool readFields ( char*[], int ) ;
+ void writeFields ( FILE* pf, string sPref ) {
+ char psPath[1000] = "";
+ write ( pf, (sPref+"").c_str(), psPath, 0 );
+ }
+ void write ( FILE* pf, const char psPrefix[], char psPath[], int iEnd ) const {
+ if (Tree<ContDecisNode<Y,P> >::isTerm()) {
+ Y y;
+ psPath[iEnd]='\0';
+ for ( bool b=y.setFirst(); b; b=y.setNext() )
+ { fprintf(pf, "%s [%s] : ", psPrefix, psPath); y.write(pf); fprintf(pf, " = %f\n", (double)Tree<ContDecisNode<Y,P> >::getProb(y)); }
+ ////psPath[iEnd]='\0'; fprintf ( pf, "%s [%s] : 0 = %f\n", psPrefix, psPath, (double)Tree<ContDecisNode<Y,P> >::getProb("0") );
+ ////psPath[iEnd]='\0'; fprintf ( pf, "%s [%s] : 1 = %f\n", psPrefix, psPath, (double)Tree<ContDecisNode<Y,P> >::getProb("1") );
+ } else {
+ psPath[iEnd]='\0'; fprintf ( pf, "%s [%s] =", psPrefix, psPath );
+ fprintf ( pf, " %f", Tree<ContDecisNode<Y,P> >::getWt() );
+ for(A a;a<X::getSize();a.setNext()) fprintf ( pf, "_%f", Tree<ContDecisNode<Y,P> >::getWt(a.toInt()) );
+ fprintf ( pf, "_%f", Tree<ContDecisNode<Y,P> >::getSsWt() );
+ fprintf ( pf, "\n" );
+ psPath[iEnd]='0'; psPath[iEnd+1]='\0'; getLeft().write ( pf, psPrefix, psPath, iEnd+1 );
+ psPath[iEnd]='1'; psPath[iEnd+1]='\0'; getRight().write ( pf, psPrefix, psPath, iEnd+1 );
+ }
+ }
+};
+
+////////////////////
+template <class Y,class X, class P>
+bool ContDTree2DModel<Y,X,P>::readFields ( char* aps[], int numFields ) {
+ if ( /*aps[0]==sId &&*/ (3==numFields || 4==numFields) ) {
+ //fprintf(stderr,"%s,%d\n",aps[3],numFields);
+ assert ( '['==aps[1][0] && ']'==aps[1][strlen(aps[1])-1] );
+
+ // Start at root...
+ Tree<ContDecisNode<Y,P> >* ptr = this;
+ assert(ptr);
+
+ // Find appropriate node, creating nodes as necessary...
+ for(int i=1; i<strlen(aps[1])-1; i++) {
+ assert ( '0'==aps[1][i] || '1'==aps[1][i] );
+ ptr = ( ('0'==aps[1][i]) ? &ptr->setLeft() : &ptr->setRight() ) ;
+ assert(ptr);
+ }
+
+ // Specify bit (at nonterminal) or distribution (at terminal)...
+ if ( 3==numFields) {
+ char* psT=NULL; Tree<ContDecisNode<Y,P> >::setWt() = atof(strtok_r(aps[2],"_",&psT)); ////atof(aps[2]);
+ for(A a;a<X::getSize();a.setNext()) Tree<ContDecisNode<Y,P> >::setWt(a) = atof(strtok_r(NULL,"_",&psT));
+ Tree<ContDecisNode<Y,P> >::setSsWt() = atof(strtok_r(NULL,"_",&psT)); }
+ // atof(aps[3+a.toInt()]); }
+ else if (4==numFields) ptr->setProb(aps[2]) = atof(aps[3]);
+ else assert(false);
+
+ } else return false;
+ return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+template<class Y, class X1,class X2, class P>
+class ContDTree3DModel : public Generic3DModel<Y,X1,X2,P> {
+ private:
+ // Data members...
+ string sId;
+ SimpleHash<X1,ContDTree2DModel<Y,X2,P> > aqt;
+ public:
+ // Constructor / destructor methods...
+ ContDTree3DModel ( ) { }
+ ContDTree3DModel ( const string& s ) { sId = s; }
+ // Specification methods...
+ ContDTree2DModel<Y,X2,P>& setTree ( const X1& x1 ) { return aqt.set(x1); }
+ // Extraction methods...
+ bool setFirst ( Y& y ) const { return y.setFirst(); }
+ bool setNext ( Y& y ) const { return y.setNext(); }
+ P getProb ( const Y y, const X1& x1, const X2& x2 ) const { return aqt.get(x1).getProb(y,x2); }
+ // Input / output methods...
+ bool readFields ( char*[], int ) ;
+ void writeFields ( FILE* pf, string sPref ) {
+ char psPath[1000] = "";
+ X1 x1;
+ for ( bool b=x1.setFirst(); b; b=x1.setNext() )
+ aqt.get(x1).write ( pf, (sPref + " " + x1.getString()).c_str(), psPath, 0 );
+ }
+};
+
+////////////////////
+template <class Y,class X1,class X2, class P>
+bool ContDTree3DModel<Y,X1,X2,P>::readFields ( char* aps[], int numFields ) {
+ if ( /*aps[0]==sId &&*/ (4==numFields || 5==numFields) ) {
+ //fprintf(stderr,"%s,%d\n",aps[3],numFields);
+ assert ( '['==aps[2][0] && ']'==aps[2][strlen(aps[2])-1] );
+
+ // Start at root...
+ Tree<ContDecisNode<Y,P> >* ptr = &aqt.set(aps[1]);
+ assert(ptr);
+
+ // Find appropriate node, creating nodes as necessary...
+ for(int i=1; i<strlen(aps[2])-1; i++) {
+ assert ( '0'==aps[2][i] || '1'==aps[2][i] );
+ ptr = ( ('0'==aps[2][i]) ? &ptr->setLeft() : &ptr->setRight() ) ;
+ assert(ptr);
+ }
+
+ // Specify bit (at nonterminal) or distribution (at terminal)...
+ if ( 4==numFields) {
+ char* psT=NULL;
+ ptr->setWt() = atof(strtok_r(aps[3],"_",&psT)); ////atof(aps[3]);
+ for(A a;a<X2::getSize();a.setNext()) ptr->setWt(a) = atof(strtok_r(NULL,"_",&psT));
+ ptr->setSsWt() = atof(strtok_r(NULL,"_",&psT)); }
+ ////for(A a;a<X2::getSize();a.setNext()) ptr->setWt(a) = atof(aps[4+a.toInt()]); }
+ else if (5==numFields) ptr->setProb(aps[3]) = atof(aps[4]);
+ //// else if (5==numFields && 0==strcmp(aps[3],"0")) ptr->setProb() = 1.0 - atof(aps[4]);
+ //// else if (5==numFields && 0==strcmp(aps[3],"1")) ptr->setProb() = atof(aps[4]);
+ else assert(false);
+
+ } else return false;
+ return true;
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Trainable ContDTree Model
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template<class Y, class X, class P>
+class TrainableContDTree2DModel : public ContDTree2DModel<Y,X,P> {
+ private:
+ List<Joint2DRV<X,Y> > lxy;
+ public:
+ // Downcasts (safe b/c no new data)...
+ TrainableContDTree2DModel<Y,X,P>& setLeft() { return static_cast<TrainableContDTree2DModel<Y,X,P>&>(ContDTree2DModel<Y,X,P>::setLeft()); }
+ TrainableContDTree2DModel<Y,X,P>& setRight() { return static_cast<TrainableContDTree2DModel<Y,X,P>&>(ContDTree2DModel<Y,X,P>::setRight()); }
+ const TrainableContDTree2DModel<Y,X,P>& getLeft() const { return static_cast<const TrainableContDTree2DModel<Y,X,P>&>(ContDTree2DModel<Y,X,P>::getLeft()); }
+ const TrainableContDTree2DModel<Y,X,P>& getRight() const { return static_cast<const TrainableContDTree2DModel<Y,X,P>&>(ContDTree2DModel<Y,X,P>::getRight()); }
+ // Specification methods...
+ void train ( List<Joint2DRV<X,Y> >&, const double ) ;
+ void train ( const double d ) { train(lxy,d); }
+ ////// Input / output methods...
+ bool readData ( char* vs[], int numFields ) {
+ if ( 3==numFields ) lxy.add() = Joint2DRV<X,Y> ( X(vs[1]), Y(vs[2]) );
+ else return false;
+ return true;
+ }
+};
+
+////////////////////
+template<class Y, class X, class P>
+void TrainableContDTree2DModel<Y,X,P>::train ( List<Joint2DRV<X,Y> >& lxy, const double DTREE_CHISQR_LIMIT ) {
+
+ // Place to store counts...
+ //CPT3DModel<A,B,Y,double> aaaCounts; // hash was MUCH slower!!
+ SafeArray2D<B,Y,double> aaCounts ( 2, Y::getDomain().getSize(), 0.0 );
+ double dTot = lxy.getCard();
+ CPT1DModel<Y,double> modelY;
+
+// if (11613==dTot) { //if (12940<=dTot && dTot<12950) { //if ( 20779==dTot ) { //// (bU)
+// ListedObject<Joint2DRV<X,Y> >* pxy;
+// for ( pxy = lxy.getFirst(); pxy; pxy = lxy.getNext(pxy) ) {
+// fprintf(stdout,"Ohist "); pxy->getSub1().write(stdout); fprintf(stdout," "); pxy->getSub2().write(stdout); fprintf(stdout,"\n");
+// }
+// fprintf(stderr,"PRINTED\n");
+// }
+
+ // For each datum in list...
+ ListedObject<Joint2DRV<X,Y> >* pxy;
+ for ( pxy = lxy.getFirst(); pxy; pxy = lxy.getNext(pxy) ) {
+ // Count Ys...
+ modelY.setProb(pxy->getSub2())++;
+ }
+ modelY.normalize();
+
+ double prRarest = (modelY.getProb("1")<modelY.getProb("0")) ? modelY.getProb("1") : modelY.getProb("0");
+
+// // Set separator to pass through center of positives...
+// for ( pxy = lxy.getFirst(); pxy; pxy = lxy.getNext(pxy) )
+// for ( A a; a<X::getSize(); a.setNext() ) {
+// if ( Y("1")==pxy->getSub2() ) {
+// Tree<ContDecisNode<Y,P> >::setWt() -= (pxy->getSub1().get(a.toInt())+pow(pxy->getSub1().get(a.toInt()),2.0))/dTot; //// (dTot*prRarest);
+// Tree<ContDecisNode<Y,P> >::setWt(a) += pxy->getSub1().get(a.toInt())/dTot; //// (dTot*prRarest);
+// Tree<ContDecisNode<Y,P> >::setSsWt() += pow(pxy->getSub1().get(a.toInt()),2.0)/dTot; //// (dTot*prRarest);
+// }
+// }
+
+ // Set separator to pass through center of positives...
+ Tree<ContDecisNode<Y,P> >::setWt() = 1.0;
+
+
+ // For each gradient descent epoch...
+ for ( int epoch=1; epoch<=1000; epoch++ ) {
+
+ double dCtr=0.0;
+
+ double dPos = 0.0;
+ ListedObject<Joint2DRV<X,Y> >* pxy;
+
+ if(OUTPUT_NOISY) {
+ double lgprTot = 0.0;
+// // For each datum in list...
+// for ( pxy = lxy.getFirst(); pxy; pxy = lxy.getNext(pxy) ) {
+// // Calc tot prob...
+// double wtdavg = -Tree<ContDecisNode<Y,P> >::getWt();
+// for(A a;a<X::getSize();a.setNext()) wtdavg += Tree<ContDecisNode<Y,P> >::getWt(a) * pxy->getSub1().get(a.toInt());
+// // Calc est val of Y using sigmoid transfer fn...
+// P prY = 1.0 / ( 1.0 + exp(-wtdavg) );
+// if(epoch>1)fprintf(stderr," %f %f\n",(double)wtdavg,(double)prY);
+// lgprTot += (pxy->getSub2()==1) ? log(prY) : log(1.0-prY) ;
+// }
+
+ if (OUTPUT_NOISY && epoch%10==0) {
+ // Report...
+ fprintf(stderr," tot=%08d totlogprob=%g separator=%f",(int)dTot,lgprTot,Tree<ContDecisNode<Y,P> >::getWt());
+ for(A a;a<X::getSize();a.setNext()) fprintf(stderr,"_%f",Tree<ContDecisNode<Y,P> >::getWt(a));
+ fprintf(stderr,"_%f",Tree<ContDecisNode<Y,P> >::getSsWt());
+ fprintf(stderr,"\n");
+ }
+ }
+
+ fprintf(stderr," --- epoch %d ---\n",epoch);
+
+ // For each datum in list...
+ for ( pxy = lxy.getFirst(); pxy; pxy = lxy.getNext(pxy) ) {
+// // Use random subset of more frequent Y val so total wts for 1 and 0 are equal (CODE REVIEW: should be subset nearest to centroid of fewer)...
+// if ( double(rand())/double(RAND_MAX) < prRarest/modelY.getProb(pxy->getSub2()) ) {
+
+ dCtr++;
+ double gamma = dTot/(dTot+dCtr); // 1.0/(double(epoch)+dCtr/dTot); // 1.0/double(epoch); // 1.0/(double(epoch)+dCtr/(dTot*prRarest*2.0)); //
+
+ // Weight deltas for next epoch...
+ Wt wDelta = 0.0;
+ SafeArray1D<A,Wt> awDeltas (X::getSize(),0.0);
+ Wt wSsDelta = 0.0;
+
+ // Calc sum of squares for convolution coordinate...
+ double sumsqr=0.0;
+ for(A a;a<X::getSize();a.setNext()) sumsqr += pow(pxy->getSub1().get(a.toInt()),2.0) / X::getSize();
+
+ // Calc wtd avg of feats...
+ double wtdavg = -Tree<ContDecisNode<Y,P> >::getWt();
+ for(A a;a<X::getSize();a.setNext()) wtdavg += Tree<ContDecisNode<Y,P> >::getWt(a) * pxy->getSub1().get(a.toInt());
+ wtdavg += Tree<ContDecisNode<Y,P> >::getSsWt() * sumsqr;
+ //// Calc est val of Y using sigmoid transfer fn...
+ //P prY = ( ( ( (1.0/(1.0+exp(-wtdavg))) - .5 ) * exp(-wtdavg) ) + .5 ) ;
+ // Calc est val of Y using sigmoid transfer fn...
+ P prY = 1.0 / ( 1.0 + exp(-wtdavg) );
+
+ // Calc deltas for each feature/attribute/dimension...
+ double dEachWt = 1.0/dTot; // 1.0/dTot * modelY.getProb ( Y(1-pxy->getSub2().toInt()) ); // 1.0/(dTot*prRarest*2.0); //
+ wDelta += dEachWt * -1 * ( prY - P(double(pxy->getSub2().toInt())) );
+ for ( A a; a<X::getSize(); a.setNext() )
+ awDeltas.set(a) += dEachWt * pxy->getSub1().get(a.toInt()) * ( prY - P(double(pxy->getSub2().toInt())) );
+ wSsDelta += dEachWt * sumsqr * ( prY - P(double(pxy->getSub2().toInt())) );
+
+ // Update weights by deltas...
+ //Tree<ContDecisNode<Y,P> >::setWt() -= gamma * wDelta;
+ ////double reldeduction = wDelta/Tree<ContDecisNode<Y,P> >::getWt();
+ for ( A a; a<X::getSize(); a.setNext() )
+ Tree<ContDecisNode<Y,P> >::setWt(a) -= gamma*awDeltas.get(a); //+ changeratio/Tree<ContDecisNode<Y,P> >::getWt(a);
+ Tree<ContDecisNode<Y,P> >::setSsWt() -= gamma*wSsDelta; //+ changeratio/Tree<ContDecisNode<Y,P> >::getSsWt();
+
+ dPos+=prY; // if (prY>0.5) dPos++;
+
+ // Report...
+ if(OUTPUT_VERYNOISY) {
+ fprintf(stderr," A tot=%08d vals = %f",(int)dTot,-1.00);
+ for(A a;a<X::getSize();a.setNext()) fprintf(stderr,"_%f",pxy->getSub1().get(a.toInt()));
+ fprintf(stderr,"_%f",sumsqr);
+ fprintf(stderr," --> %f %f (gold: %f)\n",wtdavg,(double)prY,double(pxy->getSub2().toInt()));
+ fprintf(stderr," D tot=%08d delt = %f",(int)dTot,wDelta);
+ for(A a;a<X::getSize();a.setNext()) fprintf(stderr,"_%f",awDeltas.get(a));
+ fprintf(stderr,"_%f",wSsDelta);
+ fprintf(stderr,"\n");
+ }
+
+ // Report...
+ if(OUTPUT_VERYNOISY) {
+ fprintf(stderr," _S tot=%08d sepr = %f",(int)dTot,Tree<ContDecisNode<Y,P> >::getWt());
+ for(A a;a<X::getSize();a.setNext()) fprintf(stderr,"_%f",Tree<ContDecisNode<Y,P> >::getWt(a));
+ fprintf(stderr,"_%f",Tree<ContDecisNode<Y,P> >::getSsWt());
+ fprintf(stderr,"\n");
+ }
+// }
+ } // end loop pxy
+
+/* // Report... */
+/* if(OUTPUT_NOISY) { */
+/* fprintf(stderr," tot:%08d +:%08d -:%08d\n",(int)dTot,(int)dPos,(int)(dTot-dPos)); */
+/* fprintf(stderr," E tot=%08d separator=%f",(int)dTot,wDelta); */
+/* for(A a;a<X::getSize();a.setNext()) fprintf(stderr,"_%f",awDeltas.get(a)); */
+/* fprintf(stderr,"\n"); */
+/* } */
+ } // end loop epoch
+
+ // Split list into each 0/1 child of this node...
+ List<Joint2DRV<X,Y> > alxy[2];
+ int actr[2] = {0,0};
+ // For each datum in list...
+ while ( !lxy.isEmpty() ) {
+ Joint2DRV<X,Y>* pxy = lxy.getFirst();
+ double sumsqr=0.0;
+ for(A a;a<X::getSize();a.setNext()) sumsqr += pow(pxy->getSub1().get(a.toInt()),2.0) / X::getSize();
+ Wt wtdavg=-Tree<ContDecisNode<Y,P> >::getWt();
+ for(A a;a<X::getSize();a.setNext()) wtdavg += Tree<ContDecisNode<Y,P> >::getWt(a) * pxy->getSub1().get(a.toInt());
+ wtdavg += Tree<ContDecisNode<Y,P> >::getSsWt() * sumsqr;
+ alxy[(wtdavg>0.0)?1:0].add() = *pxy;
+ aaCounts.set((wtdavg>0.0)?1:0,pxy->getSub2())++;
+ actr[(wtdavg>0.0)?1:0]++;
+ if(OUTPUT_VERYNOISY){fprintf(stderr,"classify "); pxy->write(stderr); fprintf(stderr," wtdavg=%f class=%d\n",wtdavg,(wtdavg>0.0)?1:0);}
+ lxy.pop();
+ }
+
+ // Calc chisqr...
+ double chisqr = 0.0;
+ fprintf(stderr," tot=%08d split=",(int)dTot);
+ for ( int b=0; b<2; b++ ) {
+ Y y;
+ for ( bool by=y.setFirst(); by; by=y.setNext() ) {
+ fprintf(stderr," (%s->%d:%f)",y.getString().c_str(),b,aaCounts.get(b,y));
+ if ( actr[b]>0.0 && modelY.getProb(y)>0.0 && dTot>0.0 ) {
+ double expect = actr[b] * modelY.getProb(y);
+ chisqr += pow ( aaCounts.get(b,y)-expect, 2.0 ) / expect;
+ }
+ }
+ }
+ fprintf(stderr,"\n");
+
+ // Report...
+ if(OUTPUT_NOISY) {
+ fprintf(stderr," tot=%08d separator=%f",(int)dTot,Tree<ContDecisNode<Y,P> >::getWt());
+ for(A a;a<X::getSize();a.setNext()) fprintf(stderr,"_%f",Tree<ContDecisNode<Y,P> >::getWt(a));
+ fprintf(stderr,"_%f",Tree<ContDecisNode<Y,P> >::getSsWt());
+ fprintf(stderr," chisqr=%g\n",chisqr);
+ }
+
+ // If separation is significant to chisqr limit...
+ if ( chisqr > DTREE_CHISQR_LIMIT ) {
+ // Recursively call train at each child...
+ setRight().train ( alxy[1], DTREE_CHISQR_LIMIT ); ////node*2LL+1LL);
+ setLeft().train ( alxy[0], DTREE_CHISQR_LIMIT ); ////node*2LL);
+ }
+ // If separation is not significant...
+ else {
+ // Add ratio as leaf...
+ Y y;
+ for ( bool by=y.setFirst(); by; by=y.setNext() )
+ ContDecisNode<Y,P>::setProb(y) = (dTot>0.0) ? modelY.getProb(y) : 1.0/Y::getDomain().getSize();
+ }
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+template<class Y, class X1, class X2, class P>
+class TrainableContDTree3DModel : public ContDTree3DModel<Y,X1,X2,P> {
+
+ private:
+
+ map<X1,List<Joint2DRV<X2,Y> > > mqlxy;
+
+ public:
+
+ ////// Constructor...
+ TrainableContDTree3DModel() { }
+ TrainableContDTree3DModel(const char* ps) : ContDTree3DModel<Y,X1,X2,P>(ps) { }
+
+ ////// setTree downcast...
+ TrainableContDTree2DModel<Y,X2,P>& setTree(const X1& x1) { return static_cast<TrainableContDTree2DModel<Y,X2,P>&>(ContDTree3DModel<Y,X1,X2,P>::setTree(x1)); }
+
+ ////// Add training data to per-subphone lists...
+ bool readData ( char* vs[], int numFields ) {
+ if ( 4==numFields ) {
+ mqlxy[X1(vs[1])].add() = Joint2DRV<X2,Y> ( X2(vs[2]), Y(vs[3]) );
+ ////mqlxy[X1(vs[1])].getLast()->write(stderr); fprintf(stderr,"\n");
+ }
+ else return false;
+ return true;
+ }
+
+ ////// Train each subphone...
+ void train ( const double DTREE_CHISQR_LIMIT ) {
+ int ctr = 0;
+ // For each subphone...
+ X1 x1; for ( bool b=x1.setFirst(); b; b=x1.setNext() ) {
+ if(OUTPUT_NOISY)
+ fprintf(stderr,"***** x1:%s (number %d) *****\n",x1.getString().c_str(),ctr++);
+ setTree(x1).train ( mqlxy[x1], DTREE_CHISQR_LIMIT );
+ }
+ }
+};
+
+#endif // _NL_DTREE_CONTIN__
diff --git a/synlm/hhmm/rvtl/include/nl-dtree.h b/synlm/hhmm/rvtl/include/nl-dtree.h
new file mode 100644
index 000000000..2396f395c
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-dtree.h
@@ -0,0 +1,530 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NL_DTREE__
+#define _NL_DTREE__
+
+#include <math.h>
+#include <vector>
+#include <string>
+#include <map>
+#include "nl-safeids.h"
+//#include "nl-probmodel.h"
+#include "nl-cpt.h"
+#include "nl-randvar.h"
+#include "nl-tree.h"
+#include "nl-hash.h"
+#include "nl-list.h"
+
+//#define UNIGR_FO .5 // IF NO EXAMPLES, USE APRIORI PROB OF FO
+
+//typedef Id<int> A; //BitNum;
+// //typedef Id<char> B;
+
+using namespace std;
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// DTree Node
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template<class X, class Y, class P>
+class DecisNode {
+ public:
+ // Public types...
+ typedef Id<int> A;
+
+ private:
+ // Private types...
+ typedef typename X::ElementType B;
+ // Data members...
+ A aNontermDecis; // Nonterminal nodes have an attribute (e.g. convexity bit) on which to condition
+ map<Y,P> aprTermDistrib; // Terminal nodes have a distribution over Y values
+
+ public:
+ // Constructor / destructor methods...
+ DecisNode ( ) : aNontermDecis(-1) { }
+
+ // Specification methods...
+ A& setA ( ) { return aNontermDecis; }
+ P& setProb ( const Y y ) { return aprTermDistrib[y]; }
+
+ // Extraction methods...
+ const A getA ( ) const { return aNontermDecis; }
+ const P getProb ( const Y y ) const { return ( (aprTermDistrib.empty()) ? P(1.0/Y::getDomain().getSize()) :
+ (aprTermDistrib.find(y)!=aprTermDistrib.end()) ? aprTermDistrib.find(y)->second : P() ); }
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// DTree Model
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template<class Y, class X, class P>
+//class DTree2DModel : public Generic2DModel<Y,X,P>, public Tree < typename X::ElementType, DecisNode<X,Y,P> > {
+class DTree2DModel : public Tree < typename X::ElementType, DecisNode<X,Y,P> > {
+ private:
+ // Type members...
+ typedef typename X::ElementType B;
+ public:
+ // Downcasts (safe b/c no new data)...
+ DTree2DModel<Y,X,P>& setBranch(const B& b) { return static_cast<DTree2DModel<Y,X,P>&> ( Tree<B,DecisNode<X,Y,P> >::setBranch(b) ); }
+ const DTree2DModel<Y,X,P>& getBranch(const B& b) const { return static_cast<const DTree2DModel<Y,X,P>&> ( Tree<B,DecisNode<X,Y,P> >::getBranch(b) ); }
+ // Extraction methods...
+ const P getProb ( const Y y, const X& x ) const {
+ const Tree<B,DecisNode<X,Y,P> >* ptr = this;
+ while ( !ptr->isTerm() ) /*{cerr<<x.get(ptr->getA().toInt())<<",";*/ ptr = &ptr->getBranch ( x.get(ptr->getA().toInt()) ); /*}*/
+ return ptr->getProb(y);
+ }
+ // Input / output methods...
+ bool readFields ( Array<char*>& ) ;
+ void write ( FILE* pf, const char psPrefix[], char psPath[], int iEnd ) const {
+ if (Tree<B,DecisNode<X,Y,P> >::isTerm()) {
+ psPath[iEnd]='\0';
+ Y y;
+ for ( bool b=y.setFirst(); b; b=y.setNext() )
+ { fprintf(pf, "%s [%s] : ", psPrefix, psPath); fprintf(pf,"%s",y.getString().c_str()); fprintf(pf, " = %f\n", Tree<B,DecisNode<X,Y,P> >::getProb(y).toDouble()); }
+ ////psPath[iEnd]='\0'; fprintf ( pf, "%s [%s] : 0 = %f\n", psPrefix, psPath, (double)Tree<DecisNode<Y,P> >::getProb("0") );
+ ////psPath[iEnd]='\0'; fprintf ( pf, "%s [%s] : 1 = %f\n", psPrefix, psPath, (double)Tree<DecisNode<Y,P> >::getProb("1") );
+ } else {
+ psPath[iEnd]='\0'; fprintf ( pf, "%s [%s] = %d\n", psPrefix, psPath, (int)Tree<B,DecisNode<X,Y,P> >::getA().toInt() );
+ B b;
+ for ( bool bb=b.setFirst(); bb; bb=b.setNext() ) {
+ psPath[iEnd]=b.getString().c_str()[0]; psPath[iEnd+1]='\0'; getBranch(b).write(pf,psPrefix,psPath,iEnd+1);
+// psPath[iEnd]='0'; psPath[iEnd+1]='\0'; getLeft().write ( pf, psPrefix, psPath, iEnd+1 );
+// psPath[iEnd]='1'; psPath[iEnd+1]='\0'; getRight().write ( pf, psPrefix, psPath, iEnd+1 );
+ }
+ }
+ }
+ void writeFields ( FILE* pf, string sPref ) {
+ char psPath[1000] = "";
+ write ( pf, (sPref+"").c_str(), psPath, 0 );
+ }
+ ////
+ friend pair<StringInput,DTree2DModel<Y,X,P>*> operator>> ( StringInput si, DTree2DModel<Y,X,P>& m ) {
+ return pair<StringInput,DTree2DModel<Y,X,P>*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,DTree2DModel<Y,X,P>*> si_m, const char* psD ) {
+ if (StringInput(NULL)==si_m.first) return si_m.first;
+ Y y; String xs; StringInput si,si2; si=si_m.first; DTree2DModel<Y,X,P>* pm=si_m.second;
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>xs>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ // Find appropriate node, creating nodes as necessary...
+ for(int i=1; i<int(strlen(xs.c_array()))-1; i++) {
+ char psTemp[2]=" "; psTemp[0]=xs.c_array()[i];
+ pm = &pm->setBranch ( B(psTemp) );
+ }
+
+ if ( si!=NULL && si[0]==':' ) {
+ si=si>>": ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>y>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>"= ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ // Specify attribute number (at nonterminal) or probability in distribution (at terminal)...
+ return (si!=NULL) ? si>>pm->setProb(y)>>psD : si;
+ }
+ else if ( si!=NULL && si[0]=='=' ) {
+ si=si>>"= "; //cerr<<" in after equals "<<((si==NULL) ? "yes" : "no") << endl;
+ while((si2=si>>" ")!=NULL)si=si2;
+
+ //m.setA() = atoi(si.c_str());
+ int aVar = 0;
+ si=si>>aVar>>psD;
+ pm->setA()=aVar;
+ ////cerr<<" at end "<<((si==NULL) ? "yes" : "no") << endl;
+ ////cerr<<" m.getA() is "<< m.getA().toInt() << endl;
+ return si;
+ //return (si!=NULL) ? si>>m.setA()>>psD : si;
+ }
+ else if ( si!=NULL ) cerr<<" ??? ["<<si.c_str()<<"]\n";
+ return StringInput(NULL);
+
+ /*
+ Y y; String xs; X x; StringInput si,si2; string sRt; DTree2DModel<Y,X,P>& m = *si_m.second;
+ si=si_m.first;
+ sRt = si.c_str();
+ if (sRt.find(':')!=string::npos) {
+ while((si2=si>>" [")!=NULL)si=si2;
+ si=si>>xs>>"] ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>": ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>y>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>"= ";
+
+ // For DTree, must find the node labeled by X
+ //Tree<B,DecisNode<X,Y,P> >* ptr = m;
+ //assert(ptr);
+ // Find appropriate node, creating nodes as necessary...
+ for(int i=1; i<int(strlen(xs.c_array()))-1; i++) {
+ char psTemp[2]="\0"; psTemp[0]=xs.c_array()[i];
+ m = m.setBranch ( B(psTemp) );
+ }
+ // Specify attribute number (at nonterminal) or probability in distribution (at terminal)...
+ return (si!=NULL) ? si>>m.setProb(y)>>psD : si;
+ } else {
+ while((si2=si>>" [")!=NULL)si=si2;
+ si=si>>xs>>"] "; //cerr<<" in bracket "<<((si==NULL) ? "yes" : "no") << endl;
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>"= "; //cerr<<" in after equals "<<((si==NULL) ? "yes" : "no") << endl;
+
+ //m.setA() = atoi(si.c_str());
+ int aVar = 0;
+ si=si>>aVar>>psD;
+ m.setA()=aVar;
+ //cerr<<" at end "<<((si==NULL) ? "yes" : "no") << endl;
+ //cerr<<" m.getA() is "<< m.getA().toInt() << endl;
+ return si;
+ //return (si!=NULL) ? si>>m.setA()>>psD : si;
+ }
+ */
+ }
+ ////
+};
+
+////////////////////
+template <class Y,class X, class P>
+bool DTree2DModel<Y,X,P>::readFields ( Array<char*>& aps ) {
+ if ( /*aps[0]==sId &&*/ (3==aps.size() || 4==aps.size()) ) {
+ //fprintf(stderr,"%s,%d\n",aps[3],numFields);
+ assert ( '['==aps[1][0] && ']'==aps[1][strlen(aps[1])-1] );
+
+ // Start at root...
+ Tree<B,DecisNode<X,Y,P> >* ptr = this;
+ assert(ptr);
+
+ // Find appropriate node, creating nodes as necessary...
+ for(int i=1; i<int(strlen(aps[1]))-1; i++) {
+ char psTemp[2]="\0"; psTemp[0]=aps[1][i];
+ ptr = &ptr->setBranch ( B(psTemp) );
+// assert ( '0'==aps[1][i] || '1'==aps[1][i] );
+// ptr = ( ('0'==aps[1][i]) ? &ptr->setLeft() : &ptr->setRight() ) ;
+// assert(ptr);
+ }
+
+ // Specify attribute number (at nonterminal) or probability in distribution (at terminal)...
+ if (3==aps.size()) ptr->setA() = atoi(aps[2]);
+ else if (4==aps.size()) ptr->setProb(aps[2]) = atof(aps[3]);
+ else assert(false);
+
+ } else return false;
+ return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+template<class Y, class X1,class X2, class P>
+//class DTree3DModel : public Generic3DModel<Y,X1,X2,P> {
+class DTree3DModel {
+ private:
+ // Type members...
+ typedef typename X2::ElementType B;
+ // Data members...
+ string sId;
+ SimpleHash<X1,DTree2DModel<Y,X2,P> > aqt;
+ public:
+ // Constructor / destructor methods...
+ DTree3DModel ( ) { }
+ DTree3DModel ( const string& s ) { sId = s; }
+ // Specification methods...
+ DTree2DModel<Y,X2,P>& setTree ( const X1& x1 ) { return aqt.set(x1); }
+ // Extraction methods...
+ bool setFirst ( Y& y ) const { return y.setFirst(); }
+ bool setNext ( Y& y ) const { return y.setNext(); }
+ P getProb ( const Y y, const X1& x1, const X2& x2 ) const { return aqt.get(x1).getProb(y,x2); }
+ // Input / output methods...
+ bool readFields ( char*[], int ) ;
+ void writeFields ( FILE* pf, string sPref ) {
+ char psPath[1000] = "";
+ X1 x1;
+ for ( bool b=x1.setFirst(); b; b=x1.setNext() )
+ aqt.get(x1).write ( pf, (sPref + " " + x1.getString()).c_str(), psPath, 0 );
+ }
+};
+
+////////////////////
+template <class Y,class X1,class X2, class P>
+bool DTree3DModel<Y,X1,X2,P>::readFields ( char* aps[], int numFields ) {
+ if ( /*aps[0]==sId &&*/ (4==numFields || 5==numFields) ) {
+ //fprintf(stderr,"%s,%d\n",aps[3],numFields);
+ assert ( '['==aps[2][0] && ']'==aps[2][strlen(aps[2])-1] );
+
+ // Start at root...
+ Tree<B,DecisNode<X2,Y,P> >* ptr = &aqt.set(aps[1]);
+ assert(ptr);
+
+ // Find appropriate node, creating nodes as necessary...
+ for(int i=1; i<strlen(aps[2])-1; i++) {
+ char psTemp[2]="\0\0"; psTemp[0]=aps[1][i];
+ ptr = ptr->setBranch ( B(psTemp) );
+// assert ( '0'==aps[2][i] || '1'==aps[2][i] );
+// ptr = ( ('0'==aps[2][i]) ? &ptr->setLeft() : &ptr->setRight() ) ;
+// assert(ptr);
+ }
+
+ // Specify bit (at nonterminal) or distribution (at terminal)...
+ if (4==numFields) ptr->setA() = atoi(aps[3]);
+ else if (5==numFields) ptr->setProb(aps[3]) = atof(aps[4]);
+ //// else if (5==numFields && 0==strcmp(aps[3],"0")) ptr->setProb() = 1.0 - atof(aps[4]);
+ //// else if (5==numFields && 0==strcmp(aps[3],"1")) ptr->setProb() = atof(aps[4]);
+ else assert(false);
+
+ } else return false;
+ return true;
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Trainable DTree Model
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template<class Y, class X, class P>
+class TrainableDTree2DModel : public DTree2DModel<Y,X,P> {
+ private:
+ // Type members...
+ typedef typename X::ElementType B;
+ // Static data members...
+ static List<Joint2DRV<X,Y> > lxyInitial;
+ public:
+ // Static member varaibles...
+ static bool OUTPUT_NOISY;
+ static bool OUTPUT_VERYNOISY;
+ // Downcasts (safe b/c no new data)...
+ TrainableDTree2DModel<Y,X,P>& setBranch(const B& b) { return static_cast<TrainableDTree2DModel<Y,X,P>&> ( Tree<B,DecisNode<X,Y,P> >::setBranch(b) ); }
+ const TrainableDTree2DModel<Y,X,P>& getBranch(const B& b) const { return static_cast<const TrainableDTree2DModel<Y,X,P>&> ( Tree<B,DecisNode<X,Y,P> >::getBranch(b) ); }
+ // Specification methods...
+ void train ( List<Joint2DRV<X,Y> >&, const DecisNode<X,Y,P>&, const double ) ;
+ void train ( const double d ) { train(lxyInitial,DecisNode<X,Y,P>(),d); }
+ ////// Input / output methods...
+ bool readData ( Array<char*>& aps ) {
+ if ( 3==aps.size() ) lxyInitial.add() = Joint2DRV<X,Y> ( X(aps[1]), Y(aps[2]) );
+ else if ( 4==aps.size() ) {
+ for ( int i=atoi(aps[3]); i>0; i-- )
+ lxyInitial.add() = Joint2DRV<X,Y> ( X(aps[1]), Y(aps[2]) );
+ }
+ else return false;
+ return true;
+ }
+};
+template <class Y, class X, class P> List<Joint2DRV<X,Y> > TrainableDTree2DModel<Y,X,P>::lxyInitial;
+template <class Y, class X, class P> bool TrainableDTree2DModel<Y,X,P>::OUTPUT_NOISY = false;
+template <class Y, class X, class P> bool TrainableDTree2DModel<Y,X,P>::OUTPUT_VERYNOISY = false;
+
+////////////////////
+template<class Y, class X, class P>
+void TrainableDTree2DModel<Y,X,P>::train ( List<Joint2DRV<X,Y> >& lxy, const DecisNode<X,Y,P>& dnParent, const double DTREE_CHISQR_LIMIT ) {
+
+ typedef typename DecisNode<X,Y,P>::A A;
+
+ // Place to store counts...
+ //CPT3DModel<A,B,Y,double> aaaCounts; // hash was MUCH slower!!
+ SafeArray3D<A,B,Y,double> aaaCounts ( X::getSize(), B::getDomain().getSize(), Y::getDomain().getSize(), 0.0 );
+ double dTot = lxy.getCard();
+ CPT1DModel<Y,double> modelY; // ( "Y_prior" );
+
+ // For each datum in list...
+ ListedObject<Joint2DRV<X,Y> >* pxy;
+ for ( pxy = lxy.getFirst(); pxy; pxy = lxy.getNext(pxy) ) {
+ // For each attribute position...
+ for ( A a=0; a<X::getSize(); a.setNext() )
+ // Add to counts...
+ aaaCounts.set ( a, pxy->first.get(a.toInt()), pxy->second )++; //(pxy->second==Y("1"))?1:0 )++;
+ modelY.setProb(pxy->second)++;
+ }
+ modelY.normalize();
+
+// // If best attribute's prediction is not significant...
+// else {
+ // Add ratio as leaf...
+ Y y;
+ for ( bool by=y.setFirst(); by; by=y.setNext() )
+ DecisNode<X,Y,P>::setProb(y) = (dTot>100) ? modelY.getProb(y) : (double)dnParent.getProb(y); //1.0/Y::getDomain().getSize();
+ //DecisNode<Y,P>::setProb("0") = (dXX>0) ? dX0/dXX : UNIGR_FO;
+ //DecisNode<Y,P>::setProb("1") = (dXX>0) ? dX1/dXX : UNIGR_FO;
+ ////DTree3DModel<Y,X1,X,P>::setLeafModel().setProb(Y("0"),x1,node) = dX0/dXX;
+ ////DTree3DModel<Y,X1,X,P>::setLeafModel().setProb(Y("1"),x1,node) = dX1/dXX;
+// }
+
+ double chisqr = 0.0;
+ A aBest=0;
+
+ // Bail if will never be significant...
+ if ( !lxy.isEmpty() && lxy.getCard()>1000 ) {
+
+ // For each attribute position...
+ double entBest=0.0;
+ for ( A a=0; a<X::getSize(); a.setNext() ) {
+
+ // Local model for each attrib (bit num)...
+ CPT2DModel<Y,B,double> modelY_giv_B; // ( "Y_giv_B" );
+ CPT1DModel<B,double> modelB; // ( "B_prior" );
+ B b;
+ for ( bool bb=b.setFirst(); bb; bb=b.setNext() ) {
+ Y y;
+ for ( bool by=y.setFirst(); by; by=y.setNext() ) {
+ modelY_giv_B.setProb(y,b) = aaaCounts.get(a,b,y);
+ modelB.setProb(b) += aaaCounts.get(a,b,y);
+ }
+ }
+ modelY_giv_B.normalize();
+ modelB.normalize();
+
+ // Calc entropy...
+ double ent = 0.0;
+ for ( bool bb=b.setFirst(); bb; bb=b.setNext() ) {
+ Y y;
+ for ( bool by=y.setFirst(); by; by=y.setNext() )
+ ent -= (0.0==modelY_giv_B.getProb(y,b)) ? 0.0 : ( modelB.getProb(b) * modelY_giv_B.getProb(y,b) * log(modelY_giv_B.getProb(y,b)) );
+ }
+
+ // Record minimum entropy division...
+ if ( a==0 || ent<entBest ) { entBest=ent; aBest=a; }
+ if(OUTPUT_VERYNOISY) {
+// fprintf(stderr," bit=%d ent=%g (%g:%g,%g:%g) (%g:%g,%g:%g,%g:%g)\n",(int)a,ent,
+// aaaCounts.getProb(a,0,0),aaaCounts.getProb(a,0,1),aaaCounts.getProb(a,1,0),aaaCounts.getProb(a,1,1),
+// modelB.getProb(0),modelB.getProb(1),
+// modelY_giv_B.getProb(0,0),modelY_giv_B.getProb(1,0),modelY_giv_B.getProb(0,1),modelY_giv_B.getProb(1,1));
+// //d0X,d1X,d00giv0X,d01giv0X,d10giv1X,d11giv1X);
+ fprintf(stderr," bit=%d ent=%g\n",a.toInt(),ent);
+ Y y;
+ for ( bool by=y.setFirst(); by; by=y.setNext() )
+ fprintf(stderr," \t%s\t%s%.1f %s%.1f %s%.1f %s%.1f %s%.1f %s%.1f ...\n",y.getString().c_str(),
+ B(0).getString().c_str(),modelY_giv_B.getProb(y,0),
+ B(1).getString().c_str(),modelY_giv_B.getProb(y,1),
+ B(2).getString().c_str(),modelY_giv_B.getProb(y,2),
+ B(3).getString().c_str(),modelY_giv_B.getProb(y,3),
+ B(4).getString().c_str(),modelY_giv_B.getProb(y,4),
+ B(5).getString().c_str(),modelY_giv_B.getProb(y,5));
+ //fprintf(stderr," %s %g:%g\n",y.getString().c_str(),modelY_giv_B.getProb(y,0),modelY_giv_B.getProb(y,1));
+ }
+ }
+
+ if(OUTPUT_NOISY)
+ fprintf(stderr," tot=%08d bestbit=%d bestent=%g\n",(int)dTot,aBest.toInt(),entBest);
+
+ chisqr = 0.0;
+ if ( X::getSize()>0 ) {
+ // Local model for each attrib (bit num)...
+ CPT1DModel<B,double> modelB_giv_Abest; // ( "B_giv_Abest" );
+ B b;
+ for ( bool bb=b.setFirst(); bb; bb=b.setNext() ) {
+ Y y;
+ for ( bool by=y.setFirst(); by; by=y.setNext() ) {
+ modelB_giv_Abest.setProb(b) += aaaCounts.get(aBest,b,y);
+ }
+ }
+ modelB_giv_Abest.normalize();
+
+ // Calc chi sqr...
+ for ( bool bb=b.setFirst(); bb; bb=b.setNext() ) {
+ Y y;
+ for ( bool by=y.setFirst(); by; by=y.setNext() ) {
+ if ( modelB_giv_Abest.getProb(b)>0 && modelY.getProb(y)>0 && dTot>0 ) {
+ double exp = modelB_giv_Abest.getProb(b) * modelY.getProb(y) * dTot;
+ chisqr += pow ( aaaCounts.get(aBest,b,y)-exp, 2 ) / exp;
+ }
+ }
+ }
+ }
+
+ if(OUTPUT_NOISY)
+ fprintf(stderr," chisqr=%g\n",chisqr);
+ }
+
+ // If best bit prediction is significant...
+ if ( chisqr > DTREE_CHISQR_LIMIT ) {
+ //// // Add node to model fields...
+ //// DTree3DModel<Y,X1,X,P>::setNodeMap()[Joint2DRV<X1,NodeNum>(x1,node)] = aBest;
+ // Split list into each 0/1 child of this node...
+ SimpleHash<B,List<Joint2DRV<X,Y> > > alxy;
+ // For each datum in list...
+ while ( !lxy.isEmpty() ) {
+ Joint2DRV<X,Y>* pxy = lxy.getFirst();
+ alxy[pxy->first.get(aBest.toInt())].add() = *pxy;
+ lxy.pop();
+ }
+ // Recursively call train at each child...
+ DecisNode<X,Y,P>::setA()=aBest;
+ B b;
+ for ( bool bb=b.setFirst(); bb; bb=b.setNext() )
+ setBranch(b).train ( alxy[b], *this, DTREE_CHISQR_LIMIT );
+ // setLeft().train ( alxy[0], DTREE_CHISQR_LIMIT ); ////node*2LL);
+ // setRight().train ( alxy[1], DTREE_CHISQR_LIMIT ); ////node*2LL+1LL);
+ }
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+template<class Y, class X1, class X2, class P>
+class TrainableDTree3DModel : public DTree3DModel<Y,X1,X2,P> {
+
+ private:
+
+ map<X1,List<Joint2DRV<X2,Y> > > mqlxy;
+
+ public:
+
+ // Static member varaibles...
+ static bool OUTPUT_NOISY;
+
+ ////// Constructor...
+ TrainableDTree3DModel(const char* ps) : DTree3DModel<Y,X1,X2,P>(ps) { }
+
+ ////// setTree downcast...
+ TrainableDTree2DModel<Y,X2,P>& setTree(const X1& x1) { return static_cast<TrainableDTree2DModel<Y,X2,P>&>(DTree3DModel<Y,X1,X2,P>::setTree(x1)); }
+
+ ////// Add training data to per-subphone lists...
+ bool readData ( Array<char*>& aps ) {
+ if ( 4==aps.size() ) {
+ mqlxy[X1(aps[1])].add() = Joint2DRV<X2,Y> ( X2(aps[2]), Y(aps[3]) );
+ ////mqlxy[X1(aps[1])].getLast()->write(stderr); fprintf(stderr,"\n");
+ }
+ else return false;
+ return true;
+ }
+
+ ////// Train each subphone...
+ void train ( const double DTREE_CHISQR_LIMIT ) {
+ int ctr = 0;
+ // For each subphone...
+ X1 x1; for ( bool b=x1.setFirst(); b; b=x1.setNext() ) {
+ if(OUTPUT_NOISY)
+ fprintf(stderr,"***** x1:%s (number %d) *****\n",x1.getString().c_str(),ctr++);
+ setTree(x1).train ( mqlxy[x1], DTREE_CHISQR_LIMIT );
+ }
+ }
+};
+
+template <class Y, class X1, class X2, class P> bool TrainableDTree3DModel<Y,X1,X2,P>::OUTPUT_NOISY = false;
+
+
+#endif // _NL_DTREE__
diff --git a/synlm/hhmm/rvtl/include/nl-fixedmatrix.h b/synlm/hhmm/rvtl/include/nl-fixedmatrix.h
new file mode 100644
index 000000000..dbb9d9d9d
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-fixedmatrix.h
@@ -0,0 +1,242 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+
+//basically a SafeArray2D with operators defined
+template<class T>
+class Matrix : public SafeArray2D<Id<int>,Id<int>,T> {
+ //public:
+ //int xSize;
+ //int ySize;
+ public:
+ // Constructor / destructor methods...
+ //~Matrix( ) { delete[] at; }
+ Matrix ( ) : SafeArray2D<Id<int>,Id<int>,T>( ) { }//{ xSize=0; ySize=0; }
+ Matrix (int x, int y) : SafeArray2D<Id<int>,Id<int>,T>(x,y) { }//{ xSize=x; ySize=y; }
+ Matrix (int x, int y, const T& t) : SafeArray2D<Id<int>,Id<int>,T>(x,y,t) { }//{ xSize=x; ySize=y; }
+ Matrix (const Matrix& a) : SafeArray2D<Id<int>,Id<int>,T>(a.xSize(),a.ySize()) { //xSize=a.xSize; ySize=a.ySize;
+ for(int i=0;i<xSize();i++) for(int j=0;j<ySize();j++) this->set(i,j)=a.get(i,j); }
+ // Specification methods...
+ //Matrix& operator= ( const Matrix<T>& sat )
+ // { xSize=sat.xSize; ySize=sat.ySize; //at=new T[xSize*ySize];
+ // for(int i=0;i<xSize;i++) for(int j=0;j<ySize;j++) set(i,j)=sat.at[i]; return *this; }
+ void init ( int x,int y ) { (*this)=Matrix<T>(x,y,T()); }//xSize=x; ySize=y; }
+ void init ( int x,int y,const T& t ) { (*this)=Matrix<T>(x,y,t); }//xSize=x; ySize=y; }
+ void reset() { (*this)=Matrix<T>( ); }//xSize=0; ySize=0; }
+
+ // Inherited methods
+ //T& set ( const X1& x,const X2& y);
+ //const T& get (const X1& x,const X2& y) const;
+
+ int xSize( ) const { return this->getxSize(); }
+ int ySize( ) const { return this->getySize(); }
+
+ // Math...
+ friend Matrix<T> operator* ( const Matrix<T>& a, const Matrix<T>& b ) {
+ if (a.ySize()!=b.xSize()) {
+ cerr<<"ERROR: matrix multiplication requires matching inner indices; "<<a.xSize()<<"x"<<a.ySize()<<" "<<b.xSize()<<"x"<<b.ySize()<<endl;
+ #ifndef NDEBUG
+ cerr<<" a= "<<a<<"\n\n b= "<<b<<endl;
+ #endif
+ return Matrix<T>();
+ }
+ Matrix mOut(a.xSize(),b.ySize(),T());
+ for (int i=0; i<a.xSize(); i++ ){
+ for (int k=0; k<a.ySize(); k++ ) {
+ for (int j=0; j<b.ySize(); j++ ) {
+ mOut.set(i,j) += a.get(Id<int>(i),Id<int>(k))*b.get(Id<int>(k),Id<int>(j));
+ }
+ }
+ }
+ //cerr<<" a= "<<a<<"\n b= "<<b<<"\n c= "<<mOut<<endl<<endl;
+ return mOut;
+ }
+ friend Matrix<T> operator& ( const Matrix<T>& a, const Matrix<T>& b ) {
+ if (a.xSize()!=b.xSize() || a.ySize()!=b.ySize()) {
+ cerr<<"ERROR: pt-by-pt multiplication requires matching indices; "<<a.xSize()<<"x"<<a.ySize()<<" "<<b.xSize()<<"x"<<b.ySize()<<endl;
+ #ifndef NDEBUG
+ cerr<<" a= "<<a<<"\n\n b= "<<b<<endl;
+ #endif
+ return Matrix<T>();
+ }
+ Matrix mOut(a.xSize(),a.ySize(),T());
+ for (int i=0; i<a.xSize(); i++ ){
+ for (int j=0; j<b.ySize(); j++ ) {
+ mOut.set(i,j) += a.get(Id<int>(i),Id<int>(j))*b.get(Id<int>(i),Id<int>(j));
+ }
+ }
+ //cerr<<" a= "<<a<<"\n b= "<<b<<"\n c= "<<mOut<<endl<<endl;
+ return mOut;
+ }
+ friend Matrix<T> operator+ ( const Matrix<T>& a, const Matrix<T>& b ) {
+ if (a.xSize()!=b.xSize() || a.ySize()!=b.ySize()) {
+ cerr<<"ERROR: matrix addition requires matching dimensions"<<endl;
+ return Matrix<T>();
+ }
+ Matrix mOut(a.xSize(),b.ySize(),T());
+ for (int i=0; i<a.xSize(); i++ ){
+ for (int j=0; j<a.ySize(); j++ ) {
+ mOut.set(i,j) = a.get(Id<int>(i),Id<int>(j))+b.get(Id<int>(i),Id<int>(j));
+ }
+ }
+ return mOut;
+ }
+ friend Matrix<T> operator- ( const Matrix<T>& a, const Matrix<T>& b ) {
+ if (a.xSize()!=b.xSize() || a.ySize()!=b.ySize()) {
+ cerr<<"ERROR: matrix subtraction requires matching dimensions"<<endl;
+ //cerr<<"aSize="<<a.xSize<<","<<a.ySize()<<" bSize="<<b.xSize<<","<<b.ySize()<<endl;
+ //cerr<<" a= "<<a<<"\n b= "<<b<<"\n c= "<<mOut<<endl<<endl;
+ return Matrix<T>();
+ }
+ Matrix mOut(a.xSize(),b.ySize(),T());
+ for (int i=0; i<a.xSize(); i++ ){
+ for (int j=0; j<a.ySize(); j++ ) {
+ mOut.set(i,j) = a.get(Id<int>(i),Id<int>(j))-b.get(Id<int>(i),Id<int>(j));
+ }
+ }
+ return mOut;
+ }
+ friend Matrix<T> operator* ( const Matrix<T>& a, const T& t ) {
+ Matrix mOut(a.xSize(),a.ySize());
+ for (int i=0; i<a.xSize(); i++ ){
+ for (int j=0; j<a.ySize(); j++ ) {
+ mOut.set(i,j) = a.get(Id<int>(i),Id<int>(j))*t;
+ }
+ }
+ return mOut;
+ }
+ friend Matrix<T> operator+ ( const Matrix<T>& a, const T& t ) {
+ Matrix mOut(a.xSize(),a.ySize());
+ for (int i=0; i<a.xSize(); i++ ){
+ for (int j=0; j<a.ySize(); j++ ) {
+ mOut.set(i,j) = a.get(Id<int>(i),Id<int>(j))+t;
+ }
+ }
+ return mOut;
+ }
+ friend Matrix<T> operator- ( const Matrix<T>& a, const T& t ) {
+ Matrix mOut(a.xSize(),a.ySize());
+ for (int i=0; i<a.xSize(); i++ ){
+ for (int j=0; j<a.ySize(); j++ ) {
+ mOut.set(i,j) = a.get(Id<int>(i),Id<int>(j))-t;
+ }
+ }
+ return mOut;
+ }
+
+ // Scalar inf-norm (max) of matrix / vector...
+ T infnorm ( ) const {
+ T tOut = T();
+ for (int i=0; i<xSize(); i++ ){
+ for (int j=0; j<ySize(); j++ ) {
+ if ( this->get(Id<int>(i),Id<int>(j))>tOut ) tOut = this->get(Id<int>(i),Id<int>(j));
+ }
+ }
+ return tOut;
+ }
+
+ /*
+ // Argmax of matrix / vector... //NOT WORKING
+ pair<int,int> argmax ( ) const {
+ T tOut = T();
+ pair<int,int> ij();
+ for (int i=0; i<xSize(); i++ ){
+ for (int j=0; j<ySize(); j++ ) {
+ if ( this->get(Id<int>(i),Id<int>(j))>tOut ) {
+ tOut = this->get(Id<int>(i),Id<int>(j));
+ ij = make_pair(i,j);
+ }
+ }
+ }
+ return ij; //pair<int,int>( ij.getIndex(), ij.getIndex() );
+ }
+ */
+ // Diagonal matrix of vector...
+ friend Matrix<T> diag ( const Matrix<T>& a ) {
+ Matrix mOut(a.xSize(),a.xSize(),T()); // output is n x n
+ for (int i=0;i<a.xSize();i++) {
+ for (int j=0;j<a.ySize();j++) {
+ assert(j==0); // must be vector, n x 1
+ mOut.set(Id<int>(i),Id<int>(i)) += a.get(Id<int>(i),Id<int>(j));
+ }
+ }
+ return mOut;
+ }
+
+ // Ordering method (treat as bit string)...
+ bool operator< ( const Matrix<T>& mt ) const {
+ if (xSize()<mt.xSize() || ySize()<mt.ySize()) return true;
+ if (xSize()>mt.xSize() || ySize()>mt.ySize()) return false;
+ for (int i=0; i<xSize(); i++ ) {
+ for (int j=0; j<ySize(); j++ ) {
+ if ( this->get(Id<int>(i),Id<int>(j)) < mt.get(Id<int>(i),Id<int>(j)) ) return true;
+ else if ( this->get(Id<int>(i),Id<int>(j)) > mt.get(Id<int>(i),Id<int>(j)) ) return false;
+ }
+ }
+ return false;
+ }
+ bool operator== ( const Matrix<T>& a ) const {
+ if (xSize()!=a.xSize() || ySize()!=a.ySize()) return false;
+ for (int i=0;i<a.xSize();i++)
+ for (int j=0;j<a.ySize();j++)
+ if (this->get(Id<int>(i),Id<int>(j))!=a.get(Id<int>(i),Id<int>(j))) return false;
+ return true;
+ }
+
+ // Input/output methods...
+ friend ostream& operator<< ( ostream& os, const Matrix<T>& a ) {
+ os<<"\n ";
+ for (int i=0;i<a.xSize();i++) {
+ for (int j=0;j<a.ySize();j++) {
+ os<<((j==0)?"":",")<<a.get(Id<int>(i),Id<int>(j));
+ }
+ os<<(i==a.xSize()-1?"\n":"\n ");
+ }
+ return os;
+ }
+ friend String& operator<< ( String& str, const Matrix<T>& a ) {
+ str<<"\n ";
+ for (int i=0;i<a.xSize();i++) {
+ for (int j=0;j<a.ySize();j++) {
+ str<<((j==0)?"":",")<<a.get(Id<int>(i),Id<int>(j));
+ }
+ str<<";";
+ }
+ return str;
+ }
+ string getString( ) const;
+
+};
+template <class T>
+string Matrix<T>::getString() const {
+ string str;
+ for (int i=0;i<xSize();i++) {
+ for (int j=0;j<ySize();j++) {
+ str += ((j==0)?"":",");
+ str += this->get(Id<int>(i),Id<int>(j));
+ }
+ str += ";";
+ }
+ return str;
+}
+
diff --git a/synlm/hhmm/rvtl/include/nl-gauss.h b/synlm/hhmm/rvtl/include/nl-gauss.h
new file mode 100644
index 000000000..a2213086f
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-gauss.h
@@ -0,0 +1,287 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NL_GAUSS__
+#define _NL_GAUSS__
+
+#include <vector>
+#include <string>
+#include <math.h>
+#include "nl-cpt.h"
+#include "nl-prob.h"
+#include "nl-list.h"
+
+using namespace std;
+
+static const PDFVal MEAN_THRESHOLD = 0.01; //0.0001; //0.001
+static const PDFVal VARIANCE_THRESHOLD = 0.01; //0.0001; //0
+
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Diagonal Multivariate Gaussian Model
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template <class Y>
+class DiagGauss1DModel : public Generic1DModel<Y,PDFVal> {
+ private:
+ // Member variables...
+ string sId;
+ bool bModeled;
+ PDFVal prInvPowSqrt2PI;
+ SimpleHash<Id<int>,PDFVal> aMeans;
+ SimpleHash<Id<int>,PDFVal> aVariances;
+ PDFVal prInvRootNormVariances;
+ PDFVal prProduct;
+ SimpleHash<Id<int>,PDFVal> algprNegHalfInvVariances;
+ public:
+ // Constructor / destructor methods...
+ DiagGauss1DModel ( ) : bModeled(false) { }
+ DiagGauss1DModel ( const string& s ) : sId(s), bModeled(false) { }
+ // Specification methods...
+ void precomputeVarianceTerms ( ) ;
+ PDFVal& setMean ( int i ) { return aMeans.set(i); }
+ PDFVal& setVariance ( int i ) { return aVariances.set(i); }
+ PDFVal& setInvRootNormVar ( ) { return prInvRootNormVariances; }
+ PDFVal& setNegHalfInvVar ( int i ) { return algprNegHalfInvVariances.set(i); }
+ // Extraction methods...
+ PDFVal getMean ( int i ) const { return aMeans.get(i); }
+ PDFVal getVariance ( int i ) const { return aVariances.get(i); }
+ PDFVal getInvRootNormVar ( ) const { return prInvRootNormVariances; }
+ PDFVal getNegHalfInvVar ( int i ) const { return algprNegHalfInvVariances.get(i); }
+ int getNumFeats ( ) const { return Y::getSize(); }
+ PDFVal getProb ( const Y& ) const ;
+ // Input / output methods...
+ bool readFields ( char*[], int ) ;
+ void writeFields ( FILE*, const string& ) const ;
+};
+
+////////////////////////////////////////
+template <class Y>
+inline void DiagGauss1DModel<Y>::precomputeVarianceTerms ( ) {
+ // Inverse square root of norm of variances...
+ setInvRootNormVar() = 1.0;
+ for ( int i=0; i<getNumFeats(); i++ ) setInvRootNormVar() *= 1.0/sqrt(getVariance(i));
+ // Negative half of inverse of variances...
+ for ( int i=0; i<getNumFeats(); i++ ) setNegHalfInvVar(i) = -1.0/(2.0*getVariance(i));
+ // Derived from variance terms...
+ prInvPowSqrt2PI = 1.0/pow(sqrt(2.0*M_PI),getNumFeats());
+ prProduct = prInvPowSqrt2PI * getInvRootNormVar();
+ bModeled = true;
+}
+
+////////////////////////////////////////
+template <class Y>
+inline PDFVal DiagGauss1DModel<Y>::getProb ( const Y& y ) const {
+// fprintf(stderr,"--------------------\n");
+// y.write(stderr);
+// fprintf(stderr,"\n----------\n");
+// writeFields(stderr,"");
+ assert(bModeled);
+ PDFVal logprob = 0.0;
+ for ( int i=0; i<getNumFeats(); i++ )
+ logprob += getNegHalfInvVar(i) * pow(y.get(i)-getMean(i),2.0);
+// for ( int i=0; i<getNumFeats(); i++ )
+// fprintf(stderr,"%d %g\n", i, getNegHalfInvVar(i) * pow(y.get(i)-getMean(i),2.0));
+// fprintf(stderr,"----------> %g\n",prProduct * exp(logprob));
+ return ( prProduct * exp(logprob) ) ;
+}
+
+////////////////////////////////////////
+template <class Y>
+bool DiagGauss1DModel<Y>::readFields ( char* as[], int numFields ) {
+ if ( 0==strcmp(as[1],"m") && numFields>2 ) {
+ char* psT;
+ for(int i=0;i<getNumFeats();i++)
+ setMean(i)=atof(strtok_r((0==i)?as[2]:NULL,"_",&psT));
+ }
+ else if ( 0==strcmp(as[1],"v") && numFields>2 ) {
+ char* psT;
+ for(int i=0;i<getNumFeats();i++)
+ setVariance(i)=atof(strtok_r((0==i)?as[2]:NULL,"_",&psT));
+ }
+ else return false;
+ return true;
+}
+
+////////////////////////////////////////
+template <class Y>
+void DiagGauss1DModel<Y>::writeFields ( FILE* pf, const string& sPref ) const {
+ fprintf(pf,"%s m = ",sPref.c_str());
+ for(int i=0; i<getNumFeats(); i++) fprintf(pf,"%s%f",(0==i)?"":"_",getMean(i));
+ fprintf ( pf, "\n" ) ;
+
+ fprintf(pf,"%s v = ",sPref.c_str());
+ for(int i=0; i<getNumFeats(); i++) fprintf(pf,"%s%f",(0==i)?"":"_",getVariance(i));
+ fprintf ( pf, "\n" ) ;
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+/*
+template <class Y,class X>
+class DiagGauss2DModel : public Generic2DModel<Y,X,PDFVal> {
+ private:
+ // Member variables...
+ string sId;
+ SimpleHash<X,DiagGauss1DModel<Y> > mMY_giv_X;
+ public:
+ // Constructor / destructor methods...
+ DiagGauss2DModel ( const string& s ) : sId(s) { }
+ // Extraction methods...
+ Prob getProb ( const Y& y, const X& x ) const { return mMY_giv_X.get(x).getProb(y); }
+ // Input / output methods...
+ bool readFields ( char* as[], int numFields ) {
+ ////if ( as[0]!=sId ) return false; // HAVE TO CHECK IN CALLIN FN NOW
+ if ( 0==strcmp(as[1],"m") && numFields>3 )
+ for ( int i=0; i<numFields-3; i++ ) mMY_giv_X.set(X(as[2])).setMean(i) = atof(as[i+4]) ;
+ else if ( 0==strcmp(as[1],"v") && numFields>3 )
+ for ( int i=0; i<numFields-3; i++ ) mMY_giv_X.set(X(as[2])).setVariance(i) = atof(as[i+4]) ;
+ else return false;
+ return true;
+ }
+ void writeFields ( FILE* pf, const string& sPref ) const {
+ X x;
+ for(bool b=x.setFirst(); b; b=x.setNext())
+ { fprintf(pf,"%s m ",sPref.c_str()); x.write(pf); fprintf(pf," =");
+ for(int i=0; i<Y::getSize(); i++) fprintf(pf," %f",mMY_giv_X.getProb(x).getMean(i));
+ fprintf ( pf, "\n" ) ; }
+ for(bool b=x.setFirst(); b; b=x.setNext())
+ { fprintf(pf,"%s v ",sPref.c_str()); x.write(pf); fprintf(pf," =");
+ for(int i=0; i<Y::getSize(); i++) fprintf(pf," %f",mMY_giv_X.getProb(x).getVariance(i));
+ fprintf ( pf, "\n" ) ; }
+ }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class Y,class X1,class X2>
+class DiagGauss3DModel : public Generic3DModel<Y,X1,X2,PDFVal> {
+ private:
+ // Member variables...
+ string sId;
+ SimpleHash<Joint2DRV<X1,X2>,DiagGauss1DModel<Y> > mMY_giv_X1_X2;
+ public:
+ // Constructor / destructor methods...
+ DiagGauss3DModel ( const string& s ) : sId(s) { }
+ // Extraction methods...
+ Prob getProb ( const Y& y, const X1& x1, const X2& x2 ) const { return mMY_giv_X1_X2.get(x1,x2).getProb(y); }
+ // Input / output methods...
+ bool readFields ( char* as[], int numFields ) {
+ if ( as[0]!=sId ) return false;
+ if ( 0==strcmp(as[1],"m") && numFields>4 )
+ for ( int i=0; i<numFields-4; i++ ) mMY_giv_X1_X2.set(Joint2DRV<X1,X2>(X1(as[2]),X2(as[2]))).setMean(i) = atof(as[i+4]) ;
+ else if ( 0==strcmp(as[1],"v") && numFields>4 )
+ for ( int i=0; i<numFields-4; i++ ) mMY_giv_X1_X2.set(Joint2DRV<X1,X2>(X1(as[2]),X2(as[2]))).setVariance(i) = atof(as[i+4]) ;
+ else return false;
+ return true;
+ }
+ void writeFields ( FILE* pf, string& sPref ) const {
+ X1 x1; X2 x2;
+ for(bool b1=x1.setFirst(); b1; b1=x1.setNext()) {
+ for(bool b2=x2.setFirst(); b2; b2=x2.setNext())
+ { fprintf(pf,"%s m ",sPref.c_str()); x1.write(pf); fprintf(pf," "); x2.write(pf); fprintf(pf," =");
+ for(int i=0; i<Y::getSize(); i++) fprintf(pf," %f",mMY_giv_X1_X2.get(Joint2DRV<X1,X2>(x1,x2)).getMean(i));
+ fprintf(pf,"\n"); }
+ for(bool b2=x2.setFirst(); b2; b2=x2.setNext())
+ { fprintf(pf,"%s v ",sPref.c_str()); x1.write(pf); fprintf(pf," "); x2.write(pf); fprintf(pf," =");
+ for(int i=0; i<Y::getSize(); i++) fprintf(pf," %f",mMY_giv_X1_X2.get(Joint2DRV<X1,X2>(x1,x2)).getVariance(i));
+ fprintf(pf,"\n"); }
+ }
+ }
+};
+*/
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Trainable Diagonal Multivariate Gaussian Model
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template <class Y>
+class TrainableDiagGauss1DModel : public DiagGauss1DModel<Y> {
+ public:
+ TrainableDiagGauss1DModel ( ) : DiagGauss1DModel<Y>() { }
+ TrainableDiagGauss1DModel ( const string& s ) : DiagGauss1DModel<Y>(s) { }
+ // input / output methods...
+ void setFields ( const List<pair<const Y*,Prob> >& ) ;
+};
+
+////////////////////////////////////////
+template <class Y>
+void TrainableDiagGauss1DModel<Y>::setFields ( const List<pair<const Y*,Prob> >& lyp ) {
+
+ // For each dimension...
+ for ( int i=0; i<DiagGauss1DModel<Y>::getNumFeats(); i++ ) {
+
+ // Calc means...
+ double curMean = DiagGauss1DModel<Y>::getMean(i);
+ DiagGauss1DModel<Y>::setMean(i) = 0.0;
+
+ // For each Y...
+ for ( const ListedObject<pair<const Y*,Prob> >* pyp=lyp.getFirst(); pyp; pyp=lyp.getNext(pyp) ) {
+ const Y& y = *pyp->first; // data value
+ const Prob& prEmpY = pyp->second; // empirical prob
+
+ //printf("cal mean i=%d x1=%s x2=%s aaaprYpsi.get(yd,x1,x2)=%f\n", i, x1.getString(), x2.getString(), (double)aaaprYpsi.getProb(yd,x1,x2));
+ DiagGauss1DModel<Y>::setMean(i) += prEmpY * y.get(i);
+ }
+
+// // If any change exceeds thresh, continue...
+// if ( bShouldStop && ( curMean - DiagGauss1DModel<Y>::getMean(i) > MEAN_THRESHOLD ||
+// curMean - DiagGauss1DModel<Y>::getMean(i) < -MEAN_THRESHOLD ) ) bShouldStop = false;
+
+ //printf("cal mean i=%d getMean(i)=%f\n", i, DiagGauss1DModel<Y>::getMean(i));
+
+ // Calc variances...
+ double curVar = DiagGauss1DModel<Y>::getVariance(i);
+ DiagGauss1DModel<Y>::setVariance(i) = 0.0;
+
+ // For each Y...
+ for ( const ListedObject<pair<const Y*,Prob> >* pyp=lyp.getFirst(); pyp; pyp=lyp.getNext(pyp) ) {
+ const Y& y = *pyp->first; // data value
+ const Prob& prEmpY = pyp->second; // empirical prob
+
+ //printf("cal var i=%d yd=%s %f %f %f\n", i, yd.getString(), aaaprYpsi.get(yd,x1,x2), getMean(x1,x2,i), yd.get(i));
+ DiagGauss1DModel<Y>::setVariance(i) += prEmpY * pow(DiagGauss1DModel<Y>::getMean(i)-y.get(i),2) ;
+ }
+
+// // If any change exceeds thresh, continue...
+// if ( bShouldStop && ( curVar - DiagGauss1DModel<Y>::getVariance(i) > VARIANCE_THRESHOLD ||
+// curVar - DiagGauss1DModel<Y>::getVariance(i) < -VARIANCE_THRESHOLD ) ) bShouldStop = false;
+
+ // Avoid div by zero...
+ if (DiagGauss1DModel<Y>::getVariance(i) < 1.0) DiagGauss1DModel<Y>::setVariance(i) = 1.0;
+
+ //printf("cal variance i=%d var=%f\n", i, DiagGauss1DModel<Y>::getVariance(i));
+ }
+ DiagGauss1DModel<Y>::precomputeVarianceTerms();
+}
+
+
+#endif /*_NL_GAUSS__*/
+
+
+
diff --git a/synlm/hhmm/rvtl/include/nl-hash.h b/synlm/hhmm/rvtl/include/nl-hash.h
new file mode 100644
index 000000000..809284db9
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-hash.h
@@ -0,0 +1,105 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __NL_HASH_H_
+#define __NL_HASH_H_
+
+#include <cassert>
+//#include <tr1/unordered_map>
+#include <ext/hash_map>
+using namespace __gnu_cxx;
+
+
+///////////////////////////////////////////////////////////////////////////////
+
+template<class T>
+class SimpleHashFn {
+ public:
+ size_t operator() ( const T& t ) const { return t.getHashKey(); }
+};
+
+
+template<class T>
+class SimpleHashEqual {
+ public:
+ bool operator() ( const T& t1, const T& t2 ) const { return (t1 == t2); }
+};
+
+
+template<class X, class Y>
+class SimpleHash : public hash_map<X,Y,SimpleHashFn<X>,SimpleHashEqual<X> > /*public tr1::unordered_map<X,Y,SimpleHashFn<X>,SimpleHashEqual<X> >*/ {
+ private:
+ typedef hash_map<X,Y,SimpleHashFn<X>,SimpleHashEqual<X> > OrigHash;
+// typedef tr1::unordered_map<X,Y,SimpleHashFn<X>,SimpleHashEqual<X> > OrigHash;
+// tr1::unordered_map<X,Y,SimpleHashFn<X>,SimpleHashEqual<X> > mxy;
+ static const Y yDummy;
+ //static Y yNonconstDummy;
+
+ public:
+// typedef typename OrigHash::const_iterator const_iterator;
+// typedef typename OrigHash::iterator iterator;
+// static const const_iterator iDummy;
+ // Constructor / destructor methods...
+ SimpleHash ( ) : OrigHash() { }
+ SimpleHash ( int i ) : OrigHash(i) { }
+ SimpleHash (const SimpleHash& s) : OrigHash(s) { }
+ // Specification methods...
+ Y& set ( const X& x ) { return OrigHash::operator[](x); }
+ // Extraction methods...
+ const Y& get ( const X& x ) const { return (OrigHash::end()!=OrigHash::find(x)) ? OrigHash::find(x)->second : yDummy; }
+ bool contains ( const X& x ) const { return (OrigHash::end()!=OrigHash::find(x)); }
+// const Y& get ( const X& x ) const { return (mxy.end()!=mxy.find(x)) ? mxy.find(x)->second : yDummy; }
+// Y& set ( const X& x ) { return mxy[x]; }
+ friend ostream& operator<< ( ostream& os, const SimpleHash<X,Y>& h ) {
+ for ( typename SimpleHash<X,Y>::const_iterator it=h.begin(); it!=h.end(); it++ )
+ os<<((it==h.begin())?"":",")<<it->first<<":"<<it->second;
+ return os;
+ }
+};
+template<class X, class Y> const Y SimpleHash<X,Y>::yDummy = Y();
+//template<class X, class Y> Y SimpleHash<X,Y>::yNonconstDummy; // = Y();
+
+/*
+template<class X, class Y>
+class SimpleMultiHash : public tr1::unordered_multimap<X,Y,SimpleHashFn<X>,SimpleHashEqual<X> > {
+ private:
+ typedef tr1::unordered_multimap<X,Y,SimpleHashFn<X>,SimpleHashEqual<X> > OrigHash;
+ public:
+ typedef pair<typename OrigHash::const_iterator,typename OrigHash::const_iterator> const_iterator_pair;
+
+ // Constructor / destructor methods...
+ SimpleMultiHash ( ) : OrigHash() { }
+ SimpleMultiHash ( int i ) : OrigHash(i) { }
+ // Specification methods...
+ Y& add ( const X& x ) { return insert(typename OrigHash::value_type(x,Y()))->second; }
+ // Extraction methods...
+ bool contains ( const X& x ) const { return (OrigHash::end()!=OrigHash::find(x)); }
+ bool contains ( const X& x, const Y& y ) const {
+ if (OrigHash::end()==OrigHash::find(x)) return false;
+ for ( const_iterator_pair ii=OrigHash::equal_range(x); ii.first!=ii.second; ii.first++ )
+ if ( y == ii.first->second ) return true;
+ return false;
+ }
+};
+*/
+#endif // __NL_HASH_H_
diff --git a/synlm/hhmm/rvtl/include/nl-heap.h b/synlm/hhmm/rvtl/include/nl-heap.h
new file mode 100644
index 000000000..31be6ed75
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-heap.h
@@ -0,0 +1,181 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NL_MINHEAP_
+#define _NL_MINHEAP_
+
+#include "nl-safeids.h"
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class R, bool outrank(const R&, const R&)>
+class Heap {
+ private:
+ Array<R> at;
+ int iNextToFill;
+ //SafeArray1D<Id<int>,R> at;
+ // Private specification methods...
+ int heapify ( unsigned int ) ;
+ public:
+ // Constructor / destructor methods...
+ Heap<R,outrank> ( ) : at(10), iNextToFill(0) { }
+ Heap<R,outrank> ( int i ) : at(i), iNextToFill(0) { }
+ Heap<R,outrank> ( int i, const R& r ) : at(i,r), iNextToFill(0) { }
+ // Specification methods...
+ void init ( int i ) { iNextToFill=0; at.init(i); }
+ void clear ( ) { iNextToFill=0; }
+ unsigned int fixIncRank ( unsigned int i );
+ unsigned int fixDecRank ( unsigned int i );
+ R& set ( unsigned int i ) { return at.set(i-1); }
+ void enqueue ( const R& r ) { set(iNextToFill+1)=r; fixIncRank(iNextToFill+1); iNextToFill++; }
+ R dequeueTop ( ) { R r=get(1); iNextToFill--; set(1)=get(iNextToFill+1); set(iNextToFill+1)=R(); fixDecRank(1); return r; }
+ ////R& set ( const Id<int>& i ) { return at.set(i); }
+ R& setTop ( ) { return at.set(1-1); }
+ // Extraction methods...
+ int getSize ( ) const { return iNextToFill; }
+ const R& getTop ( ) const { return at.get(1-1); }
+ const R& get ( unsigned int i ) const { return at.get(i-1); }
+ ////const R& get ( const Id<int>& i ) const { return at.get(i); }
+ // Input / output methods...
+ friend ostream& operator<< ( ostream& os, const Heap<R,outrank>& h ) { for(int i=0;i<h.iNextToFill;i++) os<<h.at.get(i)<<"\n"; return os; }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class R, bool outrank(const R&, const R&)>
+int Heap<R,outrank>::heapify ( unsigned int ind ) {
+ // Find best of parent, left child, right child...
+ unsigned int indBest = ind;
+ indBest = (ind*2 <= (unsigned int)iNextToFill &&
+ outrank(get(ind*2),get(indBest)))
+ ? ind*2 : indBest;
+ indBest = (ind*2+1 <= (unsigned int)iNextToFill &&
+ outrank(get(ind*2+1),get(indBest)))
+ ? ind*2+1 : indBest;
+
+ // If parent isn't best, restore heap property...
+ if ( indBest != ind ) {
+ // Swap heap elements...
+ R rTemp = get(ind);
+ set(ind) = get(indBest);
+ set(indBest) = rTemp;
+ // Recurse...
+ return heapify(indBest);
+ }
+ else return ind;
+}
+
+template <class R, bool outrank(const R&, const R&)>
+unsigned int Heap<R,outrank>::fixIncRank ( unsigned int ind ) { //const R& rec ) {
+ // If child outranks parent, restore heap property...
+ if ( outrank(get(ind),get((ind==1)?1:ind/2)) ) {
+ // Swap heap elements...
+ R rTemp = get((ind==1)?1:ind/2);
+ set((ind==1)?1:ind/2) = get(ind);
+ set(ind) = rTemp;
+ // Recurse on parent...
+ return fixIncRank(ind/2);
+ }
+ else return ind;
+}
+
+template <class R, bool outrank(const R&, const R&)>
+unsigned int Heap<R,outrank>::fixDecRank ( unsigned int ind ) { //const R& rec ) {
+ return heapify(ind);
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class R>
+class MinHeap {
+ private:
+ Array<R> at;
+ //SafeArray1D<Id<int>,R> at;
+ // Private specification methods...
+ int minHeapify ( unsigned int ) ;
+ public:
+ // Constructor / destructor methods...
+ MinHeap<R> ( ) : at(10) { }
+ MinHeap<R> ( int i ) : at(i) { }
+ MinHeap<R> ( int i, const R& r ) : at(i,r) { }
+ // Specification methods...
+ void init ( int i ) { at.init(i); }
+ void clear ( ) { at.clear(); }
+ int fixDecr ( int i );
+ int fixIncr ( int i );
+ R& set ( unsigned int i ) { return at.set(i); }
+ ////R& set ( const Id<int>& i ) { return at.set(i); }
+ R& setMin ( ) { return at.set(1-1); }
+ // Extraction methods...
+ int getSize ( ) const { return at.getSize(); }
+ const R& getMin ( ) const { return at.get(1-1); }
+ const R& get ( unsigned int i ) const { return at.get(i); }
+ ////const R& get ( const Id<int>& i ) const { return at.get(i); }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class R>
+int MinHeap<R>::minHeapify ( unsigned int ind ) {
+ // Find min of parent, left child, right child...
+ unsigned int indMin = ind ;
+ indMin = (ind*2 <= (unsigned int)at.getSize() &&
+ at.get(ind*2-1).getScore() < at.get(indMin-1).getScore())
+ ? ind*2 : indMin ;
+ indMin = (ind*2+1 <= (unsigned int)at.getSize() &&
+ at.get(ind*2+1-1).getScore() < at.get(indMin-1).getScore())
+ ? ind*2+1 :indMin;
+
+ // If parent isn't min, restore heap property...
+ if ( indMin != ind ) {
+ // Swap heap elements...
+ R rTemp = at.get(ind-1);
+ at.set(ind-1) = at.get(indMin-1);
+ at.set(indMin-1) = rTemp;
+ // Recurse...
+ return minHeapify(indMin);
+ }
+ else return ind;
+}
+
+template <class R>
+int MinHeap<R>::fixDecr ( int i ) { //const R& rec ) {
+ // If parent isn't min, restore heap property...
+ if ( at.get((i+1)/2).getScore() > at.get(i).getScore() ) {
+ // Swap heap elements...
+ R rTemp = at.get((i+1)/2);
+ at.set((i+1)/2) = at.get(i);
+ at.set(i) = rTemp;
+ // Recurse on parent...
+ return fixDecr((i+1)/2);
+ }
+ else return i;
+}
+
+template <class R>
+int MinHeap<R>::fixIncr ( int i ) { //const R& rec ) {
+ return minHeapify(i+1)-1;
+}
+
+#endif //_NL_HEAP_
diff --git a/synlm/hhmm/rvtl/include/nl-hmm.h b/synlm/hhmm/rvtl/include/nl-hmm.h
new file mode 100644
index 000000000..2f6cd0104
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-hmm.h
@@ -0,0 +1,1007 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NL_HMM_
+#define _NL_HMM_
+
+#include <list>
+#include <string>
+#include <iostream>
+#include <iomanip>
+//#include <boost/thread/thread.hpp>
+//#include <boost/thread/mutex.hpp>
+//#include <boost/bind.hpp>
+#include "nl-prob.h"
+#include "nl-safeids.h"
+#include "nl-beam.h"
+
+typedef int Frame;
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// NullBackDat - default empty back-pointer data; can replace with word or sem relation
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MY>
+class NullBackDat {
+ static const string sDummy;
+ public:
+ NullBackDat () {}
+ NullBackDat (const MY& my) {}
+ void write (FILE*) const {}
+ string getString() const { return sDummy; }
+};
+template <class MY>
+const string NullBackDat<MY>::sDummy ( "" );
+
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// Index - pointer to source in previous beam heap
+//
+////////////////////////////////////////////////////////////////////////////////
+
+class Index : public Id<int> {
+ public:
+ Index ( ) { }
+ Index (int i) {set(i);}
+ Index& operator++ ( ) {set(toInt()+1); return *this;}
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// TrellNode - node in viterbi trellis
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template <class S, class B>
+class TrellNode {
+ private:
+
+ // Data members...
+ Index indSource;
+ B backptrData;
+ S sId;
+ LogProb lgprMax;
+
+ public:
+
+ // Constructor / destructor methods...
+ TrellNode ( ) { }
+ TrellNode ( const Index& indS, const S& sI, const B& bDat, LogProb lgpr)
+ { indSource=indS; sId=sI; lgprMax=lgpr; backptrData=bDat; /* fo = -1; */ }
+
+ // Specification methods...
+ const Index& setSource ( ) const { return indSource; }
+ const B& setBackData( ) const { return backptrData; }
+ const S& setId ( ) const { return sId; }
+ LogProb& setScore ( ) { return lgprMax; }
+
+ // Extraction methods...
+ bool operator== ( const TrellNode<S,B>& tnsb ) const { return(sId==tnsb.sId); }
+// size_t getHashKey ( ) const { return sId.getHashKey(); }
+ const Index& getSource ( ) const { return indSource; }
+ const B& getBackData( ) const { return backptrData; }
+ const S& getId ( ) const { return sId; }
+ LogProb getLogProb ( ) const { return lgprMax; }
+ LogProb getScore ( ) const { return lgprMax; }
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// HMM
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MY, class MX, class S=typename MY::RandVarType, class B=NullBackDat<typename MY::RandVarType> >
+class HMM {
+ private:
+ typedef std::pair<Index,B> IB;
+ // Data members...
+ const MY& my;
+ const MX& mx;
+ SafeArray2D<Id<Frame>,Id<int>,TrellNode<S,B> > aatnTrellis;
+ Frame frameLast;
+ int iNextNode;
+ public:
+ // Static member varaibles...
+ static bool OUTPUT_QUIET;
+ static bool OUTPUT_NOISY;
+ static bool OUTPUT_VERYNOISY;
+ static int BEAM_WIDTH;
+ // Constructor / destructor methods...
+ HMM ( const MY& my1, const MX& mx1 ) : my(my1), mx(mx1) { }
+ // Specification methods...
+ void init ( int, int, const S& ) ;
+ void init ( int, int, SafeArray1D<Id<int>,pair<S,LogProb> >* );
+ void updateRanked ( const typename MX::RandVarType&, bool ) ;
+ void updateSerial ( const typename MX::RandVarType& ) ;
+ void updatePara ( const typename MX::RandVarType& ) ;
+ bool unknown ( const typename MX::RandVarType& ) ;
+ void each ( const typename MX::RandVarType&, Beam<LogProb,S,IB>&, SafeArray1D<Id<int>,std::pair<std::pair<S,IB>,LogProb> >& ) ;
+ // Extraction methods...
+ const TrellNode<S,B>& getTrellNode ( int i ) const { return aatnTrellis.get(frameLast,i); }
+ int getBeamUsed ( int ) const ;
+ // Input / output methods...
+ void writeMLS ( FILE* ) const ;
+ void writeMLS ( FILE*, const S& ) const ;
+ void debugPrint() const;
+ double getCurrSum(int) const;
+ //void writeCurr ( FILE*, int ) const ;
+ void writeCurr ( ostream&, int ) const ;
+ void writeCurrSum ( FILE*, int ) const ;
+ void gatherElementsInBeam( SafeArray1D<Id<int>,pair<S,LogProb> >* result, int f ) const;
+ void writeCurrEntropy ( FILE*, int ) const;
+ //void writeCurrDepths ( FILE*, int ) const;
+ void writeFoll ( FILE*, int, int, const typename MX::RandVarType& ) const ;
+ void writeFollRanked ( FILE*, int, int, const typename MX::RandVarType&, bool ) const ;
+ std::list<string> getMLS() const;
+ std::list<TrellNode<S,B> > getMLSnodes() const;
+ std::list<string> getMLS(const S&) const;
+ std::list<TrellNode<S,B> > getMLSnodes(const S&) const;
+};
+template <class MY, class MX, class S, class B> bool HMM<MY,MX,S,B>::OUTPUT_QUIET = false;
+template <class MY, class MX, class S, class B> bool HMM<MY,MX,S,B>::OUTPUT_NOISY = false;
+template <class MY, class MX, class S, class B> bool HMM<MY,MX,S,B>::OUTPUT_VERYNOISY = false;
+template <class MY, class MX, class S, class B> int HMM<MY,MX,S,B>::BEAM_WIDTH = 1;
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MY, class MX, class S, class B>
+void HMM<MY,MX,S,B>::init ( int numFr, int numS, const S& s ) {
+
+ // Alloc trellis...
+ BEAM_WIDTH = numS;
+ aatnTrellis.init(numFr,BEAM_WIDTH);
+
+ frameLast=0;
+
+ // Set initial element at first time slice...
+ aatnTrellis.set(frameLast,0) = TrellNode<S,B> ( Index(0), s, B(), 0 ) ;
+}
+
+template <class MY, class MX, class S, class B>
+ void HMM<MY,MX,S,B>::init ( int numFr, int beamSize, SafeArray1D<Id<int>,pair<S,LogProb> >* existingBeam ) {
+
+ // Alloc trellis...
+ // int numToCopy = existingBeam->getSize();
+ BEAM_WIDTH = beamSize;
+ aatnTrellis.init(numFr,BEAM_WIDTH);
+
+ frameLast=0;
+
+ // Set initial beam elements at first time slice...
+ for ( int i=0, n=existingBeam->getSize(); i<n; i++ ) {
+ aatnTrellis.set(frameLast,i) = TrellNode<S,B> ( Index(0), existingBeam->get(i).first, B(), existingBeam->get(i).second ) ;
+ }
+
+}
+
+template <class MY, class MX, class S, class B>
+ void HMM<MY,MX,S,B>::debugPrint() const{
+
+ for (int frame=0, numFrames=aatnTrellis.getxSize(); frame<numFrames; frame++) {
+
+ for (int beamIndex=0, beamSize=aatnTrellis.getySize(); beamIndex<beamSize; beamIndex++) {
+
+ if (aatnTrellis.get(frame,beamIndex).getLogProb().toDouble() > 0) {
+ cerr << "\t" << "aatnTrellis.get(frame=" << frame << ",beamIndex=" << beamIndex << ") is\t" << aatnTrellis.get(frame,beamIndex).getId() << "\tprob=" << aatnTrellis.get(frame,beamIndex).getLogProb().toDouble() << endl;
+ }
+
+ }
+
+ }
+
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class A, class B>
+bool outRank ( const quad<A,B,LogProb,Id<int> >& a1,
+ const quad<A,B,LogProb,Id<int> >& a2 ) { return (a1.third>a2.third); }
+
+template <class MY, class MX, class S, class B>
+ bool HMM<MY,MX,S,B>::unknown( const typename MX::RandVarType& x ) {
+ return mx.unknown(x);
+}
+
+
+template <class MY, class MX, class S, class B>
+void HMM<MY,MX,S,B>::updateRanked ( const typename MX::RandVarType& x, bool b1 ) {
+ // Increment frame counter...
+ frameLast++;
+
+ // Init beam for new frame...
+ Beam<LogProb,S,IB> btn(BEAM_WIDTH);
+ SafeArray1D<Id<int>,std::pair<std::pair<S,IB>,LogProb> > atnSorted (BEAM_WIDTH);
+
+ Heap < quad<int,typename MY::IterVal,LogProb,Id<int> >, outRank<int,typename MY::IterVal> > ashpiQueue;
+ typedef quad<int,typename MY::IterVal,LogProb,Id<int> > SHPI;
+ SHPI shpi, shpiTop;
+ int aCtr;
+
+ ashpiQueue.clear();
+ //shpi.first = -1;
+ //shpi.second = HModel::IterVal();
+ //shpi.third = 1.0;
+ shpi.first = 0;
+ shpi.third = aatnTrellis.get(frameLast-1,shpi.first).getScore();
+ shpi.third *= my.setIterProb ( shpi.second, aatnTrellis.get(frameLast-1,shpi.first).getId(), x, b1, aCtr=-1 );
+ //S s; my.setTrellDat(s,shpi.second);
+ shpi.fourth = -1;
+ ////cerr<<"????? "<<shpi<<"\n";
+ ashpiQueue.enqueue(shpi);
+
+ bool bFull=false;
+
+ // For each ranked value of transition destination...
+ for ( int iTrg=0; !bFull && ashpiQueue.getSize()>0; iTrg++ ) {
+ // Iterate A* (best-first) search until a complete path is at the top of the queue...
+ while ( ashpiQueue.getSize() > 0 && ashpiQueue.getTop().fourth < MY::IterVal::NUM_ITERS ) {
+ // Remove top...
+ shpiTop = ashpiQueue.dequeueTop();
+ // Fork off (try to advance each elementary variable a)...
+ for ( int a=shpiTop.fourth.toInt(); a<=MY::IterVal::NUM_ITERS; a++ ) {
+ // Copy top into new queue element...
+ shpi = shpiTop;
+ // At variable position -1, advance beam element for transition source...
+ if ( a == -1 ) shpi.first++;
+ // Incorporate prob from transition source...
+ shpi.third = aatnTrellis.get(frameLast-1,shpi.first).getScore();
+ if ( shpi.third > LogProb() ) {
+ // Try to advance variable at position a and return probability (subsequent variables set to first, probability ignored)...
+ shpi.third *= my.setIterProb ( shpi.second, aatnTrellis.get(frameLast-1,shpi.first).getId(), x, b1, aCtr=a );
+ // At end of variables, incorporate observation probability...
+ if ( a == MY::IterVal::NUM_ITERS && shpi.fourth != MY::IterVal::NUM_ITERS )
+ { S s; my.setTrellDat(s,shpi.second); shpi.third *= mx.getProb(x,s); }
+ // Record variable position at which this element was forked off...
+ shpi.fourth = a;
+ //cerr<<" from partial: "<<shpiTop<<"\n to partial: "<<shpi<<"\n";
+ if ( shpi.third > LogProb() ) {
+ ////if ( frameLast == 4 ) cerr<<" from partial: "<<shpiTop<<"\n to partial: "<<shpi<<"\n";
+ // If valid, add to queue...
+ ashpiQueue.enqueue(shpi);
+ //cerr<<"--------------------\n"<<ashpiQueue;
+ }
+ }
+ }
+ // Remove top...
+ //cerr<<"/-----A-----\\\n"<<ashpiQueue<<"\\-----A-----/\n";
+ //if ( ashpiQueue.getTop().fourth != MY::IterVal::NUM_ITERS ) ashpiQueue.dequeueTop();
+ ////cerr<<"/-----B-----\\\n"<<ashpiQueue<<"\\-----B-----/\n";
+ ////cerr<<ashpiQueue.getSize()<<" queue elems, "<<ashpiQueue.getTop()<<"\n";
+ }
+
+ ////cerr<<"-----*-----\n"<<ashpiQueue<<"-----*-----\n";
+ ////cerr<<ashpiQueue.getSize()<<" queue elems **\n";
+
+ // Add best transition (top of queue)...
+ //mx.getProb(o,my.setTrellDat(ashpiQueue.getTop().first,ashpiQueue.getTop().second));
+ if ( ashpiQueue.getSize() > 0 ) {
+ S s; my.setTrellDat(s,ashpiQueue.getTop().second);
+ bFull |= btn.tryAdd ( s, IB(ashpiQueue.getTop().first,my.setBackDat(ashpiQueue.getTop().second)), ashpiQueue.getTop().third );
+ ////cerr<<ashpiQueue.getSize()<<" queue elems A "<<ashpiQueue.getTop()<<"\n";
+ ////cerr<<"/-----A-----\\\n"<<ashpiQueue<<"\\-----A-----/\n";
+ ashpiQueue.dequeueTop();
+ ////cerr<<"/-----B-----\\\n"<<ashpiQueue<<"\\-----B-----/\n";
+ ////cerr<<ashpiQueue.getSize()<<" queue elems B "<<ashpiQueue.getTop()<<"\n";
+ //cerr<<"."; cerr.flush();
+ }
+ }
+
+ ////cerr<<"-----*-----\n"<<ashpiQueue<<"-----*-----\n";
+
+ btn.sort(atnSorted);
+
+ // Copy sorted beam to trellis...
+ for(int i=0;i<BEAM_WIDTH;i++) {
+ const std::pair<std::pair<S,IB>,LogProb>* tn1 = &atnSorted.get(i);
+ aatnTrellis.set(frameLast,i)=TrellNode<S,B>(tn1->first.second.first,
+ tn1->first.first,
+ tn1->first.second.second,
+ tn1->second);
+ }
+
+ my.update();
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MY, class MX, class S, class B>
+void HMM<MY,MX,S,B>::updateSerial ( const typename MX::RandVarType& x ) {
+ // Increment frame counter...
+ frameLast++;
+
+ // Init beam for new frame...
+ Beam<LogProb,S,IB> btn(BEAM_WIDTH);
+ SafeArray1D<Id<int>,std::pair<std::pair<S,IB>,LogProb> > atnSorted (BEAM_WIDTH);
+
+// // Copy beam to trellis...
+// for ( int i=0; i<BEAM_WIDTH; i++ )
+// btn.set ( i, aatnTrellis.set(frameLast,i) );
+
+ // For each possible hidden value for previous frame...
+ for ( int i=0; i<BEAM_WIDTH; i++ ) {
+ const TrellNode<S,B>& tnsbPrev = aatnTrellis.get(frameLast-1,i);
+ S sPrev = tnsbPrev.getId();
+ // If prob still not below beam minimum...
+ if ( aatnTrellis.get(frameLast-1,i).getLogProb() > btn.getMin().getScore() ) {
+ //if (OUTPUT_VERYNOISY) { fprintf(stderr,"FROM: "); sPrev.write(stderr); fprintf(stderr,"\n"); }
+ // For each possible transition...
+ typename MY::IterVal y;
+ for ( bool b=my.setFirst(y,sPrev); b; b=my.setNext(y,sPrev) ) {
+ //if (OUTPUT_VERYNOISY) { fprintf(stderr," TO: "); y.write(stderr); fprintf(stderr," %d*%d*%d\n",tnsbPrev.getLogProb().toInt(),lgprY.toInt(),lgprO.toInt()); }
+ S s;
+#ifdef X_BEFORE_Y
+ LogProb lgprX = mx.getProb(x,my.setTrellDat(s,y)); if ( !OUTPUT_VERYNOISY && LogProb()==lgprX ) continue;
+ LogProb lgprY = my.getProb(y,sPrev); if ( !OUTPUT_VERYNOISY && LogProb()==lgprY ) continue;
+#else
+ LogProb lgprY = my.getProb(y,sPrev); if ( !OUTPUT_VERYNOISY && LogProb()==lgprY ) continue;
+ LogProb lgprX = mx.getProb(x,my.setTrellDat(s,y)); if ( !OUTPUT_VERYNOISY && LogProb()==lgprX ) continue;
+#endif
+ LogProb lgprFull = aatnTrellis.get(frameLast-1,i).getLogProb() * lgprY * lgprX;
+ if (OUTPUT_VERYNOISY) {
+ cout<<" "<<tnsbPrev.getId()<<" ==("<<tnsbPrev.getLogProb().toInt()<<"*"<<lgprY.toInt()<<"*"<<lgprX.toInt()<<"="<<lgprFull.toInt()<<")==> "<<y<<"\n";
+ //sPrev.write(stdout);
+ //fprintf(stdout," ==(%d*%d*%d=%d)==> ",tnsbPrev.getLogProb().toInt(),lgprY.toInt(),lgprX.toInt(),lgprFull.toInt());
+ //y.write(stdout); fprintf(stdout," "); s.write(stdout);
+ //fprintf(stdout,"\n");
+ }
+ // Incorporate into trellis...
+ btn.tryAdd ( s, IB(i,my.setBackDat(y)), lgprFull );
+ //if(OUTPUT_VERYNOISY)
+ // fprintf ( stderr," (S_t-1:[e^%0.6f] * Y:e^%0.6f * X:e^%0.6f = S_t:[e^%0.6f])\n",
+ // float(aatnTrellis.get(frameLast-1,i).getLogProb().toInt())/100.0,
+ // float(lgprY.toInt())/100.0,
+ // float(lgprX.toInt())/100.0,
+ // float(lgprFull.toInt())/100.0 ) ;
+ }
+ }
+ }
+
+// for(int i=0;i<BEAM_WIDTH;i++) {
+// fprintf(stderr,"> "); btn.get(i)->first.write(stderr); fprintf(stderr,"\n");
+// }
+
+ btn.sort(atnSorted);
+
+ // Copy sorted beam to trellis...
+ for(int i=0;i<BEAM_WIDTH;i++) {
+ const std::pair<std::pair<S,IB>,LogProb>* tn1 = &atnSorted.get(i);
+ aatnTrellis.set(frameLast,i)=TrellNode<S,B>(tn1->first.second.first,
+ tn1->first.first,
+ tn1->first.second.second,
+ tn1->second);
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+/*
+boost::mutex mutexHmmCtrSema;
+boost::mutex mutexHmmParanoiaLock;
+
+template <class MY, class MX, class S, class B>
+void HMM<MY,MX,S,B>::each ( const typename MX::RandVarType& x, Beam<LogProb,S,IB>& btn, SafeArray1D<Id<int>,std::pair<std::pair<S,IB>,LogProb> >& atnOut ) {
+
+ //// for(int j=0; j<100; j+=1) for(int i=0; i<1000000; i+=1); // peg processor
+//{
+// boost::mutes::scoped_lock lock1(mutexHmmParanoiaLock);
+
+ while ( true ) {
+ int i;
+ bool bStop=false;
+ { boost::mutex::scoped_lock lock(mutexHmmCtrSema);
+ if ( (i=iNextNode) < BEAM_WIDTH ) iNextNode++;
+ else bStop = true;
+ } // locked to ensure no double-duty
+ if ( bStop ) break;
+
+ const TrellNode<S,B>& tnsbPrev = aatnTrellis.get(frameLast-1,i);
+ // If prob still not below beam minimum...
+ if ( tnsbPrev.getLogProb() > btn.getMin().getScore() ) {
+ //if (OUTPUT_VERYNOISY) { fprintf(stderr,"FROM: "); tnsbPrev.getId().write(stderr); fprintf(stderr,"\n"); }
+
+ // For each possible transition...
+ const S& sPrev = tnsbPrev.getId();
+ typename MY::IterVal y;
+ for ( bool b=my.setFirst(y,sPrev); b; b=my.setNext(y,sPrev) ) {
+ S s;
+ LogProb lgprX;
+ LogProb lgprY;
+ LogProb lgprFull;
+ #ifdef X_BEFORE_Y //////////////////////////////////////////////////////
+ lgprX = mx.getProb(x,my.setTrellDat(s,y)); if ( !OUTPUT_VERYNOISY && LogProb()==lgprX ) continue;
+ lgprY = my.getProb(y,sPrev); if ( !OUTPUT_VERYNOISY && LogProb()==lgprY ) continue;
+ #else //////////////////////////////////////////////////////////////////
+ lgprY = my.getProb(y,sPrev); if ( !OUTPUT_VERYNOISY && LogProb()==lgprY ) continue;
+ lgprX = mx.getProb(x,my.setTrellDat(s,y)); if ( !OUTPUT_VERYNOISY && LogProb()==lgprX ) continue;
+ #endif /////////////////////////////////////////////////////////////////
+ lgprFull = tnsbPrev.getLogProb() * lgprY * lgprX;
+ if (OUTPUT_VERYNOISY) {
+ boost::mutex::scoped_lock lock1(mutexHmmParanoiaLock);
+ //fprintf(stderr," TO: "); y.write(stderr); fprintf(stderr,"\n");
+ cout<<" "<<tnsbPrev.getId()<<" ==("<<tnsbPrev.getLogProb().toInt()<<"*"<<lgprY.toInt()<<"*"<<lgprX.toInt()<<"="<<lgprFull.toInt()<<")==> "<<y<<"\n";
+ //tnsbPrev.getId().write(stdout);
+ //fprintf(stdout," ==(%d*%d*%d=%d)==> ",tnsbPrev.getLogProb().toInt(),lgprY.toInt(),lgprO.toInt(),lgprFull.toInt());
+ //y.write(stdout); fprintf(stdout," "); s.write(stdout);
+ //fprintf(stdout,"\n");
+ }
+ // Incorporate into trellis...
+ btn.tryAdd ( s, IB(i,my.setBackDat(y)), lgprFull );
+// if(OUTPUT_VERYNOISY)
+// fprintf ( stderr," (S_t-1:[e^%0.6f] * Y:e^%0.6f * X:e^%0.6f = S_t:[e^%0.6f])\n",
+// float(aatnTrellis.get(frameLast-1,i).getLogProb().toInt())/100.0,
+// float(lgprY.toInt())/100.0,
+// float(lgprO.toInt())/100.0,
+// float(lgprFull.toInt())/100.0 ) ;
+ }
+ }
+ }
+
+ if (OUTPUT_NOISY)
+ { boost::mutex::scoped_lock lock1(mutexHmmParanoiaLock);
+ //// btn.sort(atnOut);
+ fprintf(stdout,"========================================\n");
+ for(int i=0;i<BEAM_WIDTH;i++) {
+ String str; str<<" "<<btn.get(i)->first<<":"<<btn.get(i)->second.second.first.toInt()<<":"<<btn.get(i).getScore().toInt()<<"\n";
+ fprintf(stdout,str.c_array());
+ //fprintf(stdout," "); btn.get(i)->first.write(stdout); fprintf(stdout,":%d:%d\n",btn.get(i)->second.second.first.toInt(),btn.get(i).getScore().toInt());
+ //// atnOut.get(i).first.first.write(stdout); fprintf(stdout,":%d\n",(int)atnOut.get(i).second);
+ }
+ fprintf(stdout,"----------------------------------------\n");
+ }
+
+//}
+}
+
+//// Something there is (about boost::bind) that doesn't love a ref. So use a pointer for hmm and beam.
+template <class MY, class MX, class S, class B>
+ void global_parahmm_each ( HMM<MY,MX,S,B>* phmm, const typename MX::RandVarType* px, Beam<LogProb,S,std::pair<Index,B> >* pbtn,
+ SafeArray1D<Id<int>,std::pair<std::pair<S,std::pair<Index,B> >,LogProb> >* patn ) {
+//void HMM<MY,MX,S,B>::each_static ( HMM<MY,MX,S,B>* phmm, const MX& x, Beam<LogProb,S,IB>* pbtn, SafeArray1D<int,std::pair<std::pair<S,IB>,LogProb> >* patn ) {
+ phmm->each(*px,*pbtn,*patn);
+}
+
+template <class MY, class MX, class S, class B>
+void HMM<MY,MX,S,B>::updatePara ( const typename MX::RandVarType& o ) {
+ // Increment frame counter...
+ frameLast++;
+
+// fprintf(stdout,"++++%d",frameLast); o.write(stdout); fprintf(stdout,"\n");
+
+ // Init beam for new frame...
+ Beam<LogProb,S,IB> btn1 (BEAM_WIDTH);
+ Beam<LogProb,S,IB> btn2 (BEAM_WIDTH);
+ Beam<LogProb,S,IB> btn3 (BEAM_WIDTH);
+ Beam<LogProb,S,IB> btn4 (BEAM_WIDTH);
+ Beam<LogProb,S,IB> btn5 (BEAM_WIDTH);
+ Beam<LogProb,S,IB> btn6 (BEAM_WIDTH);
+ Beam<LogProb,S,IB> btn7 (BEAM_WIDTH);
+ Beam<LogProb,S,IB> btn8 (BEAM_WIDTH);
+ SafeArray1D<Id<int>,std::pair<std::pair<S,IB>,LogProb> > atnSorted1 (BEAM_WIDTH);
+ SafeArray1D<Id<int>,std::pair<std::pair<S,IB>,LogProb> > atnSorted2 (BEAM_WIDTH);
+ SafeArray1D<Id<int>,std::pair<std::pair<S,IB>,LogProb> > atnSorted3 (BEAM_WIDTH);
+ SafeArray1D<Id<int>,std::pair<std::pair<S,IB>,LogProb> > atnSorted4 (BEAM_WIDTH);
+ SafeArray1D<Id<int>,std::pair<std::pair<S,IB>,LogProb> > atnSorted5 (BEAM_WIDTH);
+ SafeArray1D<Id<int>,std::pair<std::pair<S,IB>,LogProb> > atnSorted6 (BEAM_WIDTH);
+ SafeArray1D<Id<int>,std::pair<std::pair<S,IB>,LogProb> > atnSorted7 (BEAM_WIDTH);
+ SafeArray1D<Id<int>,std::pair<std::pair<S,IB>,LogProb> > atnSorted8 (BEAM_WIDTH);
+
+ //if(0==frameLast%20)
+ // fprintf(stderr,"frame %d...\n",frameLast);
+ iNextNode=0;
+ boost::thread th1(boost::bind(&global_parahmm_each<MY,MX,S,B>,this,&o,&btn1,&atnSorted1));
+ boost::thread th2(boost::bind(&global_parahmm_each<MY,MX,S,B>,this,&o,&btn2,&atnSorted2));
+ boost::thread th3(boost::bind(&global_parahmm_each<MY,MX,S,B>,this,&o,&btn3,&atnSorted3));
+ boost::thread th4(boost::bind(&global_parahmm_each<MY,MX,S,B>,this,&o,&btn4,&atnSorted4));
+ boost::thread th5(boost::bind(&global_parahmm_each<MY,MX,S,B>,this,&o,&btn5,&atnSorted5));
+ boost::thread th6(boost::bind(&global_parahmm_each<MY,MX,S,B>,this,&o,&btn6,&atnSorted6));
+ boost::thread th7(boost::bind(&global_parahmm_each<MY,MX,S,B>,this,&o,&btn7,&atnSorted7));
+ boost::thread th8(boost::bind(&global_parahmm_each<MY,MX,S,B>,this,&o,&btn8,&atnSorted8));
+ th1.join();
+ th2.join();
+ th3.join();
+ th4.join();
+ th5.join();
+ th6.join();
+ th7.join();
+ th8.join();
+
+ for(int i=0;i<BEAM_WIDTH;i++) {
+ btn1.tryAdd(btn2.get(i)->first, btn2.get(i)->second.second, btn2.get(i).getScore());
+ btn1.tryAdd(btn3.get(i)->first, btn3.get(i)->second.second, btn3.get(i).getScore());
+ btn1.tryAdd(btn4.get(i)->first, btn4.get(i)->second.second, btn4.get(i).getScore());
+ btn1.tryAdd(btn5.get(i)->first, btn5.get(i)->second.second, btn5.get(i).getScore());
+ btn1.tryAdd(btn6.get(i)->first, btn6.get(i)->second.second, btn6.get(i).getScore());
+ btn1.tryAdd(btn7.get(i)->first, btn7.get(i)->second.second, btn7.get(i).getScore());
+ btn1.tryAdd(btn8.get(i)->first, btn8.get(i)->second.second, btn8.get(i).getScore());
+ }
+
+ btn1.sort(atnSorted1);
+
+ for(int i=0;i<BEAM_WIDTH;i++) {
+ const std::pair<std::pair<S,IB>,LogProb>* tn1 = &atnSorted1.get(i);
+ aatnTrellis.set(frameLast,i)=TrellNode<S,B>(tn1->first.second.first,
+ tn1->first.first,
+ tn1->first.second.second,
+ tn1->second);
+ }
+
+// for(int i=0;i<BEAM_WIDTH;i++) {
+// aatnTrellis.set(frameLast,i)=TrellNode<S,B>(btn1.get(i)->second.second.first,
+// btn1.get(i)->first,
+// btn1.get(i)->second.second.second,
+// btn1.get(i).getScore());
+// }
+}
+*/
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MY, class MX, class S, class B>
+void HMM<MY,MX,S,B>::writeMLS ( FILE* pf ) const {
+ // Find best value at last frame...
+ int iBest = 0;
+ LogProb lgprEnd ;
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ iBest = (aatnTrellis.get(frameLast,i).getLogProb() > aatnTrellis.get(frameLast,iBest).getLogProb()) ? i : iBest ;
+ lgprEnd = aatnTrellis.get(frameLast,iBest).getLogProb();
+ if(lgprEnd == LogProb()){
+ fprintf(pf, "WARNING: There is no most likely sequence\n");
+ return;
+ }
+ // Trace back most likely sequence...
+ for ( Frame fr=frameLast; fr-1>=0; iBest=aatnTrellis.get(fr--,iBest).getSource().toInt() ) {
+ fprintf(pf,"HYPOTH %04d> ",fr-1);
+ String str; str<<aatnTrellis.get(fr,iBest).getId()<<" "<<aatnTrellis.get(fr,iBest).getBackData()<<"\n";
+ fprintf(pf,str.c_array());
+ //aatnTrellis.get(fr,iBest).getId().write(pf);
+ //fprintf(pf," ");
+ //aatnTrellis.get(fr,iBest).getBackData().write(pf);
+ //fprintf(pf,"\n");
+ }
+ if(!OUTPUT_QUIET) fprintf(stderr,"Log prob of best path: %d\n",lgprEnd.toInt());
+}
+
+template <class MY, class MX, class S, class B>
+void HMM<MY,MX,S,B>::writeMLS ( FILE* pf, const S& sLast ) const {
+ // Find best value at last frame...
+ int iBest = -1;
+ LogProb lgprEnd ;
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ if ( sLast.compareFinal(aatnTrellis.get(frameLast,i).getId()) )
+// if ( sLast.getSub1().get(0).getSub1()==aatnTrellis.get(frameLast,i).getId().getSub1().get(0).getSub1() &&
+// sLast.getSub1().get(1).getSub1()==aatnTrellis.get(frameLast,i).getId().getSub1().get(1).getSub1() )
+ iBest = (-1==iBest || aatnTrellis.get(frameLast,i).getLogProb() > aatnTrellis.get(frameLast,iBest).getLogProb()) ? i : iBest ;
+// iBest = i;
+ if ( -1==iBest ) iBest=0;
+ lgprEnd = aatnTrellis.get(frameLast,iBest).getLogProb();
+ if(lgprEnd == LogProb()){
+ fprintf(pf, "WARNING: There is no most likely sequence\n");
+ return;
+ }
+ // Trace back most likely sequence...
+ for ( Frame fr=frameLast; fr-1>=0; iBest=aatnTrellis.get(fr--,iBest).getSource().toInt() ) {
+ fprintf(pf,"HYPOTH %04d> ",fr-1);
+ String str; str<<aatnTrellis.get(fr,iBest).getId()<<" "<<aatnTrellis.get(fr,iBest).getBackData()<<"\n";
+ fprintf(pf,str.c_array());
+ //aatnTrellis.get(fr,iBest).getId().write(pf);
+ //fprintf(pf," ");
+ //aatnTrellis.get(fr,iBest).getBackData().write(pf);
+ //fprintf(pf,"\n");
+ }
+ if(!OUTPUT_QUIET) fprintf(stderr,"Log prob of best path: %d\n",lgprEnd.toInt());
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+/* for getting the MLS in string form... */
+template <class MY, class MX, class S, class B>
+std::list<string> HMM<MY,MX,S,B>::getMLS() const {
+ std::list<string> rList;
+ int iBest = 0;
+ LogProb lgprEnd;
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ iBest = (aatnTrellis.get(frameLast,i).getLogProb() > aatnTrellis.get(frameLast,iBest).getLogProb()) ? i : iBest ;
+ lgprEnd = aatnTrellis.get(frameLast,iBest).getLogProb();
+ if(lgprEnd == LogProb()){
+ string r = "WARNING: There is no most likely sequence\n";
+ rList.push_front(r);
+ return rList;
+ }
+ // Trace back most likely sequence...
+ for ( Frame fr=frameLast; fr-1>=0; iBest=aatnTrellis.get(fr--,iBest).getSource().toInt() ) {
+ char tmp[14];
+ sprintf(tmp,"HYPOTH %04d> ", fr-1);
+ string tString(tmp);
+ tString += aatnTrellis.get(fr,iBest).getId().getString() + " " +
+ aatnTrellis.get(fr,iBest).getBackData().getString() + "\n";
+ rList.push_front(tString);
+ }
+ return rList;
+}
+
+/* for getting MLS in struct form... */
+template <class MY, class MX, class S, class B>
+std::list<TrellNode<S,B> > HMM<MY,MX,S,B>::getMLSnodes() const {
+ std::list<TrellNode<S,B> > rList;
+ int iBest = 0;
+ LogProb lgprEnd;
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ iBest = (aatnTrellis.get(frameLast,i).getLogProb() > aatnTrellis.get(frameLast,iBest).getLogProb()) ? i : iBest ;
+ lgprEnd = aatnTrellis.get(frameLast,iBest).getLogProb();
+ if(lgprEnd == LogProb()){
+ fprintf(stderr, "WARNING: There is no most likely sequence\n");
+ return rList;
+ }
+ // Trace back most likely sequence...
+ for ( Frame fr=frameLast; fr-1>=0; iBest=aatnTrellis.get(fr--,iBest).getSource().toInt() )
+ rList.push_front(aatnTrellis.get(fr,iBest));
+ return rList;
+}
+
+/* for getting the MLS in string form... */
+template <class MY, class MX, class S, class B>
+std::list<string> HMM<MY,MX,S,B>::getMLS(const S& sLast) const {
+ std::list<string> rList;
+ int iBest = -1;
+ LogProb lgprEnd;
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ if ( sLast.compareFinal(aatnTrellis.get(frameLast,i).getId()) )
+// if ( sLast.getSub1().get(0).getSub1()==aatnTrellis.get(frameLast,i).getId().getSub1().get(0).getSub1() &&
+// sLast.getSub1().get(1).getSub1()==aatnTrellis.get(frameLast,i).getId().getSub1().get(1).getSub1() )
+ iBest = (-1==iBest || aatnTrellis.get(frameLast,i).getLogProb() > aatnTrellis.get(frameLast,iBest).getLogProb()) ? i : iBest ;
+// iBest = i;
+ if ( -1==iBest ) iBest=0;
+ lgprEnd = aatnTrellis.get(frameLast,iBest).getLogProb();
+ if(lgprEnd == LogProb()){
+ string r = "WARNING: There is no most likely sequence\n";
+ rList.push_front(r);
+ return rList;
+ }
+ // Trace back most likely sequence...
+ for ( Frame fr=frameLast; fr-1>=0; iBest=aatnTrellis.get(fr--,iBest).getSource().toInt() ) {
+//// char tmp[14];
+//// sprintf(tmp,"HYPOTH %04d> ", fr-1);
+//// string tString(tmp);
+//// tString +=
+ string tString =
+//// aatnTrellis.get(fr,iBest).getId().getString() + " " +
+ aatnTrellis.get(fr,iBest).getBackData().getString()
+//// + "\n"
+ ;
+ tString = (B().getString()==tString) ? "" : " " + tString; // zero out or add space
+ rList.push_front(tString);
+ }
+ return rList;
+}
+
+/* for getting MLS in struct form... */
+template <class MY, class MX, class S, class B>
+std::list<TrellNode<S,B> > HMM<MY,MX,S,B>::getMLSnodes(const S& sLast) const {
+ std::list<TrellNode<S,B> > rList;
+ int iBest = -1;
+ LogProb lgprEnd;
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ if ( sLast.compareFinal(aatnTrellis.get(frameLast,i).getId()) )
+// if ( sLast.getSub1().get(0).getSub1()==aatnTrellis.get(frameLast,i).getId().getSub1().get(0).getSub1() &&
+// sLast.getSub1().get(1).getSub1()==aatnTrellis.get(frameLast,i).getId().getSub1().get(1).getSub1() )
+ iBest = (-1==iBest || aatnTrellis.get(frameLast,i).getLogProb() > aatnTrellis.get(frameLast,iBest).getLogProb()) ? i : iBest ;
+// iBest = i;
+ if ( -1==iBest ) iBest=0;
+ lgprEnd = aatnTrellis.get(frameLast,iBest).getLogProb();
+ if(lgprEnd == LogProb()){
+ fprintf(stderr, "WARNING: There is no most likely sequence\n");
+ return rList;
+ }
+ // Trace back most likely sequence...
+ for ( Frame fr=frameLast; fr-1>=0; iBest=aatnTrellis.get(fr--,iBest).getSource().toInt() )
+ rList.push_front(aatnTrellis.get(fr,iBest));
+ return rList;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MY, class MX, class S, class B>
+//void HMM<MY,MX,S,B>::writeCurr ( FILE* pf, int f=-1 ) const {
+void HMM<MY,MX,S,B>::writeCurr ( ostream& os, int f=-1 ) const {
+ if ( -1==f ) f=frameLast;
+ if ( 0<=f && f<=frameLast )
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ if(!(aatnTrellis.get(f,i).getLogProb() == LogProb())){
+ //fprintf(pf,"at f=%04d b=%04d: ",f,i);
+ os<<"at "<<std::setfill('0')<<std::setw(4)<<f<<" "<<std::setw(4)<<i<<": ";
+ //String str; str<<aatnTrellis.get(f,i).getId(); //.write(pf);
+ //fprintf(pf,str.c_array());
+ os<<aatnTrellis.get(f,i).getId();
+ if(f>0){
+ //fprintf(pf," (from ");
+ //String str; str<<aatnTrellis.get(f-1,aatnTrellis.get(f,i).getSource().toInt()).getId(); //.write(pf);
+ //fprintf(pf,str.c_array());
+ //fprintf(pf,")");
+ os<<" (from "<<aatnTrellis.get(f-1,aatnTrellis.get(f,i).getSource().toInt()).getId()<<")";
+ }
+ //fprintf(pf," : e^%0.6f\n",double(aatnTrellis.get(f,i).getLogProb().toInt())/100.0);
+ os<<" : e^"<<(double(aatnTrellis.get(f,i).getLogProb().toInt())/100.0)<<"\n";
+ }
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MY, class MX, class S, class B>
+void HMM<MY,MX,S,B>::writeCurrSum ( FILE* pf, int f=-1 ) const {
+ if ( -1==f ) f=frameLast;
+ if ( 0<=f && f<=frameLast ) {
+ LogProb sum = 0.0;
+ LogProb logtop = 0.0;
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ if(!(aatnTrellis.get(f,i).getLogProb() == LogProb())){
+ if(i==0) { logtop=aatnTrellis.get(f,i).getLogProb(); }
+ LogProb big1 = sum - logtop;
+ LogProb big2 = aatnTrellis.get(f,i).getLogProb() - logtop;
+ sum = LogProb( big1.toProb() + big2.toProb() ) + logtop;
+ }
+ fprintf(pf,"f=%04d sum=e^%0.6f\n",f,double(sum.toInt())/100.0);
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MY, class MX, class S, class B>
+double HMM<MY,MX,S,B>::getCurrSum ( int f=-1 ) const {
+ if ( -1==f ) f=frameLast;
+ if ( 0<=f && f<=frameLast ) {
+ LogProb negInfinity;
+ double sum = 0;
+ //LogProb logtop = 0;
+ int sumCount=0;
+ for ( int i=0; i<BEAM_WIDTH; i++ ) {
+ LogProb current = aatnTrellis.get(f,i).getLogProb();
+ double currentValue = current.toDouble();
+ // cerr << "Current value is " << currentValue << endl;
+ // if(!(aatnTrellis.get(f,i).getLogProb() == LogProb())){
+ if (current != negInfinity) {
+ if (sumCount==0) {
+ sum = currentValue;
+ } else {
+ sum += currentValue;
+ }
+ sumCount += 1;
+ // if(i==0) { logtop=aatnTrellis.get(f,i).getLogProb(); }
+ //LogProb big1 = sum;// / logtop;
+ // LogProb big2 = aatnTrellis.get(f,i).getLogProb();// / logtop;
+ // sum = LogProb( big1.toProb() + big2.toProb() );// * logtop;
+ }
+ }
+ // cerr << "Summed " << sumCount << " values, total==" << sum << endl;
+ return sum;// /sumCount;
+ } else {
+ // Should an error be thrown here instead?
+ cerr << "ERROR: Invalid frame number: " << f << " of " << frameLast << endl;
+ return MIN_LOG_PROB;
+ }
+}
+
+template <class MY, class MX, class S, class B>
+void HMM<MY,MX,S,B>::gatherElementsInBeam( SafeArray1D<Id<int>,pair<S,LogProb> >* result, int f=-1) const {
+ result->init(BEAM_WIDTH);
+ if ( -1==f ) f=frameLast;
+ if ( 0<=f && f<=frameLast ) {
+ for ( int i=0; i<BEAM_WIDTH && &(aatnTrellis.get(f,i))!=NULL; i++ ) {
+ result->set(i).first = aatnTrellis.get(f,i).getId();
+ result->set(i).second = aatnTrellis.get(f,i).getLogProb();
+ }
+ } else {
+ //TODO How should exceptional situations be handled?
+ cerr << "ERROR: Invalid argument " << f << " to gatherElementsInBeam" << endl;
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MY, class MX, class S, class B>
+void HMM<MY,MX,S,B>::writeCurrEntropy ( FILE* pf, int f=-1 ) const {
+ if ( -1==f ) f=frameLast;
+ if ( 0<=f && f<=frameLast ) {
+ LogProb logh = 0.0;
+ LogProb logtop = 0.0;
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ if(!(aatnTrellis.get(f,i).getLogProb() == LogProb())){
+ if(i==0) { logtop=aatnTrellis.get(f,i).getLogProb(); }
+ LogProb big1 = logh - logtop;
+ LogProb prob = aatnTrellis.get(f,i).getLogProb();
+ LogProb big2 = prob - logtop;
+ double log2prob = double(aatnTrellis.get(f,i).getLogProb().toInt()) / double(LogProb(2).toInt());
+ logh = LogProb( big1.toProb() - big2.toProb()*log2prob ) + logtop;
+ }
+ fprintf(pf,"f=%04d entropy=e^%0.6f\n",f,double(logh.toInt())/100.0);
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+// finds the average depth. but... depends on HHMMLangModel used. below is for gf.
+/*
+template <class MY, class MX, class S, class B>
+void HMM<MY,MX,S,B>::writeCurrDepths ( FILE* pf, int f=-1 ) const {
+ if ( -1==f ) f=frameLast;
+ if ( 0<=f && f<=frameLast ) {
+ LogProb sum = 0.0;
+ LogProb logtop = 0.0;
+ Array<int> depths = Array<int>();
+ Array<LogProb> logprobs = Array<LogProb>();
+ double avgdepth = 0.0;
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ if(!(aatnTrellis.get(f,i).getLogProb() == LogProb())){
+
+ if(i==0) { logtop=aatnTrellis.get(f,i).getLogProb(); }
+ logprobs.set(i) = aatnTrellis.get(f,i).getLogProb();
+
+ // loop over values in S node to find lowest meaningful depth
+ for ( int j=0; j<aatnTrellis.get(f,i).getId().first.getSize(); j++) {
+ // store the depth, if it's equal to G_BOT/G_BOT
+ string ac = aatnTrellis.get(f,i).getId().first.get(j).first.getString();
+ string aw = aatnTrellis.get(f,i).getId().first.get(j).second.getString();
+ depths.set(i) = 0;
+ if (ac=="-" && aw=="-") {
+ //fprintf(pf,"depth at b%d = %d\n",i,j);
+ depths.set(i) = j;
+ break;
+ }
+ }
+
+ LogProb big1 = sum - logtop;
+ LogProb big2 = aatnTrellis.get(f,i).getLogProb() - logtop;
+ sum = LogProb( big1.toProb() + big2.toProb() ) + logtop;
+ }
+
+ // hack-y stuff because the logprob sum loses prob mass. this will give a quantized version
+ Array<LogProb> normprobs = Array<LogProb>();
+ Prob normprobsum = Prob();
+ for ( int i=0; i<BEAM_WIDTH; i++ ) {
+ if(!(aatnTrellis.get(f,i).getLogProb() == LogProb())){
+ normprobs.set(i) = logprobs.get(i)/sum;
+ normprobsum += normprobs.get(i).toProb();
+ }
+ }
+ for ( int i=0; i<BEAM_WIDTH; i++ ) {
+ if(!(aatnTrellis.get(f,i).getLogProb() == LogProb())){
+ avgdepth += depths.get(i) * normprobs.get(i).toDouble()/normprobsum.toDouble();
+ }
+ }
+ fprintf(pf,"f=%04d avg(d)=%1.6f\n",f,avgdepth);
+ }
+}
+*/
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MY, class MX, class S, class B>
+void HMM<MY,MX,S,B>::writeFollRanked ( FILE* pf, int f, int b, const typename MX::RandVarType& x, bool b1 ) const {
+ const TrellNode<S,B>& tnsbPrev = aatnTrellis.get(f,b);
+ S sPrev = tnsbPrev.getId();
+ fprintf(pf,"from f=%04d b=%04d: ",f,b);
+ cout<<tnsbPrev.getId()<<"\n";
+
+ //// DON'T KNOW WHAT TO DO WITH B1 (FINAL EOS FLAG)
+
+ Heap < quad<int,typename MY::IterVal,LogProb,Id<int> >, outRank<int,typename MY::IterVal> > ashpiQueue;
+ typedef quad<int,typename MY::IterVal,LogProb,Id<int> > SHPI;
+ SHPI shpi, shpiTop;
+ int aCtr;
+
+ shpi.first = b;
+ shpi.third = tnsbPrev.getScore();
+ shpi.third *= my.setIterProb ( shpi.second, tnsbPrev.getId(), x, b1, aCtr=-1 );
+ shpi.fourth = 0;
+ ashpiQueue.enqueue(shpi);
+
+ //cerr<<"?? "<<shpi<<" "<<MY::IterVal::NUM_ITERS<<"\n";
+
+ // For each ranked value of transition destination...
+ for ( int iTrg=0; iTrg<BEAM_WIDTH && ashpiQueue.getSize()>0; iTrg++ ) {
+ // Iterate A* (breadth-first) search until a complete path is at the top of the queue...
+ while ( ashpiQueue.getSize() > 0 && ashpiQueue.getTop().fourth < MY::IterVal::NUM_ITERS ) {
+ // Remove top...
+ shpiTop = ashpiQueue.dequeueTop();
+ // Fork off (try to advance each elementary variable a)...
+ for ( int a=shpiTop.fourth.toInt(); a<=MY::IterVal::NUM_ITERS; a++ ) {
+ // Copy top into new queue element...
+ shpi = shpiTop;
+ // At variable position -1, advance beam element for transition source...
+ if ( a == -1 ) shpi.first++;
+ // Incorporate prob from transition source...
+ shpi.third = aatnTrellis.get(f,shpi.first).getScore();
+ if ( shpi.third > LogProb() ) {
+ // Try to advance variable at position a and return probability (subsequent variables set to first, probability ignored)...
+ shpi.third *= my.setIterProb ( shpi.second, aatnTrellis.get(f,shpi.first).getId(), x, b1, aCtr=a );
+ // At end of variables, incorporate observation probability...
+ if ( a == MY::IterVal::NUM_ITERS && shpi.fourth != MY::IterVal::NUM_ITERS )
+ { S s; my.setTrellDat(s,shpi.second); shpi.third *= mx.getProb(x,s); }
+ // Record variable position at which this element was forked off...
+ shpi.fourth = a;
+ ////cerr<<" from partial: "<<shpiTop<<"\n to partial: "<<shpi<<"\n";
+ if ( shpi.third > LogProb() ) {
+ cerr<<" "<<shpi<<"\n";
+ // If valid, add to queue...
+ ashpiQueue.enqueue(shpi);
+ }
+ }
+ }
+ }
+ if ( ashpiQueue.getSize() > 0 ) {
+ //cerr<<ashpiQueue.getTop()<<"\n";
+ ashpiQueue.dequeueTop();
+ }
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MY, class MX, class S, class B>
+void HMM<MY,MX,S,B>::writeFoll ( FILE* pf, int f, int b, const typename MX::RandVarType& o ) const {
+ const TrellNode<S,B>& tnsbPrev = aatnTrellis.get(f,b);
+ S sPrev = tnsbPrev.getId();
+ fprintf(pf,"from f=%04d b=%04d: ",f,b);
+ cout<<tnsbPrev.getId()<<"\n";
+ // For each possible transition...
+ typename MY::IterVal h;
+ cout<<"HMM<MY,MX,S,B>::writeFoll OUT OF ORDER\n";
+ /*
+ for ( bool b=my.setFirst(h,sPrev); b; b=my.setNext(h,sPrev) ) {
+ S s;
+ LogProb lgprO = mx.getProb(o,my.setTrellDat(s,h));
+ LogProb lgprH = my.getProb(h,sPrev);
+ LogProb lgprFull = tnsbPrev.getLogProb() * lgprH * lgprO;
+ cout<<" ==("<<tnsbPrev.getLogProb().toInt()<<"*"<<lgprH.toInt()<<"*"<<lgprO.toInt()<<"="<<lgprFull.toInt()<<")==> "<<h<<"\n";
+ }
+ */
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MY, class MX, class S, class B>
+int HMM<MY,MX,S,B>::getBeamUsed ( int f=-1 ) const {
+ if ( -1==f ) f=frameLast;
+ int ctr=0;
+ if ( 0<=f && f<=frameLast )
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ if(!(aatnTrellis.get(f,i).getLogProb() == LogProb())){
+ ctr++;
+ }
+ return ctr;
+}
+
+#endif //_NL_HMM_
+
diff --git a/synlm/hhmm/rvtl/include/nl-hmm2.h b/synlm/hhmm/rvtl/include/nl-hmm2.h
new file mode 100644
index 000000000..711d589be
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-hmm2.h
@@ -0,0 +1,911 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NL_HMM_
+#define _NL_HMM_
+
+#include <list>
+#include <string>
+#include <boost/thread/thread.hpp>
+#include <boost/thread/mutex.hpp>
+#include <boost/bind.hpp>
+#include "nl-prob.h"
+#include "nl-safeids.h"
+#include "nl-beam.h"
+using namespace std;
+
+typedef int Frame;
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// NullBackDat - default empty back-pointer data; can replace with word or sem relation
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MH>
+class NullBackDat {
+ static const string sDummy;
+ public:
+ NullBackDat () {}
+ NullBackDat (const MH& mh) {}
+ void write (FILE*) const {}
+ string getString() const { return sDummy; }
+};
+template <class MH>
+const string NullBackDat<MH>::sDummy ( "" );
+
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// Index - pointer to source in previous beam heap
+//
+////////////////////////////////////////////////////////////////////////////////
+
+class Index : public Id<int> {
+ public:
+ Index ( ) { }
+ Index (int i) {set(i);}
+ Index& operator++ ( ) {set(toInt()+1); return *this;}
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// TrellNode - node in viterbi trellis
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template <class X, class B>
+class TrellNode {
+ private:
+
+ // Data members...
+ Index indSource;
+ B backptrData;
+ X xId;
+ LogProb lgprMax;
+
+ public:
+
+ // Constructor / destructor methods...
+ TrellNode ( ) { }
+ TrellNode ( const Index& indS, const X& xI, const B& bDat, LogProb lgpr)
+ { indSource=indS; xId=xI; lgprMax=lgpr; backptrData=bDat; /* fo = -1; */ }
+
+ // Specification methods...
+ const Index& setSource ( ) const { return indSource; }
+ const B& setBackData( ) const { return backptrData; }
+ const X& setId ( ) const { return xId; }
+ LogProb& setScore ( ) { return lgprMax; }
+
+ // Extraction methods...
+ bool operator== ( const TrellNode<X,B>& tnxb ) const { return(xId==tnxb.xId); }
+// size_t getHashKey ( ) const { return xId.getHashKey(); }
+ const Index& getSource ( ) const { return indSource; }
+ const B& getBackData( ) const { return backptrData; }
+ const X& getId ( ) const { return xId; }
+ LogProb getLogProb ( ) const { return lgprMax; }
+ LogProb getScore ( ) const { return lgprMax; }
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// HMM
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MH, class MO, class X=typename MH::RandVarType, class B=NullBackDat<typename MH::RandVarType> >
+class HMM {
+ private:
+ typedef std::pair<Index,B> IB;
+ // Data members...
+ const MH& mh;
+ const MO& mo;
+ SafeArray2D<Id<Frame>,Id<int>,TrellNode<X,B> > aatnTrellis;
+ Frame frameLast;
+ int iNextNode;
+ public:
+ // Static member varaibles...
+ static bool OUTPUT_QUIET;
+ static bool OUTPUT_NOISY;
+ static bool OUTPUT_VERYNOISY;
+ static int BEAM_WIDTH;
+ // Constructor / destructor methods...
+ HMM ( const MH& mh1, const MO& mo1 ) : mh(mh1), mo(mo1) { }
+ // Specification methods...
+ void init ( int, int, const X& ) ;
+ void updateRanked ( const typename MO::RandVarType& ) ;
+ void updateSerial ( const typename MO::RandVarType& ) ;
+ void updatePara ( const typename MO::RandVarType& ) ;
+ void each ( const typename MO::RandVarType&, Beam<LogProb,X,IB>&, SafeArray1D<Id<int>,std::pair<std::pair<X,IB>,LogProb> >& ) ;
+ // Extraction methods...
+ const TrellNode<X,B>& getTrellNode ( int i ) const { return aatnTrellis.get(frameLast,i); }
+ int getBeamUsed ( int ) const ;
+ // Input / output methods...
+ void writeMLS ( FILE* ) const ;
+ void writeMLS ( FILE*, const X& ) const ;
+ void writeCurr ( FILE*, int ) const ;
+ void writeCurrSum ( FILE*, int ) const ;
+ void writeCurrEntropy ( FILE*, int ) const;
+ //void writeCurrDepths ( FILE*, int ) const;
+ void writeFoll ( FILE*, int, int, const typename MO::RandVarType& ) const ;
+ void writeFollRanked ( FILE*, int, int, const typename MO::RandVarType& ) const ;
+ std::list<string> getMLS() const;
+ std::list<TrellNode<X,B> > getMLSnodes() const;
+ std::list<string> getMLS(const X&) const;
+ std::list<TrellNode<X,B> > getMLSnodes(const X&) const;
+};
+template <class MH, class MO, class X, class B> bool HMM<MH,MO,X,B>::OUTPUT_QUIET = false;
+template <class MH, class MO, class X, class B> bool HMM<MH,MO,X,B>::OUTPUT_NOISY = false;
+template <class MH, class MO, class X, class B> bool HMM<MH,MO,X,B>::OUTPUT_VERYNOISY = false;
+template <class MH, class MO, class X, class B> int HMM<MH,MO,X,B>::BEAM_WIDTH = 1;
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MH, class MO, class X, class B>
+void HMM<MH,MO,X,B>::init ( int numFr, int numX, const X& x ) {
+
+ // Alloc trellis...
+ BEAM_WIDTH = numX;
+ aatnTrellis.init(numFr,BEAM_WIDTH);
+
+ frameLast=0;
+
+ // Set initial element at first time slice...
+ aatnTrellis.set(frameLast,0) = TrellNode<X,B> ( Index(0), x, B(), 0 ) ;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class A, class B>
+bool outRank ( const quad<A,B,LogProb,Id<int> >& a1,
+ const quad<A,B,LogProb,Id<int> >& a2 ) { return (a1.third>a2.third); }
+
+template <class MH, class MO, class X, class B>
+void HMM<MH,MO,X,B>::updateRanked ( const typename MO::RandVarType& o ) {
+ // Increment frame counter...
+ frameLast++;
+
+ // Init beam for new frame...
+ Beam<LogProb,X,IB> btn(BEAM_WIDTH);
+ SafeArray1D<Id<int>,std::pair<std::pair<X,IB>,LogProb> > atnSorted (BEAM_WIDTH);
+
+ Heap < quad<int,typename MH::IterVal,LogProb,Id<int> >, outRank<int,typename MH::IterVal> > axhpiQueue;
+ typedef quad<int,typename MH::IterVal,LogProb,Id<int> > XHPI;
+ XHPI xhpi, xhpiTop;
+ int aCtr;
+
+ axhpiQueue.clear();
+ //xhpi.first = -1;
+ //xhpi.second = HModel::IterVal();
+ //xhpi.third = 1.0;
+ xhpi.first = 0;
+ xhpi.third = aatnTrellis.get(frameLast-1,xhpi.first).getScore();
+ //cerr<<" xhpi not inialized yet? "<<xhpi.second<<endl;
+ //xhpi.second is current hidden state h, the second parameter is hP or sP.
+ xhpi.third *= mh.setIterProb ( xhpi.second, aatnTrellis.get(frameLast-1,xhpi.first).getId(), aCtr=-1 );
+ //X x; mh.setTrellDat(x,xhpi.second);
+ //xhpi.fourth is a
+ xhpi.fourth = -1;
+ //cerr<<"xhphi in the begining: "<<xhpi<<"\n";
+ axhpiQueue.enqueue(xhpi);
+
+ bool bFull=false;
+
+ // For each ranked value of transition destination...
+ for ( int iTrg=0; !bFull && axhpiQueue.getSize()>0; iTrg++ ) {
+ // Iterate A* (best-first) search until a complete path is at the top of the queue...
+ //in order to make while loop stop, either axhphiQueue.getSize<0 (this is abnormal) or axhpiQueue.getTop().fourth<MH::IterVal::NUM_ITERS
+ //it seems that the second condition sohould be the normal stopping criterio. How does it happen?
+ //I know how, xhpi.fourth will say which depth of the search starts. From that state, a is 0 and decreasing to the end. above that,
+ //the value is increasing to the first variable. i.e., that is the water-edge of positive a and negative a.
+ // cerr<<axhpiQueue.getTop().fourth<<" axhpiQueue.getTop().fourth vs MH::IterVal::NUM_ITERS "<<MH::IterVal::NUM_ITERS<<endl;
+ while ( axhpiQueue.getSize() > 0 && axhpiQueue.getTop().fourth < MH::IterVal::NUM_ITERS ) {
+ // Remove top...
+ xhpiTop = axhpiQueue.dequeueTop();
+ // Fork off (try to advance each elementary variable a)...
+ for ( int a=xhpiTop.fourth.toInt(); a<=MH::IterVal::NUM_ITERS; a++ ) {
+ // Copy top into new queue element...
+ xhpi = xhpiTop;
+ // At variable position -1, advance beam element for transition source...
+ if ( a == -1 ) xhpi.first++;
+ //cerr<<" xhpi.first in xhpi.first++: "<<xhpi.first<<" xhpi: "<<xhpi;
+ // Incorporate prob from transition source...
+ xhpi.third = aatnTrellis.get(frameLast-1,xhpi.first).getScore();
+ // cerr<<" xhpi.third: "<<xhpi.third<<" framLast-1: "<<frameLast<<" xhpi: "<<xhpi<<endl;
+ if ( xhpi.third > LogProb() ) {
+ // Try to advance variable at position a and return probability (subsequent variables set to first, probability ignored)...
+ xhpi.third *= mh.setIterProb ( xhpi.second, aatnTrellis.get(frameLast-1,xhpi.first).getId(), aCtr=a );
+ // At end of variables, incorporate observation probability...
+ if ( a == MH::IterVal::NUM_ITERS && xhpi.fourth != MH::IterVal::NUM_ITERS )
+ { X x; mh.setTrellDat(x,xhpi.second); xhpi.third *= mo.getProb(o,x); }
+ // Record variable position at which this element was forked off...
+ //cerr<<" a after the xhpi.fourth=a: "<<a<<" xhpi.fourth: "<<xhpi.fourth<<" from partial: "<<xhpiTop<<"\n to partial: "<<xhpi<<" NUM_ITERS: "<<MH::IterVal::NUM_ITERS<<"\n";
+ xhpi.fourth = a;
+ //cerr<<" a after the xhpi.fourth=a: "<<a<<" xhpi.fourth: "<<xhpi.fourth<<" from partial: "<<xhpiTop<<"\n to partial: "<<xhpi<<" NUM_ITERS: "<<MH::IterVal::NUM_ITERS<<"\n";
+ if ( xhpi.third > LogProb() ) {
+ ////if ( frameLast == 4 ) cerr<<" from partial: "<<xhpiTop<<"\n to partial: "<<xhpi<<"\n";
+ // If valid, add to queue...
+ axhpiQueue.enqueue(xhpi);
+ //cerr<<"--------------------\n"<<axhpiQueue;
+ }
+ }
+ }
+ //the inside for loop is done here.
+ // Remove top...
+ //cerr<<"/-----A-----\\\n"<<axhpiQueue<<"\\-----A-----/\n";
+ //if ( axhpiQueue.getTop().fourth != MH::IterVal::NUM_ITERS ) axhpiQueue.dequeueTop();
+ ////cerr<<"/-----B-----\\\n"<<axhpiQueue<<"\\-----B-----/\n";
+ //cerr<<axhpiQueue.getSize()<<" queue elems, "<<axhpiQueue.getTop()<<"\n";
+ }
+ ////cerr<<"-----*-----\n"<<axhpiQueue<<"-----*-----\n";
+ //cerr<<" outside the while loop: "<<axhpiQueue.getSize()<<" queue elems **\n";
+ // Add best transition (top of queue)...
+ //mo.getProb(o,mh.setTrellDat(axhpiQueue.getTop().first,axhpiQueue.getTop().second));
+ if ( axhpiQueue.getSize() > 0 ) {
+ X x; mh.setTrellDat(x,axhpiQueue.getTop().second);
+ bFull |= btn.tryAdd ( x, IB(axhpiQueue.getTop().first,mh.setBackDat(axhpiQueue.getTop().second)), axhpiQueue.getTop().third );
+ //cerr<<axhpiQueue.getSize()<<" queue elems A "<<axhpiQueue.getTop()<<"\n";
+ //cerr<<"/-----A-----\\\n + bFull: "<<bFull<<"\naxhpiQueue: \n"<<axhpiQueue<<"\\-----A-----/\n";
+ axhpiQueue.dequeueTop();
+ //cerr<<"/-----B-----\\\n"<<axhpiQueue<<"\\-----B-----/\n";
+ //cerr<<axhpiQueue.getSize()<<" queue elems B "<<axhpiQueue.getTop()<<"\n";
+ //cerr<<"."; cerr.flush();
+ }
+ }
+ //the outmost for loop is over here.
+ ////cerr<<"-----*-----\n"<<axhpiQueue<<"-----*-----\n";
+ btn.sort(atnSorted);
+ // Copy sorted beam to trellis...
+ for(int i=0;i<BEAM_WIDTH;i++) {
+ const std::pair<std::pair<X,IB>,LogProb>* tn1 = &atnSorted.get(i);
+ //cerr<<" tn1: "<<tn1->first.second.first<<" "<<tn1->first.first<<" "<<tn1->first.second.second<<" "<<tn1->second<<endl;
+ aatnTrellis.set(frameLast,i)=TrellNode<X,B>(tn1->first.second.first,
+ tn1->first.first,
+ tn1->first.second.second,
+ tn1->second);
+ }
+
+ mh.update();
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MH, class MO, class X, class B>
+void HMM<MH,MO,X,B>::updateSerial ( const typename MO::RandVarType& o ) {
+ // Increment frame counter...
+ frameLast++;
+
+ // Init beam for new frame...
+ Beam<LogProb,X,IB> btn(BEAM_WIDTH);
+ SafeArray1D<Id<int>,std::pair<std::pair<X,IB>,LogProb> > atnSorted (BEAM_WIDTH);
+
+// // Copy beam to trellis...
+// for ( int i=0; i<BEAM_WIDTH; i++ )
+// btn.set ( i, aatnTrellis.set(frameLast,i) );
+
+ // For each possible hidden value for previous frame...
+ for ( int i=0; i<BEAM_WIDTH; i++ ) {
+ const TrellNode<X,B>& tnxbPrev = aatnTrellis.get(frameLast-1,i);
+ X xPrev = tnxbPrev.getId();
+ // If prob still not below beam minimum...
+ if ( aatnTrellis.get(frameLast-1,i).getLogProb() > btn.getMin().getScore() ) {
+ //if (OUTPUT_VERYNOISY) { fprintf(stderr,"FROM: "); xPrev.write(stderr); fprintf(stderr,"\n"); }
+ // For each possible transition...
+ typename MH::IterVal h;
+ for ( bool b=mh.setFirst(h,xPrev); b; b=mh.setNext(h,xPrev) ) {
+ //if (OUTPUT_VERYNOISY) { fprintf(stderr," TO: "); h.write(stderr); fprintf(stderr," %d*%d*%d\n",tnxbPrev.getLogProb().toInt(),lgprH.toInt(),lgprO.toInt()); }
+ X x;
+#ifdef O_BEFORE_H
+ LogProb lgprO = mo.getProb(o,mh.setTrellDat(x,h)); if ( !OUTPUT_VERYNOISY && LogProb()==lgprO ) continue;
+ LogProb lgprH = mh.getProb(h,xPrev); if ( !OUTPUT_VERYNOISY && LogProb()==lgprH ) continue;
+#else
+ LogProb lgprH = mh.getProb(h,xPrev); if ( !OUTPUT_VERYNOISY && LogProb()==lgprH ) continue;
+ LogProb lgprO = mo.getProb(o,mh.setTrellDat(x,h)); if ( !OUTPUT_VERYNOISY && LogProb()==lgprO ) continue;
+#endif
+ LogProb lgprFull = aatnTrellis.get(frameLast-1,i).getLogProb() * lgprH * lgprO;
+ if (OUTPUT_VERYNOISY) {
+ cout<<" "<<tnxbPrev.getId()<<" ==("<<tnxbPrev.getLogProb().toInt()<<"*"<<lgprH.toInt()<<"*"<<lgprO.toInt()<<"="<<lgprFull.toInt()<<")==> "<<h<<"\n";
+ //xPrev.write(stdout);
+ //fprintf(stdout," ==(%d*%d*%d=%d)==> ",tnxbPrev.getLogProb().toInt(),lgprH.toInt(),lgprO.toInt(),lgprFull.toInt());
+ //h.write(stdout); fprintf(stdout," "); x.write(stdout);
+ //fprintf(stdout,"\n");
+ }
+ // Incorporate into trellis...
+ btn.tryAdd ( x, IB(i,mh.setBackDat(h)), lgprFull );
+ //if(OUTPUT_VERYNOISY)
+ // fprintf ( stderr," (X_t-1:[e^%0.6f] * H:e^%0.6f * O:e^%0.6f = X_t:[e^%0.6f])\n",
+ // float(aatnTrellis.get(frameLast-1,i).getLogProb().toInt())/100.0,
+ // float(lgprH.toInt())/100.0,
+ // float(lgprO.toInt())/100.0,
+ // float(lgprFull.toInt())/100.0 ) ;
+ }
+ }
+ }
+
+// for(int i=0;i<BEAM_WIDTH;i++) {
+// fprintf(stderr,"> "); btn.get(i)->first.write(stderr); fprintf(stderr,"\n");
+// }
+
+ btn.sort(atnSorted);
+
+ // Copy sorted beam to trellis...
+ for(int i=0;i<BEAM_WIDTH;i++) {
+ const std::pair<std::pair<X,IB>,LogProb>* tn1 = &atnSorted.get(i);
+ aatnTrellis.set(frameLast,i)=TrellNode<X,B>(tn1->first.second.first,
+ tn1->first.first,
+ tn1->first.second.second,
+ tn1->second);
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+boost::mutex mutexHmmCtrSema;
+boost::mutex mutexHmmParanoiaLock;
+
+template <class MH, class MO, class X, class B>
+void HMM<MH,MO,X,B>::each ( const typename MO::RandVarType& o, Beam<LogProb,X,IB>& btn, SafeArray1D<Id<int>,std::pair<std::pair<X,IB>,LogProb> >& atnOut ) {
+
+ //// for(int j=0; j<100; j+=1) for(int i=0; i<1000000; i+=1); // peg processor
+//{
+// boost::mutex::scoped_lock lock1(mutexHmmParanoiaLock);
+
+ while ( true ) {
+ int i;
+ bool bStop=false;
+ { boost::mutex::scoped_lock lock(mutexHmmCtrSema);
+ if ( (i=iNextNode) < BEAM_WIDTH ) iNextNode++;
+ else bStop = true;
+ } // locked to ensure no double-duty
+ if ( bStop ) break;
+
+ const TrellNode<X,B>& tnxbPrev = aatnTrellis.get(frameLast-1,i);
+ // If prob still not below beam minimum...
+ if ( tnxbPrev.getLogProb() > btn.getMin().getScore() ) {
+ //if (OUTPUT_VERYNOISY) { fprintf(stderr,"FROM: "); tnxbPrev.getId().write(stderr); fprintf(stderr,"\n"); }
+
+ // For each possible transition...
+ const X& xPrev = tnxbPrev.getId();
+ typename MH::IterVal h;
+ for ( bool b=mh.setFirst(h,xPrev); b; b=mh.setNext(h,xPrev) ) {
+ X x;
+ LogProb lgprO;
+ LogProb lgprH;
+ LogProb lgprFull;
+ #ifdef O_BEFORE_H //////////////////////////////////////////////////////
+ lgprO = mo.getProb(o,mh.setTrellDat(x,h)); if ( !OUTPUT_VERYNOISY && LogProb()==lgprO ) continue;
+ lgprH = mh.getProb(h,xPrev); if ( !OUTPUT_VERYNOISY && LogProb()==lgprH ) continue;
+ #else //////////////////////////////////////////////////////////////////
+ lgprH = mh.getProb(h,xPrev); if ( !OUTPUT_VERYNOISY && LogProb()==lgprH ) continue;
+ lgprO = mo.getProb(o,mh.setTrellDat(x,h)); if ( !OUTPUT_VERYNOISY && LogProb()==lgprO ) continue;
+ #endif /////////////////////////////////////////////////////////////////
+ lgprFull = tnxbPrev.getLogProb() * lgprH * lgprO;
+ if (OUTPUT_VERYNOISY) {
+ boost::mutex::scoped_lock lock1(mutexHmmParanoiaLock);
+ //fprintf(stderr," TO: "); h.write(stderr); fprintf(stderr,"\n");
+ cout<<" "<<tnxbPrev.getId()<<" ==("<<tnxbPrev.getLogProb().toInt()<<"*"<<lgprH.toInt()<<"*"<<lgprO.toInt()<<"="<<lgprFull.toInt()<<")==> "<<h<<"\n";
+ //tnxbPrev.getId().write(stdout);
+ //fprintf(stdout," ==(%d*%d*%d=%d)==> ",tnxbPrev.getLogProb().toInt(),lgprH.toInt(),lgprO.toInt(),lgprFull.toInt());
+ //h.write(stdout); fprintf(stdout," "); x.write(stdout);
+ //fprintf(stdout,"\n");
+ }
+ // Incorporate into trellis...
+ btn.tryAdd ( x, IB(i,mh.setBackDat(h)), lgprFull );
+// if(OUTPUT_VERYNOISY)
+// fprintf ( stderr," (X_t-1:[e^%0.6f] * H:e^%0.6f * O:e^%0.6f = X_t:[e^%0.6f])\n",
+// float(aatnTrellis.get(frameLast-1,i).getLogProb().toInt())/100.0,
+// float(lgprH.toInt())/100.0,
+// float(lgprO.toInt())/100.0,
+// float(lgprFull.toInt())/100.0 ) ;
+ }
+ }
+ }
+
+ if (OUTPUT_NOISY)
+ { boost::mutex::scoped_lock lock1(mutexHmmParanoiaLock);
+ //// btn.sort(atnOut);
+ fprintf(stdout,"========================================\n");
+ for(int i=0;i<BEAM_WIDTH;i++) {
+ String str; str<<" "<<btn.get(i)->first<<":"<<btn.get(i)->second.second.first.toInt()<<":"<<btn.get(i).getScore().toInt()<<"\n";
+ fprintf(stdout,str.c_array());
+ //fprintf(stdout," "); btn.get(i)->first.write(stdout); fprintf(stdout,":%d:%d\n",btn.get(i)->second.second.first.toInt(),btn.get(i).getScore().toInt());
+ //// atnOut.get(i).first.first.write(stdout); fprintf(stdout,":%d\n",(int)atnOut.get(i).second);
+ }
+ fprintf(stdout,"----------------------------------------\n");
+ }
+
+//}
+}
+
+//// Something there is (about boost::bind) that doesn't love a ref. So use a pointer for hmm and beam.
+template <class MH, class MO, class X, class B>
+ void global_parahmm_each ( HMM<MH,MO,X,B>* phmm, const typename MO::RandVarType* po, Beam<LogProb,X,std::pair<Index,B> >* pbtn,
+ SafeArray1D<Id<int>,std::pair<std::pair<X,std::pair<Index,B> >,LogProb> >* patn ) {
+//void HMM<MH,MO,X,B>::each_static ( HMM<MH,MO,X,B>* phmm, const MO& o, Beam<LogProb,X,IB>* pbtn, SafeArray1D<int,std::pair<std::pair<X,IB>,LogProb> >* patn ) {
+ phmm->each(*po,*pbtn,*patn);
+}
+
+template <class MH, class MO, class X, class B>
+void HMM<MH,MO,X,B>::updatePara ( const typename MO::RandVarType& o ) {
+ // Increment frame counter...
+ frameLast++;
+
+// fprintf(stdout,"++++%d",frameLast); o.write(stdout); fprintf(stdout,"\n");
+
+ // Init beam for new frame...
+ Beam<LogProb,X,IB> btn1 (BEAM_WIDTH);
+ Beam<LogProb,X,IB> btn2 (BEAM_WIDTH);
+ Beam<LogProb,X,IB> btn3 (BEAM_WIDTH);
+ Beam<LogProb,X,IB> btn4 (BEAM_WIDTH);
+ Beam<LogProb,X,IB> btn5 (BEAM_WIDTH);
+ Beam<LogProb,X,IB> btn6 (BEAM_WIDTH);
+ Beam<LogProb,X,IB> btn7 (BEAM_WIDTH);
+ Beam<LogProb,X,IB> btn8 (BEAM_WIDTH);
+ SafeArray1D<Id<int>,std::pair<std::pair<X,IB>,LogProb> > atnSorted1 (BEAM_WIDTH);
+ SafeArray1D<Id<int>,std::pair<std::pair<X,IB>,LogProb> > atnSorted2 (BEAM_WIDTH);
+ SafeArray1D<Id<int>,std::pair<std::pair<X,IB>,LogProb> > atnSorted3 (BEAM_WIDTH);
+ SafeArray1D<Id<int>,std::pair<std::pair<X,IB>,LogProb> > atnSorted4 (BEAM_WIDTH);
+ SafeArray1D<Id<int>,std::pair<std::pair<X,IB>,LogProb> > atnSorted5 (BEAM_WIDTH);
+ SafeArray1D<Id<int>,std::pair<std::pair<X,IB>,LogProb> > atnSorted6 (BEAM_WIDTH);
+ SafeArray1D<Id<int>,std::pair<std::pair<X,IB>,LogProb> > atnSorted7 (BEAM_WIDTH);
+ SafeArray1D<Id<int>,std::pair<std::pair<X,IB>,LogProb> > atnSorted8 (BEAM_WIDTH);
+
+ //if(0==frameLast%20)
+ // fprintf(stderr,"frame %d...\n",frameLast);
+ iNextNode=0;
+ boost::thread th1(boost::bind(&global_parahmm_each<MH,MO,X,B>,this,&o,&btn1,&atnSorted1));
+ boost::thread th2(boost::bind(&global_parahmm_each<MH,MO,X,B>,this,&o,&btn2,&atnSorted2));
+ boost::thread th3(boost::bind(&global_parahmm_each<MH,MO,X,B>,this,&o,&btn3,&atnSorted3));
+ boost::thread th4(boost::bind(&global_parahmm_each<MH,MO,X,B>,this,&o,&btn4,&atnSorted4));
+ boost::thread th5(boost::bind(&global_parahmm_each<MH,MO,X,B>,this,&o,&btn5,&atnSorted5));
+ boost::thread th6(boost::bind(&global_parahmm_each<MH,MO,X,B>,this,&o,&btn6,&atnSorted6));
+ boost::thread th7(boost::bind(&global_parahmm_each<MH,MO,X,B>,this,&o,&btn7,&atnSorted7));
+ boost::thread th8(boost::bind(&global_parahmm_each<MH,MO,X,B>,this,&o,&btn8,&atnSorted8));
+ th1.join();
+ th2.join();
+ th3.join();
+ th4.join();
+ th5.join();
+ th6.join();
+ th7.join();
+ th8.join();
+
+ for(int i=0;i<BEAM_WIDTH;i++) {
+ btn1.tryAdd(btn2.get(i)->first, btn2.get(i)->second.second, btn2.get(i).getScore());
+ btn1.tryAdd(btn3.get(i)->first, btn3.get(i)->second.second, btn3.get(i).getScore());
+ btn1.tryAdd(btn4.get(i)->first, btn4.get(i)->second.second, btn4.get(i).getScore());
+ btn1.tryAdd(btn5.get(i)->first, btn5.get(i)->second.second, btn5.get(i).getScore());
+ btn1.tryAdd(btn6.get(i)->first, btn6.get(i)->second.second, btn6.get(i).getScore());
+ btn1.tryAdd(btn7.get(i)->first, btn7.get(i)->second.second, btn7.get(i).getScore());
+ btn1.tryAdd(btn8.get(i)->first, btn8.get(i)->second.second, btn8.get(i).getScore());
+ }
+
+ btn1.sort(atnSorted1);
+
+ for(int i=0;i<BEAM_WIDTH;i++) {
+ const std::pair<std::pair<X,IB>,LogProb>* tn1 = &atnSorted1.get(i);
+ aatnTrellis.set(frameLast,i)=TrellNode<X,B>(tn1->first.second.first,
+ tn1->first.first,
+ tn1->first.second.second,
+ tn1->second);
+ }
+
+// for(int i=0;i<BEAM_WIDTH;i++) {
+// aatnTrellis.set(frameLast,i)=TrellNode<X,B>(btn1.get(i)->second.second.first,
+// btn1.get(i)->first,
+// btn1.get(i)->second.second.second,
+// btn1.get(i).getScore());
+// }
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MH, class MO, class X, class B>
+void HMM<MH,MO,X,B>::writeMLS ( FILE* pf ) const {
+ // Find best value at last frame...
+ int iBest = 0;
+ LogProb lgprEnd ;
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ iBest = (aatnTrellis.get(frameLast,i).getLogProb() > aatnTrellis.get(frameLast,iBest).getLogProb()) ? i : iBest ;
+ lgprEnd = aatnTrellis.get(frameLast,iBest).getLogProb();
+ if(lgprEnd == LogProb()){
+ fprintf(pf, "WARNING: There is no most likely sequence\n");
+ return;
+ }
+ // Trace back most likely sequence...
+ for ( Frame fr=frameLast; fr-1>=0; iBest=aatnTrellis.get(fr--,iBest).getSource().toInt() ) {
+ fprintf(pf,"HYPOTH %04d> ",fr-1);
+ String str; str<<aatnTrellis.get(fr,iBest).getId()<<" "<<aatnTrellis.get(fr,iBest).getBackData()<<"\n";
+ fprintf(pf,str.c_array());
+ //aatnTrellis.get(fr,iBest).getId().write(pf);
+ //fprintf(pf," ");
+ //aatnTrellis.get(fr,iBest).getBackData().write(pf);
+ //fprintf(pf,"\n");
+ }
+ if(!OUTPUT_QUIET) fprintf(stderr,"Log prob of best path: %d\n",lgprEnd.toInt());
+}
+
+template <class MH, class MO, class X, class B>
+void HMM<MH,MO,X,B>::writeMLS ( FILE* pf, const X& xLast ) const {
+ // Find best value at last frame...
+ int iBest = -1;
+ LogProb lgprEnd ;
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ if ( xLast.compareFinal(aatnTrellis.get(frameLast,i).getId()) )
+// if ( xLast.getSub1().get(0).getSub1()==aatnTrellis.get(frameLast,i).getId().getSub1().get(0).getSub1() &&
+// xLast.getSub1().get(1).getSub1()==aatnTrellis.get(frameLast,i).getId().getSub1().get(1).getSub1() )
+ iBest = (-1==iBest || aatnTrellis.get(frameLast,i).getLogProb() > aatnTrellis.get(frameLast,iBest).getLogProb()) ? i : iBest ;
+// iBest = i;
+ if ( -1==iBest ) iBest=0;
+ lgprEnd = aatnTrellis.get(frameLast,iBest).getLogProb();
+ if(lgprEnd == LogProb()){
+ fprintf(pf, "WARNING: There is no most likely sequence\n");
+ return;
+ }
+ // Trace back most likely sequence...
+ for ( Frame fr=frameLast; fr-1>=0; iBest=aatnTrellis.get(fr--,iBest).getSource().toInt() ) {
+ fprintf(pf,"HYPOTH %04d> ",fr-1);
+ String str; str<<aatnTrellis.get(fr,iBest).getId()<<" "<<aatnTrellis.get(fr,iBest).getBackData()<<"\n";
+ fprintf(pf,str.c_array());
+ //aatnTrellis.get(fr,iBest).getId().write(pf);
+ //fprintf(pf," ");
+ //aatnTrellis.get(fr,iBest).getBackData().write(pf);
+ //fprintf(pf,"\n");
+ }
+ if(!OUTPUT_QUIET) fprintf(stderr,"Log prob of best path: %d\n",lgprEnd.toInt());
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+/* for getting the MLS in string form... */
+template <class MH, class MO, class X, class B>
+std::list<string> HMM<MH,MO,X,B>::getMLS() const {
+ std::list<string> rList;
+ int iBest = 0;
+ LogProb lgprEnd;
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ iBest = (aatnTrellis.get(frameLast,i).getLogProb() > aatnTrellis.get(frameLast,iBest).getLogProb()) ? i : iBest ;
+ lgprEnd = aatnTrellis.get(frameLast,iBest).getLogProb();
+ if(lgprEnd == LogProb()){
+ string r = "WARNING: There is no most likely sequence\n";
+ rList.push_front(r);
+ return rList;
+ }
+ // Trace back most likely sequence...
+ for ( Frame fr=frameLast; fr-1>=0; iBest=aatnTrellis.get(fr--,iBest).getSource().toInt() ) {
+ char tmp[14];
+ sprintf(tmp,"HYPOTH %04d> ", fr-1);
+ string tString(tmp);
+ tString += aatnTrellis.get(fr,iBest).getId().getString() + " " +
+ aatnTrellis.get(fr,iBest).getBackData().getString() + "\n";
+ rList.push_front(tString);
+ }
+ return rList;
+}
+
+/* for getting MLS in struct form... */
+template <class MH, class MO, class X, class B>
+std::list<TrellNode<X,B> > HMM<MH,MO,X,B>::getMLSnodes() const {
+ std::list<TrellNode<X,B> > rList;
+ int iBest = 0;
+ LogProb lgprEnd;
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ iBest = (aatnTrellis.get(frameLast,i).getLogProb() > aatnTrellis.get(frameLast,iBest).getLogProb()) ? i : iBest ;
+ lgprEnd = aatnTrellis.get(frameLast,iBest).getLogProb();
+ if(lgprEnd == LogProb()){
+ fprintf(stderr, "WARNING: There is no most likely sequence\n");
+ return rList;
+ }
+ // Trace back most likely sequence...
+ for ( Frame fr=frameLast; fr-1>=0; iBest=aatnTrellis.get(fr--,iBest).getSource().toInt() )
+ rList.push_front(aatnTrellis.get(fr,iBest));
+ return rList;
+}
+
+/* for getting the MLS in string form... */
+template <class MH, class MO, class X, class B>
+std::list<string> HMM<MH,MO,X,B>::getMLS(const X& xLast) const {
+ std::list<string> rList;
+ int iBest = -1;
+ LogProb lgprEnd;
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ if ( xLast.compareFinal(aatnTrellis.get(frameLast,i).getId()) )
+// if ( xLast.getSub1().get(0).getSub1()==aatnTrellis.get(frameLast,i).getId().getSub1().get(0).getSub1() &&
+// xLast.getSub1().get(1).getSub1()==aatnTrellis.get(frameLast,i).getId().getSub1().get(1).getSub1() )
+ iBest = (-1==iBest || aatnTrellis.get(frameLast,i).getLogProb() > aatnTrellis.get(frameLast,iBest).getLogProb()) ? i : iBest ;
+// iBest = i;
+ if ( -1==iBest ) iBest=0;
+ lgprEnd = aatnTrellis.get(frameLast,iBest).getLogProb();
+ if(lgprEnd == LogProb()){
+ string r = "WARNING: There is no most likely sequence\n";
+ rList.push_front(r);
+ return rList;
+ }
+ // Trace back most likely sequence...
+ for ( Frame fr=frameLast; fr-1>=0; iBest=aatnTrellis.get(fr--,iBest).getSource().toInt() ) {
+//// char tmp[14];
+//// sprintf(tmp,"HYPOTH %04d> ", fr-1);
+//// string tString(tmp);
+//// tString +=
+ string tString =
+//// aatnTrellis.get(fr,iBest).getId().getString() + " " +
+ aatnTrellis.get(fr,iBest).getBackData().getString()
+//// + "\n"
+ ;
+ tString = (B().getString()==tString) ? "" : " " + tString; // zero out or add space
+ rList.push_front(tString);
+ }
+ return rList;
+}
+
+/* for getting MLS in struct form... */
+template <class MH, class MO, class X, class B>
+std::list<TrellNode<X,B> > HMM<MH,MO,X,B>::getMLSnodes(const X& xLast) const {
+ std::list<TrellNode<X,B> > rList;
+ int iBest = -1;
+ LogProb lgprEnd;
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ if ( xLast.compareFinal(aatnTrellis.get(frameLast,i).getId()) )
+// if ( xLast.getSub1().get(0).getSub1()==aatnTrellis.get(frameLast,i).getId().getSub1().get(0).getSub1() &&
+// xLast.getSub1().get(1).getSub1()==aatnTrellis.get(frameLast,i).getId().getSub1().get(1).getSub1() )
+ iBest = (-1==iBest || aatnTrellis.get(frameLast,i).getLogProb() > aatnTrellis.get(frameLast,iBest).getLogProb()) ? i : iBest ;
+// iBest = i;
+ if ( -1==iBest ) iBest=0;
+ lgprEnd = aatnTrellis.get(frameLast,iBest).getLogProb();
+ if(lgprEnd == LogProb()){
+ fprintf(stderr, "WARNING: There is no most likely sequence\n");
+ return rList;
+ }
+ // Trace back most likely sequence...
+ for ( Frame fr=frameLast; fr-1>=0; iBest=aatnTrellis.get(fr--,iBest).getSource().toInt() )
+ rList.push_front(aatnTrellis.get(fr,iBest));
+ return rList;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MH, class MO, class X, class B>
+void HMM<MH,MO,X,B>::writeCurr ( FILE* pf, int f=-1 ) const {
+ if ( -1==f ) f=frameLast;
+ if ( 0<=f && f<=frameLast )
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ if(!(aatnTrellis.get(f,i).getLogProb() == LogProb())){
+ fprintf(pf,"at f=%04d b=%04d: ",f,i);
+ String str; str<<aatnTrellis.get(f,i).getId(); //.write(pf);
+ fprintf(pf,str.c_array());
+ if(f>0){
+ fprintf(pf," (from ");
+ String str; str<<aatnTrellis.get(f-1,aatnTrellis.get(f,i).getSource().toInt()).getId(); //.write(pf);
+ fprintf(pf,str.c_array());
+ fprintf(pf,")");
+ }
+ fprintf(pf," : e^%0.6f\n",double(aatnTrellis.get(f,i).getLogProb().toInt())/100.0);
+ }
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MH, class MO, class X, class B>
+void HMM<MH,MO,X,B>::writeCurrSum ( FILE* pf, int f=-1 ) const {
+ if ( -1==f ) f=frameLast;
+ if ( 0<=f && f<=frameLast ) {
+ LogProb sum = 0.0;
+ LogProb logtop = 0.0;
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ if(!(aatnTrellis.get(f,i).getLogProb() == LogProb())){
+ if(i==0) { logtop=aatnTrellis.get(f,i).getLogProb(); }
+ LogProb big1 = sum - logtop;
+ LogProb big2 = aatnTrellis.get(f,i).getLogProb() - logtop;
+ sum = LogProb( big1.toProb() + big2.toProb() ) + logtop;
+ }
+ fprintf(pf,"f=%04d sum=e^%0.6f\n",f,double(sum.toInt())/100.0);
+ }
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MH, class MO, class X, class B>
+void HMM<MH,MO,X,B>::writeCurrEntropy ( FILE* pf, int f=-1 ) const {
+ if ( -1==f ) f=frameLast;
+ if ( 0<=f && f<=frameLast ) {
+ LogProb logh = 0.0;
+ LogProb logtop = 0.0;
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ if(!(aatnTrellis.get(f,i).getLogProb() == LogProb())){
+ if(i==0) { logtop=aatnTrellis.get(f,i).getLogProb(); }
+ LogProb big1 = logh - logtop;
+ LogProb prob = aatnTrellis.get(f,i).getLogProb();
+ LogProb big2 = prob - logtop;
+ double log2prob = double(aatnTrellis.get(f,i).getLogProb().toInt()) / double(LogProb(2).toInt());
+ logh = LogProb( big1.toProb() - big2.toProb()*log2prob ) + logtop;
+ }
+ fprintf(pf,"f=%04d entropy=e^%0.6f\n",f,double(logh.toInt())/100.0);
+ }
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+// finds the average depth. but... depends on HHMMLangModel used. below is for gf.
+/*
+template <class MH, class MO, class X, class B>
+void HMM<MH,MO,X,B>::writeCurrDepths ( FILE* pf, int f=-1 ) const {
+ if ( -1==f ) f=frameLast;
+ if ( 0<=f && f<=frameLast ) {
+ LogProb sum = 0.0;
+ LogProb logtop = 0.0;
+ Array<int> depths = Array<int>();
+ Array<LogProb> logprobs = Array<LogProb>();
+ double avgdepth = 0.0;
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ if(!(aatnTrellis.get(f,i).getLogProb() == LogProb())){
+
+ if(i==0) { logtop=aatnTrellis.get(f,i).getLogProb(); }
+ logprobs.set(i) = aatnTrellis.get(f,i).getLogProb();
+
+ // loop over values in S node to find lowest meaningful depth
+ for ( int j=0; j<aatnTrellis.get(f,i).getId().first.getSize(); j++) {
+ // store the depth, if it's equal to G_BOT/G_BOT
+ string ac = aatnTrellis.get(f,i).getId().first.get(j).first.getString();
+ string aw = aatnTrellis.get(f,i).getId().first.get(j).second.getString();
+ depths.set(i) = 0;
+ if (ac=="-" && aw=="-") {
+ //fprintf(pf,"depth at b%d = %d\n",i,j);
+ depths.set(i) = j;
+ break;
+ }
+ }
+
+ LogProb big1 = sum - logtop;
+ LogProb big2 = aatnTrellis.get(f,i).getLogProb() - logtop;
+ sum = LogProb( big1.toProb() + big2.toProb() ) + logtop;
+ }
+
+ // hack-y stuff because the logprob sum loses prob mass. this will give a quantized version
+ Array<LogProb> normprobs = Array<LogProb>();
+ Prob normprobsum = Prob();
+ for ( int i=0; i<BEAM_WIDTH; i++ ) {
+ if(!(aatnTrellis.get(f,i).getLogProb() == LogProb())){
+ normprobs.set(i) = logprobs.get(i)/sum;
+ normprobsum += normprobs.get(i).toProb();
+ }
+ }
+ for ( int i=0; i<BEAM_WIDTH; i++ ) {
+ if(!(aatnTrellis.get(f,i).getLogProb() == LogProb())){
+ avgdepth += depths.get(i) * normprobs.get(i).toDouble()/normprobsum.toDouble();
+ }
+ }
+ fprintf(pf,"f=%04d avg(d)=%1.6f\n",f,avgdepth);
+ }
+}
+*/
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MH, class MO, class X, class B>
+void HMM<MH,MO,X,B>::writeFollRanked ( FILE* pf, int f, int b, const typename MO::RandVarType& o ) const {
+ const TrellNode<X,B>& tnxbPrev = aatnTrellis.get(f,b);
+ X xPrev = tnxbPrev.getId();
+ fprintf(pf,"from f=%04d b=%04d: ",f,b);
+ cout<<tnxbPrev.getId()<<"\n";
+
+ Heap < quad<int,typename MH::IterVal,LogProb,Id<int> >, outRank<int,typename MH::IterVal> > axhpiQueue;
+ typedef quad<int,typename MH::IterVal,LogProb,Id<int> > XHPI;
+ XHPI xhpi, xhpiTop;
+ int aCtr;
+
+ xhpi.first = b;
+ xhpi.third = tnxbPrev.getScore();
+ xhpi.third *= mh.setIterProb ( xhpi.second, tnxbPrev.getId(), aCtr=-1 );
+ xhpi.fourth = 0;
+ axhpiQueue.enqueue(xhpi);
+
+ //cerr<<"?? "<<xhpi<<" "<<MH::IterVal::NUM_ITERS<<"\n";
+
+ // For each ranked value of transition destination...
+ for ( int iTrg=0; iTrg<BEAM_WIDTH && axhpiQueue.getSize()>0; iTrg++ ) {
+ // Iterate A* (breadth-first) search until a complete path is at the top of the queue...
+ while ( axhpiQueue.getSize() > 0 && axhpiQueue.getTop().fourth < MH::IterVal::NUM_ITERS ) {
+ // Remove top...
+ xhpiTop = axhpiQueue.dequeueTop();
+ // Fork off (try to advance each elementary variable a)...
+ for ( int a=xhpiTop.fourth.toInt(); a<=MH::IterVal::NUM_ITERS; a++ ) {
+ // Copy top into new queue element...
+ xhpi = xhpiTop;
+ // At variable position -1, advance beam element for transition source...
+ if ( a == -1 ) xhpi.first++;
+ // Incorporate prob from transition source...
+ xhpi.third = aatnTrellis.get(f,xhpi.first).getScore();
+ if ( xhpi.third > LogProb() ) {
+ // Try to advance variable at position a and return probability (subsequent variables set to first, probability ignored)...
+ xhpi.third *= mh.setIterProb ( xhpi.second, aatnTrellis.get(f,xhpi.first).getId(), aCtr=a );
+ // At end of variables, incorporate observation probability...
+ if ( a == MH::IterVal::NUM_ITERS && xhpi.fourth != MH::IterVal::NUM_ITERS )
+ { X x; mh.setTrellDat(x,xhpi.second); xhpi.third *= mo.getProb(o,x); }
+ // Record variable position at which this element was forked off...
+ xhpi.fourth = a;
+ ////cerr<<" from partial: "<<xhpiTop<<"\n to partial: "<<xhpi<<"\n";
+ if ( xhpi.third > LogProb() ) {
+ cerr<<" "<<xhpi<<"\n";
+ // If valid, add to queue...
+ axhpiQueue.enqueue(xhpi);
+ }
+ }
+ }
+ }
+ if ( axhpiQueue.getSize() > 0 ) {
+ //cerr<<axhpiQueue.getTop()<<"\n";
+ axhpiQueue.dequeueTop();
+ }
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MH, class MO, class X, class B>
+void HMM<MH,MO,X,B>::writeFoll ( FILE* pf, int f, int b, const typename MO::RandVarType& o ) const {
+ const TrellNode<X,B>& tnxbPrev = aatnTrellis.get(f,b);
+ X xPrev = tnxbPrev.getId();
+ fprintf(pf,"from f=%04d b=%04d: ",f,b);
+ cout<<tnxbPrev.getId()<<"\n";
+ // For each possible transition...
+ typename MH::IterVal h;
+ cout<<"HMM<MH,MO,X,B>::writeFoll OUT OF ORDER\n";
+ /*
+ for ( bool b=mh.setFirst(h,xPrev); b; b=mh.setNext(h,xPrev) ) {
+ X x;
+ LogProb lgprO = mo.getProb(o,mh.setTrellDat(x,h));
+ LogProb lgprH = mh.getProb(h,xPrev);
+ LogProb lgprFull = tnxbPrev.getLogProb() * lgprH * lgprO;
+ cout<<" ==("<<tnxbPrev.getLogProb().toInt()<<"*"<<lgprH.toInt()<<"*"<<lgprO.toInt()<<"="<<lgprFull.toInt()<<")==> "<<h<<"\n";
+ }
+ */
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MH, class MO, class X, class B>
+int HMM<MH,MO,X,B>::getBeamUsed ( int f=-1 ) const {
+ if ( -1==f ) f=frameLast;
+ int ctr=0;
+ if ( 0<=f && f<=frameLast )
+ for ( int i=0; i<BEAM_WIDTH; i++ )
+ if(!(aatnTrellis.get(f,i).getLogProb() == LogProb())){
+ ctr++;
+ }
+ return ctr;
+}
+
+#endif //_NL_HMM_
+
diff --git a/synlm/hhmm/rvtl/include/nl-hmmloop.h b/synlm/hhmm/rvtl/include/nl-hmmloop.h
new file mode 100644
index 000000000..c476b4271
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-hmmloop.h
@@ -0,0 +1,397 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NL_HMMLOOP_
+#define _NL_HMMLOOP_
+#include <list>
+#include <string>
+#include <boost/thread/thread.hpp>
+#include <boost/thread/mutex.hpp>
+#include <boost/bind.hpp>
+#include "nl-prob.h"
+#include "nl-safeids.h"
+#include "nl-beam.h"
+
+typedef int Frame;
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// NullBackDat - default empty back-pointer data; can replace with word or sem relation
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template <class Y>
+class NullBackDat {
+ static const string sDummy;
+ char dummy_data_member_to_avoid_compile_warning;
+ public:
+ NullBackDat () { dummy_data_member_to_avoid_compile_warning=0; }
+ NullBackDat (const Y& y) { dummy_data_member_to_avoid_compile_warning=0; }
+ void write (FILE*) const { }
+ string getString() const { return sDummy; }
+ friend ostream& operator<< ( ostream& os, const NullBackDat& nb ) { return os; }
+};
+template <class Y>
+const string NullBackDat<Y>::sDummy ( "" );
+
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// Index - pointer to source in previous beam heap
+//
+////////////////////////////////////////////////////////////////////////////////
+
+class Index : public Id<int> {
+ public:
+ Index ( ) { }
+ Index (int i) {set(i);}
+ Index& operator++ ( ) {set(toInt()+1); return *this;}
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// TrellNode - node in viterbi trellis
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template <class S, class B>
+class TrellNode {
+ private:
+
+ // Data members...
+ Index indSource;
+ B backptrData;
+ S sId;
+ LogProb lgprMax;
+
+ public:
+
+ // Constructor / destructor methods...
+ TrellNode ( ) { }
+ TrellNode ( const Index& indS, const S& sI, const B& bDat, LogProb lgpr)
+ { indSource=indS; sId=sI; lgprMax=lgpr; backptrData=bDat; /* fo = -1; */ }
+
+ // Specification methods...
+ const Index& setSource ( ) const { return indSource; }
+ const B& setBackData( ) const { return backptrData; }
+ const S& setId ( ) const { return sId; }
+ LogProb& setScore ( ) { return lgprMax; }
+
+ // Extraction methods...
+ bool operator== ( const TrellNode<S,B>& tnsb ) const { return(sId==tnsb.sId); }
+// size_t getHashKey ( ) const { return sId.getHashKey(); }
+ const Index& getSource ( ) const { return indSource; }
+ const B& getBackData( ) const { return backptrData; }
+ const S& getId ( ) const { return sId; }
+ LogProb getLogProb ( ) const { return lgprMax; }
+ LogProb getScore ( ) const { return lgprMax; }
+
+ // Input / output methods...
+ friend ostream& operator<< ( ostream& os, const TrellNode& tn ) { return os<<tn.indSource<<","<<tn.backptrData<<","<<tn.sId<<","<<tn.lgprMax; }
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// HMMLoop
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MY, class MX, class S=typename MY::RandVarType, class B=NullBackDat<typename MY::RandVarType> >
+class HMMLoop {
+ private:
+ typedef std::pair<Index,B> IB;
+ // Data members...
+ MY modY;
+ MX modX;
+ SafeArray2D<Id<Frame>,Id<int>,TrellNode<S,B> > aatnTrellis;
+ const int BEAM_WIDTH, LOOP_LENGTH;
+ Frame frameLast;
+ int iNextNode;
+ public:
+ // Static member varaibles...
+ static bool OUTPUT_QUIET;
+ static bool OUTPUT_NOISY;
+ static bool OUTPUT_VERYNOISY;
+// static int BEAM_WIDTH;
+ // Constructor / destructor methods...
+ HMMLoop ( int, const char*[], int, int, const S& ) ;
+ // Specification methods...
+// void init ( int, int, const S& ) ;
+// void init ( int, int, SafeArray1D<Id<int>,pair<S,LogProb> >* );
+ const TrellNode<S,B>& update ( const typename MX::RandVarType& ) ;
+ const TrellNode<S,B>& getTrellNode ( Frame t, Index i ) { return aatnTrellis.get(t%LOOP_LENGTH,i); }
+ TrellNode<S,B>& setTrellNode ( Frame t, Index i ) { return aatnTrellis.set(t%LOOP_LENGTH,i); }
+
+ /*
+ void updateSerial ( const typename MX::RandVarType& ) ;
+ void updatePara ( const typename MX::RandVarType& ) ;
+ void each ( const typename MX::RandVarType&, Beam<LogProb,S,IB>&, SafeArray1D<Id<int>,std::pair<std::pair<S,IB>,LogProb> >& ) ;
+ // Extraction methods...
+ const TrellNode<S,B>& getTrellNode ( int i ) const { return aatnTrellis.get(frameLast,i); }
+ int getBeamUsed ( int ) const ;
+ // Input / output methods...
+ void writeMLS ( FILE* ) const ;
+ void writeMLS ( FILE*, const S& ) const ;
+ double getCurrSum(int) const;
+ void writeCurr ( FILE*, int ) const ;
+ void writeCurrSum ( FILE*, int ) const ;
+ void gatherElementsInBeam( SafeArray1D<Id<int>,pair<S,LogProb> >* result, int f ) const;
+ void writeCurrEntropy ( FILE*, int ) const;
+ //void writeCurrDepths ( FILE*, int ) const;
+ void writeFoll ( FILE*, int, int, const typename MX::RandVarType& ) const ;
+ void writeFollRanked ( FILE*, int, int, const typename MX::RandVarType&, bool ) const ;
+ std::list<string> getMLS() const;
+ std::list<TrellNode<S,B> > getMLSnodes() const;
+ std::list<string> getMLS(const S&) const;
+ std::list<TrellNode<S,B> > getMLSnodes(const S&) const;
+ */
+};
+template <class MY, class MX, class S, class B> bool HMMLoop<MY,MX,S,B>::OUTPUT_QUIET = false;
+template <class MY, class MX, class S, class B> bool HMMLoop<MY,MX,S,B>::OUTPUT_NOISY = false;
+template <class MY, class MX, class S, class B> bool HMMLoop<MY,MX,S,B>::OUTPUT_VERYNOISY = false;
+//template <class MY, class MX, class S, class B> int HMMLoop<MY,MX,S,B>::BEAM_WIDTH = 1;
+
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+
+template <class MY, class MX, class S, class B>
+HMMLoop<MY,MX,S,B>::HMMLoop ( int nArgs, const char* apsArgs[], int w, int l, const S& sInit ) : BEAM_WIDTH(w), LOOP_LENGTH(l) {
+
+ // For each model file in command line arguments...
+ for ( int iArg=1; iArg<nArgs; iArg++ ) {
+
+ // Try to open model file...
+ FILE* pf = fopen(apsArgs[iArg],"r");
+ // Complain if can't open model file...
+ if ( NULL == pf ) {
+ cout<<"ERROR: can't open file '"<<apsArgs[iArg]<<"'!\n";
+ cout<<"Terminating process with failure code 1.\n";
+ exit(1);
+ }
+
+ // Initialize stream buffer and line number...
+ IStreamSource iss(pf);
+ int linenum=0;
+
+ cout<<"Reading file '"<<apsArgs[iArg]<<"'...\n";
+
+ // For each line of input...
+ for ( IStream is(iss),is1; IStream()!=is; is=is1,iss.compress() ) {
+
+ // Increment line number...
+ linenum++;
+ // Count off every 100K lines...
+ if (linenum%100000==0) cout<<" Reading line "<<linenum<<"...\n";
+
+ // Try to read each line into each model...
+ String s;
+ if ( (is1=(is>>"#">>s>>"\n")) == IStream() &&
+ (is1=(is>>modY>> "\n")) == IStream() &&
+ (is1=(is>>modX>> "\n")) == IStream() &&
+ (is1=(is>>s >> "\n")) != IStream() )
+ // Complain if bad format...
+ cout<<" ERROR in '"<<apsArgs[iArg]<<"', line "<<linenum<<": can't process '"<<s<<"'!\n";
+ }
+ cout<<"Done reading file '"<<apsArgs[iArg]<<"'.\n";
+ fclose(pf);
+ }
+ cout<<"Done reading all model files.\n";
+ //modY.dump(cout,"Y");
+ //modX.dump(cout,"X");
+
+ // Alloc trellis...
+ aatnTrellis.init(LOOP_LENGTH,BEAM_WIDTH);
+ frameLast=LOOP_LENGTH;
+ // Set initial element at first time slice...
+ setTrellNode(frameLast,0) = TrellNode<S,B> ( Index(0), sInit, B(), 0 ) ;
+
+ cout<<"Begin processing input...\n";
+ IStreamSource iss(stdin);
+ typename MX::RandVarType x;
+
+ // For each frame...
+ for ( IStream is(iss); is!=IStream(); iss.compress() ) {
+
+// // Show beam...
+// cout<<"-----BEAM:t="<<frameLast-LOOP_LENGTH<<"-----\n";
+// for(int i=0;i<BEAM_WIDTH;i++)
+// cout<<getTrellNode(frameLast,i)<<"\n";
+// cout<<"--------------\n";
+
+ // Read spectrum (as frame audio)...
+ is=is>>x;
+
+// // Show spectrum...
+// cout<<frameLast-2*LOOP_LENGTH+1<<" "<<x<<"\n";
+// // Show spectrum with bin numbers...
+// cout<<frameLast-2*LOOP_LENGTH+1;
+// for(int i=0; i<NUM_FREQUENCIES; i++)
+// cout<<((i==0)?' ':',')<<i<<":"<<x.get(i);
+// cout<<"\n";
+
+ // Update trellis...
+ const TrellNode<S,B>& tn = update(x);
+
+ // Show recognized hidden variable values...
+ cout<<frameLast-2*LOOP_LENGTH+1<<":'"<<tn<<"'\n";
+ cout.flush();
+ }
+ cout<<"Done processing input.\n";
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class A, class B>
+inline bool outRank ( const quad<A,B,LogProb,Id<int> >& a1,
+ const quad<A,B,LogProb,Id<int> >& a2 ) { return (a1.third>a2.third); }
+
+template <class MY, class MX, class S, class B>
+const TrellNode<S,B>& HMMLoop<MY,MX,S,B>::update ( const typename MX::RandVarType& x ) {
+
+ // Increment frame counter...
+ frameLast++;
+
+ // Init beam for new frame...
+ Beam<LogProb,S,IB> btn(BEAM_WIDTH);
+ SafeArray1D<Id<int>,std::pair<std::pair<S,IB>,LogProb> > atnSorted (BEAM_WIDTH);
+
+ typedef quad<int,typename MY::IterVal,LogProb,Id<int> > SHPI;
+ Heap < SHPI, outRank<int,typename MY::IterVal > > ashpiQueue;
+ SHPI shpi, shpiTop;
+ int aCtr;
+
+ ashpiQueue.clear();
+ //shpi.first = -1;
+ //shpi.second = YModel::IterVal();
+ //shpi.third = 1.0;
+ shpi.first = 0;
+ shpi.third = getTrellNode(frameLast-1,shpi.first).getScore();
+ shpi.third *= modY.setIterProb ( shpi.second, getTrellNode(frameLast-1,shpi.first).getId(), aCtr=-1 ); // , x, aCtr=-1 );
+ //S s; modY.setTrellDat(s,shpi.second);
+ shpi.fourth = -1;
+ ////cerr<<"????? "<<shpi<<"\n";
+ ashpiQueue.enqueue(shpi);
+
+ bool bFull=false;
+
+ // For each ranked value of transition destination...
+ for ( int iTrg=0; !bFull && ashpiQueue.getSize()>0; iTrg++ ) {
+ // Iterate A* (best-first) search until a complete path is at the top of the queue...
+ while ( ashpiQueue.getSize() > 0 && ashpiQueue.getTop().fourth < MY::IterVal::NUM_ITERS ) {
+ // Remove top...
+ shpiTop = ashpiQueue.dequeueTop();
+ // Fork off (try to advance each elementary variable a)...
+ for ( int a=shpiTop.fourth.toInt(); a<=MY::IterVal::NUM_ITERS; a++ ) {
+ // Copy top into new queue element...
+ shpi = shpiTop;
+ // At variable position -1, advance beam element for transition source...
+ if ( a == -1 ) shpi.first++;
+ // Incorporate prob from transition source...
+ shpi.third = getTrellNode(frameLast-1,shpi.first).getScore();
+ if ( shpi.third > LogProb() ) {
+ // Try to advance variable at position a and return probability (subsequent variables set to first, probability ignored)...
+ shpi.third *= modY.setIterProb ( shpi.second, getTrellNode(frameLast-1,shpi.first).getId(), aCtr=a ); // , x, aCtr=a );
+ // At end of variables, incorporate observation probability...
+ if ( a == MY::IterVal::NUM_ITERS && shpi.fourth != MY::IterVal::NUM_ITERS )
+ shpi.third *= modX.getProb ( x, S(shpi.second) );
+ //// { S s; modY.setTrellDat(s,shpi.second); shpi.third *= modX.getProb(x,s); }
+ // Record variable position at which this element was forked off...
+ shpi.fourth = a;
+ //cerr<<" from partial: "<<shpiTop<<"\n to partial: "<<shpi<<"\n";
+ if ( shpi.third > LogProb() ) {
+ ////if ( frameLast == 4 ) cerr<<" from partial: "<<shpiTop<<"\n to partial: "<<shpi<<"\n";
+ // If valid, add to queue...
+ ashpiQueue.enqueue(shpi);
+ //cerr<<"--------------------\n"<<ashpiQueue;
+ }
+ }
+ }
+ // Remove top...
+ //cerr<<"/-----A-----\\\n"<<ashpiQueue<<"\\-----A-----/\n";
+ //if ( ashpiQueue.getTop().fourth != MY::IterVal::NUM_ITERS ) ashpiQueue.dequeueTop();
+ ////cerr<<"/-----B-----\\\n"<<ashpiQueue<<"\\-----B-----/\n";
+ ////cerr<<ashpiQueue.getSize()<<" queue elems, "<<ashpiQueue.getTop()<<"\n";
+ }
+
+ ////cerr<<"-----*-----\n"<<ashpiQueue<<"-----*-----\n";
+ ////cerr<<ashpiQueue.getSize()<<" queue elems **\n";
+
+ // Add best transition (top of queue)...
+ //modX.getProb(o,modY.setTrellDat(ashpiQueue.getTop().first,ashpiQueue.getTop().second));
+ if ( ashpiQueue.getSize() > 0 ) {
+ S s ( ashpiQueue.getTop().second );
+ ////S s; modY.setTrellDat(s,ashpiQueue.getTop().second);
+ bFull |= btn.tryAdd ( s, IB(ashpiQueue.getTop().first,B(ashpiQueue.getTop().second)), ashpiQueue.getTop().third );
+ ////cerr<<ashpiQueue.getSize()<<" queue elems A "<<ashpiQueue.getTop()<<"\n";
+ ////cerr<<"/-----A-----\\\n"<<ashpiQueue<<"\\-----A-----/\n";
+ ashpiQueue.dequeueTop();
+ ////cerr<<"/-----B-----\\\n"<<ashpiQueue<<"\\-----B-----/\n";
+ ////cerr<<ashpiQueue.getSize()<<" queue elems B "<<ashpiQueue.getTop()<<"\n";
+ //cerr<<"."; cerr.flush();
+ }
+ }
+
+ ////cerr<<"-----*-----\n"<<ashpiQueue<<"-----*-----\n";
+
+ btn.sort(atnSorted);
+
+ // Copy sorted beam to trellis...
+ Index iOriginOfBest;
+ int j=0;
+ for(int i=0;i<BEAM_WIDTH;i++) {
+ const std::pair<std::pair<S,IB>,LogProb>* tn1 = &atnSorted.get(i);
+ Index iOrigin = tn1->first.second.first;
+ // Determine origin at beginning of loop...
+ for ( Frame t=frameLast-1; t>frameLast-LOOP_LENGTH+1; t-- )
+ iOrigin = getTrellNode(t,iOrigin).getSource();
+ if ( 0 == i ) iOriginOfBest = iOrigin;
+ // If new hypothesis has same origin, add to beam...
+ if ( iOriginOfBest == iOrigin ) {
+ setTrellNode(frameLast,j++)=TrellNode<S,B>(tn1->first.second.first,
+ tn1->first.first,
+ tn1->first.second.second,
+ tn1->second);
+ }
+ }
+ // Clear out rest of beam...
+ for ( ; j<BEAM_WIDTH; j++ )
+ setTrellNode(frameLast,j) = TrellNode<S,B>();
+
+ ////modY.update();
+
+ return getTrellNode(frameLast-LOOP_LENGTH+1,iOriginOfBest);
+}
+
+
+
+
+#endif //_NL_HMMLOOP_
+
diff --git a/synlm/hhmm/rvtl/include/nl-iomacros.h b/synlm/hhmm/rvtl/include/nl-iomacros.h
new file mode 100644
index 000000000..ccb2eb095
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-iomacros.h
@@ -0,0 +1,63 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef NL_IO_MACROS__
+#define NL_IO_MACROS__
+
+//#include <sys/types.h>
+//#include <sys/socket.h>
+//#include <netinet/in.h>
+//#include <netdb.h>
+
+
+#define NUM(c) ((c>='0' && c<='9'))
+#define ALPHANUM(c) ((c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9'))
+#define SPACE(c) (c==' ')
+#define WHITESPACE(c) (c==' ' || c=='\t' || c=='\n')
+
+#define CONSUME_OPT(f,c,b,l) c = (b) ? getc(f)+0*(l+=(c=='\n')?1:0) : c
+
+#define CONSUME_ONE(f,c,b,s,l) c = (b) ? getc(f)+0*(l+=(c=='\n')?1:0) : c+(0*fprintf(stderr,"\nERROR: %s in line %d (char=%c).\n\n",s,l,c))
+#define CONSUME_ONE_STDIN(c,b,s,l) c = (b) ? getchar()+0*(l+=(c=='\n')?1:0) : c+(0*fprintf(stderr,"\nERROR: %s in line %d.\n\n",s,l))
+
+#define CONSUME_ALL(f,c,b,l) for ( ; b; c=getc(f)+0*(l+=(c=='\n')?1:0) )
+#define CONSUME_ALL_STDIN(c,b,l) for ( ; b; c=getchar()+0*(l+=(c=='\n')?1:0) )
+
+#define CONSUME_STR(f,c,b,s,i,l) for ( i=0; (b) || false != (s[i++]='\0'); s[i++]=c, c=getc(f)+0*(l+=(c=='\n')?1:0) )
+#define CONSUME_STR_SAFE(f,c,b,s,i,m,l) for ( i=0; i<m-1&&((b)||false!=(s[i++]='\0')); s[i++]=c, c=getc(f)+0*(l+=(c=='\n')?1:0) )
+#define CONSUME_STR_STDIN(c,b,s,i,l) for ( i=0; (b) || false != (s[i++]='\0'); s[i++]=c, c=getchar()+0*(l+=(c=='\n')?1:0) )
+
+#define CONSUME_INT(f,c,i,l) for ( i=0; (c>='0' && c<='9'); i=(i*10)+(c-'0'), c=getc(f)+0*(l+=(c=='\n')?1:0) )
+#define CONSUME_INT_STDIN(c,i,l) for ( i=0; (c>='0' && c<='9'); i=(i*10)+(c-'0'), c=getchar()+0*(l+=(c=='\n')?1:0) )
+
+#define CONSUME_DEC(f,c,i,j,l) for ( j=1; (c>='0' && c<='9'); j*=10, i+=(c-'0')/j, c=getc(f)+0*(l+=(c=='\n')?1:0) )
+
+#define CONSUME_HEX(f,c,i,l) for ( i=0; (c>='0' && c<='9') || (c>='a' && c<='f'); i=(i*16)+((c<'a')?c-'0':c+10-'a'), c=getc(f)+0*(l+=(c=='\n')?1:0) )
+
+#define CONSUME_ALL_SOCKET(f,c,b,l) for ( char s[1]; b; c=((recv(f,&s[0],1,MSG_WAITALL)==1) ? s[0]+0*(l+=(c=='\n')?1:0) : '\0') )
+#define CONSUME_STR_SOCKET(f,c,b,s,i,l) for ( i=0; (b) || ('\0'!=(s[i++]='\0')); s[i++]=c, c=((recv(f,&s[i],1,MSG_WAITALL)==1) ? s[i]+0*(l+=(c=='\n')?1:0) : (s[i]='\0')) )
+
+//#define CONSUME_ALL_STRING(f,c,b,l) for ( int ii=0; b && f[ii]!='\0'; c=f[ii]+0*(l+=(c=='\n')?1:0), ii++ )
+//#define CONSUME_STR_STRING(f,c,b,s,i,l) for ( i=0; (b && f[i]!='\0') || false != (s[i++]='\0'); s[i++]=c, c=f[i]+0*(l+=(c=='\n')?1:0) )
+
+#endif //_NL_IO_MACROS__
diff --git a/synlm/hhmm/rvtl/include/nl-linsep.h b/synlm/hhmm/rvtl/include/nl-linsep.h
new file mode 100644
index 000000000..ac3ef3312
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-linsep.h
@@ -0,0 +1,301 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+template<class X>
+class QuadConvolved : public X {
+ public:
+ typedef typename X::ElementType ElementType;
+ static const unsigned int SIZE = X::SIZE+1;
+ private:
+ ElementType eC;
+ public:
+ QuadConvolved<X> ( ) : eC(1.0) { }
+ ElementType& operator[] ( unsigned int i ) { assert(i<SIZE); return (i<SIZE-1) ? X::operator[](i) : eC; }
+ ElementType operator[] ( unsigned int i ) const { assert(i<SIZE); return (i<SIZE-1) ? X::operator[](i) : eC; }
+ ElementType& set ( unsigned int i ) { assert(i<SIZE); return (i<SIZE-1) ? X::set(i) : eC; }
+ ElementType get ( unsigned int i ) const { assert(i<SIZE); return (i<SIZE-1) ? X::get(i) : eC; }
+ friend pair<StringInput,QuadConvolved<X>*> operator>> ( StringInput si, QuadConvolved<X>& x ) { return pair<StringInput,QuadConvolved<X>*>(si,&x); }
+ friend StringInput operator>> ( pair<StringInput,QuadConvolved<X>*> si_x, const char* psD ) {
+ StringInput si = si_x.first>>static_cast<X&>(*si_x.second)>>psD;
+ si_x.second->set(SIZE-1)=0.0;
+ for(int i=0;i<SIZE-1;i++) si_x.second->set(SIZE-1)+=pow(si_x.second->get(i)/1000000.0,2.0);
+ return si; }
+ friend ostream& operator<< ( ostream& os, const QuadConvolved<X>& x ) { os<<x.get(0); for(int i=1;i<SIZE;i++)os<<","<<x.get(i); return os; }
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+template<class X>
+class Shifted : public X {
+ public:
+ typedef typename X::ElementType ElementType;
+ static const unsigned int SIZE = X::SIZE+1;
+ private:
+ ElementType e0;
+ public:
+ Shifted<X> ( ) : e0(0.0) { }
+ ElementType& operator[] ( unsigned int i ) { assert(i<SIZE); return (i<SIZE-1) ? X::operator[](i) : e0; }
+ ElementType operator[] ( unsigned int i ) const { assert(i<SIZE); return (i<SIZE-1) ? X::operator[](i) : e0; }
+ ElementType& set ( unsigned int i ) { assert(i<SIZE); return (i<SIZE-1) ? X::set(i) : e0; }
+ ElementType get ( unsigned int i ) const { assert(i<SIZE); return (i<SIZE-1) ? X::get(i) : e0; }
+ friend pair<StringInput,Shifted<X>*> operator>> ( StringInput si, Shifted<X>& x ) { return pair<StringInput,Shifted<X>*>(si,&x); }
+ //friend StringInput operator>> ( pair<StringInput,Shifted<X>*> si_x, const char* psD ) {
+ // StringInput si=si_x.first; for(int i=0;i<SIZE;i++) si=si>>si_x.second->set(i)>>((i<SIZE-1)?",":psD); return si; }
+ friend StringInput operator>> ( pair<StringInput,Shifted<X>*> si_x, const char* psD ) {
+ StringInput si = si_x.first>>static_cast<X&>(*si_x.second)>>psD; si_x.second->set(SIZE-1)=1.0; return si; }
+ //friend ostream& operator<< ( ostream& os, const Shifted<X>& x ) { os<<x.get(0); for(uint i=1;i<SIZE;i++)os<<","<<x.get(i); return os; }
+ friend ostream& operator<< ( ostream& os, Shifted<X>& x ) { if(x.get(SIZE-1)!=1.0)for(uint i=1;i<SIZE;i++)x.set(i)/=x.get(SIZE-1); return os<<((X)x); }
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+template<class X>
+class Vector : public X {
+ public:
+ typedef typename X::ElementType ElementType;
+ static const unsigned int SIZE = X::SIZE;
+ Vector ( ) { }
+ Vector ( const Vector<X>& v ) { for(uint i=0;i<SIZE;i++) X::set(i)=v.get(i); }
+ ElementType operator* ( const Vector<X>& v ) const { ElementType d=0.0; for(uint i=0;i<SIZE;i++) d += X::get(i)*v.get(i); return d; } // inner prod
+ Vector<X> operator+ ( const Vector<X>& v ) const { Vector<X> vO; for(uint i=0;i<SIZE;i++) vO[i]=X::get(i)+v[i]; return vO; } // vector sum
+ Vector<X> operator- ( const Vector<X>& v ) const { Vector<X> vO; for(uint i=0;i<SIZE;i++) vO[i]=X::get(i)-v[i]; return vO; } // vector sum
+ Vector<X> operator* ( ElementType d ) const { Vector<X> vO; for(uint i=0;i<SIZE;i++) vO[i] = X::get(i)*d; return vO; }
+ Vector<X> operator/ ( ElementType d ) const { Vector<X> vO; for(uint i=0;i<SIZE;i++) vO[i] = X::get(i)/d; return vO; }
+ Vector<X> operator+ ( ElementType d ) const { Vector<X> vO; for(uint i=0;i<SIZE;i++) vO[i] = X::get(i)+d; return vO; }
+ Vector<X> operator- ( ElementType d ) const { Vector<X> vO; for(uint i=0;i<SIZE;i++) vO[i] = X::get(i)-d; return vO; }
+ friend Vector<X> operator* ( ElementType d, const Vector<X>& v ) { Vector<X> vO; for(uint i=0;i<SIZE;i++) vO[i] = d*v[i]; return vO; }
+ friend Vector<X> operator/ ( ElementType d, const Vector<X>& v ) { Vector<X> vO; for(uint i=0;i<SIZE;i++) vO[i] = d/v[i]; return vO; }
+ friend Vector<X> operator+ ( ElementType d, const Vector<X>& v ) { Vector<X> vO; for(uint i=0;i<SIZE;i++) vO[i] = d+v[i]; return vO; }
+ friend Vector<X> operator- ( ElementType d, const Vector<X>& v ) { Vector<X> vO; for(uint i=0;i<SIZE;i++) vO[i] = d-v[i]; return vO; }
+ Vector<X>& operator*= ( ElementType d ) { for(uint i=0;i<SIZE;i++) X::set(i)*=d; return *this; }
+ Vector<X>& operator/= ( ElementType d ) { for(uint i=0;i<SIZE;i++) X::set(i)/=d; return *this; }
+ Vector<X>& operator+= ( ElementType d ) { for(uint i=0;i<SIZE;i++) X::set(i)+=d; return *this; }
+ Vector<X>& operator-= ( ElementType d ) { for(uint i=0;i<SIZE;i++) X::set(i)-=d; return *this; }
+ Vector<X>& operator+= ( const Vector<X>& v ) { for(uint i=0;i<SIZE;i++) X::set(i)+=v.X::get(i); return *this; }
+ Vector<X>& operator-= ( const Vector<X>& v ) { for(uint i=0;i<SIZE;i++) X::set(i)-=v.X::get(i); return *this; }
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+//#define GD 1
+
+template<class Q,class X,class P>
+class LinSepModel {
+ public:
+ class CondVarType : public Vector<Shifted<X> > { public: CondVarType(){} CondVarType(const Vector<Shifted<X> >& v):Vector<Shifted<X> >(v){} };
+ class InputTrainingExample : public Joint2DRV<Q,CondVarType> {
+// public:
+// friend pair<StringInput,InputTrainingExample*> operator>> ( StringInput si, InputTrainingExample& x ) { return pair<StringInput,InputTrainingExample*>(si,&x); }
+// friend StringInput operator>> ( pair<StringInput,InputTrainingExample*> si_x, const char* psD ) {
+// StringInput si = si_x.first>>static_cast<X&>(*si_x.second)>>psD; si_x.second->set(SIZE-1)=1.0; return si; }
+ };
+ typedef P ProbType;
+ CondVarType w; // weight vector
+
+ private:
+
+ typename X::ElementType sigmoid ( double a ) { return (!isnan(1.0/(1.0+exp(-a)))) ? 1.0/(1.0+exp(-a)) : (a>0.0) ? 1.0 : 0.0; }
+
+ public:
+
+ template<class F>
+ void train ( const SubArray<SafePtr<const InputTrainingExample> > apyx, F& yfn, double iP, double iN ) {
+ const double SCALER = 1000.0; // 1000.0 works just as well
+ //cerr<<" ---"<<iN<<" "<<iP<<" "<<N<<"\n";
+ ////cout<<" ---"<<iN<<" "<<iP<<" "<<N<<"\n";
+ iN*=2.0/apyx.size(); iP*=2.0/apyx.size();
+ cerr<<" ---"<<iN<<" "<<iP<<"\n";
+
+ #ifdef GD
+ #else
+ //typename X::ElementType lambda=1.0; // inverse variance of prior over total weight
+ typename X::ElementType beta; // hestenes steifel factor
+ //typename X::ElementType ddl; // double deriv (for newton step)
+ #endif
+ CondVarType gPrev; // previous gradient
+ CondVarType g; // current gradient
+ CondVarType u; // step direction
+ typename X::ElementType z=0.0; // step size
+ double errPrev=200000.0;
+ double err =100000.0;
+ Array<typename X::ElementType> wtx(apyx.size(),0.0); // weighted sum
+
+ for ( int k=0; k<100 && err>0.0 && (errPrev-err>0.001||k<=3); k++ ) {
+ errPrev = err;
+
+ ////cerr<<" ? "<<g<<"\n";
+ g = CondVarType(); //-lambda*w
+ ////cerr<<" ??? "<<iP<<" "<<iN<<"\n";
+ for ( unsigned int n=0; n<apyx.size(); n++ ) {
+ g += ( sigmoid ( -((yfn(apyx[n].getRef().first))?1.0:-1.0) * wtx[n] )
+ * ((yfn(apyx[n].getRef().first))?1.0:-1.0) * apyx[n].getRef().second/SCALER
+ * ((yfn(apyx[n].getRef().first))?iN:iP) );
+ }
+ //cerr<<" g="<<g<<"\n";
+
+ #ifdef GD
+ u = g;
+ #else
+ beta = (k<=1) ? 0.0 : (g*(g-gPrev)) / (u*(g-gPrev));
+ //cerr<<" beta="<<beta<<"\n";
+ u = gPrev - beta*u;
+ #endif
+
+ #ifdef GD
+ #else
+ //ddl = 0.0; //(lambda*u*u);
+ //for ( unsigned int n=0; n<apyx.size(); n++ )
+ // ddl += sigmoid(wtx[n]) * sigmoid(-wtx[n]) * pow(u*apyx[n].getRef().second,2);
+ //z = (g*u)/ddl;
+ #endif
+
+ //if(apyx.size()==123) cerr<<" u="<<u<<"\n";
+
+ if (k<=0) {
+ //w=u;
+ errPrev=100000.0;
+ } else {
+ double zDiff=10.0;
+ z=0.0;
+ for ( int t=0; abs(zDiff)>.001 && t<1; t++ ) {
+ double a = 0.0;
+ double b = 0.0;
+ ////cerr<<" w = "<<w<<"\n";
+ for ( unsigned int n=0; n<apyx.size(); n++ ) {
+ ////cout<<" !!: "<<apyx[n].getRef().second<<"\n";
+
+ // If only one z loop, use wtx...
+ double ywzux = ((yfn(apyx[n].getRef().first))?1.0:-1.0) * wtx[n];
+ //double ywzux = ((yfn(apyx[n].getRef().first))?1.0:-1.0) * (w+z*u) * apyx[n].getRef().second/SCALER;
+
+ //if(apyx.size()==123) cerr<<" w="<<w<<"\n";
+ //if(apyx.size()==123) cerr<<" z="<<z<<"\n";
+ //if(apyx.size()==123) cerr<<" u="<<u<<"\n";
+ //if(apyx.size()==123) cerr<<" z*u="<<z*u<<"\n";
+ //if(apyx.size()==123) cerr<<" (w+z*u)="<<(w+(z*u))<<"\n";
+ //if(apyx.size()==123) cerr<<" x="<<(apyx[n].getRef().second/SCALER)<<"\n";
+ a += sigmoid(-ywzux) * ((yfn(apyx[n].getRef().first))?1.0:-1.0) * u * apyx[n].getRef().second/SCALER * ((yfn(apyx[n].getRef().first))?iN:iP);
+ b += sigmoid(ywzux) * sigmoid(-ywzux) * pow(u*apyx[n].getRef().second/SCALER,2.0) * ((yfn(apyx[n].getRef().first))?iN:iP);
+ //if(apyx.size()==123) cerr<<" x_"<<n<<"="<<ywzux<<" a="<<a<<" b="<<b<<"\n";
+ }
+ zDiff = (a==0.0) ? 0.0 : a/b;
+ cerr<<" (z="<<z<<")";
+ z += zDiff;
+ cerr<<" a="<<a<<" b="<<b<<" zDiff="<<zDiff<<" ==> z="<<z<<"\n";
+ }
+ w += z*u;
+ }
+
+ //cerr<<" w="<<w<<"\n";
+ for ( unsigned int n=0; n<apyx.size(); n++ )
+ wtx[n] += z*u*apyx[n].getRef().second/SCALER;
+ gPrev = g;
+
+ err = 0.0;
+ for ( unsigned int n=0; n<apyx.size(); n++ )
+ err += log ( 1.0 + exp ( -((yfn(apyx[n].getRef().first))?1.0:-1.0) * w*apyx[n].getRef().second/SCALER ) ) * ((yfn(apyx[n].getRef().first))?iN:iP);
+ cerr<<" ? k="<<k<<" "<<err<<"\n";
+ }
+
+ //for ( unsigned int n=0; n<apyx.size(); n++ )
+ // if ( yfn(apyx[n].getRef().first) ) cerr<<" "<<( ((yfn(apyx[n].getRef().first))?1.0:-1.0) * w*apyx[n].getRef().second )<<"\n";
+ }
+ bool classify ( const CondVarType& x ) const { /*cerr<<"----------\n"<<w<<"\n *\n"<<x<<"\n =\n"<<(w*x)<<"\n";*/ return ( w*x > 0.0 ); }
+ friend ostream& operator<< ( ostream& os, const LinSepModel<Q,X,P>& m ) { return os<<m.w; }
+ friend pair<StringInput,LinSepModel<Q,X,P>*> operator>> ( StringInput si, LinSepModel<Q,X,P>& m ) {
+ return pair<StringInput,LinSepModel<Q,X,P>*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,LinSepModel<Q,X,P>*> si_m, const char* psD ) {
+ return (si_m.first==NULL) ? StringInput(NULL) : si_m.first>>si_m.second->w>>psD; }
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+template<class Q,class X,class P>
+ class SimpleLinSepModel {
+ public:
+ class CondVarType : public Vector<X> { };
+ class InputTrainingExample : public Joint2DRV<Q,CondVarType> {
+// public:
+// friend pair<StringInput,InputTrainingExample*> operator>> ( StringInput si, InputTrainingExample& x ) { return pair<StringInput,InputTrainingExample*>(si,&x); }
+// friend StringInput operator>> ( pair<StringInput,InputTrainingExample*> si_x, const char* psD ) {
+// StringInput si = si_x.first>>static_cast<X&>(*si_x.second)>>psD; si_x.second->set(SIZE-1)=1.0; return si; }
+ };
+ typedef P ProbType;
+ CondVarType w; // weight vector
+
+ private:
+
+ typename X::ElementType sigmoid ( double a ) { return 1.0/(1.0+exp(-a)); }
+
+ public:
+
+ ////void train ( const SafePtr<const InputTrainingExample> apyx[], const int N, bool fn(const Q&), double iPnotused, double iNnotused ) {
+ template<class F>
+ void train ( const SubArray<SafePtr<const InputTrainingExample> > apyx, F& yfn, double iPnotused, double iNnotused ) {
+ double dIntercept = 0.0;
+ CondVarType vP,vN,vDelt,vMid; // pos/neg centroids, difference, midpoint
+ int iP=0,iN=0; // pos/neg counts
+ // For each example...
+ for ( unsigned int i=0; i<apyx.size(); i++ ) {
+ // If matches target, avg into pos centroid...
+ if ( yfn(apyx[i].getRef().first) ) {
+ iP++;
+ for ( unsigned int j=0; j<CondVarType::SIZE; j++ ) vP[j]+=apyx[i].getRef().second[j];
+ }
+ // If no match, avg into neg centroid...
+ else {
+ iN++;
+ for ( unsigned int j=0; j<CondVarType::SIZE; j++ ) vN[j]+=apyx[i].getRef().second[j];
+ }
+ }
+ //cerr<<"prob of "<<qTarget<<" at "<<branch<<" = "<<iP<<"/"<<N<<":"<<iN<<"/"<<N<<" = "<<double(iP)/double(N)<<"\n";
+ // Turn sums into avgs...
+ if ( iP>0 ) for ( unsigned int j=0; j<CondVarType::SIZE; j++ ) vP[j]/=double(iP);
+ if ( iN>0 ) for ( unsigned int j=0; j<CondVarType::SIZE; j++ ) vN[j]/=double(iN);
+
+ // Calc vec of delta between centroids...
+ for ( unsigned int j=0; j<CondVarType::SIZE; j++ ) vDelt[j]=vP[j]-vN[j];
+ // Calc vec of midpoint between centroids...
+ for ( unsigned int j=0; j<CondVarType::SIZE; j++ ) vMid[j]=(vP[j]+vN[j])/2.0;
+ // Calc y-intercept of gradient (negative so test is > -1.0)...
+ for ( unsigned int j=0; j<CondVarType::SIZE; j++ ) dIntercept-=vDelt[j]*vMid[j];
+ // Calc gradient between centroids...
+ for ( unsigned int j=0; j<CondVarType::SIZE; j++ ) w[j]=vDelt[j]/dIntercept;
+ }
+ // NOTE: bool does not necessarily correspond to true=positive -- have to check by hand if you care (oblidtree doesn't care)...
+ bool classify ( const CondVarType& x ) const { /*cerr<<"----------\n"<<w<<"\n *\n"<<x<<"\n =\n"<<(w*x)<<"\n";*/ return ( w*x > -1.0 ); }
+
+ friend ostream& operator<< ( ostream& os, const SimpleLinSepModel<Q,X,P>& m ) { return os<<m.w; }
+
+ friend pair<StringInput,SimpleLinSepModel<Q,X,P>*> operator>> ( StringInput si, SimpleLinSepModel<Q,X,P>& m ) {
+ return pair<StringInput,SimpleLinSepModel<Q,X,P>*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,SimpleLinSepModel<Q,X,P>*> si_m, const char* psD ) {
+ return (si_m.first==NULL) ? StringInput(NULL) : si_m.first>>si_m.second->w>>psD; }
+};
diff --git a/synlm/hhmm/rvtl/include/nl-list.h b/synlm/hhmm/rvtl/include/nl-list.h
new file mode 100644
index 000000000..65f07f8b5
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-list.h
@@ -0,0 +1,481 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NL_LIST_ //////////////////////////////////////////////////////////////
+#define _NL_LIST_ //////////////////////////////////////////////////////////////
+
+#include <stdlib.h>
+
+#define Listed(x) ListedObject<x>
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Container macros
+//
+////////////////////////////////////////////////////////////////////////////////
+
+// Standard loop...
+#define foreach(p,c) for ( p=(c).getNext(NULL); p!=NULL; p=(c).getNext(p) )
+
+// True unless proven false...
+#define setifall(y,p,c,x) for ( p=(c).getNext(NULL), y=true; p!=NULL && y; y &= (x), p=(c).getNext(p) )
+
+// False unless proven true...
+#define setifexists(y,p,c,x) for ( p=(c).getNext(NULL), y=false; p!=NULL && !y; y |= (x), p=(c).getNext(p) )
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+class Ptr
+ {
+ private:
+ T* ptObj ;
+ public:
+ Ptr ( ) { ptObj=NULL; }
+ Ptr ( T* pt ) { ptObj=pt; }
+ Ptr ( T& t ) { ptObj=&t; }
+ Ptr ( const Ptr<T>& pt ) { ptObj=pt.ptObj; }
+ bool operator> ( const Ptr<T>& pt ) const { return(ptObj>pt.ptObj); }
+ bool operator< ( const Ptr<T>& pt ) const { return(ptObj<pt.ptObj); }
+ bool operator>= ( const Ptr<T>& pt ) const { return(ptObj>=pt.ptObj); }
+ bool operator<= ( const Ptr<T>& pt ) const { return(ptObj<=pt.ptObj); }
+ bool operator== ( const Ptr<T>& pt ) const { return(ptObj==pt.ptObj); }
+ bool operator!= ( const Ptr<T>& pt ) const { return(ptObj!=pt.ptObj); }
+ Ptr<T>& operator= ( const Ptr<T>& pt ) { ptObj=pt.ptObj; return *this; }
+ T& operator* ( ) const { return *ptObj; }
+ T* operator-> ( ) const { return ptObj; }
+ } ;
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+class ListedObject ;
+
+template <class T>
+class List {
+ private:
+
+ ListedObject<T>* plotLast ;
+
+ public:
+
+ typedef ListedObject<T>* iterator;
+ typedef const ListedObject<T>* const_iterator;
+
+ // Constructor and destructor methods...
+ List ( ) ;
+ List ( const T& ) ;
+ List ( const List<T>& ) ;
+ List ( const List<T>&, const List<T>& ) ;
+ ~List ( ) ;
+
+ // Overloaded operators...
+ List<T>& operator= ( const List<T>& ) ;
+ List<T>& operator+= ( const List<T>& ) ;
+ bool operator== ( const List<T>& ) const ;
+ bool operator!= ( const List<T>& ) const ;
+
+ // Specification methods...
+ void clear ( ) ;
+ T& insert ( Listed(T)* ) ;
+ void remove ( Listed(T)* ) ;
+ T& add ( ) ;
+ T& push ( ) ;
+ void pop ( ) ;
+ Listed(T)* setFirst ( ) ;
+ Listed(T)* setNext ( Listed(T)* ) ;
+
+ // Extraction methods...
+ const_iterator begin ( ) const { return getNext(NULL); }
+ const_iterator end ( ) const { return NULL; }
+ iterator& operator++ ( ) { *this=getNext(*this); return *this; }
+ int getCard ( ) const ;
+ Listed(T)* getFirst ( ) const ;
+ Listed(T)* getSecond( ) const ;
+ Listed(T)* getLast ( ) const ;
+ Listed(T)* getNext ( const Listed(T)* ) const ;
+ bool contains ( const T& ) const ;
+ bool isEmpty ( ) const ;
+
+/* // Input / output methods... */
+/* friend IStream operator>> ( pair<IStream,List<T>*> is_x, const char* psDlm ) { */
+/* IStream& is = is_x.first; */
+/* List<T>& x = *is_x.second; */
+/* if (IStream()!=is) */
+/* is = pair<IStream,T*>(is,&x.add())>>psDlm; */
+/* return is; */
+/* } */
+} ;
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+class ListedObject : public T
+ {
+ friend class List<T> ;
+
+ private:
+
+ ListedObject<T>* plotNext ;
+
+ public:
+
+ const ListedObject<T>* next ( ) const { return plotNext; }
+ ListedObject ( ) { plotNext = NULL; }
+ ListedObject ( const ListedObject<T>& lot )
+ { T::operator=(lot); }
+ ListedObject<T>& operator= ( const ListedObject<T>& lot )
+ { T::operator=(lot); return(*this); }
+ operator T() { return *this; }
+ } ;
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+List<T>::List ( )
+ {
+ plotLast = NULL ;
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+List<T>::List ( const T& t )
+ {
+ plotLast = NULL ;
+
+ add() = t ;
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+List<T>::List ( const List<T>& lt )
+ {
+ ListedObject<T>* pt ;
+
+ plotLast = NULL ;
+
+ foreach ( pt, lt )
+ add() = *pt ;
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+List<T>::List ( const List<T>& lt1, const List<T>& lt2 )
+ {
+ ListedObject<T>* pt ;
+
+ plotLast = NULL ;
+
+ foreach ( pt, lt1 )
+ add() = *pt ;
+ foreach ( pt, lt2 )
+ add() = *pt ;
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+List<T>::~List ( )
+ {
+ clear();
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+void List<T>::clear ( )
+ {
+ ListedObject<T>* plot ;
+ ListedObject<T>* plot2 ;
+ if ( NULL != (plot = plotLast) )
+ do { plot2 = plot->plotNext ;
+ ////fprintf(stderr,"list::destr %x\n",plot);
+ delete plot ;
+ } while ( plotLast != (plot = plot2) ) ;
+ plotLast = NULL ;
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+List<T>& List<T>::operator= ( const List<T>& lt )
+ {
+ Listed(T)* pt ;
+
+ this->~List ( ) ;
+ plotLast = NULL ;
+
+ foreach ( pt, lt )
+ add() = *pt ;
+
+ return *this ;
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+List<T>& List<T>::operator+= ( const List<T>& lt )
+ {
+ Listed(T)* pt ;
+
+ foreach ( pt, lt )
+ add() = *pt ;
+
+ return *this ;
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+bool List<T>::operator== ( const List<T>& lt ) const
+ {
+ Listed(T)* pt1 ;
+ Listed(T)* pt2 ;
+
+ for ( pt1 = getNext(NULL), pt2 = lt.getNext(NULL);
+ pt1 != NULL && pt2 != NULL ;
+ pt1 = getNext(pt1), pt2 = lt.getNext(pt2) )
+ if ( !(*pt1 == *pt2) ) return false ;
+
+ return ( pt1 == NULL && pt2 == NULL ) ;
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+bool List<T>::operator!= ( const List<T>& lt ) const
+ {
+ return !(*this == lt) ;
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+T& List<T>::insert ( Listed(T)* plotPrev )
+ {
+ ListedObject<T>* plot = new ListedObject<T> ;
+ ////fprintf(stderr,"list::const %x\n",plot);
+
+ if ( NULL != plotPrev )
+ {
+ plot->plotNext = plotPrev->plotNext ;
+ plotPrev->plotNext = plot ;
+ if ( plotLast == plotPrev )
+ plotLast = plot ;
+ }
+ else if ( NULL != plotLast )
+ {
+ plot->plotNext = plotLast->plotNext ;
+ plotLast->plotNext = plot ;
+ }
+ else
+ {
+ plot->plotNext = plot ;
+ plotLast = plot ;
+ }
+
+ return *plot ;
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+/* DON'T KNOW WHY THIS DOESN'T WORK
+template <class T>
+void List<T>::remove ( Listed(T)* plot )
+ {
+ assert ( plot );
+ assert ( plotLast );
+ // If only one element...
+ if ( plot->plotNext == plot )
+ {
+ assert ( plotLast == plot );
+ plotLast = NULL;
+fprintf(stderr,"list::delete1 %x\n",plot);
+ delete plot;
+ }
+ // If more than one element...
+ else
+ {
+ if ( plotLast == plot->plotNext ) plotLast = plot;
+ Listed(T)* plotTemp = plot->plotNext;
+ *plot = *(plot->plotNext);
+fprintf(stderr,"list::delete2 %x\n",plotTemp);
+ delete plotTemp;
+ }
+ }
+*/
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+T& List<T>::add ( )
+ {
+ ListedObject<T>* plot = new ListedObject<T> ;
+ ////fprintf(stderr,"list::add %x\n",plot);
+
+ if ( NULL != plotLast )
+ {
+ plot->plotNext = plotLast->plotNext ;
+ plotLast->plotNext = plot ;
+ plotLast = plot ;
+ }
+ else
+ {
+ plot->plotNext = plot ;
+ plotLast = plot ;
+ }
+
+ return *plot ;
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+T& List<T>::push ( )
+ {
+ ListedObject<T>* plot = new ListedObject<T> ;
+ ////fprintf(stderr,"list::push %x\n",plot);
+
+ if ( NULL != plotLast )
+ {
+ plot->plotNext = plotLast->plotNext ;
+ plotLast->plotNext = plot ;
+ }
+ else
+ {
+ plot->plotNext = plot ;
+ plotLast = plot ;
+ }
+
+ return *plot ;
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+void List<T>::pop ( )
+ {
+ ListedObject<T>* plot = plotLast->plotNext ;
+
+ if ( plot->plotNext == plot )
+ plotLast = NULL ;
+ else
+ plotLast->plotNext = plot->plotNext ;
+
+ ////fprintf(stderr,"list::pop %x\n",plot);
+ delete plot ;
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+int List<T>::getCard ( ) const
+ {
+ Listed(T)* pt ;
+ int i = 0 ;
+
+ foreach ( pt, *this )
+ i++ ;
+
+ return i ;
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+ListedObject<T>* List<T>::setFirst ( )
+ {
+ return ( NULL != plotLast ) ? plotLast->plotNext : NULL ;
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+ListedObject<T>* List<T>::setNext ( ListedObject<T>* plot )
+ {
+ return ( NULL == plot && NULL != plotLast ) ? plotLast->plotNext :
+ ( plot != plotLast ) ? plot->plotNext : NULL ;
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+ListedObject<T>* List<T>::getFirst ( ) const
+ {
+ return ( NULL != plotLast ) ? plotLast->plotNext : NULL ;
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+ListedObject<T>* List<T>::getSecond ( ) const
+ {
+ return getNext(getFirst()) ;
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+ListedObject<T>* List<T>::getLast ( ) const
+ {
+ return ( NULL != plotLast ) ? plotLast : NULL ;
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+ListedObject<T>* List<T>::getNext ( const ListedObject<T>* plot ) const
+ {
+ return ( NULL == plot && NULL != plotLast ) ? plotLast->plotNext :
+ ( plot != plotLast ) ? plot->plotNext : NULL ;
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+bool List<T>::contains ( const T& t ) const
+ {
+ ListedObject<T>* pt ;
+
+ foreach ( pt, *this )
+ if ( t == *pt ) return true ;
+
+ return false ;
+ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+bool List<T>::isEmpty ( ) const
+ {
+ return ( NULL == plotLast ) ;
+ }
+
+#endif //_NL_LIST_ /////////////////////////////////////////////////////////////
+
diff --git a/synlm/hhmm/rvtl/include/nl-matrix.h b/synlm/hhmm/rvtl/include/nl-matrix.h
new file mode 100644
index 000000000..c8c18f8e1
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-matrix.h
@@ -0,0 +1,177 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+template<class I,class J,class P>
+class SparseMatrix : public SimpleHash<I,SimpleHash<J,P> > {
+ public:
+
+ typedef SimpleHash<I,SimpleHash<J,P> > Parent;
+
+ //// Matrix / vector operator methods...
+ friend SparseMatrix<I,J,P> operator* ( const SparseMatrix<I,J,P>& a, const SparseMatrix<I,J,P>& b ) {
+ SparseMatrix mOut;
+ for ( typename Parent::const_iterator iit=a.begin(); iit!=a.end(); iit++ ) {
+ I i = iit->first;
+ for ( typename SimpleHash<J,P>::const_iterator kit=a.get(i).begin(); kit!=a.get(i).end(); kit++ ) {
+ I k = kit->first;
+ for ( typename SimpleHash<J,P>::const_iterator jit=b.get(k).begin(); jit!=b.get(k).end(); jit++ ) {
+ I j = jit->first;
+ if ( a.get(i).get(k)!=0 && b.get(k).get(j)!=0 )
+ mOut.set(i).set(j) += a.get(i).get(k) * b.get(k).get(j);
+ }
+ }
+ }
+ return mOut;
+ }
+ friend SparseMatrix<I,J,P> operator+ ( const SparseMatrix<I,J,P>& a, const SparseMatrix<I,J,P>& b ) {
+ SparseMatrix mOut;
+ for ( typename Parent::const_iterator iit=a.begin(); iit!=a.end(); iit++ ) {
+ I i = iit->first;
+ for ( typename SimpleHash<J,P>::const_iterator jit=a.get(i).begin(); jit!=a.get(i).end(); jit++ ) {
+ I j = jit->first;
+ mOut.set(i).set(j) = a.get(i).get(j);
+ }
+ }
+ for ( typename Parent::const_iterator iit=b.begin(); iit!=b.end(); iit++ ) {
+ I i = iit->first;
+ for ( typename SimpleHash<J,P>::const_iterator jit=b.get(i).begin(); jit!=b.get(i).end(); jit++ ) {
+ I j = jit->first;
+ mOut.set(i).set(j) += b.get(i).get(j);
+ }
+ }
+ return mOut;
+ }
+ friend SparseMatrix<I,J,P> operator- ( const SparseMatrix<I,J,P>& a, const SparseMatrix<I,J,P>& b ) {
+ SparseMatrix mOut;
+ for ( typename Parent::const_iterator iit=a.begin(); iit!=a.end(); iit++ ) {
+ I i = iit->first;
+ for ( typename SimpleHash<J,P>::const_iterator jit=a.get(i).begin(); jit!=a.get(i).end(); jit++ ) {
+ I j = jit->first;
+ mOut.set(i).set(j) = a.get(i).get(j);
+ }
+ }
+ for ( typename Parent::const_iterator iit=b.begin(); iit!=b.end(); iit++ ) {
+ I i = iit->first;
+ for ( typename SimpleHash<J,P>::const_iterator jit=b.get(i).begin(); jit!=b.get(i).end(); jit++ ) {
+ I j = jit->first;
+ mOut.set(i).set(j) -= b.get(i).get(j);
+ }
+ }
+ return mOut;
+ }
+ // Matrix + scalar operators...
+ friend SparseMatrix<I,J,P> operator+ ( const SparseMatrix<I,J,P>& a, const P& p ) {
+ SparseMatrix mOut;
+ for ( typename Parent::const_iterator iit=a.begin(); iit!=a.end(); iit++ ) {
+ I i = iit->first;
+ for ( typename SimpleHash<J,P>::const_iterator jit=a.get(i).begin(); jit!=a.get(i).end(); jit++ ) {
+ I j = jit->first;
+ mOut.set(i).set(j) = a.get(i).get(j) + p;
+ }
+ }
+ return mOut;
+ }
+ friend SparseMatrix<I,J,P> operator- ( const SparseMatrix<I,J,P>& a, const P& p ) {
+ SparseMatrix mOut;
+ for ( typename Parent::const_iterator iit=a.begin(); iit!=a.end(); iit++ ) {
+ I i = iit->first;
+ for ( typename SimpleHash<J,P>::const_iterator jit=a.get(i).begin(); jit!=a.get(i).end(); jit++ ) {
+ I j = jit->first;
+ mOut.set(i).set(j) = a.get(i).get(j) - p;
+ }
+ }
+ return mOut;
+ }
+ // Diagonal matrix of vector...
+ friend SparseMatrix<I,J,P> diag ( const SparseMatrix<I,J,P>& a ) {
+ SparseMatrix mOut;
+ for ( typename Parent::const_iterator iit=a.begin(); iit!=a.end(); iit++ ) {
+ I i = iit->first;
+ for ( typename SimpleHash<J,P>::const_iterator jit=a.get(i).begin(); jit!=a.get(i).end(); jit++ ) {
+ I j = jit->first;
+ assert(j==0); // must be vector
+ mOut.set(i).set(i) += a.get(i).get(j);
+ }
+ }
+ return mOut;
+ }
+ // Scalar inf-norm (max) of matrix / vector...
+ P infnorm ( ) const {
+ P pOut = 0; // sparse matrix assumes some values are zero, so this is default infnorm.
+ for ( typename Parent::const_iterator iit=Parent::begin(); iit!=Parent::end(); iit++ ) {
+ I i = iit->first;
+ for ( typename SimpleHash<J,P>::const_iterator jit=Parent::get(i).begin(); jit!=Parent::get(i).end(); jit++ ) {
+ I j = jit->first;
+ if ( Parent::get(i).get(j) > pOut ) pOut = Parent::get(i).get(j);
+ }
+ }
+ return pOut;
+ }
+
+ // Scalar one-norm (sum) of matrix / vector...
+ P onenorm ( ) const {
+ P sum=0;
+ for ( typename Parent::const_iterator iit=Parent::begin(); iit!=Parent::end(); iit++ ) {
+ I i = iit->first;
+ for ( typename SimpleHash<J,P>::const_iterator jit=Parent::get(i).begin(); jit!=Parent::get(i).end(); jit++ ) {
+ I j = jit->first;
+ sum += Parent::get(i).get(j);
+ }
+ }
+ return sum;
+ }
+
+ //// Input / output methods...
+ friend pair<StringInput,SparseMatrix<I,J,P>*> operator>> ( StringInput si, SparseMatrix<I,J,P>& m ) {
+ return pair<StringInput,SparseMatrix<I,J,P>*>(si,&m);
+ }
+ friend StringInput operator>> ( pair<StringInput,SparseMatrix<I,J,P>*> si_m, const char* psD ) {
+ if (StringInput(NULL)==si_m.first) return si_m.first;
+ StringInput si; I i,j; P p;
+ si=si_m.first>>i>>" : ">>j>>" = ">>p>>psD;
+ if ( si!=NULL ) si_m.second->set(i).set(j) = p;
+ return si;
+ }
+ friend ostream& operator<< ( ostream& os, const SparseMatrix<I,J,P>& m ) {
+ int ctr=0;
+ for ( typename Parent::const_iterator iit=m.begin(); iit!=m.end(); iit++ ) {
+ I i = iit->first;
+ for ( typename SimpleHash<J,P>::const_iterator jit=m.get(i).begin(); jit!=m.get(i).end(); jit++ ) {
+ I j = jit->first;
+ os<<((0==ctr++)?"":",")<<i<<":"<<j<<"="<<m.get(i).get(j);
+ }
+ }
+ return os;
+ }
+ friend String& operator<< ( String& str, const SparseMatrix<I,J,P>& m ) {
+ int ctr=0;
+ for ( typename Parent::const_iterator iit=m.begin(); iit!=m.end(); iit++ ) {
+ I i = iit->first;
+ for ( typename SimpleHash<J,P>::const_iterator jit=m.get(i).begin(); jit!=m.get(i).end(); jit++ ) {
+ I j = jit->first;
+ str<<((0==ctr++)?"":",")<<i<<j;
+ }
+ }
+ return str;
+ }
+};
diff --git a/synlm/hhmm/rvtl/include/nl-mixture.h b/synlm/hhmm/rvtl/include/nl-mixture.h
new file mode 100644
index 000000000..2da5aacb2
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-mixture.h
@@ -0,0 +1,268 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NL_MIXTURE__
+#define _NL_MIXTURE__
+
+#include "nl-randvar.h"
+#include "nl-list.h"
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Mixture Model
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template <template <class MY> class M,class Y,class C>
+class Mixture2DModel : public Generic1DModel<Y,Prob> {
+ private:
+ // Static data members...
+ static bool bModeled;
+ // Data members...
+ CPT1DModel<C,Prob> mC;
+ SimpleHash<C,M<Y> > mY_giv_C;
+ public:
+ Mixture2DModel ( ) : mC() { }
+ Mixture2DModel ( const string& s ) : mC(s) { }
+ // Specification methods...
+ CPT1DModel<C,Prob>& setMixingModel ( ) { return mC; }
+ Prob& setComponentProb ( const C& c ) { return mC.setProb(c); }
+ M<Y>& setComponentModel ( const C& c ) { return mY_giv_C.set(c); }
+ // Extraction methods...
+ Prob getComponentProb ( const C& c ) { return mC.getProb(c); }
+ const M<Y>& getComponentModel ( const C& c ) { return mY_giv_C.get(c); }
+ Prob getProb ( const Y& y ) const { Prob pr=0.0;
+ C c; for ( bool b=c.setFirst(); b; b=c.setNext() )
+ pr += ( mC.getProb(c) * mY_giv_C.get(c).getProb(y) );
+ return pr; }
+ // Input / output methods...
+ bool readFields ( char* as[], int numF ) { return ( mC.readFields(as,numF) || mY_giv_C.set(C(as[1])).readFields(as+1,numF-1) ); }
+ void writeFields ( FILE* pf, string sPref ) const { mC.writeFields(pf,sPref); C c; for ( bool b=c.setFirst(); b; b=c.setNext() )
+ mY_giv_C.get(c).writeFields(pf,sPref+" "+c.getString()); }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+
+template <template <class MY> class M,class Y,class X,class C>
+class Mixture3DModel : public Generic2DModel<Y,X,Prob> {
+ private:
+ // Static data members...
+ static bool bModeled;
+ // Data members...
+ CPT2DModel<C,X,Prob> mC_giv_X;
+ SimpleHash<Joint2DRV<X,C>,M<Y> > mY_giv_X_C;
+ public:
+ Mixture3DModel ( ) : mC_giv_X() { }
+ Mixture3DModel ( const string& s ) : mC_giv_X(s) { }
+ // Specification methods...
+ Prob& setComponentProb ( const X& x, const C& c ) { return mC_giv_X.setProb(c,x); }
+ M<Y>& setComponentModel ( const X& x, const C& c ) { return mY_giv_X_C.set(Joint2DRV<X,C>(x,c)); }
+ // Extraction methods...
+ Prob getProb ( const Y& y, const X& x ) const { Prob pr=0.0;
+ C c; for ( bool b=c.setFirst(); b; b=c.setNext() )
+ pr += ( mC_giv_X.getProb(c,x) * mY_giv_X_C.get(Joint2DRV<X,C>(x,c)).getProb(y) );
+ return pr; }
+ // Input / output methods...
+ bool readFields ( char* as[], int numF ) { return ( mC_giv_X.readFields(as,numF) || mY_giv_X_C.set(Joint2DRV<X,C>(X(as[1]),C(as[2]))).readFields(as+2,numF-2) ); }
+ void writeFields ( FILE* pf, string sPref ) const { mC_giv_X.writeFields(pf,sPref);
+ X x; for ( bool bx=x.setFirst(); bx; bx=x.setNext() ) {
+ C c; for ( bool b=c.setFirst(); b; b=c.setNext() ) {
+ mY_giv_X_C.get(Joint2DRV<X,C>(x,c)).writeFields(pf,sPref+" "+c.getString()); } } }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Trainable Mixture Model
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template <template <class MY> class M,class Y,class C>
+class TrainableMixture2DModel : public Mixture2DModel<M,Y,C> {
+// private:
+// LogPDFVal logpdfPrevDataAvg;
+ public:
+// // Constructor / destructor methods...
+// TrainableMixture2DModel ( ) : logpdfPrevDataAvg(log(0.0)) { }
+ // Specification methods...
+ void updateFields ( const List<Joint2DRV<Y,Prob> >&, const PDFVal, bool& );
+ void train ( List<Joint2DRV<Y,Prob> >&, const int, const PDFVal );
+};
+
+////////////////////////////////////////
+template <template <class MY> class M,class Y,class C>
+void TrainableMixture2DModel<M,Y,C>::updateFields ( const List<Joint2DRV<Y,Prob> >& lyp, const PDFVal WEIGHT_LIMIT, bool& bShouldStop ) {
+ LogPDFVal logpdfData = 0.0;
+ CPT1DModel<C,Prob> mprPseudoEmpC; // pseudo-empirical prob marginal
+ SimpleHash<C,List<pair<const Y*,Prob> > > alypPseudoEmpY_giv_C; // pseudo-empirical prob conditional
+
+ //// E step: create pseudo-annotated (expectation) corpus by re-distributing empirical probabilities over C, according to model parameters...
+
+ C c;
+ for ( bool b=c.setFirst(); b; b=c.setNext() )
+ setComponentModel(c).precomputeVarianceTerms();
+
+ // For each Y...
+ for ( const ListedObject<Joint2DRV<Y,Prob> >* pyp=lyp.getFirst(); pyp; pyp=lyp.getNext(pyp) ) {
+ const Y& y = pyp->getSub1(); // data value
+ const Prob& prEmpY = pyp->getSub2(); // empirical prob
+
+ CPT1DModel<C,PDFVal> mpdfEstCY; // model-estimated pdf
+ PDFVal pdfEstY = 0.0; // model-estimated pdf marginal
+
+ // For each C, compute model-estimated pdfs...
+ C c; for ( bool b=c.setFirst(); b; b=c.setNext() ) {
+ PDFVal pdfEstCY = getComponentProb(c) * getComponentModel(c).getProb(y);
+// fprintf(stderr," ???%g %d %g\n",(double)pdfEstCY,(int)c,getComponentModel(c).getProb(y)); ////y.write(stderr); fprintf(stderr,"\n");
+ mpdfEstCY.setProb(c) = pdfEstCY;
+ pdfEstY += pdfEstCY; // marginalize out C (marginal estimated pdf of each y)
+ }
+
+ // Update total...
+ logpdfData += log(pdfEstY); // product of each datum (joint estimated pdf of training corpus)
+ //fprintf(stderr,"..%g %g\n",pdfEstY,logpdfData);
+
+ // For each C, compute psuedo-empirical probs (model-estimated * empirical)...
+ for ( bool b=c.setFirst(); b; b=c.setNext() ) {
+ Prob prEstC_giv_Y = mpdfEstCY.getProb(c) / pdfEstY; // so these are normalized distribs over C
+ Prob prPseudoEmpCY = prEmpY * prEstC_giv_Y;
+ alypPseudoEmpY_giv_C.set(c).add() = pair<const Y*,Prob> ( &pyp->getSub1(), prPseudoEmpCY );
+ mprPseudoEmpC.setProb(c) += prPseudoEmpCY; // marginalize out Y
+ }
+ }
+ // Renormalize sub-lists...
+ for ( bool b=c.setFirst(); b; b=c.setNext() )
+ for ( ListedObject<pair<const Y*,Prob> >* pyp=alypPseudoEmpY_giv_C.set(c).setFirst(); pyp; pyp=alypPseudoEmpY_giv_C.set(c).setNext(pyp) )
+ pyp->second /= mprPseudoEmpC.getProb(c);
+
+ //// M step: update model parameters using MLE (relative frequency estimation) on pseudo-annotated corpus...
+
+ for ( bool b=c.setFirst(); b; b=c.setNext() ) {
+ // If any change exceeds thresh, continue...
+ if ( bShouldStop && ( getComponentProb(c)-mprPseudoEmpC.getProb(c) > WEIGHT_LIMIT ||
+ getComponentProb(c)-mprPseudoEmpC.getProb(c) < -WEIGHT_LIMIT ) ) bShouldStop = false;
+ // Update probs...
+ setComponentProb(c) = mprPseudoEmpC.getProb(c);
+ setComponentModel(c).setFields ( alypPseudoEmpY_giv_C.get(c) );
+ //////getComponentModel(c).writeFields(stderr,c.getString());
+ }
+
+ //////Mixture2DModel<M,Y,C>::writeFields(stderr,"");
+ fprintf(stderr," log pdf data: %g\n",(double)logpdfData);
+// // Quit if total prob doesn't improve enough...
+// fprintf(stderr," log avg pdf: %g - %g < %g ORLY? %d\n",
+// (double)logpdfDataAvg,(double)logpdfPrevDataAvg,(double)WEIGHT_LIMIT,
+// ((logpdfDataAvg - logpdfPrevDataAvg) < WEIGHT_LIMIT) );
+// bShouldStop = ( (logpdfDataAvg - logpdfPrevDataAvg) < WEIGHT_LIMIT );
+// logpdfPrevDataAvg = logpdfDataAvg;
+}
+
+////////////////////////////////////////
+template <template <class MY> class M,class Y,class C>
+void TrainableMixture2DModel<M,Y,C>::train ( List<Joint2DRV<Y,Prob> >& lyp, const int EPOCH_LIMIT, const PDFVal WEIGHT_LIMIT ) {
+
+ // Normalize model...
+ Mixture2DModel<M,Y,C>::setMixingModel().normalize(); // OUGHT NOT TO BE NECESSARY!!!
+
+ // Normalize input...
+ PDFVal pdfNorm = 0.0;
+ for ( const ListedObject<Joint2DRV<Y,Prob> >* pyp=lyp.getFirst(); pyp; pyp=lyp.getNext(pyp) ) pdfNorm += pyp->getSub2();
+ for ( ListedObject<Joint2DRV<Y,Prob> >* pyp=lyp.setFirst(); pyp; pyp=lyp.setNext(pyp) ) pyp->setSub2() /= pdfNorm;
+
+ // Iterate over each epoch...
+ bool bShouldStop = true;
+ for ( int epoch=0; epoch<EPOCH_LIMIT; epoch++ ) {
+ fprintf(stderr,"---------- EPOCH %d/%d ----------\n",epoch,EPOCH_LIMIT);
+ clock_t start = clock();
+ updateFields ( lyp, WEIGHT_LIMIT, bShouldStop ) ;
+ clock_t end = clock();
+ fprintf ( stderr, "epoch time: %d ticks or %f seconds\n", end-start, ((double)end - start)/CLOCKS_PER_SEC ) ;
+ if (bShouldStop) break;
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+
+template <template <class MY> class M,class Y,class X,class C>
+class TrainableMixture3DModel : public Generic2DModel<Y,X,C> {
+ private:
+ string sId;
+ SimpleHash<X,List<Joint2DRV<Y,Prob> > > alyp;
+ SimpleHash<X,TrainableMixture2DModel<M,Y,C> > am;
+ public:
+ // Constructor / destructor methods...
+ TrainableMixture3DModel ( string s ) : sId(s) { }
+ // Specification methods...
+ void train ( const int, const PDFVal );
+ void train ( const List<Joint3DRV<X,Y,Prob> >&, const int, const PDFVal );
+ // Extraction methods...
+ Prob getProb ( const Y& y, const X& x ) const { return am.get(x).getProb(y); }
+ // Input / output methods...
+ bool readData ( char* as[], int );
+ bool readFields ( char* as[], int numF ) { return ( am.set(X(as[1])).readFields(as+1,numF-1) ); }
+ void writeFields ( FILE*, string sPref );
+};
+
+////////////////////////////////////////
+template <template <class MY> class M,class Y,class X,class C>
+void TrainableMixture3DModel<M,Y,X,C>::train ( const int EPOCH_LIMIT, const PDFVal WEIGHT_LIMIT ) {
+ // Update each subphone from list...
+ int ctr = 0;
+ X x; for ( bool b=x.setFirst(); b; b=x.setNext() ) {
+ if (OUTPUT_NOISY) fprintf(stderr,"==================== SUBMODEL %s (number %d) %d data pts ====================\n",
+ x.getString().c_str(),ctr++,alyp.get(x).getCard());
+ am.set(x).train ( alyp.set(x), EPOCH_LIMIT, WEIGHT_LIMIT );
+ }
+}
+
+////////////////////////////////////////
+template <template <class MY> class M,class Y,class X,class C>
+void TrainableMixture3DModel<M,Y,X,C>::train ( const List<Joint3DRV<X,Y,Prob> >& lxyp, const int EPOCH_LIMIT, const PDFVal WEIGHT_LIMIT ) {
+ // Chop list into phone-specific sub-lists...
+ ListedObject<Joint3DRV<X,Y,Prob> >* pxyp;
+ for ( pxyp=lxyp.getFirst(); pxyp; pxyp=lxyp.getNext(pxyp) )
+ alyp.set(pxyp->getSub1()).add() = Joint2DRV<Y,Prob> ( pxyp->getSub2(), pxyp->getSub3() );
+ // Update each subphone from list...
+ train(EPOCH_LIMIT,WEIGHT_LIMIT);
+}
+
+////////////////////////////////////////
+template <template <class MY> class M,class Y,class X,class C>
+bool TrainableMixture3DModel<M,Y,X,C>::readData ( char* as[], int numFields ) {
+ if ( /*as[0]!=sId+"dat" ||*/ numFields!=3 ) return false;
+ alyp.set(X(as[1])).add() = Joint2DRV<Y,Prob>(Y(as[2]),Prob(1.0));
+ return true;
+}
+
+////////////////////////////////////////
+template <template <class MY> class M,class Y,class X,class C>
+void TrainableMixture3DModel<M,Y,X,C>::writeFields ( FILE* pf, string sPref ) {
+ X x; for ( bool b=x.setFirst(); b; b=x.setNext() ) {
+ am.get(x).writeFields(pf,sPref+" "+x.getString());
+ }
+}
+
+
+#endif /*_NL_MIXTURE__*/
+
diff --git a/synlm/hhmm/rvtl/include/nl-modelfile.h b/synlm/hhmm/rvtl/include/nl-modelfile.h
new file mode 100644
index 000000000..dc6bec487
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-modelfile.h
@@ -0,0 +1,126 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NL_MODEL_FILE__
+#define _NL_MODEL_FILE__
+
+#include "nl-string.h"
+#include "nl-iomacros.h"
+
+#include <netinet/in.h>
+
+static bool OUTPUT_QUIET = false;
+
+///////////////////////////////////////////////////////////////////////////////
+
+void processModelFilePtr ( FILE* pf, bool rF(Array<char*>&) ) {
+ int i=0; int numFields=0; int c=' '; int line=1;
+ CONSUME_ALL(pf,c,WHITESPACE(c),line); // Get to first record
+ while ( c!=EOF ) { // For each record
+ if ( c=='#' ) CONSUME_ALL(pf, c, c!='\n' && c!='\0', line ) ; // If comment, consume
+ else { // If no comment,
+ Array<char*> aps(100);
+ String psBuff(1000);
+ CONSUME_STR ( pf, c, (c!='\n' && c!='\0'), psBuff, i, line );
+
+ char* psT=NULL;
+ for(int i=0;true;i++) {
+ char* z = strtok_r ( (0==i)?psBuff.c_array():NULL, " :=", &psT );
+ if (!z) break;
+ aps[i]=z;
+ }
+
+ if ( !rF(aps) ) // Try to process fields, else complain
+ fprintf( stderr, "\nERROR: %d %d-arg %s in line %d\n\n", numFields, aps.size(), aps[0], line);
+ }
+ CONSUME_ALL(pf,c,WHITESPACE(c),line); // Consume whitespace
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+void processModelFile ( const char* ps, bool rF(Array<char*>&) ) {
+ FILE* pf;
+ if(!OUTPUT_QUIET) fprintf ( stderr, "Reading model file %s...\n", ps ) ;
+ if ( NULL == (pf=fopen(ps,"r")) ) // Complain if file not found
+ fprintf ( stderr, "\nERROR: file %s could not be opened.\n\n", ps ) ;
+ processModelFilePtr ( pf, rF );
+ fclose(pf);
+ if(!OUTPUT_QUIET) fprintf ( stderr, "Model file %s loaded.\n", ps ) ;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+void processModelSocket ( const int tSockfd, int& c, bool rF(Array<char*>&) ) {
+ int i=0; int numFields=0; int line=1;
+ CONSUME_ALL_SOCKET(tSockfd,c,WHITESPACE(c),line); // Get to first record
+ while ( c!='\0' && c!='\5' ) { // For each record
+ if ( c=='#' ) CONSUME_ALL_SOCKET(tSockfd, c, (c!='\n' && c!='\0' && c!='\5'), line ) ; // If comment, consume
+ else { // If no comment,
+ Array<char*> aps(100);
+ String psBuff(1000);
+ CONSUME_STR_SOCKET ( tSockfd, c, (c!='\n' && c!='\0' && c!='\5'), psBuff, i, line );
+ ////cerr<<"|"<<psBuff.c_array()<<"|"<<endl;
+
+ char* psT=NULL;
+ for(int i=0;true;i++) {
+ char* z = strtok_r ( (0==i)?psBuff.c_array():NULL, " :=", &psT );
+ if (!z) break;
+ aps[i]=z;
+ }
+
+ if ( !rF(aps) ) // Try to process fields, else complain
+ fprintf( stderr, "\nERROR: %d-arg %s in line %d\n\n", numFields, aps[0], line);
+ }
+ CONSUME_ALL_SOCKET(tSockfd,c,WHITESPACE(c),line); // Consume whitespace
+ }
+}
+
+void processModelSocket ( const int tSockfd, bool rF(Array<char*>&) ) {
+ int c=' ';
+ processModelSocket ( tSockfd, c, rF );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+/*
+void processModelString ( String& sBuff, bool rF(Array<char*>&) ) {
+ if ('#'!=sBuff[0]) {
+ Array<char*> aps(100);
+ char* psT=NULL;
+ for(int i=0;true;i++) {
+ char* z = strtok_r ( (0==i)?sBuff.c_array():NULL, " :=", &psT );
+ if (!z) break;
+ aps[i]=z;
+ }
+ if ( !rF(aps) ) // Try to process fields, else complain
+ fprintf( stderr, "\nERROR: %d-arg %s in line %d\n\n", numFields, aps[0], line);
+ }
+}
+*/
+
+///////////////////////////////////////////////////////////////////////////////
+
+#endif //_NL_MODEL_FILE__
+
+
diff --git a/synlm/hhmm/rvtl/include/nl-oblidtree.h b/synlm/hhmm/rvtl/include/nl-oblidtree.h
new file mode 100644
index 000000000..24c82e313
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-oblidtree.h
@@ -0,0 +1,239 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#include "nl-linsep.h"
+/*
+class ConvolvedComplexMelVec {
+ private:
+ ComplexMelVec vMain;
+ double dConvo;
+ public:
+ void set ( const ComplexMelVec& v ) { vMain=v; for(int i=0;i<ComplexMelVec::SIZE;i++)dConvo+=vMain.get(i)*vMain.get(i); }
+ static const int SIZE = ComplexMelVec::SIZE+1;
+ double& set ( int i ) { return (i<ComplexMelVec::SIZE)?vMain.set(i):dConvo; }
+ double get ( int i ) const { return (i<ComplexMelVec::SIZE)?vMain.get(i):dConvo; }
+ double& operator[] ( int i ) { return set(i); }
+ double operator[] ( int i ) const { return get(i); }
+ double operator* ( const ConvolvedComplexMelVec& v ) const { double d; for(int i=0;i<SIZE;i++)d+=get(i)*v.get(i); return d; } // inner product
+ friend pair<StringInput,ConvolvedComplexMelVec*> operator>> ( StringInput str, ConvolvedComplexMelVec& v ) {
+ return pair<StringInput,ConvolvedComplexMelVec*>(str,&v); }
+ friend StringInput operator>> ( pair<StringInput,ConvolvedComplexMelVec*> delimbuff, const char* ps ) {
+ StringInput str = delimbuff.first>>delimbuff.second->vMain>>",">>delimbuff.second->dConvo>>ps;
+ for(int i=0;i<ComplexMelVec::SIZE;i++)delimbuff.second->dConvo+=delimbuff.second->vMain.get(i)*delimbuff.second->vMain.get(i);
+ return str; }
+ friend ostream& operator<< ( ostream& os, const ConvolvedComplexMelVec& v ) { return os<<v.vMain<<","<<v.dConvo; }
+};
+
+class TrainingExample : public DelimitedJoint2DRV<psX,Psymb,psBar,ConvolvedComplexMelVec,psX> { };
+*/
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+class binuint {
+ private:
+ uint b;
+ public:
+ // Constructor / destructor methods...
+ binuint ( ) : b(0) { }
+ binuint ( uint i ) : b(i) { }
+ // Specification methods...
+ binuint& operator+= ( binuint i ) { b+=i.b; return *this; }
+ binuint& operator-= ( binuint i ) { b-=i.b; return *this; }
+ binuint& operator*= ( binuint i ) { b*=i.b; return *this; }
+ binuint& operator/= ( binuint i ) { b/=i.b; return *this; }
+ binuint& operator%= ( binuint i ) { b%=i.b; return *this; }
+ binuint& operator++ ( ) { b++; return *this; }
+ // Extractor methods...
+ binuint operator+ ( binuint i ) const { return (b+i.b); }
+ binuint operator- ( binuint i ) const { return (b-i.b); }
+ binuint operator* ( binuint i ) const { return (b*i.b); }
+ binuint operator/ ( binuint i ) const { return (b/i.b); }
+ binuint operator% ( binuint i ) const { return (b%i.b); }
+ bool operator== ( binuint i ) const { return (b==i.b); }
+ bool operator!= ( binuint i ) const { return (b!=i.b); }
+ bool operator< ( binuint i ) const { return (b<i.b); }
+ bool operator> ( binuint i ) const { return (b>i.b); }
+ bool operator<= ( binuint i ) const { return (b<=i.b); }
+ bool operator>= ( binuint i ) const { return (b>=i.b); }
+ size_t getHashKey ( ) const { return b; }
+ // Input / output methods...
+ friend StringInput operator>> ( StringInput si, binuint& i ) {
+ if(si==NULL) return si;
+ i.b=0;
+ for ( char c=si[0]; '0'<=c && c<='1'; ++si,c=si[0])
+ { i.b=i.b*2+c-'0'; }
+ return si; }
+ friend ostream& operator<< ( ostream& os, binuint i ) { for(int e=uint(log2(i.b));e>=0;e--)os <<((i.b>>e)%2); return os; }
+ friend String& operator<< ( String& str, binuint i ) { for(int e=uint(log2(i.b));e>=0;e--)str<<((i.b>>e)%2); return str; }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+template<class YF,class M>
+class ObliqueDTreeModel {
+
+ private:
+
+ ////=M////typedef SimpleLinSepModel<Q,X> SepModel;
+ //typedef int TreeAddr;
+ map<binuint,M> hag;
+ map<binuint,typename M::ProbType> hap;
+
+ public:
+
+ typedef typename M::InputTrainingExample InputTrainingExample;
+
+ void train ( SubArray<SafePtr<const InputTrainingExample> >, const YF&, binuint=1 );
+
+ typename M::ProbType getProb ( binuint y, const typename M::CondVarType& ) const;
+
+ friend pair<StringInput,ObliqueDTreeModel<YF,M>*> operator>> ( StringInput si, ObliqueDTreeModel<YF,M>& m ) {
+ return pair<StringInput,ObliqueDTreeModel<YF,M>*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,ObliqueDTreeModel<YF,M>*> si_m, const char* psD ) {
+ if (si_m.first==NULL) return si_m.first;
+ binuint branch=0;
+ StringInput si=si_m.first>>branch>>" ";
+ //cerr<<"?^?^? "<<si<<"\n";
+ if ( si==NULL ) return si_m.first;
+ //fprintf(stderr," .. %x\n",delimbuff.second);
+ if ( '='==si[0] ) return si>>"= ">>si_m.second->hag[branch]>>psD;
+ else return si>>": 1 = ">>si_m.second->hap[branch]>>psD;
+ }
+
+ friend ostream& operator<< ( ostream& os, const ObliqueDTreeModel<YF,M>& m ) {
+ return os<<pair<const String*,const ObliqueDTreeModel<YF,M>*>(&String(""),&m); }
+ friend pair< const String*, const ObliqueDTreeModel<YF,M>*> operator* ( const String& s, const ObliqueDTreeModel<YF,M>& m ) {
+ return pair<const String*,const ObliqueDTreeModel<YF,M>*>(&s,&m); }
+ friend ostream& operator<< ( ostream& os, const pair<const String*,const ObliqueDTreeModel<YF,M>*> s_m ) {
+ // For each tree branch...
+ binuint b=1; do {
+ // If non-terminal branch, write gradient...
+ if ( s_m.second->hag.find(b)!=s_m.second->hag.end() && s_m.second->hap.find(b)==s_m.second->hap.end() )
+ os<<*s_m.first<<b<<" = " <<s_m.second->hag.find(b)->second<<"\n";
+ // If terminal branch, write distrib...
+ else if ( s_m.second->hap.find(b)!=s_m.second->hap.end() )
+ os<<*s_m.first<<b<<" : 1 = "<<s_m.second->hap.find(b)->second<<"\n";
+
+ // If non-terminal branch, recurse...
+ if ( s_m.second->hag.find(b)!=s_m.second->hag.end() ) b*=2;
+ // If terminal branch, pop odds then advance...
+ else { while(b%2==1)b/=2; ++b; }
+ } while ( b!=1 );
+ //os<<"done.\n";
+ return os;
+ }
+};
+
+////////////////////////////////////////
+template<class YF,class M>
+ void ObliqueDTreeModel<YF,M>::train ( SubArray<SafePtr<const InputTrainingExample> > ape, const YF& yfn, binuint branch ) {
+
+ cerr<<" starting oblidtree branch "<<branch<<": "<<ape.size()<<" examples...\n";
+
+ //// find separator
+
+ double iP=0.0,iN=0.0;
+ for ( unsigned int n=0; n<ape.size(); n++ ) { if (yfn(ape[n].getRef().first)) iP++; else iN++; }
+ //cerr<<" iN="<<iN<<" iP="<<iP<<" in this subtree\n";
+
+ //if ( iP>10 && iN>10 )
+ hag[branch].train(ape,yfn,iP,iN);
+
+ //// divide data
+
+ unsigned int iSplitPt = ape.size();
+ // For each example...
+ for ( unsigned int i=0; i<iSplitPt; i++ ) {
+ // Determine side of gradient...
+ bool yEst = hag[branch].classify(ape[i].getRef().second);
+ ////double yEst=0.0;
+ ////for ( int j=0; j<O::SIZE; j++ ) yEst += hag[branch][j]*ape[i].getRef().second[j];
+ // Swap greater-than-one examples to end of array...
+ if ( yEst ) { ////( yEst >= 1.0 ) {
+ iSplitPt--;
+ SafePtr<const InputTrainingExample> peTemp = ape[i];
+ ape[i] = ape[iSplitPt];
+ ape[iSplitPt] = peTemp;
+ i--;
+ }
+ }
+ cerr<<" oblidtree branch "<<branch<<": split 0 < "<<iSplitPt<<" < "<<ape.size()<<" parent%pos="<<(iP/ape.size());
+ if ( iSplitPt>0 && iSplitPt<ape.size() ) {
+ double pPos=0.0;
+ for ( unsigned int n=0; n<iSplitPt; n++ ) if(yfn(ape[n].getRef().first))pPos++;
+ cerr<<",left%pos=("<<pPos<<"/"<<iSplitPt;
+ pPos/=iSplitPt;
+ cerr<<")="<<pPos;
+ pPos=0.0;
+ for ( unsigned int n=iSplitPt; n<ape.size(); n++ ) if(yfn(ape[n].getRef().first))pPos++;
+ cerr<<",right%pos=("<<pPos<<"/"<<(ape.size()-iSplitPt);
+ pPos/=(ape.size()-iSplitPt);
+ cerr<<")="<<pPos;
+ }
+ cerr<<"\n";
+ // Recurse on divided array: greater-than-ones at right...
+ if ( iP > 0 && iN > 0 && iSplitPt > 100 && ape.size()-iSplitPt > 100 ) {
+ train ( SubArray<SafePtr<const InputTrainingExample> >(ape,0,iSplitPt), yfn, branch*2 );
+ train ( SubArray<SafePtr<const InputTrainingExample> >(ape,iSplitPt), yfn, branch*2+1 );
+ }
+ else {
+ // Add prob...
+ hap[branch]=(double(iP)+.1)/(double(ape.size())+.1);
+ ////cout<<"terminal prob of "<<qTarget<<" at "<<branch<<" = "<<iP<<"/"<<ape.size()<<" = "<<hap[branch]<<"\n";
+ }
+}
+
+////////////////////////////////////////
+template<class YF,class M>
+typename M::ProbType ObliqueDTreeModel<YF,M>::getProb ( binuint y, const typename M::CondVarType& o ) const {
+
+ //const tr1::unordered_map<binuint,P>& hap = hhap.get(q);
+ //const double SLOPE = 20;
+ //// For each tree branch...
+ //Prob prWidth=1.0; Prob prQ=0.0; int b=1; Prob prL=0.0; Prob prR=0.0; map<binuint,double> widthcache; widthcache[b]=prWidth;
+ //do {
+ // // If nonterminal branch, push left...
+ // if ( hag.find(b)!=hag.end() ) {
+ // // Calc L/R probs given dist of o from separator g...
+ // prR=1.0/(1.0+exp(-(o*hag.find(b)->second-1.0)*SLOPE)); prL=1.0-prR; b*=2; widthcache[b]=prWidth*=prL;
+ // }
+ // // If terminal branch, pop all rights, then advance left to right...
+ // else if ( hap.find(b)!=hap.end() ) {
+ // prQ += prWidth * hap.find(b)->second.toDouble();
+ // while(b%2==1){ b/=2; }
+ // prWidth=(b<=1)?0.0:widthcache[b/2]; b++; prR=(b<=1)?0.0:1.0/(1.0+exp(-(o*hag.find(b/2)->second-1.0)*SLOPE)); widthcache[b]=prWidth*=prR;
+ // }
+ //} while ( b!=1 );
+ //return P(prQ);
+
+ ////cout<<" :: "<<q<<" "<<(X)o<<"\n";
+ binuint b=1; while ( hag.find(b)!=hag.end() ) {
+ ////cout<<" "<<b<<" "<<hag.find(b)->second<<"\n";
+ //b=(o * hag.find(b)->second < 1.0) ? b*2 : b*2+1;
+ b = (hag.find(b)->second.classify(o)==false) ? b*2 : b*2+1;
+ }
+ //cout<<" SepTreeObsModel: "<<q<<" "<<b<<" "<<hhap.get(q).find(b)->second<<"\n";
+ return (hap.find(b)==hap.end()) ? typename M::ProbType() : (y==0) ? typename M::ProbType(1.0-hap.find(b)->second.toDouble()) : hap.find(b)->second;
+}
+
diff --git a/synlm/hhmm/rvtl/include/nl-prob.h b/synlm/hhmm/rvtl/include/nl-prob.h
new file mode 100644
index 000000000..76cf2fb57
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-prob.h
@@ -0,0 +1,136 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NL_PROB__
+#define _NL_PROB__
+
+#include "nl-safeids.h"
+#include <math.h>
+#include <limits.h>
+
+////////////////////////////////////////////////////////////////////////////////
+
+typedef double PDFVal;
+typedef double LogPDFVal;
+
+////////////////////////////////////////////////////////////////////////////////
+
+class Prob {
+ private:
+ double gVal;
+
+ public:
+ Prob ( ) { gVal = 0.0; }
+ Prob (double d) { gVal = d; }
+ Prob (const char* ps) { gVal = atof(ps); }
+
+ operator double() const { return gVal; }
+ double toDouble() const { return gVal; }
+ Prob& operator+= ( const Prob p ) { gVal += p.gVal; return *this; }
+ Prob& operator-= ( const Prob p ) { gVal -= p.gVal; return *this; }
+ Prob& operator*= ( const Prob p ) { gVal *= p.gVal; return *this; }
+ Prob& operator/= ( const Prob p ) { gVal /= p.gVal; return *this; }
+
+ friend ostream& operator<< ( ostream& os, const Prob& pr ) { return os<<pr.toDouble(); }
+ friend String& operator<< ( String& str, const Prob& pr ) { return str<<pr.toDouble(); }
+ friend pair<StringInput,Prob*> operator>> ( StringInput si, Prob& n ) { return pair<StringInput,Prob*>(si,&n); }
+ friend StringInput operator>> ( pair<StringInput,Prob*> si_n, const char* psDlm ) {
+ double d=0.0; StringInput si=si_n.first>>d>>psDlm; *si_n.second=Prob(d); return si; }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// LogProb -- encapsulate min probability in sum operations
+//
+////////////////////////////////////////////////////////////////////////////////
+
+//#define MIN_LOG_PROB (1-MAXINT)
+#define MIN_LOG_PROB INT_MIN
+
+class LogProb : public Id<int> {
+ public:
+ // Constructor / destructor methods...
+ LogProb ( ) { set(MIN_LOG_PROB); }
+ LogProb ( int i ) { set(i); }
+ LogProb ( double d ) { set(int(100.0*log(d))); }
+ LogProb ( Prob d ) { set(int(100.0*log(d))); }
+ // Specification methods...
+ LogProb& operator+= ( const LogProb i ) { assert(false); return *this; }
+ LogProb& operator*= ( const LogProb i )
+ { if((toInt() == MIN_LOG_PROB) || (i.toInt() == MIN_LOG_PROB)){
+ set(MIN_LOG_PROB);
+ }else{
+ // Correct underflow if result is greater than either addend...
+ int k=toInt()+i.toInt(); set((toInt()<=0 && i.toInt()<=0 && (k>i.toInt() || k>toInt())) ? MIN_LOG_PROB : k);
+ }
+ return *this;
+ }
+ LogProb& operator-= ( const LogProb i ) { assert(false); return *this; }
+ LogProb& operator/= ( const LogProb i )
+ { if((toInt() == MIN_LOG_PROB) || (i.toInt() == MIN_LOG_PROB)){
+ set(MIN_LOG_PROB);
+ }else{
+ int k=toInt()-i.toInt(); set(k);
+ }
+ return *this;
+ }
+
+ // Extraction methods...
+ bool operator==( const LogProb i ) const { return(i.toInt()==toInt()); }
+ bool operator!=( const LogProb i ) const { return(i.toInt()!=toInt()); }
+ LogProb operator+ ( const LogProb i ) const { assert(false); return *this; } // no support for addition in log mode!
+ LogProb operator- ( const LogProb i ) const { assert(false); return *this; } // no support for addition in log mode!
+ LogProb operator* ( const LogProb i ) const {
+ int k;
+ if((toInt() == MIN_LOG_PROB) || (i.toInt() == MIN_LOG_PROB)){
+ k = MIN_LOG_PROB;
+ }else{
+ k=toInt()+i.toInt();
+ // Correct underflow if result is greater than either addend...
+ k = (toInt()<0 && i.toInt()<0 && (k>i.toInt() || k>toInt())) ? MIN_LOG_PROB : k;
+ }
+ return LogProb(k);
+ }
+ LogProb operator/ ( const LogProb i ) const {
+ int k;
+ if((toInt() == MIN_LOG_PROB) || (i.toInt() == MIN_LOG_PROB)){
+ k = MIN_LOG_PROB;
+ }else{
+ k = toInt()-i.toInt();
+ // // Correct underflow if result is greater than either addend...
+ // k = (toInt()<0 && -i.toInt()<0 && (k>-i.toInt() || k>toInt())) ? MIN_LOG_PROB : k;
+ }
+ return LogProb(k);
+ }
+ Prob toProb() const { return exp(double(toInt())/100.0); }
+ double toDouble() const { return toProb().toDouble(); }
+// operator double() const { return exp(toInt()/100.0); }
+ friend ostream& operator<< ( ostream& os, const LogProb& lp ) { return os<<lp.toInt(); }
+ friend String& operator<< ( String& str, const LogProb& lp ) { return str<<lp.toInt(); }
+ friend pair<StringInput,LogProb*> operator>> ( StringInput si, LogProb& n ) { return pair<StringInput,LogProb*>(si,&n); }
+ friend StringInput operator>> ( pair<StringInput,LogProb*> si_n, const char* psDlm ) {
+ double d=0.0; StringInput si=si_n.first>>d>>psDlm; *si_n.second=LogProb(d); return si; }
+};
+
+#endif /* _NL_PROB__ */
diff --git a/synlm/hhmm/rvtl/include/nl-probmodel.h b/synlm/hhmm/rvtl/include/nl-probmodel.h
new file mode 100644
index 000000000..2dcff7b30
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-probmodel.h
@@ -0,0 +1,422 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NL_PROBMODEL__
+#define _NL_PROBMODEL__
+
+#include "nl-prob.h"
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//
+// XDModel
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template<class Y,class P>
+class Generic1DModel {
+ public:
+ typedef Y RVType;
+ typedef P ProbType;
+ bool setFirst ( const Y& ) const { assert(false); return false; } // if you need it, you have to write it
+ bool setNext ( const Y& ) const { assert(false); return false; } // if you need it, you have to write it
+ P getProb ( const Y& ) const { assert(false); return 0.0; } // if you need it, you have to write it
+};
+
+////////////////////////////////////////////////////////////
+
+template<class Y,class X1,class P>
+class Generic2DModel {
+ public:
+ typedef Y RVType;
+ typedef X1 Dep1Type;
+ typedef P ProbType;
+ bool setFirst ( const Y& ) const { assert(false); return false; } // if you need it, you have to write it
+ bool setNext ( const Y& ) const { assert(false); return false; } // if you need it, you have to write it
+ bool setFirst ( const Y&, const X1& x1 ) const { assert(false); return false; } // if you need it, you have to write it
+ bool setNext ( const Y&, const X1& x1 ) const { assert(false); return false; } // if you need it, you have to write it
+ P getProb ( const Y&, const X1& x1 ) const { assert(false); return 0.0; } // if you need it, you have to write it
+};
+
+////////////////////////////////////////////////////////////
+
+template<class Y,class X1,class X2,class P>
+class Generic3DModel {
+ public:
+ typedef Y RVType;
+ typedef X1 Dep1Type;
+ typedef X2 Dep2Type;
+ typedef P ProbType;
+ bool setFirst ( const Y& ) const { assert(false); return false; } // if you need it, you have to write it
+ bool setNext ( const Y& ) const { assert(false); return false; } // if you need it, you have to write it
+ bool setFirst ( const Y&, const X1& x1, const X2& x2 ) const { assert(false); return false; } // if you need it, you have to write it
+ bool setNext ( const Y&, const X1& x1, const X2& x2 ) const { assert(false); return false; } // if you need it, you have to write it
+ P getProb ( const Y&, const X1& x1, const X2& x2 ) const { assert(false); return 0.0; } // if you need it, you have to write it
+};
+
+////////////////////////////////////////////////////////////
+
+template<class Y,class X1,class X2,class X3,class P>
+class Generic4DModel {
+ public:
+ typedef Y RVType;
+ typedef X1 Dep1Type;
+ typedef X2 Dep2Type;
+ typedef X3 Dep3Type;
+ typedef P ProbType;
+ bool setFirst ( const Y& ) const { assert(false); return false; }
+ bool setNext ( const Y& ) const { assert(false); return false; }
+ bool setFirst ( const Y&, const X1& x1, const X2& x2, const X3& x3 ) const { assert(false); return false; }
+ bool setNext ( const Y&, const X1& x1, const X2& x2, const X3& x3 ) const { assert(false); return false; }
+ P getProb ( const Y&, const X1& x1, const X2& x2, const X3& x3 ) const { assert(false); return 0.0; }
+};
+
+////////////////////////////////////////////////////////////
+
+template<class Y,class X1,class X2,class X3,class X4,class P>
+class Generic5DModel {
+ public:
+ typedef Y RVType;
+ typedef X1 Dep1Type;
+ typedef X2 Dep2Type;
+ typedef X3 Dep3Type;
+ typedef X4 Dep4Type;
+ typedef P ProbType;
+ bool setFirst ( const Y& ) const { assert(false); return false; }
+ bool setNext ( const Y& ) const { assert(false); return false; }
+ bool setFirst ( const Y&, const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) const { assert(false); return false; }
+ bool setNext ( const Y&, const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) const { assert(false); return false; }
+ P getProb ( const Y&, const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) const { assert(false); return 0.0; }
+};
+
+////////////////////////////////////////////////////////////
+
+template<class Y,class X1,class X2,class X3,class X4,class X5,class P>
+class Generic6DModel {
+ public:
+ typedef Y RVType;
+ typedef X1 Dep1Type;
+ typedef X2 Dep2Type;
+ typedef X3 Dep3Type;
+ typedef X4 Dep4Type;
+ typedef X5 Dep5Type;
+ typedef P ProbType;
+ bool setFirst ( const Y& ) const { assert(false); return false; }
+ bool setNext ( const Y& ) const { assert(false); return false; }
+ bool setFirst ( const Y&, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) const { assert(false); return false; }
+ bool setNext ( const Y&, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) const { assert(false); return false; }
+ P getProb ( const Y&, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) const { assert(false); return 0.0; }
+};
+
+////////////////////////////////////////////////////////////
+
+template<class Y,class X1,class X2,class X3,class X4,class X5,class X6,class P>
+class Generic7DModel {
+ public:
+ typedef Y RVType;
+ typedef X1 Dep1Type;
+ typedef X2 Dep2Type;
+ typedef X3 Dep3Type;
+ typedef X4 Dep4Type;
+ typedef X5 Dep5Type;
+ typedef X6 Dep6Type;
+ typedef P ProbType;
+ bool setFirst ( const Y& ) const { assert(false); return false; }
+ bool setNext ( const Y& ) const { assert(false); return false; }
+ bool setFirst ( const Y&, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X5& x6 ) const { assert(false); return false; }
+ bool setNext ( const Y&, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X5& x6 ) const { assert(false); return false; }
+ P getProb ( const Y&, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X5& x6 ) const { assert(false); return 0.0; }
+};
+
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//
+// ModeledXDRV
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template<class M, M& m>
+class Modeled1DRV : public M::RVType {
+ public:
+ // Constructor / destructor methods...
+ Modeled1DRV ( ) { }
+ //Modeled1DRV ( int i ) { M::RVType::operator=(i); }
+ Modeled1DRV ( string& s ) { M::RVType::operator=(s); }
+ // Static specification methods...
+ static M& setModel ( ) { return m; }
+ // Static extraction methods...
+ static const M& getModel ( ) { return m; }
+ // Extraction methods...
+ typename M::ProbType getProb ( ) const { return m.getProb(*this); }
+};
+
+////////////////////////////////////////////////////////////
+
+template<class M, M& m>
+class Modeled2DRV : public M::RVType {
+ public:
+ typedef M Model;
+ // Constructor / destructor methods...
+ Modeled2DRV ( ) { }
+ // Modeled2DRV ( int i ) { M::RVType::operator=(i); }
+ Modeled2DRV ( const Modeled2DRV<M,m>& mrv ) : M::RVType(mrv) { }
+ Modeled2DRV ( const typename M::RVType& x ) { M::RVType::operator=(x); }
+ Modeled2DRV ( string& s ) { M::RVType::operator=(s); }
+ // Static specification methods...
+ static M& setModel ( ) { return m; }
+ // Static extraction methods...
+ static const M& getModel ( ) { return m; }
+ // Specification methods...
+ bool setFirst ( ) { return M::RVType::setFirst(); }
+ bool setNext ( ) { return M::RVType::setNext(); }
+ bool setFirst ( const typename M::Dep1Type& x1 ) { return m.setFirst(*this,x1); }
+ bool setFirstConsistent ( const typename M::Dep1Type& x1 ) { return m.setFirstConsistent(*this,x1); }
+ bool setNext ( const typename M::Dep1Type& x1 ) { return m.setNext (*this,x1); }
+ bool setSample ( const typename M::Dep1Type& x1 ) { return m.setSample(*this,x1); }
+ // Extraction methods...
+ typename M::ProbType getProb ( const typename M::Dep1Type& x1 ) const { return m.getProb(*this,x1); }
+};
+
+////////////////////////////////////////////////////////////
+
+template<class M, M& m>
+class DetermModeled2DRV : public Modeled2DRV<M,m> {
+ public:
+ DetermModeled2DRV ( const typename M::Dep1Type& x1 ) { m.setFirst(*this,x1); assert(LogProb(1.0)==m.getProb(*this,x1)); }
+};
+
+////////////////////////////////////////////////////////////
+
+template<class M, M& m>
+class Modeled3DRV : public M::RVType {
+ public:
+ // Constructor / destructor methods...
+ Modeled3DRV ( ) { }
+ //Modeled3DRV ( int i ) { M::RVType::operator=(i); }
+ Modeled3DRV ( string& s ) { M::RVType::operator=(s); }
+ // Static specification methods...
+ static M& setModel ( ) { return m; }
+ // Static extraction methods...
+ static const M& getModel ( ) { return m; }
+ // Specification methods...
+ bool setFirst ( ) { return M::RVType::setFirst(); }
+ bool setNext ( ) { return M::RVType::setNext(); }
+ bool setFirst ( const typename M::Dep1Type& x1, const typename M::Dep2Type& x2 ) { return m.setFirst(*this,x1,x2); }
+ bool setFirstConsistent ( const typename M::Dep1Type& x1, const typename M::Dep2Type& x2 ) { return m.setFirstConsistent(*this,x1,x2); }
+ bool setNext ( const typename M::Dep1Type& x1, const typename M::Dep2Type& x2 ) { return m.setNext (*this,x1,x2); }
+ bool setSample ( const typename M::Dep1Type& x1, const typename M::Dep2Type& x2 ) { return m.setSample(*this,x1,x2); }
+ // Extraction methods...
+ typename M::ProbType getProb ( const typename M::Dep1Type& x1,
+ const typename M::Dep2Type& x2 ) const { return m.getProb(*this,x1,x2); }
+};
+
+////////////////////////////////////////////////////////////
+
+template<class M, M& m>
+class Modeled4DRV : public M::RVType {
+ public:
+ // Constructor / destructor methods...
+ Modeled4DRV ( ) { }
+ //Modeled4DRV ( int i ) { M::RVType::operator=(i); }
+ Modeled4DRV ( string& s ) { M::RVType::operator=(s); }
+ // Static specification methods...
+ static M& setModel ( ) { return m; }
+ // Static extraction methods...
+ static const M& getModel ( ) { return m; }
+ // Specification methods...
+ bool setFirst ( ) { return M::RVType::setFirst(); }
+ bool setNext ( ) { return M::RVType::setNext(); }
+ bool setFirst ( const typename M::Dep1Type& x1,
+ const typename M::Dep2Type& x2,
+ const typename M::Dep3Type& x3 ) { return m.setFirst(*this,x1,x2,x3); }
+ bool setFirstConsistent ( const typename M::Dep1Type& x1,
+ const typename M::Dep2Type& x2,
+ const typename M::Dep3Type& x3 ) { return m.setFirstConsistent(*this,x1,x2,x3); }
+ bool setNext ( const typename M::Dep1Type& x1,
+ const typename M::Dep2Type& x2,
+ const typename M::Dep3Type& x3 ) { return m.setNext (*this,x1,x2,x3); }
+ bool setSample ( const typename M::Dep1Type& x1,
+ const typename M::Dep2Type& x2,
+ const typename M::Dep3Type& x3 ) { return m.setSample(*this,x1,x2,x3); }
+ // Extraction methods...
+ typename M::ProbType getProb ( const typename M::Dep1Type& x1,
+ const typename M::Dep2Type& x2,
+ const typename M::Dep3Type& x3 ) const { return m.getProb(*this,x1,x2,x3); }
+};
+
+////////////////////////////////////////////////////////////
+
+template<class M, M& m>
+class Modeled5DRV : public M::RVType {
+ public:
+ // Constructor / destructor methods...
+ Modeled5DRV ( ) { }
+ //Modeled5DRV ( int i ) { M::RVType::operator=(i); }
+ Modeled5DRV ( string& s ) { M::RVType::operator=(s); }
+ // Static specification methods...
+ static M& setModel ( ) { return m; }
+ // Static extraction methods...
+ static const M& getModel ( ) { return m; }
+ // Specification methods...
+ bool setFirst ( ) { return M::RVType::setFirst(); }
+ bool setNext ( ) { return M::RVType::setNext(); }
+ bool setFirst ( const typename M::Dep1Type& x1,
+ const typename M::Dep2Type& x2,
+ const typename M::Dep3Type& x3,
+ const typename M::Dep4Type& x4 ) { return m.setFirst(*this,x1,x2,x3,x4); }
+ bool setFirstConsistent ( const typename M::Dep1Type& x1,
+ const typename M::Dep2Type& x2,
+ const typename M::Dep3Type& x3,
+ const typename M::Dep4Type& x4 ) { return m.setFirstConsistent(*this,x1,x2,x3,x4); }
+ bool setNext ( const typename M::Dep1Type& x1,
+ const typename M::Dep2Type& x2,
+ const typename M::Dep3Type& x3,
+ const typename M::Dep4Type& x4 ) { return m.setNext (*this,x1,x2,x3,x4); }
+ bool setSample (const typename M::Dep1Type& x1,
+ const typename M::Dep2Type& x2,
+ const typename M::Dep3Type& x3,
+ const typename M::Dep4Type& x4 ) { return m.setSample(*this,x1,x2,x3,x4); }
+ // Extraction methods...
+ typename M::ProbType getProb ( const typename M::Dep1Type& x1,
+ const typename M::Dep2Type& x2,
+ const typename M::Dep3Type& x3,
+ const typename M::Dep4Type& x4 ) const { return m.getProb(*this,x1,x2,x3,x4); }
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+template<class M, M& m>
+class Modeled6DRV : public M::RVType {
+ public:
+ // Constructor / destructor methods...
+ Modeled6DRV ( ) { }
+ //Modeled5DRV ( int i ) { M::RVType::operator=(i); }
+ Modeled6DRV ( string& s ) { M::RVType::operator=(s); }
+ // Static specification methods...
+ static M& setModel ( ) { return m; }
+ // Static extraction methods...
+ static const M& getModel ( ) { return m; }
+ // Specification methods...
+ bool setFirst ( ) { return M::RVType::setFirst(); }
+ bool setNext ( ) { return M::RVType::setNext(); }
+ bool setFirst ( const typename M::Dep1Type& x1,
+ const typename M::Dep2Type& x2,
+ const typename M::Dep3Type& x3,
+ const typename M::Dep4Type& x4,
+ const typename M::Dep5Type& x5 ) { return m.setFirst(*this,x1,x2,x3,x4,x5); }
+ bool setFirstConsistent ( const typename M::Dep1Type& x1,
+ const typename M::Dep2Type& x2,
+ const typename M::Dep3Type& x3,
+ const typename M::Dep4Type& x4,
+ const typename M::Dep5Type& x5 ) { return m.setFirstConsistent(*this,x1,x2,x3,x4,x5); }
+ bool setNext ( const typename M::Dep1Type& x1,
+ const typename M::Dep2Type& x2,
+ const typename M::Dep3Type& x3,
+ const typename M::Dep4Type& x4,
+ const typename M::Dep5Type& x5 ) { return m.setNext (*this,x1,x2,x3,x4,x5); }
+ bool setSample (const typename M::Dep1Type& x1,
+ const typename M::Dep2Type& x2,
+ const typename M::Dep3Type& x3,
+ const typename M::Dep4Type& x4,
+ const typename M::Dep5Type& x5 ) { return m.setSample(*this,x1,x2,x3,x4,x5); }
+ // Extraction methods...
+ typename M::ProbType getProb ( const typename M::Dep1Type& x1,
+ const typename M::Dep2Type& x2,
+ const typename M::Dep3Type& x3,
+ const typename M::Dep4Type& x4,
+ const typename M::Dep5Type& x5 ) const { return m.getProb(*this,x1,x2,x3,x4,x5); }
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+template<class M, M& m>
+class Modeled7DRV : public M::RVType {
+ public:
+ // Constructor / destructor methods...
+ Modeled7DRV ( ) { }
+ //Modeled5DRV ( int i ) { M::RVType::operator=(i); }
+ Modeled7DRV ( string& s ) { M::RVType::operator=(s); }
+ // Static specification methods...
+ static M& setModel ( ) { return m; }
+ // Static extraction methods...
+ static const M& getModel ( ) { return m; }
+ // Specification methods...
+ bool setFirst ( ) { return M::RVType::setFirst(); }
+ bool setNext ( ) { return M::RVType::setNext(); }
+ bool setFirst ( const typename M::Dep1Type& x1,
+ const typename M::Dep2Type& x2,
+ const typename M::Dep3Type& x3,
+ const typename M::Dep4Type& x4,
+ const typename M::Dep5Type& x5,
+ const typename M::Dep6Type& x6 ) { return m.setFirst(*this,x1,x2,x3,x4,x5,x6); }
+ bool setFirstConsistent ( const typename M::Dep1Type& x1,
+ const typename M::Dep2Type& x2,
+ const typename M::Dep3Type& x3,
+ const typename M::Dep4Type& x4,
+ const typename M::Dep5Type& x5,
+ const typename M::Dep6Type& x6 ) { return m.setFirstConsistent(*this,x1,x2,x3,x4,x5,x6); }
+ bool setNext ( const typename M::Dep1Type& x1,
+ const typename M::Dep2Type& x2,
+ const typename M::Dep3Type& x3,
+ const typename M::Dep4Type& x4,
+ const typename M::Dep5Type& x5,
+ const typename M::Dep6Type& x6 ) { return m.setNext (*this,x1,x2,x3,x4,x5,x6); }
+ bool setSample (const typename M::Dep1Type& x1,
+ const typename M::Dep2Type& x2,
+ const typename M::Dep3Type& x3,
+ const typename M::Dep4Type& x4,
+ const typename M::Dep5Type& x5,
+ const typename M::Dep6Type& x6 ) { return m.setSample(*this,x1,x2,x3,x4,x5,x6); }
+ // Extraction methods...
+ typename M::ProbType getProb ( const typename M::Dep1Type& x1,
+ const typename M::Dep2Type& x2,
+ const typename M::Dep3Type& x3,
+ const typename M::Dep4Type& x4,
+ const typename M::Dep5Type& x5,
+ const typename M::Dep6Type& x6 ) const { return m.getProb(*this,x1,x2,x3,x4,x5,x6); }
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//
+// PrecomputedModeledXDRV
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template<class M, M& m, class S>
+class PrecomputedModeled2DRV : public Modeled2DRV<M,m> {
+ private:
+ SafeArray1D<typename M::Dep1Type,typename M::ProbType> apr;
+ void precompute ( ) { apr.init(M::Dep1Type::getDomain().getSize());
+ typename M::Dep1Type x1;
+ for(bool b=x1.setFirst(); b; b=x1.setNext()) apr.set(x1)=m.getProb(*this,x1); }
+ public:
+ typename M::ProbType getProb ( const typename M::Dep1Type& x1 ) const { return apr.get(x1); }
+ typename M::RVType set ( const S s ) { M::RVType::set(s); precompute(); return *this; }
+};
+//template<class M, M& m, class S> SafeArray1D<typename M::Dep1Type,typename M::ProbType> PrecomputedModeled2DRV<M,m,S>::apr;
+
+
+#endif /* _NL_PROBMODEL__ */
diff --git a/synlm/hhmm/rvtl/include/nl-racpt.h b/synlm/hhmm/rvtl/include/nl-racpt.h
new file mode 100644
index 000000000..5d1502f1f
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-racpt.h
@@ -0,0 +1,332 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _NL_RACPT__
+#define _NL_RACPT__
+
+
+template<class K, class P>
+class GenericRACPTModel : public SimpleHash<K,P> {
+ private:
+ typedef SimpleHash<K,P> HKP;
+// typedef typename SimpleHash<Y,P>::const_iterator IYP;
+ //HKYP h;
+
+ public:
+ //typedef Y RVType;
+ //typedef BaseIterVal<std::pair<IYP,IYP>,Y> IterVal;
+ //typedef typename HKYP::const_iterator const_key_iterator;
+
+ bool contains ( const K& k ) const {
+ return ( SimpleHash<K,P>::contains(k) );
+ }
+
+/*
+ P getProb ( const IterVal& ikyp, const K& k ) const {
+ if ( ikyp.iter.first == ikyp.iter.second ) { cerr<<"ERROR: no iterator to fix probability: "<<k<<endl; return P(); }
+ return ( ikyp.iter.first->second );
+ }
+*/
+
+ P getProb ( const K& k ) const {
+ return SimpleHash<K,P>::get(k);
+ }
+ P& setProb ( const K& k ) {
+ return SimpleHash<K,P>::set(k);
+ }
+
+/*
+ void normalize ( ) {
+ for ( typename HKYP::const_iterator ik=HKYP::begin(); ik!=HKYP::end(); ik++ ) {
+ K k=ik->first;
+ P p=P();
+ IterVal y;
+ for(bool by=setFirst(y,k); by; by=setNext(y,k))
+ p+=getProb(y,k);
+ if (p!=P())
+ for(bool by=setFirst(y,k); by; by=setNext(y,k))
+ setProb(y,k)/=p;
+ }
+ }
+*/
+/*
+ void transmit ( int tSockfd, const char* psId ) const {
+ for ( typename HKYP::const_iterator ik=HKYP::begin(); ik!=HKYP::end(); ik++ ) {
+ K k=ik->first;
+ IterVal y;
+ // For each non-zero probability in model...
+ for ( bool b=setFirst(y,k); b; b=setNext(y,k) ) {
+ //if ( getProb(y,k) != P() ) {
+ String str(1000);
+ str<<psId<<" "<<k<<" : "<<y<<" = "<<getProb(y,k).toDouble()<<"\n";
+ if ( send(tSockfd,str.c_array(),str.size()-1,MSG_EOR) != int(str.size()-1) )
+ {cerr<<"ERROR writing to socket\n";exit(0);}
+ //}
+ }
+ }
+ }
+*/
+ void dump ( ostream& os, const char* psId ) const {
+ for ( typename HKP::const_iterator ik=HKP::begin(); ik!=HKP::end(); ik++ ) {
+ K k=ik->first;
+ os << psId<<" "<<k<<" = "<<getProb(k).toDouble()<<endl;
+
+// IterVal y;
+// for ( bool b=setFirst(y,k); b; b=setNext(y,k) )
+// os<<psId<<" "<<k<<" : "<<y<<" = "<<getProb(y,k).toDouble()<<"\n";
+ }
+ }
+ void subsume ( GenericRACPTModel<K,P>& m ) {
+ for ( typename HKP::const_iterator ik=m.HKP::begin(); ik!=m.HKP::end(); ik++ ) {
+ K k=ik->first;
+ setProb(k) = m.getProb(k);
+// IterVal y;
+// for ( bool b=m.setFirst(y,k); b; b=m.setNext(y,k) )
+// setProb(y,k) = m.getProb(y,k);
+ }
+ }
+ void clear ( ) { SimpleHash<K,P>::clear(); }
+
+ friend pair<StringInput,GenericRACPTModel<K,P>*> operator>> ( StringInput si, GenericRACPTModel<K,P>& m ) {
+ return pair<StringInput,GenericRACPTModel<K,P>*>(si,&m); }
+
+ friend StringInput operator>> ( pair<StringInput,GenericRACPTModel<K,P>*> delimbuff, const char* psD ) {
+ K k;
+ StringInput si,si2,si3;
+ GenericRACPTModel<K,P>& m = *delimbuff.second;
+ si=delimbuff.first;
+ if ( si==NULL ) return si;
+
+ // Kill the colon since we're treating the whole thing as the condition
+ char * str = si.c_str();
+ char * p = strchr(str, ':');
+ if(p){
+ p[0] = ' ';
+ }
+ si=str;
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>k>>" ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ si=si>>"= ";
+ while((si2=si>>" ")!=NULL)si=si2;
+ return (si!=NULL) ? si>>m.setProb(k)>>psD : si;
+ }
+};
+
+
+template<class Y, class P>
+class RandAccCPT1DModel : public GenericRACPTModel<MapKey1D<Y>,P> {
+ public:
+// typedef typename GenericCPTModel<Y,MapKey1D<Unit>,P>::IterVal IterVal;
+
+ bool contains ( const Y& y ) const {
+ return GenericRACPTModel<MapKey1D<Y>,P>::contains ( MapKey1D<Y>(y) );
+ }
+/*
+ P getProb ( const IterVal& ixyp ) const {
+ return GenericCPTModel<MapKey1D<Y>,P>::getProb ( ixyp, MapKey1D<Y>(Y()) );
+ }
+*/
+ P getProb ( const Y& y ) const {
+ return GenericRACPTModel<MapKey1D<Y>,P>::getProb ( MapKey1D<Y>(y) );
+ }
+/*
+P& setProb ( const Y& y ) {
+ cerr << "setProb called on racpt1d" << endl;
+ return GenericRACPTModel<MapKey1D<Y>,P>::setProb ( MapKey1D<Y>(y) );
+ }
+*/
+ /*
+ bool readFields ( Array<char*>& aps ) {
+ if ( 3==aps.size() ) {
+ GenericRACPTModel<MapKey1D<Y>,P>::setProb ( MapKey1D<Y>(aps[1]) ) = atof(aps[2]);
+ return true;
+ }
+ return false;
+ }
+ */
+};
+
+
+////////////////////
+template<class Y, class X1, class P>
+class RandAccCPT2DModel : public GenericRACPTModel<MapKey2D<X1,Y>,P> {
+ public:
+
+ // This stuff only for deterministic 'Determ' models...
+// typedef X1 Dep1Type;
+// typedef P ProbType;
+// MapKey1D<X1> condKey;
+
+ bool contains ( const Y& y, const X1& x1 ) const {
+// MapKey2D<X1,Y> temp = MapKey2D<X1,Y>(x1,y);
+ return GenericRACPTModel<MapKey2D<X1,Y>,P>::contains ( MapKey2D<X1,Y>(x1,y) );
+ }
+
+ P getProb ( const Y& y, const X1& x1 ) const {
+ return GenericRACPTModel<MapKey2D<X1,Y>,P>::getProb ( MapKey2D<X1,Y>(x1,y) );
+ }
+
+/*
+ P& setProb ( const Y& y, const X1& x1 ) {
+ cerr << "setProb called on racpt2d" << endl;
+ return GenericRACPTModel<MapKey2D<Y,X1>,P>::setProb ( MapKey2D<Y,X1>(y,x1) );
+ }
+*/
+
+};
+
+
+////////////////////
+template<class Y, class X1, class X2, class P>
+class RandAccCPT3DModel : public GenericRACPTModel<MapKey3D<X1,X2,Y>,P> {
+ public:
+
+ bool contains ( const Y& y, const X1& x1, const X2& x2 ) const {
+ return GenericRACPTModel<MapKey3D<X1,X2,Y>,P>::contains ( MapKey3D<X1,X2,Y>(x1,x2,y) );
+ }
+
+ P getProb ( const Y& y, const X1& x1, const X2& x2 ) const {
+ return GenericRACPTModel<MapKey3D<X1,X2,Y>,P>::getProb ( MapKey3D<X1,X2,Y>(x1,x2,y) );
+ }
+/*
+ P& setProb ( const Y& y, const X1& x1, const X2& x2 ) {
+ return GenericRACPTModel<MapKey3D<X1,X2,Y>,P>::setProb ( MapKey3D<Y,X1,X2>(x1,x2,y) );
+ }
+*/
+};
+
+/*
+////////////////////
+template<class Y, class X1, class X2, class X3, class P>
+class CPT4DModel : public GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P> {
+ public:
+ typedef typename GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P>::IterVal IterVal;
+
+ bool setFirst ( IterVal& ixyp, const X1& x1, const X2& x2, const X3& x3 ) const {
+ return GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P>::setFirst ( ixyp, MapKey3D<X1,X2,X3>(x1,x2,x3) );
+ }
+ bool setNext ( IterVal& ixyp, const X1& x1, const X2& x2, const X3& x3 ) const {
+ return GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P>::setNext ( ixyp, MapKey3D<X1,X2,X3>(x1,x2,x3) );
+ }
+ bool contains ( const Y& y, const X1& x1, const X2& x2, const X3& x3 ) const {
+ return GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P>::contains ( y, MapKey3D<X1,X2,X3>(x1,x2,x3) );
+ }
+ bool contains ( const X1& x1, const X2& x2, const X3& x3 ) const {
+ return GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P>::contains ( MapKey3D<X1,X2,X3>(x1,x2,x3) );
+ }
+ P getProb ( const IterVal& ixyp, const X1& x1, const X2& x2, const X3& x3 ) const {
+ return GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P>::getProb ( ixyp, MapKey3D<X1,X2,X3>(x1,x2,x3) );
+ }
+ P getProb ( const Y& y, const X1& x1, const X2& x2, const X3& x3 ) const {
+ return GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P>::getProb ( y, MapKey3D<X1,X2,X3>(x1,x2,x3) );
+ }
+ P& setProb ( const Y& y, const X1& x1, const X2& x2, const X3& x3 ) {
+ return GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P>::setProb ( y, MapKey3D<X1,X2,X3>(x1,x2,x3) );
+ }
+ bool readFields ( Array<char*>& aps ) {
+ if ( 6==aps.size() ) {
+ GenericCPTModel<Y,MapKey3D<X1,X2,X3>,P>::setProb ( Y(aps[4]), MapKey3D<X1,X2,X3>(aps[1],aps[2],aps[3]) ) = atof(aps[5]);
+ return true;
+ }
+ return false;
+ }
+};
+
+
+////////////////////
+template<class Y, class X1, class X2, class X3, class X4, class P>
+class CPT5DModel : public GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P> {
+ public:
+ typedef typename GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P>::IterVal IterVal;
+
+ bool setFirst ( IterVal& ixyp, const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) const {
+ return GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P>::setFirst ( ixyp, MapKey4D<X1,X2,X3,X4>(x1,x2,x3,x4) );
+ }
+ bool setNext ( IterVal& ixyp, const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) const {
+ return GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P>::setNext ( ixyp, MapKey4D<X1,X2,X3,X4>(x1,x2,x3,x4) );
+ }
+ bool contains ( const Y& y, const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) const {
+ return GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P>::contains ( y, MapKey4D<X1,X2,X3,X4>(x1,x2,x3,x4) );
+ }
+ bool contains ( const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) const {
+ return GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P>::contains ( MapKey4D<X1,X2,X3,X4>(x1,x2,x3,x4) );
+ }
+ P getProb ( const IterVal& ixyp, const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) const {
+ return GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P>::getProb ( ixyp, MapKey4D<X1,X2,X3,X4>(x1,x2,x3,x4) );
+ }
+ P getProb ( const Y& y, const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) const {
+ return GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P>::getProb ( y, MapKey4D<X1,X2,X3,X4>(x1,x2,x3,x4) );
+ }
+ P& setProb ( const Y& y, const X1& x1, const X2& x2, const X3& x3, const X4& x4 ) {
+ return GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P>::setProb ( y, MapKey4D<X1,X2,X3,X4>(x1,x2,x3,x4) );
+ }
+ bool readFields ( Array<char*>& aps ) {
+ if ( 7==aps.size() ) {
+ GenericCPTModel<Y,MapKey4D<X1,X2,X3,X4>,P>::setProb ( Y(aps[5]), MapKey4D<X1,X2,X3,X4>(aps[1],aps[2],aps[3],aps[4]) ) = atof(aps[6]);
+ return true;
+ }
+ return false;
+ }
+};
+
+
+////////////////////
+template<class Y, class X1, class X2, class X3, class X4, class X5, class P>
+class RACPT6DModel : public GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P> {
+ public:
+ typedef typename GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P>::IterVal IterVal;
+
+ bool setFirst ( IterVal& ixyp, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) const {
+ return GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P>::setFirst ( ixyp, MapKey5D<X1,X2,X3,X4,X5>(x1,x2,x3,x4,x5) );
+ }
+ bool setNext ( IterVal& ixyp, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) const {
+ return GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P>::setNext ( ixyp, MapKey5D<X1,X2,X3,X4,X5>(x1,x2,x3,x4,x5) );
+ }
+ bool contains ( const Y& y, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) const {
+ return GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P>::contains ( y, MapKey5D<X1,X2,X3,X4,X5>(x1,x2,x3,x4,x5) );
+ }
+ bool contains ( const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) const {
+ return GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P>::contains ( MapKey5D<X1,X2,X3,X4,X5>(x1,x2,x3,x4,x5) );
+ }
+ P getProb ( const IterVal& ixyp, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) const {
+ return GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P>::getProb ( ixyp, MapKey5D<X1,X2,X3,X4,X5>(x1,x2,x3,x4,x5) );
+ }
+ P getProb ( const Y& y, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) const {
+ return GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P>::getProb ( y, MapKey5D<X1,X2,X3,X4,X5>(x1,x2,x3,x4,x5) );
+ }
+ P& setProb ( const Y& y, const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5 ) {
+ return GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P>::setProb ( y, MapKey5D<X1,X2,X3,X4,X5>(x1,x2,x3,x4,x5) );
+ }
+ bool readFields ( Array<char*>& aps ) {
+ if ( 8==aps.size() ) {
+ GenericCPTModel<Y,MapKey5D<X1,X2,X3,X4,X5>,P>::setProb ( Y(aps[6]), MapKey5D<X1,X2,X3,X4,X5>(aps[1],aps[2],aps[3],aps[4],aps[5]) ) = atof(aps[7]);
+ return true;
+ }
+ return false;
+ }
+};
+
+*/
+#endif //_NL_RACPT__
diff --git a/synlm/hhmm/rvtl/include/nl-randvar.h b/synlm/hhmm/rvtl/include/nl-randvar.h
new file mode 100644
index 000000000..66cc0b8f2
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-randvar.h
@@ -0,0 +1,593 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NL_RAND_VAR__
+#define _NL_RAND_VAR__
+
+#include <math.h>
+#include <string>
+#include "nl-string.h"
+#include "nl-safeids.h"
+#include "nl-stringindex.h"
+#include "nl-prob.h"
+#include "nl-hash.h"
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class A, class B, class C>
+class trip {
+ public:
+ trip ( ) { }
+ trip ( A& a, B& b, C& c ) : first(a), second(b), third(c) { }
+ A first;
+ B second;
+ C third;
+ friend ostream& operator<< ( ostream& os, const trip<A,B,C>& a ) { return os<<a.first<<","<<a.second<<","<<a.third; }
+};
+
+template <class A, class B, class C, class D>
+class quad {
+ public:
+ quad ( ) { }
+ quad ( A& a, B& b, C& c, D& d ) : first(a), second(b), third(c), fourth(d) { }
+ A first;
+ B second;
+ C third;
+ D fourth;
+ friend ostream& operator<< ( ostream& os, const quad<A,B,C,D>& a ) { return os<<a.first<<","<<a.second<<","<<a.third<<","<<a.fourth; }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//
+// DiscreteDomainRV template -- creates RV with a distinct set of values for domain T (unique class)
+//
+////////////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////
+template <class T>
+class DiscreteDomain : public StringIndex {
+ public:
+ typedef T ValType;
+ int MAX_SIZE ;
+ DiscreteDomain ( ) : StringIndex() { }
+ DiscreteDomain ( int i ) : StringIndex() { MAX_SIZE=i; }
+ int addIndex ( const char* ps ) { int i=StringIndex::addIndex(ps); assert(i==T(i)); return i; }
+};
+
+////////////////////////////////////////////////////////////
+template <class T, DiscreteDomain<T>& domain>
+class DiscreteDomainRV : public Id<T> {
+ private:
+
+ static String strTemp;
+
+ public:
+
+ typedef DiscreteDomainRV<T,domain> BaseType;
+
+ static const int NUM_VARS = 1;
+
+ ////////////////////
+ template<class P>
+ class ArrayDistrib : public Array<pair<DiscreteDomainRV<T,domain>,P> > {
+ };
+
+ ////////////////////
+ template<class P>
+ class ArrayIterator : public pair<SafePtr<const ArrayDistrib<P> >,Id<int> > {
+ public:
+ static const int NUM_ITERS = NUM_VARS;
+ operator DiscreteDomainRV<T,domain>() const { return ArrayIterator<P>::first.getRef().get(ArrayIterator<P>::second.toInt()).first; }
+ //const DiscreteDomainRV<T,domain>& toRV() { return ArrayIterator<P>::first.getRef().get(ArrayIterator<P>::second.toInt()).first; }
+ bool end ( ) const { return ( ArrayIterator<P>::second >= ArrayIterator<P>::first.getRef().getSize() ); }
+ ArrayIterator<P>& operator++ ( ) { ++ArrayIterator<P>::second; return *this; }
+ };
+
+ // Static extraction methods...
+ static const DiscreteDomain<T>& getDomain ( ) { return domain; }
+
+ // Constructor / destructor methods...
+ DiscreteDomainRV ( ) { Id<T>::set(0); }
+ DiscreteDomainRV ( int i ) { Id<T>::set(i); }
+ DiscreteDomainRV ( const char* ps ) { assert(ps!=NULL); Id<T>::set(domain.addIndex(ps)); }
+
+ // Specification methods...
+ template<class P>
+ DiscreteDomainRV<T,domain>& setVal ( const ArrayIterator<P>& it ) { *this=it; return *this; }
+ bool setFirst ( ) { Id<T>::set(0); return isValid(); }
+ bool setNext ( ) { Id<T>::setNext(); if (!isValid()){Id<T>::set(0); return false;} return true; }
+
+ // Extraction methods...
+ bool isValid ( ) const { return *this<domain.getSize(); } //return (this->Id<T>::operator<(domain.getSize())); }
+ int getIndex ( ) const { return Id<T>::toInt(); } // DO NOT DELETE THIS METHOD!!!!!!!!!!
+ string getString ( ) const { return domain.getString(Id<T>::toInt()); }
+
+ // Input / output methods...
+ friend ostream& operator<< ( ostream& os, const DiscreteDomainRV<T,domain>& rv ) { return os<<rv.getString(); }
+ friend String& operator<< ( String& str, const DiscreteDomainRV<T,domain>& rv ) { return str<<rv.getString(); }
+ friend pair<StringInput,DiscreteDomainRV<T,domain>*> operator>> ( const StringInput ps, DiscreteDomainRV<T,domain>& rv ) { return pair<StringInput,DiscreteDomainRV<T,domain>*>(ps,&rv); }
+ friend StringInput operator>> ( pair<StringInput,DiscreteDomainRV<T,domain>*> delimbuff, const char* psDlm ) {
+ if (StringInput(NULL)==delimbuff.first) return delimbuff.first;
+ ////assert(*delimbuff.second<domain.getSize());
+ int j=0;
+ StringInput psIn = delimbuff.first;
+ if(psDlm[0]=='\0') { *delimbuff.second=psIn.c_str(); return psIn+strlen(psIn.c_str()); }
+ for(int i=0;psIn[i]!='\0';i++) {
+ if(psIn[i]==psDlm[j]) j++;
+ else j=0;
+ strTemp[i]=psIn[i];
+ if(j==int(strlen(psDlm))) { strTemp[i+1-j]='\0'; /*delimbuff.second->set(domain.addIndex(psIn.c_str()));*/ *delimbuff.second=strTemp.c_array(); return psIn+i+1;}
+ }
+ return NULL; //psIn;
+ }
+};
+template <class T, DiscreteDomain<T>& domain>
+String DiscreteDomainRV<T,domain>::strTemp ( 100 );
+
+
+/* DON'T COMMENT BACK IN!!! THIS HAS BEEN MOVED TO nl-refrv.h!!!!!!
+////////////////////////////////////////////////////////////
+template <class T>
+class RefRV : public Id<const T*> {
+ public:
+
+ typedef RefRV<T> BaseType;
+
+ static const int NUM_VARS = 1;
+ static const T DUMMY;
+
+ ////////////////////
+ template<class P>
+ class ArrayDistrib : public Array<pair<RefRV<T>,P> > {
+ };
+
+ ////////////////////
+ template<class P>
+ class ArrayIterator : public pair<SafePtr<const ArrayDistrib<P> >,Id<int> > {
+ public:
+ static const int NUM_ITERS = NUM_VARS;
+ operator RefRV<T>() const { return ArrayIterator<P>::first.getRef().get(ArrayIterator<P>::second.toInt()).first; }
+ //const DiscreteDomainRV<T,domain>& toRV() { return ArrayIterator<P>::first.getRef().get(ArrayIterator<P>::second.toInt()).first; }
+ };
+
+ // Constructor / destructor methods...
+ RefRV ( ) { Id<const T*>::set(NULL); }
+ RefRV ( const T& t ) { Id<const T*>::set(&t); }
+
+ // Specification methods...
+ template<class P>
+ RefRV<T>& setVal ( const ArrayIterator<P>& it ) { *this=it; return *this; }
+
+ // Extraction methods...
+ const T& getRef ( ) const { return (Id<const T*>::toInt()==NULL) ? DUMMY : *(static_cast<const T*>(Id<const T*>::toInt())); }
+
+ // Input / output methods..
+ friend ostream& operator<< ( ostream& os, const RefRV<T>& rv ) { return os <<&rv.getRef(); } //{ return os<<rv.getRef(); }
+ friend String& operator<< ( String& str, const RefRV<T>& rv ) { return str<<"addr"<<(long int)(void*)&rv.getRef(); } //{ return str<<rv.getRef(); }
+ friend pair<StringInput,RefRV<T>*> operator>> ( const StringInput ps, RefRV<T>& rv ) { return pair<StringInput,RefRV<T>*>(ps,&rv); }
+ friend StringInput operator>> ( pair<StringInput,RefRV<T>*> delimbuff, const char* psDlm ) {
+ if (StringInput(NULL)==delimbuff.first) return delimbuff.first;
+ return NULL; //psIn;
+ }
+};
+template <class T> const T RefRV<T>::DUMMY;
+*/
+
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//
+// Joint2DRV
+//
+////////////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////
+template<class V1,class V2>
+class Joint2DRV {
+
+ public:
+
+ V1 first;
+ V2 second;
+
+ // Constructor / destructor methods...
+ Joint2DRV ( ) { }
+ Joint2DRV ( const V1& v1, const V2& v2 ) { first=v1; second=v2; }
+
+ // Extraction methods...
+ size_t getHashKey ( ) const { size_t k=rotLeft(first.getHashKey(),3); k^=second.getHashKey();
+ /*fprintf(stderr," (%d) %d ^& %d = %d\n",sizeof(*this),x1.getHashKey(),x2.getHashKey(),k);*/ return k; }
+ bool operator< ( const Joint2DRV<V1,V2>& j ) const { return ( (first<j.first) ||
+ (first==j.first && second<j.second) ); }
+ bool operator== ( const Joint2DRV<V1,V2>& j ) const { return ( first==j.first && second==j.second ); }
+ bool operator!= ( const Joint2DRV<V1,V2>& j ) const { return ( !(first==j.first && second==j.second) ); }
+};
+
+
+////////////////////////////////////////////////////////////
+template<char* SD1,class V1,char* SD2,class V2,char* SD3>
+class DelimitedJoint2DRV : public Joint2DRV<V1,V2> {
+
+ public:
+
+ static const int NUM_VARS = V1::NUM_VARS + V2::NUM_VARS;
+
+ ////////////////////
+ template<class P>
+ class ArrayIterator : public pair<typename V1::template ArrayIterator<P>, typename V2::template ArrayIterator<P> > {
+ public:
+ // static const int NUM_ITERS = (typename V1::template ArrayIterator<P>)::NUM_ITERS + (typename V2::template ArrayIterator<P>)::NUM_ITERS;
+ static const int NUM_ITERS = NUM_VARS;
+// DelimitedJoint2DRV<SD1,V1,SD2,V2,SD3>& set ( DelimitedJoint2DRV<SD1,V1,SD2,V2,SD3>& rv ) const { first.set(rv.first=first); rv.second=second; return rv; }
+ friend ostream& operator<< ( ostream& os, const ArrayIterator<P>& rv ) {
+ return os<<SD1<<rv.first<<SD2<<rv.second<<SD3; }
+ };
+
+ // Constructor / destructor methods...
+ DelimitedJoint2DRV ( ) : Joint2DRV<V1,V2>() { }
+ DelimitedJoint2DRV ( const V1& v1, const V2& v2 ) : Joint2DRV<V1,V2>(v1,v2) { }
+ DelimitedJoint2DRV ( char* ps ) : Joint2DRV<V1,V2>() { ps>>*this>>"\0"; }
+ DelimitedJoint2DRV ( const char* ps ) : Joint2DRV<V1,V2>() { strdup(ps)>>*this>>"\0"; } //DelimitedJoint2DRV<SD1,V1,SD2,V2,SD3>(strdup(ps)) { }
+
+ // Specification methods...
+ template<class P>
+ DelimitedJoint2DRV<SD1,V1,SD2,V2,SD3>& setVal ( const ArrayIterator<P>& it ) {
+ Joint2DRV<V1,V2>::first.setVal(it.first); Joint2DRV<V1,V2>::second.setVal(it.second); return *this; }
+
+ // Extraction methods...
+ bool operator==(const DelimitedJoint2DRV<SD1,V1,SD2,V2,SD3>& vv) const { return Joint2DRV<V1,V2>::operator==(vv); }
+ bool operator< (const DelimitedJoint2DRV<SD1,V1,SD2,V2,SD3>& vv) const { return Joint2DRV<V1,V2>::operator<(vv); }
+
+ // Input / output methods...
+ friend ostream& operator<< ( ostream& os, const DelimitedJoint2DRV<SD1,V1,SD2,V2,SD3>& rv ) { return os<<SD1<<rv.first<<SD2<<rv.second<<SD3; }
+ friend String& operator<< ( String& str, const DelimitedJoint2DRV<SD1,V1,SD2,V2,SD3>& rv ) { return str<<SD1<<rv.first<<SD2<<rv.second<<SD3; }
+ friend IStream operator>> ( pair<IStream,DelimitedJoint2DRV<SD1,V1,SD2,V2,SD3>*> is_x, const char* psDlm ) {
+ IStream& is = is_x.first;
+ DelimitedJoint2DRV<SD1,V1,SD2,V2,SD3>& x = *is_x.second;
+ // Propagate fail...
+ if ( IStream()==is ) return is;
+ // Use last delimiter only if not empty (otherwise it will immediately trivially match)...
+ return ( (SD3[0]=='\0') ? is>>SD1>>x.first>>SD2>>x.second>>psDlm
+ : is>>SD1>>x.first>>SD2>>x.second>>SD3>>psDlm );
+ }
+
+ // OBSOLETE!
+ friend pair<StringInput,DelimitedJoint2DRV<SD1,V1,SD2,V2,SD3>*> operator>> ( StringInput ps, DelimitedJoint2DRV<SD1,V1,SD2,V2,SD3>& rv ) { return pair<StringInput,DelimitedJoint2DRV<SD1,V1,SD2,V2,SD3>*>(ps,&rv); }
+ friend StringInput operator>> ( pair<StringInput,DelimitedJoint2DRV<SD1,V1,SD2,V2,SD3>*> delimbuff, const char* psDlm ) {
+ if (StringInput(NULL)==delimbuff.first) return delimbuff.first;
+ return ( (SD3[0]=='\0') ? delimbuff.first>>SD1>>delimbuff.second->first>>SD2>>delimbuff.second->second>>psDlm
+ : delimbuff.first>>SD1>>delimbuff.second->first>>SD2>>delimbuff.second->second>>SD3>>psDlm );
+ }
+};
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//
+// Joint3DRV
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template<class V1,class V2,class V3>
+class Joint3DRV {
+
+ public:
+
+ V1 first;
+ V2 second;
+ V3 third;
+
+ // Constructor / destructor methods...
+ Joint3DRV ( ) { }
+ Joint3DRV ( const V1& v1, const V2& v2, const V3& v3 ) { first=v1; second=v2; third=v3; }
+
+ /*
+ // Specification methods...
+ bool operator< ( const Joint3DRV<V1,V2,V3>& j ) const {
+ return ( (x1<j.x1) ||
+ (x1==j.x1 && x2<j.x2) ||
+ (x1==j.x1 && x2==j.x2 && x3<j.x3) ) ;
+ }
+ */
+
+ // Extraction methods...
+ size_t getHashKey ( ) const { size_t k=rotLeft(first.getHashKey(),3); k^=second.getHashKey(); k=rotLeft(k,3); k^=third.getHashKey();
+ /*fprintf(stderr," (%d) %d ^& %d = %d\n",sizeof(*this),x1.getHashKey(),x2.getHashKey(),k);*/ return k; }
+// bool operator< ( const Joint2DRV<V1,V2>& j ) const { return ( (first<j.first) ||
+// (first==j.first && second<j.second) ); }
+ bool operator== ( const Joint3DRV<V1,V2,V3>& j ) const { return ( first==j.first && second==j.second && third==j.third ); }
+ bool operator!= ( const Joint3DRV<V1,V2,V3>& j ) const { return ( !(first==j.first && second==j.second && third==j.third) ); }
+};
+
+////////////////////////////////////////////////////////////
+template<char* SD1,class V1,char* SD2,class V2,char* SD3,class V3,char* SD4>
+class DelimitedJoint3DRV : public Joint3DRV<V1,V2,V3> {
+
+ public:
+
+ static const int NUM_VARS = V1::NUM_VARS + V2::NUM_VARS + V3::NUM_VARS;
+
+ ////////////////////
+ template<class P>
+ class ArrayIterator : public trip<typename V1::template ArrayIterator<P>, typename V2::template ArrayIterator<P>, typename V3::template ArrayIterator<P> > {
+ public:
+ // static const int NUM_ITERS = (typename V1::template ArrayIterator<P>)::NUM_ITERS + (typename V2::template ArrayIterator<P>)::NUM_ITERS;
+ static const int NUM_ITERS = NUM_VARS;
+ friend ostream& operator<< ( ostream& os, const ArrayIterator<P>& rv ) {
+ return os<<SD1<<rv.first<<SD2<<rv.second<<SD3<<rv.third<<SD4; }
+ };
+
+ // Constructor / destructor methods...
+ DelimitedJoint3DRV ( ) : Joint3DRV<V1,V2,V3>() { }
+ DelimitedJoint3DRV ( const V1& v1, const V2& v2, const V3& v3 ) : Joint3DRV<V1,V2,V3>(v1,v2,v3) { }
+ DelimitedJoint3DRV ( char* ps ) : Joint3DRV<V1,V2,V3>() { ps>>*this>>"\0"; }
+ DelimitedJoint3DRV ( const char* ps ) : Joint3DRV<V1,V2,V3>() { strdup(ps)>>*this>>"\0"; }
+
+ // Specification methods...
+ template<class P>
+ DelimitedJoint3DRV<SD1,V1,SD2,V2,SD3,V3,SD4>& setVal ( const ArrayIterator<P>& it ) {
+ Joint3DRV<V1,V2,V3>::first.setVal(it.first); Joint3DRV<V1,V2,V3>::second.setVal(it.second); Joint3DRV<V1,V2,V3>::third.setVal(it.third); return *this; }
+
+ // Extraction methods...
+ bool operator==(const DelimitedJoint3DRV<SD1,V1,SD2,V2,SD3,V3,SD4>& vvv) const { return Joint3DRV<V1,V2,V3>::operator==(vvv); }
+ bool operator< (const DelimitedJoint3DRV<SD1,V1,SD2,V2,SD3,V3,SD4>& vvv) const { return Joint3DRV<V1,V2,V3>::operator< (vvv); }
+
+ // Input / output methods...
+ friend ostream& operator<< ( ostream& os, const DelimitedJoint3DRV<SD1,V1,SD2,V2,SD3,V3,SD4>& rv ) { return os<<SD1<<rv.first<<SD2<<rv.second<<SD3<<rv.third<<SD4; }
+ friend String& operator<< ( String& str, const DelimitedJoint3DRV<SD1,V1,SD2,V2,SD3,V3,SD4>& rv ) { return str<<SD1<<rv.first<<SD2<<rv.second<<SD3<<rv.third<<SD4; }
+ friend pair<StringInput,DelimitedJoint3DRV<SD1,V1,SD2,V2,SD3,V3,SD4>*> operator>> ( StringInput ps, DelimitedJoint3DRV<SD1,V1,SD2,V2,SD3,V3,SD4>& rv ) {
+ return pair<StringInput,DelimitedJoint3DRV<SD1,V1,SD2,V2,SD3,V3,SD4>*>(ps,&rv); }
+ friend StringInput operator>> ( pair<StringInput,DelimitedJoint3DRV<SD1,V1,SD2,V2,SD3,V3,SD4>*> delimbuff, const char* psDlm ) {
+ if (StringInput(NULL)==delimbuff.first) return delimbuff.first;
+ return ( (SD4[0]=='\0') ? delimbuff.first>>SD1>>delimbuff.second->first>>SD2>>delimbuff.second->second>>SD3>>delimbuff.second->third>>psDlm
+ : delimbuff.first>>SD1>>delimbuff.second->first>>SD2>>delimbuff.second->second>>SD3>>delimbuff.second->third>>SD4>>psDlm );
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+//
+// Joint4DRV
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template<class V1,class V2,class V3, class V4>
+class Joint4DRV {
+
+ public:
+
+ V1 first;
+ V2 second;
+ V3 third;
+ V4 fourth;
+
+ // Constructor / destructor methods...
+ Joint4DRV ( ) { }
+ Joint4DRV ( const V1& v1, const V2& v2, const V3& v3, const V4& v4 ) { first=v1; second=v2; third=v3; fourth=v4;}
+ // Extraction methods...
+ size_t getHashKey ( ) const { size_t k=rotLeft(first.getHashKey(),3); k^=second.getHashKey(); k=rotLeft(k,3); k^=third.getHashKey();k^=fourth.getHashKey();
+ /*fprintf(stderr," (%d) %d ^& %d = %d\n",sizeof(*this),x1.getHashKey(),x2.getHashKey(),k);*/ return k; }
+// bool operator< ( const Joint2DRV<V1,V2>& j ) const { return ( (first<j.first) ||
+// (first==j.first && second<j.second) ); }
+ bool operator== ( const Joint4DRV<V1,V2,V3,V4>& j ) const { return ( first==j.first && second==j.second && third==j.third && fourth==j.fourth ); }
+ bool operator!= ( const Joint4DRV<V1,V2,V3,V4>& j ) const { return ( !(first==j.first && second==j.second && third==j.third && fourth==j.fourth) ); }
+};
+
+////////////////////////////////////////////////////////////
+template<char* SD1,class V1,char* SD2,class V2,char* SD3,class V3,char* SD4,class V4, char* SD5>
+class DelimitedJoint4DRV : public Joint4DRV<V1,V2,V3,V4> {
+
+ public:
+
+ static const int NUM_VARS = V1::NUM_VARS + V2::NUM_VARS + V3::NUM_VARS+ V4::NUM_VARS;
+
+ ////////////////////
+ template<class P>
+ class ArrayIterator : public quad<typename V1::template ArrayIterator<P>, typename V2::template ArrayIterator<P>, typename V3::template ArrayIterator<P> , typename V4::template ArrayIterator<P> > {
+ public:
+ // static const int NUM_ITERS = (typename V1::template ArrayIterator<P>)::NUM_ITERS + (typename V2::template ArrayIterator<P>)::NUM_ITERS;
+ static const int NUM_ITERS = NUM_VARS;
+ friend ostream& operator<< ( ostream& os, const ArrayIterator<P>& rv ) {
+ return os<<SD1<<rv.first<<SD2<<rv.second<<SD3<<rv.third<<SD4<<rv.fourth<<SD5; }
+ };
+
+ // Constructor / destructor methods...
+ DelimitedJoint4DRV ( ) : Joint4DRV<V1,V2,V3,V4>() { }
+ DelimitedJoint4DRV ( const V1& v1, const V2& v2, const V3& v3, const V4& v4 ) : Joint4DRV<V1,V2,V3,V4>(v1,v2,v3,v4) { }
+ DelimitedJoint4DRV ( char* ps ) : Joint4DRV<V1,V2,V3,V4>() { ps>>*this>>"\0"; }
+ DelimitedJoint4DRV ( const char* ps ) : Joint4DRV<V1,V2,V3,V4>() { strdup(ps)>>*this>>"\0"; }
+
+ // Specification methods...
+ template<class P>
+ DelimitedJoint4DRV<SD1,V1,SD2,V2,SD3,V3,SD4,V4,SD5>& setVal ( const ArrayIterator<P>& it ) {
+ Joint4DRV<V1,V2,V3,V4>::first.setVal(it.first);
+ Joint4DRV<V1,V2,V3,V4>::second.setVal(it.second);
+ Joint4DRV<V1,V2,V3,V4>::third.setVal(it.third);
+ Joint4DRV<V1,V2,V3,V4>::fourth.setVal(it.fourth);
+ return *this;
+ }
+
+ // Extraction methods...
+ bool operator==(const DelimitedJoint4DRV<SD1,V1,SD2,V2,SD3,V3,SD4,V4,SD5>& vvvv) const { return Joint4DRV<V1,V2,V3,V4>::operator==(vvvv); }
+ bool operator< (const DelimitedJoint4DRV<SD1,V1,SD2,V2,SD3,V3,SD4,V4,SD5>& vvvv) const { return Joint4DRV<V1,V2,V3,V4>::operator< (vvvv); }
+
+ // Input / output methods...
+ friend ostream& operator<< ( ostream& os, const DelimitedJoint4DRV<SD1,V1,SD2,V2,SD3,V3,SD4,V4,SD5>& rv ) { return os<<SD1<<rv.first<<SD2<<rv.second<<SD3<<rv.third<<SD4<<rv.fourth<<SD5; }
+ friend String& operator<< ( String& str, const DelimitedJoint4DRV<SD1,V1,SD2,V2,SD3,V3,SD4,V4,SD5>& rv ) { return str<<SD1<<rv.first<<SD2<<rv.second<<SD3<<rv.third<<SD4<<rv.fourth<<SD5; }
+ friend pair<StringInput,DelimitedJoint4DRV<SD1,V1,SD2,V2,SD3,V3,SD4,V4,SD5>*> operator>> ( StringInput ps, DelimitedJoint4DRV<SD1,V1,SD2,V2,SD3,V3,SD4,V4,SD5>& rv ) {
+ return pair<StringInput,DelimitedJoint4DRV<SD1,V1,SD2,V2,SD3,V3,SD4,V4,SD5>*>(ps,&rv); }
+ friend StringInput operator>> ( pair<StringInput,DelimitedJoint4DRV<SD1,V1,SD2,V2,SD3,V3,SD4,V4,SD5>*> delimbuff, const char* psDlm ) {
+ if (StringInput(NULL)==delimbuff.first) return delimbuff.first;
+ return ( (SD5[0]=='\0') ? delimbuff.first>>SD1>>delimbuff.second->first>>SD2>>delimbuff.second->second>>SD3>>delimbuff.second->third>>SD4>>delimbuff.second->fourth>>psDlm
+ : delimbuff.first>>SD1>>delimbuff.second->first>>SD2>>delimbuff.second->second>>SD3>>delimbuff.second->third>>SD4>>delimbuff.second->fourth>>SD5>>psDlm );
+ }
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// JointArrayRV<T,I>
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template <int I, class T>
+class JointArrayRV {
+ private:
+ // Data members...
+ T at[I];
+ public:
+ typedef T ElementType;
+
+ /*
+ // Constructor / destructor methods...
+ JointArrayRV ( ) { }
+ JointArrayRV ( const T& t ) { for(int i=0;i<I;i++) at[i]=t; }
+ */
+
+ // Static extraction methods...
+ static const int SIZE = I;
+ static const int getSize ( ) { return I; }
+
+ // Specification methods...
+ T& set (int i) { assert(0<=i); assert(i<I); return at[i]; }
+
+ // Extraction methods...
+ const T& get (int i) const { assert(NULL!=this); assert(0<=i); assert(i<I); return at[i]; }
+ bool operator< ( const JointArrayRV<I,T>& a ) const {
+ int i;
+ for ( i=0; at[i]==a.at[i] && i<I; i++ ) ;
+ return ( i<I && at[i]<a.at[i] ) ;
+ }
+ bool operator== ( const JointArrayRV<I,T>& a ) const {
+ int i;
+ for ( i=0; at[i]==a.at[i] && i<I; i++ ) ;
+ return ( i==I ) ;
+ }
+ size_t getHashKey ( ) const { size_t k=0; for(int i=0;i<I;i++){k=rotLeft(k,3); k^=get(i).getHashKey(); } return k; }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <int I, char* SD, class T>
+class DelimitedJointArrayRV : public JointArrayRV<I,T> {
+ public:
+
+ static const int NUM_VARS = T::NUM_VARS * I;
+
+ ////////////////////
+ template<class P>
+ class ArrayIterator : public StaticSafeArray<I,typename T::template ArrayIterator<P> > {
+ public:
+ static const int NUM_ITERS = NUM_VARS;
+ // static const int NUM_ITERS = (typename T::template ArrayIterator<P>)::NUM_ITERS * I;
+ friend ostream& operator<< ( ostream& os, const ArrayIterator<P>& rv ) { for(int i=0;i<I;i++) os<<((i==0)?"":SD)<<rv.get(i); return os; }
+ };
+
+ // Specification methods...
+ template<class P>
+ DelimitedJointArrayRV<I,SD,T>& setVal ( const ArrayIterator<P>& it ) {
+ for(int i=0;i<I;i++) JointArrayRV<I,T>::set(i).setVal(it.get(i)); return *this; }
+
+ // Extraction methods...
+ bool operator==(const DelimitedJointArrayRV<I,SD,T>& a) const { return JointArrayRV<I,T>::operator==(a); }
+ bool operator< (const DelimitedJointArrayRV<I,SD,T>& a) const { return JointArrayRV<I,T>::operator<(a); }
+
+ // Input / output methods...
+ friend ostream& operator<< ( ostream& os, const DelimitedJointArrayRV<I,SD,T>& a ) { for(int i=0;i<I;i++) os<<((i==0)?"":SD)<<a.get(i); return os; }
+ friend String& operator<< ( String& str, const DelimitedJointArrayRV<I,SD,T>& a ) { for(int i=0;i<I;i++)str<<((i==0)?"":SD)<<a.get(i); return str; }
+ friend IStream operator>> ( pair<IStream,DelimitedJointArrayRV<I,SD,T>*> is_x, const char* psDlm ) {
+ IStream& is = is_x.first;
+ DelimitedJointArrayRV<I,SD,T>& x = *is_x.second;
+ if (IStream()==is) return IStream();
+ for(int i=0;i<I;i++)
+ is = pair<IStream,T*>(is,&x.set(i))>>((i<I-1)?SD:psDlm);
+ return is;
+ }
+
+ // OBSOLETE!
+ friend pair<StringInput,DelimitedJointArrayRV<I,SD,T>*> operator>> ( StringInput ps, DelimitedJointArrayRV<I,SD,T>& a ) { return pair<StringInput,DelimitedJointArrayRV<I,SD,T>*>(ps,&a); }
+ friend StringInput operator>> ( pair<StringInput,DelimitedJointArrayRV<I,SD,T>*> delimbuff, const char* psDlm ) {
+ if (StringInput(NULL)==delimbuff.first) return delimbuff.first;
+ StringInput psIn = delimbuff.first;
+ for(int i=0;i<I;i++)
+ psIn = pair<StringInput,T*>(psIn,&delimbuff.second->set(i))>>((i<I-1)?SD:psDlm);
+ return psIn;
+ }
+};
+
+
+///////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// History<T,N>
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template <int N,class T>
+class History {
+ private:
+ // Data members...
+ StaticSafeArray<N,T> at;
+ public:
+ // Constructor / destructor methods...
+ History ( ) { }
+ History ( char* ps ) { ps>>*this>>"\0"; }
+ /*
+ History ( char* ps ) { read(ps); }
+ */
+// History ( const string& s ) { read(s.c_str()); }
+ // Specification methods...
+ void advanceHistory(const T& t) { for(int i=N-1;i>0;i--)at.set(i)=at.get(i-1); at.set(0)=t; }
+ T& advanceHistory() { for(int i=N-1;i>0;i--)at.set(i)=at.get(i-1); return at.set(0); }
+ T& setBack(int i) { return at.set(i); }
+ // Extraction methods...
+ const T& getBack(int i) const { assert(i>=0); assert(i<N); return at.get(i); }
+ // Input / output methods...
+ /*
+ void read ( char* ps, const ReaderContext& rc=ReaderContext() ) { char* psT; for(int i=0;i<N;i++){char* z=strtok_r((0==i)?ps:NULL,";",&psT); assert(z); at.set(i).read(z);} }
+ //at.set(i).read(strtok_r((0==i)?ps:NULL,";",&psT)); }
+ */
+
+ friend ostream& operator<< ( ostream& os, const History<N,T>& a ) { for(int i=0;i<N;i++)os<<((i==0)?"":";")<<a.getBack(i); return os; }
+ friend pair<StringInput,History<N,T>*> operator>> ( StringInput ps, History<N,T>& a ) { return pair<StringInput,History<N,T>*>(ps,&a); }
+ friend StringInput operator>> ( pair<StringInput,History<N,T>*> delimbuff, const char* psDlm ) {
+ if (StringInput(NULL)==delimbuff.first) return delimbuff.first;
+ StringInput psIn = delimbuff.first;
+ for(int i=0;i<N;i++)
+ psIn = pair<StringInput,T*>(psIn,&delimbuff.second->setBack(i))>>((i<N-1)?";":psDlm);
+ return psIn;
+ }
+
+ /*
+ void write ( FILE* pf ) const { for(int i=0;i<N;i++) {fprintf(pf,(0==i)?"":";"); at.get(i).write(pf);} }
+ */
+};
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+
+
+#endif //_NL_RAND_VAR__
diff --git a/synlm/hhmm/rvtl/include/nl-refrv.h b/synlm/hhmm/rvtl/include/nl-refrv.h
new file mode 100644
index 000000000..1e4eca4fd
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-refrv.h
@@ -0,0 +1,74 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////
+ //template <class T>
+template<class T, map<T,T>& domain>
+class RefRV : public Id<const T*> {
+ public:
+
+ typedef RefRV<T,domain> BaseType;
+
+ static const int NUM_VARS = 1;
+ static const T DUMMY;
+
+ ////////////////////
+ template<class P>
+ class ArrayDistrib : public Array<pair<RefRV<T,domain>,P> > {
+ };
+
+ ////////////////////
+ template<class P>
+ class ArrayIterator : public pair<SafePtr<const ArrayDistrib<P> >,Id<int> > {
+ public:
+ static const int NUM_ITERS = NUM_VARS;
+ operator RefRV<T,domain>() const { return ArrayIterator<P>::first.getRef().get(ArrayIterator<P>::second.toInt()).first; }
+ //const DiscreteDomainRV<T,domain>& toRV() { return ArrayIterator<P>::first.getRef().get(ArrayIterator<P>::second.toInt()).first; }
+ };
+
+ // Constructor / destructor methods...
+ RefRV ( ) { Id<const T*>::set(NULL); }
+ //RefRV ( int i ) { Id<const T*>::set(i); }
+ //RefRV ( const T& t ) { Id<const T*>::set(&t); }
+ RefRV ( const T& t ) { if(domain.find(t)==domain.end()) *(const_cast<T*>(Id<const T*>::set(&domain[t]).toInt())) = t;
+ else Id<const T*>::set(&domain[t]); }
+
+ // Specification methods...
+ template<class P>
+ RefRV<T,domain>& setVal ( const ArrayIterator<P>& it ) { *this=it; return *this; }
+ //T& setRef ( ) { return Id<const T*>::setRef(); }
+
+ // Extraction methods...
+ const T& getRef ( ) const { return (Id<const T*>::toInt()==NULL) ? DUMMY : *(static_cast<const T*>(Id<const T*>::toInt())); }
+ static map<T,T>& setDomain ( ) { return domain; }
+
+ // Input / output methods..
+ friend ostream& operator<< ( ostream& os, const RefRV<T,domain>& rv ) { return os <<&rv.getRef(); } //{ return os<<rv.getRef(); }
+ friend String& operator<< ( String& str, const RefRV<T,domain>& rv ) { return str<<"addr"<<(long int)(void*)&rv.getRef(); } //{ return str<<rv.getRef(); }
+ friend pair<StringInput,RefRV<T,domain>*> operator>> ( const StringInput ps, RefRV<T,domain>& rv ) { return pair<StringInput,RefRV<T,domain>*>(ps,&rv); }
+ friend StringInput operator>> ( pair<StringInput,RefRV<T,domain>*> delimbuff, const char* psDlm ) {
+ if (StringInput(NULL)==delimbuff.first) return delimbuff.first;
+ return NULL; //psIn;
+ }
+};
+template <class T, map<T,T>& domain> const T RefRV<T,domain>::DUMMY;
diff --git a/synlm/hhmm/rvtl/include/nl-safeids.h b/synlm/hhmm/rvtl/include/nl-safeids.h
new file mode 100644
index 000000000..50837c366
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-safeids.h
@@ -0,0 +1,503 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NL_SAFE_IDS__
+#define _NL_SAFE_IDS__
+
+#include "nl-const.h"
+#include "nl-stringindex.h"
+//#include "nl-string.h"
+#include "nl-stream.h"
+
+#include <iostream>
+using namespace std;
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// StaticSafeArray<T,I>
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template <int I, class T>
+class StaticSafeArray {
+ private:
+ // Data members...
+ T at[I];
+ public:
+ typedef T ElementType;
+ template<class P> class Iterator : public StaticSafeArray<I,typename T::template Iterator<P> > {
+ public:
+ //operator StaticSafeArray<I,T>() const { }
+ };
+ // Constructor / destructor methods...
+ StaticSafeArray ( ) { }
+ StaticSafeArray ( const T& t ) { for(int i=0;i<I;i++) at[i]=t; }
+ StaticSafeArray ( const StaticSafeArray<I,T>& a ) { for(int i=0;i<I;i++) at[i]=a.at[i]; }
+ // Static extraction methods...
+ static const int SIZE = I;
+ static const int getSize ( ) { return I; }
+ // Math methods...
+ StaticSafeArray<I,T> operator+ ( const StaticSafeArray<I,T>& a ) const { StaticSafeArray<I,T> aOut; for(int i=0;i<I;i++) aOut.at[i]=at[i]+a.at[i]; return aOut; }
+ StaticSafeArray<I,T> operator- ( const StaticSafeArray<I,T>& a ) const { StaticSafeArray<I,T> aOut; for(int i=0;i<I;i++) aOut.at[i]=at[i]-a.at[i]; return aOut; }
+ //StaticSafeArray<I,T> operator+ ( const T& t ) const { StaticSafeArray<I,T> aOut; for(int i=0;i<I;i++) aOut.at[i]=at[i]+t; return aOut; }
+ //StaticSafeArray<I,T> operator- ( const T& t ) const { StaticSafeArray<I,T> aOut; for(int i=0;i<I;i++) aOut.at[i]=at[i]-t; return aOut; }
+ // Specification methods...
+ T& set (int i) { assert(0<=i); assert(i<I); return at[i]; }
+ T& operator[](int i) { assert(0<=i); assert(i<I); return at[i]; }
+ // Extraction methods...
+ const T& get (int i) const { assert(NULL!=this); assert(0<=i); assert(i<I); return at[i]; }
+ const T& operator[](int i) const { assert(NULL!=this); assert(0<=i); assert(i<I); return at[i]; }
+ bool operator< ( const StaticSafeArray<I,T>& a ) const {
+ int i;
+ for ( i=0; at[i]==a.at[i] && i<I; i++ ) ;
+ return ( i<I && at[i]<a.at[i] ) ;
+ }
+ bool operator== ( const StaticSafeArray<I,T>& a ) const {
+ int i;
+ for ( i=0; at[i]==a.at[i] && i<I; i++ ) ;
+ return ( i==I ) ;
+ }
+ size_t getHashKey ( ) const { size_t k=0; for(int i=0;i<I;i++){k=rotLeft(k,3); k^=get(i).getHashKey(); } return k; }
+// friend ostream& operator<< ( ostream& os, const StaticSafeArray<I,T>& a ) { for(int i=0;i<I;i++) os<<((i==0)?"":",")<<a.get(i); return os; }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <int I, char* SD, class T>
+class DelimitedStaticSafeArray : public StaticSafeArray<I,T> {
+ public:
+ DelimitedStaticSafeArray ( ) : StaticSafeArray<I,T>() { }
+ DelimitedStaticSafeArray ( const T& t ) : StaticSafeArray<I,T>(t) { }
+ DelimitedStaticSafeArray ( const StaticSafeArray<I,T>& a ) : StaticSafeArray<I,T>(a) { }
+
+ bool operator==(const DelimitedStaticSafeArray<I,SD,T>& a) const { return StaticSafeArray<I,T>::operator==(a); }
+ bool operator< (const DelimitedStaticSafeArray<I,SD,T>& a) const { return StaticSafeArray<I,T>::operator<(a); }
+
+ friend ostream& operator<< ( ostream& os, const DelimitedStaticSafeArray<I,SD,T>& a ) { for(int i=0;i<I;i++) os<<((i==0)?"":SD)<<a.get(i); return os; }
+ friend String& operator<< ( String& str, const DelimitedStaticSafeArray<I,SD,T>& a ) { for(int i=0;i<I;i++)str<<((i==0)?"":SD)<<a.get(i); return str; }
+ friend IStream operator>> ( pair<IStream,DelimitedStaticSafeArray<I,SD,T>*> is_x, const char* psDlm ) {
+ IStream& is = is_x.first;
+ DelimitedStaticSafeArray<I,SD,T>& x = *is_x.second;
+ if (IStream()==is) return IStream();
+ for(int i=0;i<I;i++)
+ is = pair<IStream,T*>(is,&x.set(i))>>((i<I-1)?SD:psDlm);
+ return is;
+ }
+
+
+ // OBSOLETE!
+ friend pair<StringInput,DelimitedStaticSafeArray<I,SD,T>*> operator>> ( StringInput ps, DelimitedStaticSafeArray<I,SD,T>& a ) { return pair<StringInput,DelimitedStaticSafeArray<I,SD,T>*>(ps,&a); }
+ friend StringInput operator>> ( pair<StringInput,DelimitedStaticSafeArray<I,SD,T>*> delimbuff, const char* psDlm ) {
+ if (StringInput(NULL)==delimbuff.first) return delimbuff.first;
+ StringInput psIn = delimbuff.first;
+ for(int i=0;i<I;i++)
+ psIn = pair<StringInput,T*>(psIn,&delimbuff.second->set(i))>>((i<I-1)?SD:psDlm);
+ return psIn;
+ }
+
+ /*
+ void read ( char* ps ) { char* psT; for(int i=0;i<I;i++){char* z=strtok_r((0==i)?ps:NULL,SD,&psT); assert(z);
+ StaticSafeArray<I,T>::set(i).read(z);} }
+ void read ( char* ps, ReaderContext& rc ) { read(ps); }
+ void write ( FILE* pf ) const { for(int i=0;i<I;i++){fprintf(pf,(0==i)?"":SD); StaticSafeArray<I,T>::get(i).write(pf);} }
+ void write ( FILE* pf, ReaderContext& rc ) const { write(pf); }
+ */
+};
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// Delimited pair
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template<char* SD1,class V1,char* SD2,class V2,char* SD3>
+class DelimitedPair : public pair<V1,V2> {
+ public:
+ // Constructor / destructor methods...
+ DelimitedPair ( ) : pair<V1,V2>() { }
+ DelimitedPair ( const V1& v1, const V2& v2 ) : pair<V1,V2>(v1,v2) { }
+
+ // Input / output methods...
+ friend ostream& operator<< ( ostream& os, const DelimitedPair<SD1,V1,SD2,V2,SD3>& rv ) { return os<<SD1<<rv.first<<SD2<<rv.second<<SD3; }
+ friend String& operator<< ( String& str, const DelimitedPair<SD1,V1,SD2,V2,SD3>& rv ) { return str<<SD1<<rv.first<<SD2<<rv.second<<SD3; }
+ friend IStream operator>> ( pair<IStream,DelimitedPair<SD1,V1,SD2,V2,SD3>*> is_x, const char* psDlm ) {
+ IStream& is = is_x.first;
+ DelimitedPair<SD1,V1,SD2,V2,SD3>& x = *is_x.second;
+ // Propagate fail...
+ if ( IStream()==is ) return is;
+ IStream is1 = (is>>SD1>>x.first>>SD2);
+ IStream is2 = (is>>SD1>>x.first>>SD2>>x.second>>psDlm);
+ // Use last delimiter only if not empty (otherwise it will immediately trivially match)...
+ return ( (SD3[0]=='\0') ? is>>SD1>>x.first>>SD2>>x.second>>psDlm
+ : is>>SD1>>x.first>>SD2>>x.second>>SD3>>psDlm );
+ }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// Id -- generalize int to any symbol value
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template<class T>
+class Id {
+ private:
+ // Data members...
+ T val;
+ public:
+ typedef T IntType;
+ // Constructor / destructor methods...
+ Id () { val=0; }
+ Id (T t) { val=t; }
+// Id (int i) { val=i; }
+ Id (const Id& i) { val=i.val; }
+ // Specification methods...
+ Id& operator= (const T& i) { val=i; return *this; }
+// Id& operator= (int i) { val=i; return *this; }
+ Id& operator= (const Id& i) { val=i.val; return *this; }
+ Id& operator+= (const Id& i) { val+=i.val; return *this; }
+ Id& operator++ ( ) { ++val; return *this; }
+ Id& setFirst ( ) { val=0; return *this; }
+ Id& setFirst (const Id& i) { val=0; return *this; }
+ Id& setNext ( ) { ++val; return *this; }
+ Id& setNext (const Id& i) { ++val; return *this; }
+ // Extraction methods...
+ //int getHashConst ( const int m ) const { return (sizeof(T)%m); }
+ //int getHashKey ( const int m ) const { return (((int)*this)%m); }
+ size_t getHashKey ( ) const { return (size_t)val; }
+ bool operator== ( const Id& i ) const { return val==i.val; }
+ bool operator!= ( const Id& i ) const { return val!=i.val; }
+ bool operator< ( const Id& i ) const { return val<i.val; }
+ bool operator<= ( const Id& i ) const { return val<=i.val; }
+ bool operator> ( const Id& i ) const { return val>i.val; }
+ bool operator>= ( const Id& i ) const { return val>=i.val; }
+ Id operator+ ( const Id& i ) const { return Id(val+i.val); }
+ Id operator- ( const Id& i ) const { return Id(val-i.val); }
+ bool operator== ( const T t ) const { return val==t; }
+ bool operator< ( const T t ) const { return val<t; }
+ bool operator<= ( const T t ) const { return val<=t; }
+ bool operator> ( const T t ) const { return val>t; }
+ bool operator>= ( const T t ) const { return val>=t; }
+ Id operator+ ( const T t ) const { return Id(val+t); }
+ Id operator- ( const T t ) const { return Id(val-t); }
+// operator T() const { return val; };
+
+ T toInt ( ) const { return val; }
+ Id<T> set (T t) { val=t; return *this; }
+// void setInt (int i) { val=i; }
+
+ // Input / output methods...
+ friend ostream& operator<< ( ostream& os, const Id<T>& i ) { return os<<i.val; }
+
+ /*
+ void write ( FILE* pf, const ReaderContext& rc=ReaderContext() ) const { (sizeof(T)<sizeof(long long)) ? fprintf(pf,"%d",val) : fprintf(pf,"%lld",val); }
+ */
+} ;
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// Safe pointers..
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template <class R>
+class SafePtr {
+ private:
+ R* pr;
+ static const R rDummy;
+ public:
+ SafePtr<R> ( ) : pr(NULL) { }
+ SafePtr<R> ( R& r ) : pr(&r) { }
+ bool operator== ( const SafePtr<R>& spr ) const { return(pr==spr.pr); }
+ bool operator!= ( const SafePtr<R>& spr ) const { return(!(pr==spr.pr)); }
+ //friend void delete ( SafePtr<R>& sp ) { delete sp.pr; }
+ void del ( ) { delete pr; pr=NULL; }
+ //R& setRefV ( ) { assert(pr); return *pr; }
+ R& setRef ( ) { assert(pr); return (pr!=NULL) ? *pr : rDummy; }
+ const R& getRef ( ) const { return (pr!=NULL) ? *pr : rDummy; }
+};
+template <class R>
+const R SafePtr<R>::rDummy = R();
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// Safe static array templates for small arrays...
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+class Doub {
+ private:
+ T at[2];
+ public:
+ T& set ( int i ) { assert(0<=i&&i<2); return at[i]; }
+ const T& get ( int i ) const { assert(0<=i&&i<2); return at[i]; }
+};
+
+template <class T>
+class Trip {
+ private:
+ T at[3];
+ public:
+ T& set ( int i ) { assert(0<=i&&i<3); return at[i]; }
+ const T& get ( int i ) const { assert(0<=i&&i<3); return at[i]; }
+};
+
+template <class T>
+class Quad {
+ private:
+ T at[4];
+ public:
+ T& set ( int i ) { assert(0<=i&&i<4); return at[i]; }
+ const T& get ( int i ) const { assert(0<=i&&i<4); return at[i]; }
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// SafeArrays -- prevents overflow memory leaks
+//
+////////////////////////////////////////////////////////////////////////////////
+
+template <class X1, class T>
+class SafeArray1D {
+ private:
+ // Data members;
+ int xSize;
+ T* at;
+ public:
+ // Constructor / destructor methods...
+ ~SafeArray1D( ) { delete[] at; }
+ SafeArray1D ( ) { xSize=0; at=NULL; }
+ SafeArray1D (int x) { xSize=x; at=new T[x]; }
+ SafeArray1D (int x, const T& t) { xSize=x; at=new T[x];
+ for(int i=0;i<x;++i) at[i]=t; }
+ SafeArray1D ( const SafeArray1D<X1,T>& sat ) { delete[] at; xSize=sat.xSize; at=new T[xSize];
+ for(int i=0;i<xSize;i++) at[i]=sat.at[i]; }
+ // Specification methods...
+ SafeArray1D& operator= ( const SafeArray1D<X1,T>& sat )
+ { delete[] at; xSize=sat.xSize; at=new T[xSize];
+ for(int i=0;i<xSize;i++) at[i]=sat.at[i]; return *this; }
+ void init ( int x ) { delete[] at; xSize=x; at=new T[x];}
+ void init ( int x, const T& t ) { delete[] at; xSize=x; at=new T[x];
+ for(int i=0;i<x;++i) at[i]=t; }
+ void reset() { delete[] at; xSize=0; at=NULL; }
+ T& set ( const X1& x ) { assert(x.toInt()>=0); assert(x.toInt()<xSize);
+ return at[x.toInt()];}
+ // Extraction methods...
+ int getSize ( ) const { return xSize; }
+ const T& get ( const X1& x ) const { assert(x.toInt()>=0); assert(x.toInt()<xSize);
+ return at[x.toInt()];}
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class X1, class X2, class T>
+class SafeArray2D {
+ private:
+ // Data members;
+ int xSize;
+ int ySize;
+ T* at;
+ public:
+ // Constructor / destructor methods...
+ ~SafeArray2D( ) { delete[] at; }
+ SafeArray2D ( ) { xSize=0; ySize=0; at=NULL; }
+ SafeArray2D (int x, int y) { xSize=x; ySize=y; at=new T[x*y]; }
+ SafeArray2D (int x, int y, const T& t) { xSize=x; ySize=y; at=new T[x*y];
+ for(int i=0;i<x*y;++i) at[i]=t; }
+ //SafeArray2D ( const SafeArray2D& a ) { xSize=a.xSize; ySize=a.ySize;
+ // for(int i=0;i<xSize;i++) for(int j=0;j<ySize;j++) at[i*ySize+j]=a.at[i*ySize+j]; }
+ // Specification methods...
+ SafeArray2D& operator= ( const SafeArray2D<X1,X2,T>& sat )
+ { delete[] at; xSize=sat.xSize; ySize=sat.ySize; at=new T[xSize*ySize];
+ for(int i=0;i<xSize*ySize;i++) at[i]=sat.at[i]; return *this; }
+ void init ( int x,int y ) { delete[] at; xSize=x; ySize=y; at=new T[x*y];}
+ void init ( int x,int y,const T& t ) { delete[] at; xSize=x; ySize=y; at=new T[x*y];
+ for(int i=0;i<x*y;++i) at[i]=t; }
+ void reset() { delete[] at; xSize=0; ySize=0; at=NULL; }
+ T& set ( const X1& x,const X2& y) { assert(at!=NULL);
+ assert(x.toInt()>=0); assert(x.toInt()<xSize);
+ assert(y.toInt()>=0); assert(y.toInt()<ySize);
+ return at[x.toInt()*ySize + y.toInt()];}
+ // Extraction methods...
+ const T& get (const X1& x,const X2& y) const { assert(at!=NULL);
+ assert(x.toInt()>=0); assert(x.toInt()<xSize);
+ assert(y.toInt()>=0);
+//this assert failed when compile without -DNDEBUG (needed for debugging). Have to figure out why before adding this assert back in
+//assert(y.toInt()<ySize);
+ return at[x.toInt()*ySize + y.toInt()];}
+ int getxSize( ) const { return xSize; }
+ int getySize( ) const { return ySize; }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class X1, class X2, class X3, class T>
+class SafeArray3D {
+ private:
+ // Data members;
+ int xSize;
+ int ySize;
+ int zSize;
+ T* at;
+ public:
+ // Constructor / destructor methods...
+ ~SafeArray3D() { delete[] at; }
+ SafeArray3D() { xSize=0; ySize=0; zSize=0; at=NULL; }
+ SafeArray3D(int x,int y,int z) { xSize=x; ySize=y; zSize=z; at=new T[x*y*z];}
+ SafeArray3D(int x,int y,int z,const T& t){ xSize=x; ySize=y; zSize=z; at=new T[x*y*z];
+ for(int i=0;i<x*y*z;++i) at[i]=t; }
+ // Specification methods...
+ SafeArray3D& operator= ( const SafeArray3D<X1,X2,X3,T>& sat )
+ { delete[] at; xSize=sat.xSize; ySize=sat.ySize; zSize=sat.zSize;
+ at=new T[xSize*ySize*zSize];
+ for(int i=0;i<xSize*ySize*zSize;i++) at[i]=sat.at[i]; return *this; }
+ void init(int x,int y,int z) { delete[] at; xSize=x; ySize=y; zSize=z; at=new T[x*y*z]; }
+ void init(int x,int y,int z,const T& t){ delete[] at; xSize=x; ySize=y; zSize=z; at=new T[x*y*z];
+ for(int i=0;i<x*y*z;++i) at[i]=t; }
+ void reset() { delete[] at; xSize=0; ySize=0; zSize=0; at=NULL; }
+ T& set(const X1& x,const X2& y,const X3& z)
+ { assert(at!=NULL);
+ assert(x.toInt()>=0); assert(x.toInt()<xSize);
+ assert(y.toInt()>=0); assert(y.toInt()<ySize);
+ assert(z.toInt()>=0); assert(z.toInt()<zSize);
+ return at[(x.toInt()*ySize+y.toInt())*zSize+z.toInt()];}
+ // Extraction methods...
+ const T& get(const X1& x,const X2& y,const X3& z) const
+ { assert(at!=NULL);
+ assert(x.toInt()>=0); assert(x.toInt()<xSize);
+ assert(y.toInt()>=0); assert(y.toInt()<ySize);
+ assert(z.toInt()>=0); assert(z.toInt()<zSize);
+ return at[(x.toInt()*ySize+y.toInt())*zSize+z.toInt()];}
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class X1, class X2, class X3, class X4, class T>
+class SafeArray4D {
+ private:
+ // Data members;
+ int wSize;
+ int xSize;
+ int ySize;
+ int zSize;
+ T* at;
+ public:
+ // Constructor / destructor methods...
+ ~SafeArray4D( ) { delete[] at; }
+ SafeArray4D ( ) { wSize=0; xSize=0; ySize=0; zSize=0; at=NULL; }
+ SafeArray4D(int w, int x,int y,int z)
+ { wSize=w; xSize=x; ySize=y; zSize=z; at=new T[w*x*y*z];}
+ SafeArray4D(int w, int x,int y,int z,const T& t)
+ { wSize=w; xSize=x; ySize=y; zSize=z; at=new T[w*x*y*z];
+ for(int i=0;i<w*x*y*z;++i) at[i]=t; }
+ // Specification methods...
+ SafeArray4D& operator= ( const SafeArray4D<X1,X2,X3,X4,T>& sat )
+ { delete[] at; wSize=sat.wSize; xSize=sat.xSize; ySize=sat.ySize;
+ zSize=sat.zSize; at=new T[wSize*xSize*ySize*zSize];
+ for(int i=0;i<wSize*xSize*ySize*zSize;i++) at[i]=sat.at[i]; return *this; }
+ void init (int w,int x,int y,int z)
+ { delete[] at; wSize=w; xSize=x; ySize=y; zSize=z; at=new T[w*x*y*z]; }
+ void init (int w,int x,int y,int z,const T& t)
+ { delete[] at; wSize=w; xSize=x; ySize=y; zSize=z; at=new T[w*x*y*z];
+ for(int i=0;i<w*x*y*z;++i) at[i]=t; }
+ void reset() { delete[] at; wSize=0; xSize=0; ySize=0; zSize=0; at=NULL; }
+ T& set(const X1& w,const X2& x,const X3& y,const X4& z)
+ { assert(at!=NULL);
+ assert(w.toInt()>=0); assert(w.toInt()<wSize);
+ assert(x.toInt()>=0); assert(x.toInt()<xSize);
+ assert(y.toInt()>=0); assert(y.toInt()<ySize);
+ assert(z.toInt()>=0); assert(z.toInt()<zSize);
+ return at[((w.toInt()*xSize+x.toInt())*ySize+y.toInt())*zSize+z.toInt()];}
+ // Extraction methods...
+ const T& get(const X1& w,const X2& x,const X3& y,const X4& z) const
+ { assert(at!=NULL);
+ assert(w.toInt()>=0); assert(w.toInt()<wSize);
+ assert(x.toInt()>=0); assert(x.toInt()<xSize);
+ assert(y.toInt()>=0); assert(y.toInt()<ySize);
+ assert(z.toInt()>=0); assert(z.toInt()<zSize);
+ return at[((w.toInt()*xSize+x.toInt())*ySize+y.toInt())*zSize+z.toInt()];}
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class X1, class X2, class X3, class X4, class X5, class T>
+class SafeArray5D {
+ private:
+ // Data members;
+ int vSize;
+ int wSize;
+ int xSize;
+ int ySize;
+ int zSize;
+ T* at;
+ public:
+ // Constructor / destructor methods...
+ ~SafeArray5D( ) { delete[] at; }
+ SafeArray5D ( ) { vSize=0; wSize=0; xSize=0; ySize=0; zSize=0; at=NULL; }
+ SafeArray5D(int v,int w, int x,int y,int z)
+ { vSize=v; wSize=w; xSize=x; ySize=y; zSize=z; at=new T[v*w*x*y*z];}
+ SafeArray5D(int v,int w, int x,int y,int z,const T& t)
+ { vSize=v; wSize=w; xSize=x; ySize=y; zSize=z; at=new T[v*w*x*y*z];
+ for(int i=0;i<v*w*x*y*z;++i) at[i]=t; }
+ // Specification methods...
+ SafeArray5D& operator= ( const SafeArray5D<X1,X2,X3,X4,X5,T>& sat )
+ { delete[] at; vSize=sat.vSize; wSize=sat.wSize; xSize=sat.xSize;
+ ySize=sat.ySize; zSize=sat.zSize; at=new T[vSize*wSize*xSize*ySize*zSize];
+ for(int i=0;i<vSize*wSize*xSize*ySize*zSize;i++) at[i]=sat.at[i]; return *this; }
+ void init(int v,int w,int x,int y,int z)
+ { delete[] at; vSize=v; wSize=w; xSize=x; ySize=y; zSize=z; at=new T[v*w*x*y*z]; }
+ void init(int v,int w,int x,int y,int z,const T& t)
+ { delete[] at; vSize=v; wSize=w; xSize=x; ySize=y; zSize=z; at=new T[v*w*x*y*z];
+ for(int i=0;i<v*w*x*y*z;++i) at[i]=t; }
+ void reset() { delete[] at; vSize=0; wSize=0; xSize=0; ySize=0; zSize=0; at=NULL; }
+ T& set(const X1& v,const X2& w,const X3& x,const X4& y,const X5& z)
+ { assert(at!=NULL);
+ assert(v.toInt()>=0); assert(v.toInt()<vSize);
+ assert(w.toInt()>=0); assert(w.toInt()<wSize);
+ assert(x.toInt()>=0); assert(x.toInt()<xSize);
+ assert(y.toInt()>=0); assert(y.toInt()<ySize);
+ assert(z.toInt()>=0); assert(z.toInt()<zSize);
+ return at[(((v.toInt()*wSize+w.toInt())*xSize+x.toInt())*ySize+y.toInt())*zSize+z.toInt()];}
+ // Extraction methods...
+ const T& get(const X1& v,const X2& w,const X3& x,const X4& y,const X5& z) const
+ { assert(at!=NULL);
+ assert(v.toInt()>=0); assert(v.toInt()<vSize);
+ assert(w.toInt()>=0); assert(w.toInt()<wSize);
+ assert(x.toInt()>=0); assert(x.toInt()<xSize);
+ assert(y.toInt()>=0); assert(y.toInt()<ySize);
+ assert(z.toInt()>=0); assert(z.toInt()<zSize);
+ return at[(((v.toInt()*wSize+w.toInt())*xSize+x.toInt())*ySize+y.toInt())*zSize+z.toInt()];}
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+
+#endif //_NL_SAFE_IDS__
diff --git a/synlm/hhmm/rvtl/include/nl-stream.h b/synlm/hhmm/rvtl/include/nl-stream.h
new file mode 100644
index 000000000..8f743e12b
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-stream.h
@@ -0,0 +1,240 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NL_STREAM__
+#define _NL_STREAM__
+
+#include "nl-string.h"
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+class IStreamSource {
+ private:
+
+ // Data members...
+ String sBuff; // string buffer, to allow re-reading in disjunctions
+ unsigned int iAvail; // index of where string buffer begins; subtract from indices in IStream to get buffer index
+ FILE* pfSrc; // file pointer
+
+ public:
+
+ IStreamSource ( FILE* pf ) : sBuff(256), iAvail(0), pfSrc(pf) { }
+ IStreamSource ( const char* psz ) : sBuff(psz), iAvail(0), pfSrc() { }
+
+ char* c_array ( ) { return sBuff.c_array(); }
+ char get ( unsigned int i ) { assert(i-iAvail<((unsigned int)(-1))/2); // NOTE: PROBLEM IF ANY ISTREAM FALLS BEHIND BY MORE THAN MAXINT CHARACTERS!
+ int c=0; while(i-iAvail>=sBuff.size()-1){sBuff.add()=((c=getc(pfSrc))==EOF)?'\0':c;} return sBuff.get(i-iAvail); }
+ char& set ( unsigned int i ) { assert(i-iAvail<((unsigned int)(-1))/2); // NOTE: PROBLEM IF ANY ISTREAM FALLS BEHIND BY MORE THAN MAXINT CHARACTERS!
+ int c=0; while(i-iAvail>=sBuff.size()-1){sBuff.add()=((c=getc(pfSrc))==EOF)?'\0':c;} return sBuff.set(i-iAvail); }
+ FILE* getFile ( ) { return pfSrc; }
+
+ // Output method...
+ friend ostream& operator<< ( ostream& os, const IStreamSource& iss ) { return os<<"'"<<iss.sBuff<<"',"<<iss.iAvail<<","<<iss.pfSrc; }
+
+ void compress ( ) { iAvail+=strlen(sBuff.c_array()); sBuff=String(256); } // NOTE: NOT TESTED WITH FILES EXCEEDING MAXINT CHARACTERS! (BUT SHOULD WORK)
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+class IStream {
+ private:
+
+ IStreamSource* psrc; // pointer to source of stream, which contains buffer and file pointer
+ unsigned int iIndex; // stream index; subtract psrc->iAvail to get index in psrc->sBuff
+
+ char get ( unsigned int i ) { return psrc->get(i); }
+ char& set ( unsigned int i ) { return psrc->set(i); }
+ char* c_array ( unsigned int i=0 ) { return &psrc->set(i); }
+
+ public:
+
+ IStream ( ) : psrc(NULL), iIndex(0) { }
+ IStream ( IStreamSource& src, unsigned int i=0 ) : psrc(&src), iIndex(i) { }
+ IStream ( const IStream& is, unsigned int i ) : psrc(is.psrc), iIndex(i) { }
+
+ // Specification methods...
+ IStream& operator= ( const IStream& is ) { psrc=is.psrc; iIndex=is.iIndex; return *this; }
+
+ // Extraction methods...
+ bool operator== ( const IStream& is ) const { return (psrc==is.psrc && iIndex==is.iIndex); }
+ bool operator!= ( const IStream& is ) const { return (psrc!=is.psrc || iIndex!=is.iIndex); }
+ IStreamSource* getSource() { return psrc; }
+
+ // Output method...
+ friend ostream& operator<< ( ostream& os, const IStream& is ) { return os<<is.iIndex<<","<<is.psrc<<","<<*is.psrc; }
+
+ // Match single char...
+ friend IStream operator>> ( IStream is, char& c ) {
+ // Propagate fail...
+ if (IStream()==is) return IStream();
+ c=is.get(is.iIndex);
+ return ('\0'==c) ? IStream() : IStream(is,is.iIndex+1);
+ }
+
+ // Match string delimiter...
+ friend IStream operator>> ( IStream is, const char* psDlm ) {
+ // Propagate fail...
+ if (IStream()==is) { return IStream(); }
+ unsigned int i;
+ // Read in characters until fail or match delimiter...
+ for (i=0; is.get(i+is.iIndex)!='\0' && psDlm[i]!='\0'; i++)
+ if (is.get(i+is.iIndex)!=psDlm[i]) return IStream();
+ return (psDlm[i]=='\0') ? IStream(is,i+is.iIndex) : IStream();
+ }
+
+ // Match anything else followed by zero-terminated string delimiter...
+ template<class X> friend pair<IStream,X*> operator>> ( IStream is, X& x ) { return pair<IStream,X*>(is,&x); }
+ template<class X> friend IStream operator>> ( pair<IStream,X*> is_x, const char* psDlm ) {
+ IStream& is = is_x.first;
+ X& x = *is_x.second;
+ // Propagate fail...
+ if (IStream()==is) { return IStream(); }
+ unsigned int d = strlen(psDlm);
+ // Read in characters until fail or match delimiter...
+ for (unsigned int i=is.iIndex; is.get(i)!='\0'; i++) {
+ // Try to match delimiter ending at current point in stream...
+ if ( i-is.iIndex+1>=d ) {
+ unsigned int j;
+ for (j=0; j<d && is.get(i+1+j-d)==psDlm[j]; j++);
+ ////cerr<<"-->i="<<i<<",j="<<j<<",d="<<d<<",delim='"<<psDlm<<"',curr='"<<is.get(i)<<"' "<<is<<"\n";
+ if (j==d) {
+ is.set(i+1-d)='\0'; x=X(is.c_array(is.iIndex)); is.set(i+1-d)=psDlm[0];
+ return IStream(is,i+1);
+ }
+ }
+ }
+ return IStream();
+ }
+
+ // Match integer followed by zero-terminated string delimiter...
+ friend IStream operator>> ( pair<IStream,int*> is_x, const char* psDlm ) {
+ IStream& is = is_x.first;
+ int& x = *is_x.second;
+ // Propagate fail...
+ if (IStream()==is) return IStream();
+ unsigned int d = strlen(psDlm);
+ // Read in characters until fail or match delimiter...
+ for (unsigned int i=is.iIndex; is.get(i)!='\0'; i++) {
+ // Try to match delimiter ending at current point in stream...
+ if ( i+1>=is.iIndex+d ) {
+ unsigned int j;
+ for (j=0; j<d && is.get(i+1+j-d)==psDlm[j]; j++);
+ if (j==d) {
+ is.set(i+1-d)='\0'; x=atoi(is.c_array(is.iIndex)); is.set(i+1-d)=psDlm[0];
+ return IStream(is,i+1);
+ }
+ }
+ }
+ return IStream();
+ }
+
+ // Match unsigned int followed by zero-terminated string delimiter...
+ friend IStream operator>> ( pair<IStream,unsigned int*> is_x, const char* psDlm ) {
+ IStream& is = is_x.first;
+ unsigned int& x = *is_x.second;
+ // Propagate fail...
+ if (IStream()==is) return IStream();
+ unsigned int d = strlen(psDlm);
+ // Read in characters until fail or match delimiter...
+ for (unsigned int i=is.iIndex; is.get(i)!='\0'; i++) {
+ // Try to match delimiter ending at current point in stream...
+ if ( i+1>=is.iIndex+d ) {
+ unsigned int j;
+ for (j=0; j<d && is.get(i+1+j-d)==psDlm[j]; j++);
+ if (j==d) {
+ is.set(i+1-d)='\0'; x=atoi(is.c_array(is.iIndex)); is.set(i+1-d)=psDlm[0];
+ return IStream(is,i+1);
+ }
+ }
+ }
+ return IStream();
+ }
+
+ // Match float followed by zero-terminated string delimiter...
+ friend IStream operator>> ( pair<IStream,float*> is_x, const char* psDlm ) {
+ IStream& is = is_x.first;
+ float& x = *is_x.second;
+ // Propagate fail...
+ if (IStream()==is) return IStream();
+ unsigned int d = strlen(psDlm);
+ // Read in characters until fail or match delimiter...
+ for (unsigned int i=is.iIndex; is.get(i)!='\0'; i++) {
+ // Try to match delimiter ending at current point in stream...
+ if ( i+1>=is.iIndex+d ) {
+ unsigned int j;
+ for (j=0; j<d && is.get(i+1+j-d)==psDlm[j]; j++);
+ if (j==d) {
+ is.set(i+1-d)='\0'; x=atof(is.c_array(is.iIndex)); is.set(i+1-d)=psDlm[0];
+ return IStream(is,i+1);
+ }
+ }
+ }
+ return IStream();
+ }
+
+ // Match double followed by zero-terminated string delimiter...
+ friend IStream operator>> ( pair<IStream,double*> is_x, const char* psDlm ) {
+ IStream& is = is_x.first;
+ double& x = *is_x.second;
+ // Propagate fail...
+ if (IStream()==is) return IStream();
+ unsigned int d = strlen(psDlm);
+ // Read in characters until fail or match delimiter...
+ for (unsigned int i=is.iIndex; is.get(i)!='\0'; i++) {
+ // Try to match delimiter ending at current point in stream...
+ if ( i+1>=is.iIndex+d ) {
+ unsigned int j;
+ for (j=0; j<d && is.get(i+1+j-d)==psDlm[j]; j++);
+ if (j==d) {
+ is.set(i+1-d)='\0'; x=atof(is.c_array(is.iIndex)); is.set(i+1-d)=psDlm[0];
+ return IStream(is,i+1);
+ }
+ }
+ }
+ return IStream();
+ }
+
+ // Match void pointer followed by zero-terminated string delimiter...
+ friend IStream operator>> ( pair<IStream,void**> is_x, const char* psDlm ) {
+ IStream& is = is_x.first;
+ // Propagate fail...
+ if (IStream()==is) return IStream();
+ unsigned int d = strlen(psDlm);
+ // Read in characters until fail or match delimiter...
+ for (unsigned int i=is.iIndex; is.get(i)!='\0'; i++) {
+ // Try to match delimiter ending at current point in stream...
+ if ( i+1>=is.iIndex+d ) {
+ unsigned int j;
+ for (j=0; j<d && is.get(i+1+j-d)==psDlm[j]; j++);
+ if (j==d) return IStream(is,i+1);
+ }
+ }
+ return IStream();
+ }
+};
+
+
+#endif //_NL_STREAM__
+
diff --git a/synlm/hhmm/rvtl/include/nl-string.h b/synlm/hhmm/rvtl/include/nl-string.h
new file mode 100644
index 000000000..ce3f68aa3
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-string.h
@@ -0,0 +1,213 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NL_STRING__
+#define _NL_STRING__
+
+#include "nl-array.h"
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <iostream>
+#include <string>
+using namespace std;
+
+////////////////////////////////////////////////////////////////////////////////
+
+
+// OBSOLETE!
+class StringInput {
+ private:
+ char* psIn;
+ static char* PS_EOS;
+ public:
+
+ static const StringInput SI_EOS;
+ static Array<char> strTemp;
+
+ StringInput ( ) : psIn(NULL) { }
+ StringInput ( char* ps ) : psIn(ps) { }
+ ////StringInput ( String& s ) : psIn(s.c_array()) { }
+
+ char& operator[] ( int i ) { assert(psIn); return psIn[i]; }
+ const char operator[] ( int i ) const { assert(psIn); return psIn[i]; }
+ StringInput& operator++ ( ) { assert(psIn); psIn++; return *this; }
+ StringInput operator+ ( int i ) { assert(psIn); return StringInput(psIn+i); }
+ const StringInput operator+ ( int i ) const { assert(psIn); return StringInput(psIn+i); }
+ bool operator== ( const StringInput& si ) const { return psIn==si.psIn; }
+ bool operator!= ( const StringInput& si ) const { return psIn!=si.psIn; }
+
+ //operator bool() { return psIn!=NULL; }
+
+ char* c_str() { assert(psIn); return psIn; }
+
+ friend ostream& operator<< ( ostream& os, const StringInput& si ) { return os<<si.psIn; }
+
+ friend StringInput operator>> ( StringInput psIn, const char* psDlm ) {
+ if (StringInput(NULL)==psIn) return psIn;
+ int i;
+ for (i=0; psIn[i]!='\0' && psDlm[i]!='\0'; i++)
+ if(psIn[i]!=psDlm[i]) return StringInput(NULL); //psIn;
+ return (psDlm[i]!='\0') ? StringInput(NULL) : (psIn[i]!='\0') ? psIn+i : SI_EOS;
+ }
+
+ friend pair<StringInput,int*> operator>> ( StringInput ps, int& n ) { return pair<StringInput,int*>(ps,&n); }
+ friend StringInput operator>> ( pair<StringInput,int*> delimbuff, const char* psDlm ) {
+ if (StringInput(NULL)==delimbuff.first) return delimbuff.first;
+ ///int i; for(i=0;psIn[i]!='\0';i++) if(psIn[i]==psDlm[i]) return psIn; return psIn+i;
+ int j=0;
+ StringInput psIn = delimbuff.first;
+ if(psDlm[0]=='\0') { *delimbuff.second=atoi(psIn.c_str()); return psIn+strlen(psIn.c_str()); }
+ for(int i=0;psIn[i]!='\0';i++) {
+ if(psIn[i]==psDlm[j]) j++;
+ else j=0;
+ strTemp[i]=psIn[i];
+ if(j==int(strlen(psDlm))) { strTemp[i+1-j]='\0'; *delimbuff.second=atoi(strTemp.c_array()); return psIn+i+1;}
+ }
+ return NULL; //psIn;
+ }
+
+ friend pair<StringInput,unsigned int*> operator>> ( StringInput ps, unsigned int& n ) { return pair<StringInput,unsigned int*>(ps,&n); }
+ friend StringInput operator>> ( pair<StringInput,unsigned int*> delimbuff, const char* psDlm ) {
+ if (StringInput(NULL)==delimbuff.first) return delimbuff.first;
+ ///int i; for(i=0;psIn[i]!='\0';i++) if(psIn[i]==psDlm[i]) return psIn; return psIn+i;
+ int j=0;
+ StringInput psIn = delimbuff.first;
+ if(psDlm[0]=='\0') { *delimbuff.second=atoi(psIn.c_str()); return psIn+strlen(psIn.c_str()); }
+ for(int i=0;psIn[i]!='\0';i++) {
+ if(psIn[i]==psDlm[j]) j++;
+ else j=0;
+ strTemp[i]=psIn[i];
+ if(j==int(strlen(psDlm))) { strTemp[i+1-j]='\0'; *delimbuff.second=atoi(strTemp.c_array()); return psIn+i+1;}
+ }
+ return NULL; //psIn;
+ }
+
+ friend pair<StringInput,double*> operator>> ( StringInput ps, double& d ) { return pair<StringInput,double*>(ps,&d); }
+ friend StringInput operator>> ( pair<StringInput,double*> delimbuff, const char* psDlm ) {
+ if (StringInput(NULL)==delimbuff.first) return delimbuff.first;
+ ///int i; for(i=0;psIn[i]!='\0';i++) if(psIn[i]==psDlm[i]) return psIn; return psIn+i;
+ int j=0;
+ StringInput psIn = delimbuff.first;
+ if(psDlm[0]=='\0') { *delimbuff.second=atof(psIn.c_str()); return psIn+strlen(psIn.c_str()); }
+ for(int i=0;psIn[i]!='\0';i++) {
+ if(psIn[i]==psDlm[j]) j++;
+ else j=0;
+ strTemp[i]=psIn[i];
+ if(j==int(strlen(psDlm))) { strTemp[i+1-j]='\0'; *delimbuff.second=atof(strTemp.c_array()); return psIn+i+1;}
+ }
+ return NULL; //psIn;
+ }
+};
+char* StringInput::PS_EOS = strdup("<EOS>");
+const StringInput StringInput::SI_EOS = StringInput::PS_EOS;
+Array<char> StringInput::strTemp ( 100 );
+
+
+/*
+template<class T>
+pair<StringInput,T*> operator>> ( StringInput si, T& t ) {
+ return pair<StringInput,T*>(si,&t);
+}
+*/
+
+/*
+template<class T>
+class DelimiterBuffer {
+ //private:
+ public:
+ char* psIn;
+ T& tVar;
+ public:
+ DelimiterBuffer<T> ( char* ps, T& t ) : psIn(ps), tVar(t) { }
+ //char* operator>> ( const char* psDlm ) {
+ // int j=0;
+ // for(int i=0;psIn[i]!='\0';i++) {
+ // if(psIn[i]==psDlm[j]) j++;
+ // if(j==strlen(psDlm)) { psIn[i+1-j]='\0'; psIn>>tVar; return psIn+i;}
+ // }
+ // return psIn;
+ //}
+};
+*/
+
+
+////////////////////////////////////////////////////////////////////////////////
+
+class String : public Array<char> {
+ private:
+ static Array<char> strTemp;
+ public:
+ // Constructor / destructor methods...
+ String ( ) : Array<char>(1) { operator[](0)='\0'; }
+ String ( const String& str ) : Array<char>(str) { }
+ explicit String ( unsigned int i ) : Array<char>(i) { operator[](0)='\0'; }
+ explicit String ( const char* ps ) : Array<char>(strlen(ps)) { for(unsigned int i=0; ps[i]!='\0'; i++) Array<char>::add()=ps[i]; Array<char>::add()='\0'; }
+ // Specification methods...
+ String& ensureCapacity ( unsigned int i ) { return static_cast<String&> ( Array<char>::ensureCapacity(i) ); }
+ String& clear ( ) { Array<char>::clear(); operator[](0)='\0'; return *this; }
+ char& add ( ) { Array<char>::add()='\0'; return set(size()-2); }
+ friend String& operator<< ( String& str, double d ) { str.addReserve(20); uint32_t i=str.size();
+ uint32_t j=sprintf(str.c_array()+i-1,"%g",d); assert(j<20);
+ str[i+j-1]='\0'; return str; } //str[i+j]=str[i+j]; return str; }
+ friend String& operator<< ( String& str, const string& s ) { return str<<s.c_str(); } // NOTE: SECOND ARG IS STDLIB STRING!
+ friend String& operator<< ( String& str, const String& s ) { return str<<s.c_array(); }
+ friend String& operator<< ( String& str, const char* ps ) { unsigned int j=str.size()-1; unsigned int i=0;
+ for(i=0;ps[i]!='\0';i++) str[j+i]=ps[i];
+ str[j+i]='\0'; return str; }
+ Array<char*>& split ( Array<char*>& aps, const char* psDlm ) { aps.clear(); char* psT=NULL;
+ for(int i=0;true;i++)
+ { char* z=strtok_r( (0==i)?c_array():NULL, psDlm, &psT );
+ if (!z) break;
+ aps[i]=z; }
+ return aps; }
+ // Input / output methods...
+ friend ostream& operator<< ( ostream& os, const String& str ) { return os<<str.c_array(); }
+
+ //friend explicit operator int ( const String& s ) { return atoi(s.c_array()); }
+
+ friend pair<StringInput,String*> operator>> ( const StringInput ps, String& s ) { return pair<StringInput,String*>(ps,&s); }
+ friend StringInput operator>> ( pair<StringInput,String*> delimbuff, const char* psDlm ) {
+ if (StringInput(NULL)==delimbuff.first) return delimbuff.first;
+ ////assert(*delimbuff.second<domain.getSize());
+ int j=0;
+ StringInput psIn = delimbuff.first;
+ if(psDlm[0]=='\0') { *delimbuff.second=String(psIn.c_str()); return psIn+strlen(psIn.c_str()); }
+ for(int i=0;psIn[i]!='\0';i++) {
+ if(psIn[i]==psDlm[j]) j++;
+ else j=0;
+ strTemp[i]=psIn[i];
+ if(j==int(strlen(psDlm))) { strTemp[i+1-j]='\0'; *delimbuff.second=String(strTemp.c_array()); return psIn+i+1;}
+ }
+ return NULL; //psIn;
+ }
+};
+Array<char> String::strTemp ( 100 );
+
+
+
+
+#endif //_NL_STRING__
+
diff --git a/synlm/hhmm/rvtl/include/nl-stringindex.h b/synlm/hhmm/rvtl/include/nl-stringindex.h
new file mode 100644
index 000000000..22931f081
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-stringindex.h
@@ -0,0 +1,61 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _STRING_INDEX__
+#define _STRING_INDEX__
+
+#include <cassert>
+#include <string>
+using std::string;
+#include <map>
+using std::map;
+
+class StringIndex{
+
+ private:
+
+ // Data members...
+ map <string, int> msi;
+ map <int, string> mis;
+ int maxIndex;
+
+ public:
+
+ // Constructor / destructor methods...
+ StringIndex() { maxIndex=0; }
+
+ // Specification methods...
+ int addIndex (const char* ps) { assert(ps!=NULL); return addIndex(string(ps)); }
+ int addIndex (const string& s) { if(msi.end()==msi.find(s)){msi[s]=maxIndex;mis[maxIndex]=s;maxIndex++;} return msi[s]; }
+ void clear ( ) { msi.clear(); mis.clear(); maxIndex=0; }
+ // Extraction methods...
+ int getSize ( ) const { return maxIndex; }
+ int getIndex (const char* ps) const { assert(ps!=NULL); return getIndex(string(ps)); }
+ int getIndex (const string& s) const { assert(msi.end()!=msi.find(s));
+ return msi.find(s)->second; }
+ const string& getString (int i) const { assert(mis.end()!=mis.find(i));
+ return mis.find(i)->second; }
+};
+
+
+#endif // _STRING_INDEX__
diff --git a/synlm/hhmm/rvtl/include/nl-tetrahex.h b/synlm/hhmm/rvtl/include/nl-tetrahex.h
new file mode 100644
index 000000000..d77e4f471
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-tetrahex.h
@@ -0,0 +1,56 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+/***********************************************
+ * nl-tetrahex.h
+ * a little header with some base conversion stuff
+ * so that we can represent base 16, 32 or 64 with
+ * one character.
+ * 0, 1, 2, ..., 9, A, B, ..., Y, Z, a, b, ..., z, {, |
+ * 0 1 2 9 10 11 34 35 36 37 61 62 63
+ ***********************************************/
+
+#include <cassert>
+
+#ifndef NL_TETRAHEX
+#define NL_TETRAHEX
+
+char intToTetraHex(int i) {
+ assert(i < 64 && i >= 0);
+ if(i < 10) return (i + '0');
+ if(i > 35) return (i + 'a' - 36);
+ return (i + 'A' - 10);
+}
+
+int tetraHexToInt(char c) {
+ if(c < '0')
+ fprintf(stderr, "Bad c: %d\n",(int)c);
+ assert(c >= '0');
+ if(c - '0' < 10) return (int)(c-'0');
+ assert(c >= 'A');
+ if(c - 'A' < 26) return (int)(c-'A'+10);
+ assert(c >= 'a' && c < '}');
+ return (int)(c-'a'+36);
+}
+
+#endif
diff --git a/synlm/hhmm/rvtl/include/nl-timer.h b/synlm/hhmm/rvtl/include/nl-timer.h
new file mode 100644
index 000000000..3fa7c5387
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-timer.h
@@ -0,0 +1,52 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _NL_TIMER__
+#define _NL_TIMER__
+
+#include <sys/time.h>
+
+class Timer {
+ private:
+ struct timeval kept;
+ struct timeval beg;
+ public:
+ Timer ( ) { gettimeofday(&beg,NULL); kept.tv_sec=0; kept.tv_usec=0; }
+ void start ( ) { gettimeofday(&beg,NULL); }
+ void pause ( ) {
+ struct timeval now; gettimeofday(&now,NULL);
+ kept.tv_sec += now.tv_sec - beg.tv_sec;
+ kept.tv_usec += (now.tv_usec - beg.tv_usec)%1000000;
+ kept.tv_sec += int((now.tv_usec - beg.tv_usec)/1000000);
+ }
+ double elapsed ( ) { // in milliseconds.
+ return (double(kept.tv_sec)*1000.0 + double(kept.tv_usec)/1000.0);
+ //struct timeval end; gettimeofday(&end,NULL);
+ //double beg_time_s = (double) beg.tv_sec + (double) ((double)beg.tv_usec / 1000000.0);
+ //double end_time_s = (double) end.tv_sec + (double) ((double)end.tv_usec / 1000000.0);
+ //return ( (end_time_s - beg_time_s) * 1000.0 );
+ }
+};
+
+#endif //_NL_TIMER__
+
diff --git a/synlm/hhmm/rvtl/include/nl-tree.h b/synlm/hhmm/rvtl/include/nl-tree.h
new file mode 100644
index 000000000..102c5c0b3
--- /dev/null
+++ b/synlm/hhmm/rvtl/include/nl-tree.h
@@ -0,0 +1,43 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+template<class B, class T>
+class Tree : public T {
+ private:
+ // Data members...
+ SimpleHash<B,Tree<B,T>*> apt;
+ static const Tree<B,T> tDummy;
+ public:
+ // Constructor / destructor methods...
+ ~Tree ( ) { for(typename SimpleHash<B,Tree<B,T>*>::iterator i=apt.begin(); i!=apt.end(); i++) delete i->second; }
+ Tree ( ) { }
+// Tree ( const Tree<T>& t ) { ptL = (t.ptL) ? new Tree<T>(*t.ptL) : NULL;
+// ptR = (t.ptR) ? new Tree<T>(*t.ptR) : NULL; }
+ // Extraction methods...
+ const bool isTerm ( ) const { return (apt.empty()); }
+ const Tree<B,T>& getBranch ( const B& b ) const { return (apt.find(b)!=apt.end()) ? *apt.find(b)->second : tDummy; }
+ // Specification methods...
+ Tree<B,T>& setBranch ( const B& b ) { if (apt.find(b)==apt.end()) apt[b]=new Tree<B,T>(); return *apt[b]; }
+};
+template<class B, class T> const Tree<B,T> Tree<B,T>::tDummy;// = Tree<B,T>();
+
diff --git a/synlm/hhmm/wsjparse/include/HHMMLangModel-gf.h b/synlm/hhmm/wsjparse/include/HHMMLangModel-gf.h
new file mode 100644
index 000000000..3987d6969
--- /dev/null
+++ b/synlm/hhmm/wsjparse/include/HHMMLangModel-gf.h
@@ -0,0 +1,405 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#include "nl-cpt.h"
+#include "TextObsVars.h"
+
+char psX[]="";
+char psSlash[]="/";
+char psComma[]=",";
+char psSemi[]=";";
+char psSemiSemi[]=";;";
+char psDashDiamondDash[]="-<>-";
+char psTilde[]="~";
+//char psBar[]="|";
+char psLBrace[]="{";
+char psRBrace[]="}";
+char psLangle[]="<";
+char psRangle[]=">";
+char psLbrack[]="[";
+char psRbrack[]="]";
+
+const char* BEG_STATE = "-/-;-/-;-/-;-/-;-";
+const char* END_STATE = "eos/eos;-/-;-/-;-/-;-";
+
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Random Variables
+//
+////////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////// Simple Variables
+
+//// B: boolean
+DiscreteDomain<char> domB;
+class B : public DiscreteDomainRV<char,domB> {
+ public:
+ B ( ) : DiscreteDomainRV<char,domB> ( ) { }
+ B ( const char* ps ) : DiscreteDomainRV<char,domB> ( ps ) { }
+};
+const B B_0 ("0");
+const B B_1 ("1");
+
+
+//// D: depth (input only, to HHMM models)...
+DiscreteDomain<char> domD;
+class D : public DiscreteDomainRV<char,domD> {
+ public:
+ D ( ) : DiscreteDomainRV<char,domD> ( ) { }
+ D ( int i ) : DiscreteDomainRV<char,domD> ( i ) { }
+ D ( const char* ps ) : DiscreteDomainRV<char,domD> ( ps ) { }
+};
+const D D_0("0");
+const D D_1("1");
+const D D_2("2");
+const D D_3("3");
+const D D_4("4");
+const D D_5("5");
+
+
+//// G: grammatical constituent category
+DiscreteDomain<int> domG;
+class G : public DiscreteDomainRV<int,domG> {
+ private:
+ static SimpleHash<G,B> hIsTerm;
+ void calcDetModels ( string s ) {
+ if (!hIsTerm.contains(*this)) {
+ hIsTerm.set(*this) = (('A'<=s.c_str()[0] && s.c_str()[0]<='Z') || s.find('_')!=string::npos) ? B_0 : B_1;
+ }
+ }
+ public:
+ G ( ) : DiscreteDomainRV<int,domG> ( ) { }
+ template<class P>
+ G ( const G::ArrayIterator<P>& it ) { setVal(it); }
+ G ( const char* ps ) : DiscreteDomainRV<int,domG> ( ps ) { calcDetModels(ps); }
+ B isTerm ( ) const { return hIsTerm.get(*this); }
+ friend pair<StringInput,G*> operator>> ( StringInput si, G& g ) { return pair<StringInput,G*>(si,&g); }
+ friend StringInput operator>> ( pair<StringInput,G*> si_g, const char* psD ) {
+ if ( si_g.first == NULL ) return NULL;
+ StringInput si=si_g.first>>(DiscreteDomainRV<int,domG>&)*si_g.second>>psD;
+ si_g.second->calcDetModels(si_g.second->getString()); return si; }
+};
+SimpleHash<G,B> G::hIsTerm;
+const G G_NIL("-");
+const G G_SUB("-"); // G_SUB = G_NIL
+const G G_TOP("DISC");
+const G G_RST("REST");
+
+typedef G C;
+
+
+//// A: added feature tags for underspec cats
+DiscreteDomain<char> domA;
+class A : public DiscreteDomainRV<char,domA> {
+ public:
+ A ( ) : DiscreteDomainRV<char,domA> ( ) { }
+ A ( const char* ps ) : DiscreteDomainRV<char,domA> ( ps ) { }
+};
+const A A_NIL ("-");
+
+
+//////////////////////////////////////// Formally Joint Variables Implemented as Simple Variables
+
+//// Rd: final-state (=FGA)...
+DiscreteDomain<int> domRd;
+class Rd : public DiscreteDomainRV<int,domRd> {
+ private:
+ static SimpleHash<Rd,B> hToB;
+ static SimpleHash<Rd,G> hToG;
+ static SimpleHash<G,Rd> hFromG;
+ void calcDetModels ( string s ) {
+ if (!hToB.contains(*this)) {
+ size_t i=s.find(',');
+ assert(i!=string::npos);
+ hToB.set(*this) = B(s.substr(0,i).c_str());
+ }
+ if (!hToG.contains(*this)) {
+ size_t i=s.find(',');
+ assert(i!=string::npos);
+ hToG.set(*this) = G(s.substr(i+1).c_str());
+ if ( '1'==s[0] )
+ hFromG.set(G(s.substr(i+1).c_str())) = *this;
+ }
+ }
+ public:
+ Rd ( ) : DiscreteDomainRV<int,domRd> ( ) { }
+ Rd ( const DiscreteDomainRV<int,domRd>& rv ) : DiscreteDomainRV<int,domRd> ( rv ) { }
+ Rd ( const char* ps ) : DiscreteDomainRV<int,domRd> ( ps ) { calcDetModels(ps); }
+ Rd ( const G& g ) { *this = hFromG.get(g); }
+ B getB ( ) const { return hToB.get(*this); }
+ G getG ( ) const { return hToG.get(*this); }
+ static Rd getRd ( G g ) { return hFromG.get(g); }
+ friend pair<StringInput,Rd*> operator>> ( StringInput si, Rd& m ) { return pair<StringInput,Rd*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,Rd*> si_m, const char* psD ) {
+ if ( si_m.first == NULL ) return NULL;
+ StringInput si=si_m.first>>(DiscreteDomainRV<int,domRd>&)*si_m.second>>psD;
+ si_m.second->calcDetModels(si_m.second->getString()); return si; }
+};
+SimpleHash<Rd,B> Rd::hToB;
+SimpleHash<Rd,G> Rd::hToG;
+SimpleHash<G,Rd> Rd::hFromG;
+const Rd Rd_INC("0,-"); // BOT
+const Rd Rd_SUB("1,-"); // TOP
+
+
+//////////////////////////////////////// Formally and Implementationally Joint Variables
+
+//// Sd: store element...
+class Sd : public DelimitedJoint2DRV<psX,G,psSlash,G,psX> {
+ typedef DelimitedJoint2DRV<psX,G,psSlash,G,psX> Parent;
+ public:
+ Sd ( ) : Parent() { }
+ template<class P>
+ Sd ( const Sd::ArrayIterator<P>& it ) { setVal(it); }
+ Sd ( const G& gia, const G& giw ) : Parent(gia,giw) { }
+ const G& getAct ( ) const { return first; }
+ const G& getAwa ( ) const { return second; }
+ template<class P> class ArrayIterator : public Parent::ArrayIterator<P> {
+ public:
+ G::ArrayIterator<P>& setAct ( ) { return Parent::ArrayIterator<P>::first; }
+ G::ArrayIterator<P>& setAwa ( ) { return Parent::ArrayIterator<P>::second; }
+ };
+ friend pair<StringInput,Sd*> operator>> ( StringInput si, Sd& sd ) { return pair<StringInput,Sd*>(si,&sd); }
+ friend StringInput operator>> ( pair<StringInput,Sd*> si_sd, const char* psD ) {
+ if ( si_sd.first == NULL ) return NULL;
+ StringInput si = si_sd.first>>*(Parent*)si_sd.second>>psD;
+ return si;
+ }
+};
+const Sd Sd_TOP(G_TOP,G_RST);
+const Sd Sd_SUB(G_SUB,G_SUB);
+
+
+//// R: collection of syntactic variables at all depths in each `reduce' phase...
+typedef DelimitedJointArrayRV<4,psSemi,Rd> R;
+
+
+//// S: collection of syntactic variables at all depths in each `shift' phase...
+class S : public DelimitedJoint2DRV<psX,DelimitedJointArrayRV<4,psSemi,Sd>,psSemi,G,psX> {
+ public:
+ operator G() const { return ( ( (second != G_SUB) ? second :
+ (first.get(3)!=Sd_SUB) ? first.get(3).second :
+ (first.get(2)!=Sd_SUB) ? first.get(2).second :
+ (first.get(1)!=Sd_SUB) ? first.get(1).second :
+ first.get(0).second ) ); }
+ bool compareFinal ( const S& s ) const { return(*this==s); }
+};
+
+
+//// Y: the set of all (marginalized) reduce and (modeled) shift variables in the HHMM...
+class Y : public DelimitedJoint2DRV<psX,R,psDashDiamondDash,S,psX>
+{ public:
+ operator R() const {return first;}
+ operator S() const {return second;}
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Models
+//
+////////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////// "Wrapper" models for individual RVs...
+
+//// Model of Rd given D and Rd and Sd (from above) and Sd (from previous)
+class RdModel {
+ private:
+ HidVarCPT4DModel<Rd,D,G,G,LogProb> mRd; // Reduction model: F giv D, G (active cat from prev), G (awaited cat from above) (assume prev awa = reduc)
+ static const HidVarCPT1DModel<Rd,LogProb> mRd_INC; // Fixed Rd_INC model.
+ static const HidVarCPT1DModel<Rd,LogProb> mRd_SUB; // Fixed Rd_SUB model.
+ public:
+ //static bool Rd_ROOT_OBS;
+ LogProb setIterProb ( Rd::ArrayIterator<LogProb>& rd, const D& d, const Rd& rdD, const Sd& sdP, const Sd& sdU, bool b1, int& vctr ) const {
+ LogProb pr;
+ if ( rdD==Rd_SUB && (sdP.getAwa()==G_SUB) ) {
+ // _/sub 1,sub (bottom) case...
+ pr = mRd_SUB.setIterProb(rd,vctr);
+ }
+ else if ( rdD==Rd_SUB && sdP.getAwa().isTerm()==B_1 ) {
+ // _/term 1,sub (middle) case...
+ pr = mRd.setIterProb(rd,d,sdU.getAwa(),sdP.getAct(),vctr);
+ if ( vctr<-1 && pr==LogProb() ) cerr<<"\nERROR: no condition F "<<d<<" "<<sdU.getAwa()<<" "<<sdP.getAct()<<"\n\n";
+ }
+ else {
+ // _/noterm or 0,_ (top) case, otherwise...
+ pr = mRd_INC.setIterProb(rd,vctr);
+ }
+ // Iterate again if result doesn't match root observation...
+ if ( vctr>=-1 && d==D_1 && b1!=(Rd(rd).getB()==B_1) ) pr=LogProb();
+ //cerr<<" Rd "<<d<<" "<<rdD<<" "<<sdP<<" "<<sdU<<" : "<<rd<<" = "<<pr<<" ("<<vctr<<")\n";
+ return pr;
+ }
+ friend pair<StringInput,RdModel*> operator>> ( StringInput si, RdModel& m ) { return pair<StringInput,RdModel*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,RdModel*> si_m, const char* psD ) {
+ StringInput si;
+ return ( (si=si_m.first>>"F ">>si_m.second->mRd>>psD)!=NULL ) ? si : StringInput(NULL);
+ }
+};
+const HidVarCPT1DModel<Rd,LogProb> RdModel::mRd_INC(Rd_INC);
+const HidVarCPT1DModel<Rd,LogProb> RdModel::mRd_SUB(Rd_SUB);
+
+
+//// Model of Sd given D and Rd and Rd and Sd(from prev) and Sd(from above)
+class SdModel {
+ public:
+ HidVarCPT3DModel<G,D,G,LogProb> mGe; // Expansion model of G given D, G (from above)
+ private:
+ HidVarCPT4DModel<G,D,G,G,LogProb> mGtaa; // Active transition model of G (active) given D, G (above awa), G (from reduction)
+ HidVarCPT4DModel<G,D,G,G,LogProb> mGtaw; // Active transition model of G (awaited) given D, G (prev act), G (from reduction)
+ HidVarCPT4DModel<G,D,G,G,LogProb> mGtww; // Awaited transition model of G (awaited) given D, G (prev awa), G (reduction below)
+ static const HidVarCPT1DModel<G,LogProb> mG_SUB; // Fixed G_SUB model
+ static HidVarCPT2DModel<G,G,LogProb> mG_CPY; // Cached G_CPY model -- WARNING: STATIC NON-CONST is not thread safe!
+ public:
+ LogProb setIterProb ( Sd::ArrayIterator<LogProb>& sd, const D& d, const Rd& rdD, const Rd& rd, const Sd& sdP, const Sd& sdU, int& vctr ) const {
+ LogProb pr,p;
+ if (rdD.getB()!=B_0) {
+ if (rd.getB()!=B_0 || rd.getG()!=G_NIL) { //if (rd!=Rd_INC) {
+ if (rd.getB()==B_1) {
+ if (sdU.getAwa().isTerm()==B_1 || sdU==Sd_SUB) {
+ // 1,g 1,g (expansion to sub) case:
+ pr = mG_SUB.setIterProb(sd.setAct(),vctr);
+ pr *= mG_SUB.setIterProb(sd.setAwa(),vctr);
+ }
+ else {
+ // 1,g 1,g (expansion) case:
+ pr = p = mGe.setIterProb(sd.setAct() ,d,sdU.getAwa(),vctr);
+ if ( vctr<-1 && p==LogProb() ) cerr<<"\nERROR: no condition Ge "<<d<<" "<<sdU.getAwa()<<"\n\n";
+ if ( !mG_CPY.contains(G(sd.setAct())) ) mG_CPY.setProb(G(sd.setAct()),G(sd.setAct()))=1.0;
+ pr *= p = mG_CPY.setIterProb(sd.setAwa(),G(sd.setAct()),vctr);
+ }
+ }
+ else {
+ // 1,_ 0,g (active transition following reduction) case:
+ pr = p = mGtaa.setIterProb(sd.setAct(),d,sdU.getAwa(),rd.getG(),vctr);
+ if ( vctr<-1 && p==LogProb() ) cerr<<"\nERROR: no condition Gtaa "<<d<<" "<<sdU.getAwa()<<" "<<rd.getG()<<" ("<<rd<<")\n\n";
+ pr *= p = mGtaw.setIterProb(sd.setAwa(),d,G(sd.setAct()),rd.getG(),vctr);
+ if ( vctr<-1 && p==LogProb() ) cerr<<"\nERROR: no condition Gtaw "<<d<<" "<<G(sd.setAct())<<" "<<rd.getG()<<"\n\n";
+ }
+ }
+ else {
+ // 1,g 0,- (awaited transition without reduction) case:
+ if ( !mG_CPY.contains(sdP.getAct()) ) mG_CPY.setProb(sdP.getAct(),sdP.getAct())=1.0;
+ pr = p = mG_CPY.setIterProb(sd.setAct(),sdP.getAct(),vctr);
+ pr *= p = mGtww.setIterProb(sd.setAwa(),d,sdP.getAwa(),rdD.getG(),vctr);
+ if ( vctr<-1 && p==LogProb() ) cerr<<"\nERROR: no condition Gtww "<<d<<" "<<sdP.getAwa()<<" "<<rdD.getG()<<"\n\n";
+ }
+ }
+ else {
+ // 0,- _ (copy) case:
+ if ( !mG_CPY.contains(sdP.getAct()) ) mG_CPY.setProb(sdP.getAct(),sdP.getAct() )=1.0;
+ pr = p = mG_CPY.setIterProb(sd.setAct(), sdP.getAct(), vctr);
+ if ( !mG_CPY.contains(sdP.getAwa()) ) mG_CPY.setProb(sdP.getAwa(),sdP.getAwa())=1.0;
+ pr *= p = mG_CPY.setIterProb(sd.setAwa(),sdP.getAwa(),vctr);
+ }
+ //cerr<<" Sd "<<d<<" "<<rdD<<" "<<rd<<" "<<sdP<<" "<<sdU<<" : "<<sd<<" = "<<pr<<" ("<<vctr<<")\n";
+ return pr;
+ }
+ friend pair<StringInput,SdModel*> operator>> ( StringInput si, SdModel& m ) { return pair<StringInput,SdModel*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,SdModel*> si_m, const char* psD ) {
+ StringInput si;
+ return ( (si=si_m.first>>"Ge " >>si_m.second->mGe >>psD)!=NULL ||
+ (si=si_m.first>>"Gtaa ">>si_m.second->mGtaa>>psD)!=NULL ||
+ (si=si_m.first>>"Gtaw ">>si_m.second->mGtaw>>psD)!=NULL ||
+ (si=si_m.first>>"Gtww ">>si_m.second->mGtww>>psD)!=NULL ) ? si : StringInput(NULL);
+ }
+};
+const HidVarCPT1DModel<G,LogProb> SdModel::mG_SUB(G_SUB);
+HidVarCPT2DModel<G,G,LogProb> SdModel::mG_CPY;
+
+
+//////////////////////////////////////// Joint models...
+
+//////////////////// Reduce phase...
+
+//// Model of R given S
+class RModel : public SingleFactoredModel<RdModel> {
+ public:
+ LogProb setIterProb ( R::ArrayIterator<LogProb>& r, const S& sP, bool b1, int& vctr ) const {
+ const RdModel& mRd = getM1();
+ LogProb pr;
+ pr = mRd.setIterProb ( r.set(4-1), 4, Rd(sP.second) , sP.first.get(4-1), sP.first.get(3-1), b1, vctr );
+ pr *= mRd.setIterProb ( r.set(3-1), 3, Rd(r.get(4-1)), sP.first.get(3-1), sP.first.get(2-1), b1, vctr );
+ pr *= mRd.setIterProb ( r.set(2-1), 2, Rd(r.get(3-1)), sP.first.get(2-1), sP.first.get(1-1), b1, vctr );
+ pr *= mRd.setIterProb ( r.set(1-1), 1, Rd(r.get(2-1)), sP.first.get(1-1), Sd_TOP , b1, vctr );
+ return pr;
+ }
+};
+
+
+//////////////////// Shift phase...
+
+//// Model of S given R and S
+class SModel : public SingleFactoredModel<SdModel> {
+ private:
+ static const HidVarCPT1DModel<G,LogProb> mG_SUB;
+ public:
+ LogProb setIterProb ( S::ArrayIterator<LogProb>& s, const R::ArrayIterator<LogProb>& r, const S& sP, int& vctr ) const {
+ const SdModel& mSd = getM1();
+ LogProb pr,p;
+ pr = mSd.setIterProb ( s.first.set(1-1), 1, Rd(r.get(2-1)), Rd(r.get(1-1)), sP.first.get(1-1), Sd_TOP , vctr );
+ pr *= mSd.setIterProb ( s.first.set(2-1), 2, Rd(r.get(3-1)), Rd(r.get(2-1)), sP.first.get(2-1), Sd(s.first.set(1-1)), vctr );
+ pr *= mSd.setIterProb ( s.first.set(3-1), 3, Rd(r.get(4-1)), Rd(r.get(3-1)), sP.first.get(3-1), Sd(s.first.set(2-1)), vctr );
+ pr *= mSd.setIterProb ( s.first.set(4-1), 4, Rd(sP.second) , Rd(r.get(4-1)), sP.first.get(4-1), Sd(s.first.set(3-1)), vctr );
+ if ( G(s.first.set(4-1).second)!=G_SUB &&
+ G(s.first.set(4-1).second).isTerm()!=B_1 ) {
+ pr *= p = mSd.mGe.setIterProb (s.second, 5, G(s.first.set(4-1).second), vctr );
+ if ( vctr<-1 && p==LogProb() ) cerr<<"\nERROR: no condition Ge 5 "<<G(s.first.set(4-1).second)<<"\n\n";
+ } else {
+ pr *= mG_SUB.setIterProb ( s.second, vctr );
+ }
+ ////cerr<<" G "<<5<<" "<<G(sd4.second)<<" : "<<g<<" = "<<pr<<" ("<<vctr<<")\n";
+ return pr;
+ }
+};
+const HidVarCPT1DModel<G,LogProb> SModel::mG_SUB(G_SUB);
+
+
+//////////////////// Overall...
+
+//// Model of Y=R,S given S
+class YModel : public DoubleFactoredModel<RModel,SModel> {
+ public:
+ typedef Y::ArrayIterator<LogProb> IterVal;
+ S& setTrellDat ( S& s, const Y::ArrayIterator<LogProb>& y ) const {
+ s.setVal(y.second);
+ return s;
+ }
+ R setBackDat ( const Y::ArrayIterator<LogProb>& y ) const {
+ R r;
+ for(int i=0;i<4;i++)
+ r.set(i)=Rd(y.first.get(i));
+ return r;
+ }
+ LogProb setIterProb ( Y::ArrayIterator<LogProb>& y, const S& sP, const X& x, bool b1, int& vctr ) const {
+ const RModel& mR = getM1();
+ const SModel& mS = getM2();
+ LogProb pr;
+ pr = mR.setIterProb ( y.first, sP, b1, vctr );
+ if ( LogProb()==pr ) return pr;
+ pr *= mS.setIterProb ( y.second, y.first, sP, vctr );
+ return pr;
+ }
+ void update ( ) const { }
+};
diff --git a/synlm/hhmm/wsjparse/include/TextObsModel.h b/synlm/hhmm/wsjparse/include/TextObsModel.h
new file mode 100644
index 000000000..5e277e857
--- /dev/null
+++ b/synlm/hhmm/wsjparse/include/TextObsModel.h
@@ -0,0 +1,173 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#include "nl-cpt.h"
+#include "nl-dtree.h"
+#include "TextObsVars.h"
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Models
+//
+////////////////////////////////////////////////////////////////////////////////
+
+
+/* WS: DO *NOT* BRING THIS BACK AND DELETE MY X MODEL !!!!!!!!!!!!!!!
+
+//// Preterminal (POS) given constituent category models...
+typedef HidVarCPT2DModel<P,C,LogProb> PgivCModel;
+
+
+//// Generative model of word given tag...
+class WModel {
+ private:
+ TrainableDTree2DModel<P,W,LogProb> modPgivWdt;
+
+ RandAccCPT2DModel<P,W,LogProb> modPgivWs;
+ RandAccCPT1DModel<P,LogProb> modP;
+ RandAccCPT1DModel<W,LogProb> modW;
+
+ public:
+ //LogProb getProb ( const W& w, const HidVarCPT1DModel<P,LogProb>::IterVal& p ) const {
+ LogProb getProb ( const W& w, const P::ArrayIterator<LogProb>& p ) const {
+ assert(modP.getProb(p)!=LogProb());
+ LogProb pr = ( ( modW.contains(w) ? modPgivWs.getProb(p,w) : modPgivWdt.getProb(p,w) )
+ * LogProb(-1000) / modP.getProb(p) );
+ if(!modW.contains(w)){
+ cerr<<" w: "<<w<<" p: "<<p<<" modPgivWdt.getProb(p,w) : "<<modPgivWdt.getProb(p,w) <<endl;
+ }
+ return pr;
+ }
+ void writeFields ( FILE* pf, string sPref ) { modPgivWdt.writeFields(pf,sPref); }
+ friend pair<StringInput,WModel*> operator>> ( StringInput si, WModel& m ) { return pair<StringInput,WModel*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,WModel*> delimbuff, const char* psD ) {
+ StringInput si;
+ return ( (si=delimbuff.first>>"W " >>delimbuff.second->modW >>psD)!=NULL ||
+ (si=delimbuff.first>>"Pw " >>delimbuff.second->modPgivWs >>psD)!=NULL ||
+ (si=delimbuff.first>>"PwDT ">>delimbuff.second->modPgivWdt>>psD)!=NULL ||
+ (si=delimbuff.first>>"P " >>delimbuff.second->modP >>psD)!=NULL ) ? si : StringInput(NULL);
+ }
+};
+
+
+//// Wrapper class for model
+class OModel {
+
+ private:
+
+ PgivCModel modPgivC;
+ WModel modWgivP;
+
+ public:
+
+ class DistribModeledWgivC {
+ private:
+ SimpleHash<C,Prob> hcpCache;
+ W wW;
+ public:
+ DistribModeledWgivC& set ( const W& w, const OModel& m ) { wW=w; m.calcProb(*this,w); return *this; }
+ void clear ( ) { hcpCache.clear(); }
+ Prob& setProb ( const C& c ) { return hcpCache.set(c); }
+ LogProb getProb ( const C& c ) const { return LogProb(hcpCache.get(c)); }
+ W getW ( ) const { return wW; }
+ };
+
+ typedef DistribModeledWgivC RandVarType;
+
+
+
+ void calcProb ( OModel::RandVarType& o, const W& w ) const {
+ o.clear();
+ for ( PgivCModel::const_iterator iter = modPgivC.begin(); iter!=modPgivC.end(); iter++ ) {
+ C c = iter->first.getX1();
+ P::ArrayIterator<LogProb> p;
+ int aCtr=-1;
+ //for ( bool bp=modPgivC.setIterProb(p,c,aCtr); bp; bp=modPgivC.setIterProb(p,c,aCtr=0) ) {
+ for (LogProb pr=modPgivC.setIterProb(p,c,aCtr); pr!=LogProb(); pr = modPgivC.setIterProb(p,c,aCtr=0) ){
+ o.setProb(c) += modPgivC.getProb(p,c).toProb() * modWgivP.getProb(w,p).toProb();
+ }
+
+ }
+ }
+
+ LogProb getProb ( const OModel::RandVarType& o, const C& c ) const { return o.getProb(c); }
+
+ friend pair<StringInput,OModel*> operator>> ( StringInput si, OModel& m ) { return pair<StringInput,OModel*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,OModel*> delimbuff, const char* psD ) {
+ StringInput si;
+ return ( (si=delimbuff.first>>"Pc ">>delimbuff.second->modPgivC>>psD)!=NULL ||
+ (si=delimbuff.first>> delimbuff.second->modWgivP>>psD)!=NULL ) ? si : StringInput(NULL);
+ }
+
+ void writeFields ( FILE* pf, string sPref ) { modWgivP.writeFields(pf,sPref); }
+};
+*/
+
+
+class XModel {
+
+ private:
+
+ // Data members...
+ HidVarCPT2DModel<P,C,Prob> modPgivC;
+ TrainableDTree2DModel<P,X,Prob> modPgivXdt;
+ RandAccCPT2DModel<P,W,Prob> modPgivW;
+ RandAccCPT1DModel<P,Prob> modP;
+ RandAccCPT1DModel<W,Prob> modW;
+
+ public:
+
+ typedef X RandVarType;
+
+ bool unknown( const X& x ) const {
+ W w(x);
+ return w == W_UNK;
+ }
+
+ // Extraction methods...
+ LogProb getProb ( const X& x, const C& c ) const {
+ Prob pr=0.0;
+ W w(x);
+ if ( w != W_UNK ) {
+ for ( P::ArrayIterator<Prob> p = modPgivC.begin(c); !p.end(); ++p ) {
+ pr += modPgivC.getProb(p,c) * modPgivW.getProb(p,w) * modW.getProb(w) / modP.getProb(p);
+ }
+ } else {
+ for ( P::ArrayIterator<Prob> p = modPgivC.begin(c); !p.end(); ++p ) {
+ pr += modPgivC.getProb(p,c) * modPgivW.getProb(p,w) * modW.getProb(w) / modP.getProb(p);
+ }
+ }
+ return LogProb(pr);
+ }
+
+ // Input/output methods...
+ friend pair<StringInput,XModel*> operator>> ( StringInput si, XModel& m ) { return pair<StringInput,XModel*>(si,&m); }
+ friend StringInput operator>> ( pair<StringInput,XModel*> si_m, const char* psD ) {
+ StringInput si;
+ return ( (si=si_m.first>>"Pc " >>si_m.second->modPgivC >>psD)!=NULL ||
+ (si=si_m.first>>"W " >>si_m.second->modW >>psD)!=NULL ||
+ (si=si_m.first>>"Pw " >>si_m.second->modPgivW >>psD)!=NULL ||
+ (si=si_m.first>>"PwDT ">>si_m.second->modPgivXdt>>psD)!=NULL ||
+ (si=si_m.first>>"P " >>si_m.second->modP >>psD)!=NULL ) ? si : StringInput(NULL);
+ }
+};
diff --git a/synlm/hhmm/wsjparse/include/TextObsVars.h b/synlm/hhmm/wsjparse/include/TextObsVars.h
new file mode 100644
index 000000000..c32a6cbc1
--- /dev/null
+++ b/synlm/hhmm/wsjparse/include/TextObsVars.h
@@ -0,0 +1,110 @@
+///////////////////////////////////////////////////////////////////////////////
+// //
+// This file is part of ModelBlocks. Copyright 2009, ModelBlocks developers. //
+// //
+// ModelBlocks is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// ModelBlocks is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with ModelBlocks. If not, see <http://www.gnu.org/licenses/>. //
+// //
+// ModelBlocks developers designate this particular file as subject to //
+// the "Moses" exception as provided by ModelBlocks developers in //
+// the LICENSE file that accompanies this code. //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _TEXT_OBS_VARS_
+#define _TEXT_OBS_VARS_
+
+#include "nl-randvar.h"
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Random Variables
+//
+////////////////////////////////////////////////////////////////////////////////
+
+//// P: part of speech category...
+DiscreteDomain<short> domainP;
+typedef DiscreteDomainRV<short,domainP> P;
+
+//// L: letter...
+DiscreteDomain<char> domainLt;
+typedef DiscreteDomainRV<char,domainLt> Lt;
+
+//// X: observed word (array of letters, arranged last to first)...
+//typedef StaticSafeArray<5,Lt> X;
+DiscreteDomain<int> domainX;
+class X : public DiscreteDomainRV<int,domainX>, public StaticSafeArray<5,Lt> {
+ public:
+ X ( ) { }
+ X ( const char* ps ) : DiscreteDomainRV<int,domainX>(ps) {
+ char psTemp[2]="-"; int n=strlen(ps);
+ for(int i=0;i<5;i++) {
+ psTemp[0]=(i<n)?ps[n-i-1]:'_';
+ //cout<<"!!!!!!!!!!!!!!!!!!"<<psTemp<<endl;
+ StaticSafeArray<5,Lt>::set(i)=Lt(psTemp);
+ }
+ }
+ friend pair<StringInput,X*> operator>> ( const StringInput ps, X& rv ) { return pair<StringInput,X*>(ps,&rv); }
+ friend StringInput operator>> ( pair<StringInput,X*> si_x, const char* psDlm ) {
+ if(si_x.first==NULL)return si_x.first; String s; StringInput si=si_x.first>>s>>psDlm; *si_x.second=s.c_array(); return si; }
+ bool operator== ( const X& x ) const { return DiscreteDomainRV<int,domainX>::operator==(x); }
+ size_t getHashKey ( ) const { return DiscreteDomainRV<int,domainX>::getHashKey(); }
+};
+
+//// W: subset of words with reliable statistics for POS model
+DiscreteDomain<int> domW;
+class W : public DiscreteDomainRV<int,domW> {
+ private:
+ static SimpleHash<X,W> hXtoW;
+ void calcDetModels ( string s ) { if (!hXtoW.contains(X(s.c_str()))) hXtoW.set(X(s.c_str())) = *this; }
+ public:
+ static const W W_UNK;
+ W ( ) : DiscreteDomainRV<int,domW> ( ) { }
+ W ( const DiscreteDomainRV<int,domW>& rv ) : DiscreteDomainRV<int,domW>(rv) { }
+ W ( const char* ps ) : DiscreteDomainRV<int,domW> ( ps ) { calcDetModels(ps); }
+ //C ( string s ) : DiscreteDomainRV<int,domC> ( s ) { calcDetModels(s); }
+ W ( const X& x ) { *this = (hXtoW.contains(x)) ? hXtoW.get(x) : W_UNK; }
+ friend pair<StringInput,W*> operator>> ( StringInput si, W& x ) { return pair<StringInput,W*>(si,&x); }
+ friend StringInput operator>> ( pair<StringInput,W*> si_x, const char* psD ) {
+ if ( si_x.first == NULL ) return NULL;
+ StringInput si=si_x.first>>(DiscreteDomainRV<int,domW>&)*si_x.second>>psD;
+ si_x.second->calcDetModels(si_x.second->getString()); return si; }
+};
+SimpleHash<X,W> W::hXtoW;
+const W W::W_UNK ("unk");
+const W W_UNK = W::W_UNK;
+
+//// H: subset of words within threshhold of head words used for clustering
+DiscreteDomain<int> domH;
+class H : public DiscreteDomainRV<int,domH> {
+ private:
+ static SimpleHash<X,H> hXtoH;
+ void calcDetModels ( string s ) { if (!hXtoH.contains(X(s.c_str()))) hXtoH.set(X(s.c_str())) = *this; }
+ public:
+ static const H H_UNK;
+ H ( ) : DiscreteDomainRV<int,domH> ( ) { }
+ H ( const DiscreteDomainRV<int,domH>& rv ) : DiscreteDomainRV<int,domH>(rv) { }
+ H ( const char* ps ) : DiscreteDomainRV<int,domH> ( ps ) { calcDetModels(ps); }
+ //C ( string s ) : DiscreteDomainRV<int,domC> ( s ) { calcDetModels(s); }
+ H ( const X& x ) { *this = (hXtoH.contains(x)) ? hXtoH.get(x) : H_UNK; }
+ friend pair<StringInput,H*> operator>> ( StringInput si, H& x ) { return pair<StringInput,H*>(si,&x); }
+ friend StringInput operator>> ( pair<StringInput,H*> si_x, const char* psD ) {
+ if ( si_x.first == NULL ) return NULL;
+ StringInput si=si_x.first>>(DiscreteDomainRV<int,domH>&)*si_x.second>>psD;
+ si_x.second->calcDetModels(si_x.second->getString()); return si; }
+};
+SimpleHash<X,H> H::hXtoH;
+const H H::H_UNK ("unk");
+const H H_UNK = H::H_UNK;
+
+#endif //_TEXT_OBS_VARS_