You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by nw...@apache.org on 2011/12/22 23:29:50 UTC

[lucy-commits] svn commit: r1222495 - in /incubator/lucy/trunk/core/Lucy/Analysis: EasyAnalyzer.c EasyAnalyzer.cfh

Author: nwellnhof
Date: Thu Dec 22 22:29:50 2011
New Revision: 1222495

URL: http://svn.apache.org/viewvc?rev=1222495&view=rev
Log:
Don't derive EasyAnalyzer from PolyAnalyzer

Make EasyAnalyzer a direct subclass of Analyzer and implement all needed
methods.

Modified:
    incubator/lucy/trunk/core/Lucy/Analysis/EasyAnalyzer.c
    incubator/lucy/trunk/core/Lucy/Analysis/EasyAnalyzer.cfh

Modified: incubator/lucy/trunk/core/Lucy/Analysis/EasyAnalyzer.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/core/Lucy/Analysis/EasyAnalyzer.c?rev=1222495&r1=1222494&r2=1222495&view=diff
==============================================================================
--- incubator/lucy/trunk/core/Lucy/Analysis/EasyAnalyzer.c (original)
+++ incubator/lucy/trunk/core/Lucy/Analysis/EasyAnalyzer.c Thu Dec 22 22:29:50 2011
@@ -18,7 +18,7 @@
 #include "Lucy/Util/ToolSet.h"
 
 #include "Lucy/Analysis/EasyAnalyzer.h"
-#include "Lucy/Analysis/PolyAnalyzer.h"
+#include "Lucy/Analysis/Inversion.h"
 #include "Lucy/Analysis/StandardTokenizer.h"
 #include "Lucy/Analysis/Normalizer.h"
 #include "Lucy/Analysis/SnowballStemmer.h"
@@ -31,13 +31,70 @@ EasyAnalyzer_new(const CharBuf *language
 
 EasyAnalyzer*
 EasyAnalyzer_init(EasyAnalyzer *self, const CharBuf *language) {
-    VArray *analyzers = VA_new(3);
-    VA_Push(analyzers, (Obj*)StandardTokenizer_new());
-    VA_Push(analyzers, (Obj*)Normalizer_new(NULL, true, false));
-    VA_Push(analyzers, (Obj*)SnowStemmer_new(language));
-    PolyAnalyzer_init((PolyAnalyzer*)self, NULL, analyzers);
-    DECREF(analyzers);
+    Analyzer_init((Analyzer*)self);
+    self->language   = CB_Clone(language);
+    self->tokenizer  = StandardTokenizer_new();
+    self->normalizer = Normalizer_new(NULL, true, false);
+    self->stemmer    = SnowStemmer_new(language);
     return self;
 }
 
+void
+EasyAnalyzer_destroy(EasyAnalyzer *self) {
+    DECREF(self->language);
+    DECREF(self->tokenizer);
+    DECREF(self->normalizer);
+    DECREF(self->stemmer);
+    SUPER_DESTROY(self, EASYANALYZER);
+}
+
+Inversion*
+EasyAnalyzer_transform(EasyAnalyzer *self, Inversion *inversion) {
+    Inversion *inv1 = StandardTokenizer_Transform(self->tokenizer, inversion);
+    Inversion *inv2 = Normalizer_Transform(self->normalizer, inv1);
+    DECREF(inv1);
+    inv1 = SnowStemmer_Transform(self->stemmer, inv2);
+    DECREF(inv2);
+    return inv1;
+}
+
+Inversion*
+EasyAnalyzer_transform_text(EasyAnalyzer *self, CharBuf *text) {
+    Inversion *inv1 = StandardTokenizer_Transform_Text(self->tokenizer, text);
+    Inversion *inv2 = Normalizer_Transform(self->normalizer, inv1);
+    DECREF(inv1);
+    inv1 = SnowStemmer_Transform(self->stemmer, inv2);
+    DECREF(inv2);
+    return inv1;
+}
+
+Hash*
+EasyAnalyzer_dump(EasyAnalyzer *self) {
+    EasyAnalyzer_dump_t super_dump
+        = (EasyAnalyzer_dump_t)SUPER_METHOD(EASYANALYZER, EasyAnalyzer, Dump);
+    Hash *dump = super_dump(self);
+    Hash_Store_Str(dump, "language", 8, (Obj*)CB_Clone(self->language));
+    return dump;
+}
+
+EasyAnalyzer*
+EasyAnalyzer_load(EasyAnalyzer *self, Obj *dump) {
+    EasyAnalyzer_load_t super_load
+        = (EasyAnalyzer_load_t)SUPER_METHOD(EASYANALYZER, EasyAnalyzer, Load);
+    EasyAnalyzer *loaded = super_load(self, dump);
+    Hash    *source = (Hash*)CERTIFY(dump, HASH);
+    CharBuf *language
+        = (CharBuf*)CERTIFY(Hash_Fetch_Str(source, "language", 8), CHARBUF);
+    return EasyAnalyzer_init(loaded, language);
+}
+
+bool_t
+EasyAnalyzer_equals(EasyAnalyzer *self, Obj *other) {
+    EasyAnalyzer *const twin = (EasyAnalyzer*)other;
+    if (twin == self)                                     { return true; }
+    if (!Obj_Is_A(other, EASYANALYZER))                   { return false; }
+    if (!CB_Equals(twin->language, (Obj*)self->language)) { return false; }
+    return true;
+}
+
 

Modified: incubator/lucy/trunk/core/Lucy/Analysis/EasyAnalyzer.cfh
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/core/Lucy/Analysis/EasyAnalyzer.cfh?rev=1222495&r1=1222494&r2=1222495&view=diff
==============================================================================
--- incubator/lucy/trunk/core/Lucy/Analysis/EasyAnalyzer.cfh (original)
+++ incubator/lucy/trunk/core/Lucy/Analysis/EasyAnalyzer.cfh Thu Dec 22 22:29:50 2011
@@ -16,12 +16,12 @@
 
 parcel Lucy;
 
-/** A simple PolyAnalyzer
+/** A simple analyzer chain
  *
- * EasyAnalyzer is a PolyAnalyzer consisting of a
+ * EasyAnalyzer is an analyzer chain consisting of a
  * L<StandardTokenizer|Lucy::Analysis::StandardTokenizer>, a
  * L<Normalizer|Lucy::Analysis::Normalizer>, and a
- * L<SnowballStemmer|Lucy::Analysis::SnowballStemmer>.
+ * L<EasyAnalyzer|Lucy::Analysis::EasyAnalyzer>.
  *
  * Supported languages:
  *
@@ -42,7 +42,12 @@ parcel Lucy;
  *     tr => Turkish,
  */
 class Lucy::Analysis::EasyAnalyzer
-    inherits Lucy::Analysis::PolyAnalyzer : dumpable {
+    inherits Lucy::Analysis::Analyzer : dumpable {
+
+    CharBuf *language;
+    StandardTokenizer *tokenizer;
+    Normalizer *normalizer;
+    SnowballStemmer *stemmer;
 
     inert incremented EasyAnalyzer*
     new(const CharBuf *language = NULL);
@@ -52,6 +57,24 @@ class Lucy::Analysis::EasyAnalyzer
      */
     public inert EasyAnalyzer*
     init(EasyAnalyzer *self, const CharBuf *language = NULL);
+
+    public incremented Inversion*
+    Transform(EasyAnalyzer *self, Inversion *inversion);
+
+    public incremented Inversion*
+    Transform_Text(EasyAnalyzer *self, CharBuf *text);
+
+    public incremented Hash*
+    Dump(EasyAnalyzer *self);
+
+    public incremented EasyAnalyzer*
+    Load(EasyAnalyzer *self, Obj *dump);
+
+    public bool_t
+    Equals(EasyAnalyzer *self, Obj *other);
+
+    public void
+    Destroy(EasyAnalyzer *self);
 }