Tune and test PolyAnalyzer Go bindings.
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/cc7219e6 Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/cc7219e6 Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/cc7219e6 Branch: refs/heads/master Commit: cc7219e69aaab7aa215ed6c39106d89a7df7ee83 Parents: 19921d8 Author: Marvin Humphrey <[email protected]> Authored: Mon Nov 9 17:42:08 2015 -0800 Committer: Marvin Humphrey <[email protected]> Committed: Fri Nov 20 16:43:37 2015 -0800 ---------------------------------------------------------------------- go/build.go | 5 +++++ go/lucy/analysis.go | 22 ++++++++++++++++++++++ go/lucy/analysis_test.go | 4 ++++ 3 files changed, 31 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy/blob/cc7219e6/go/build.go ---------------------------------------------------------------------- diff --git a/go/build.go b/go/build.go index 6060f5b..05231fc 100644 --- a/go/build.go +++ b/go/build.go @@ -145,6 +145,11 @@ func specClasses(parcel *cfc.Parcel) { analyzerBinding.SpecMethod("Split", "Split(string) []string") analyzerBinding.Register() + polyAnalyzerBinding := cfc.NewGoClass(parcel, "Lucy::Analysis::PolyAnalyzer") + polyAnalyzerBinding.SpecMethod("Get_Analyzers", "GetAnalyzers() []Analyzer") + polyAnalyzerBinding.SetSuppressCtor(true) + polyAnalyzerBinding.Register() + indexerBinding := cfc.NewGoClass(parcel, "Lucy::Index::Indexer") indexerBinding.SpecMethod("", "Close() error") indexerBinding.SpecMethod("Add_Doc", "AddDoc(doc interface{}) error") http://git-wip-us.apache.org/repos/asf/lucy/blob/cc7219e6/go/lucy/analysis.go ---------------------------------------------------------------------- diff --git a/go/lucy/analysis.go b/go/lucy/analysis.go index 61465b4..68a379c 100644 --- a/go/lucy/analysis.go +++ b/go/lucy/analysis.go @@ -20,6 +20,7 @@ package lucy #include <stdlib.h> #include "Lucy/Analysis/Analyzer.h" +#include "Lucy/Analysis/PolyAnalyzer.h" #include "Lucy/Analysis/Token.h" #include "Clownfish/Vector.h" */ @@ -59,3 +60,24 @@ func (a *AnalyzerIMP) Split(text string) []string { defer C.cfish_decref(unsafe.Pointer(retvalCF)) return vecToStringSlice(retvalCF) } + +func NewPolyAnalyzer(children []Analyzer) PolyAnalyzer { + vec := clownfish.NewVector(len(children)) + for i := 0; i < len(children); i++ { + vec.Push(children[i]) + } + retvalCF := C.lucy_PolyAnalyzer_new(nil, (*C.cfish_Vector)(clownfish.Unwrap(vec, "vec"))) + return WRAPPolyAnalyzer(unsafe.Pointer(retvalCF)) +} + +func (p *PolyAnalyzerIMP) GetAnalyzers() []Analyzer { + self := (*C.lucy_PolyAnalyzer)(clownfish.Unwrap(p, "p")) + retvalCF := C.LUCY_PolyAnalyzer_Get_Analyzers(self) + size := C.CFISH_Vec_Get_Size(retvalCF) + retval := make([]Analyzer, int(size)) + for i := 0; i < int(size); i++ { + child := unsafe.Pointer(C.CFISH_Vec_Fetch(retvalCF, C.size_t(i))) + retval[i] = clownfish.WRAPAny(unsafe.Pointer(C.cfish_incref(child))).(Analyzer) + } + return retval +} http://git-wip-us.apache.org/repos/asf/lucy/blob/cc7219e6/go/lucy/analysis_test.go ---------------------------------------------------------------------- diff --git a/go/lucy/analysis_test.go b/go/lucy/analysis_test.go index 9470fbb..d9d9f2f 100644 --- a/go/lucy/analysis_test.go +++ b/go/lucy/analysis_test.go @@ -105,6 +105,10 @@ func TestCoreAnalyzers(t *testing.T) { runAnalyzerTests(t, NewSnowballStemmer("en")) runAnalyzerTests(t, NewSnowballStopFilter("en", nil)) runAnalyzerTests(t, NewStandardTokenizer()) + + children := []Analyzer{NewStandardTokenizer(), NewNormalizer("NFKC", true, false)} + polyAnalyzer := NewPolyAnalyzer(children) + runAnalyzerTests(t, polyAnalyzer) } func TestRegexTokenizerSplit(t *testing.T) {
