Re: request a new feature in fuzzystrmatch

From: Atri Sharma <atri(dot)jiit(at)gmail(dot)com>
To: Liming Hu <dawninghu(at)gmail(dot)com>
Cc: Josh Berkus <josh(at)agliodbs(dot)com>, PgHacker <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: request a new feature in fuzzystrmatch
Date: 2013-05-18 08:03:20
Message-ID: CAOeZVif94D4CeLVYe55AyxYbTsPKPus5NrkqV04gFQMT9548Bg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers pgsql-www

On Sat, May 18, 2013 at 1:30 PM, Liming Hu <dawninghu(at)gmail(dot)com> wrote:
> On 5/18/2013 12:11 AM, Atri Sharma wrote:
>
> Sent from my iPad
>
> On 18-May-2013, at 12:34, Liming Hu <dawninghu(at)gmail(dot)com> wrote:
>
> On Fri, May 17, 2013 at 11:44 PM, Atri Sharma <atri(dot)jiit(at)gmail(dot)com> wrote:
>
> Sent from my iPad
>
> On 18-May-2013, at 12:07, Liming Hu <dawninghu(at)gmail(dot)com> wrote:
>
> On Fri, May 17, 2013 at 11:13 PM, Atri Sharma <atri(dot)jiit(at)gmail(dot)com> wrote:
>
> Sent from my iPad
>
> On 18-May-2013, at 11:23, Liming Hu <dawninghu(at)gmail(dot)com> wrote:
>
> On Fri, May 17, 2013 at 10:21 PM, Atri Sharma <atri(dot)jiit(at)gmail(dot)com> wrote:
>
> Sent from my iPad
>
> On 18-May-2013, at 10:41, Liming Hu <dawninghu(at)gmail(dot)com> wrote:
>
> On Fri, May 17, 2013 at 9:39 PM, Atri Sharma <atri(dot)jiit(at)gmail(dot)com> wrote:
>
> Sent from my iPad
>
> On 18-May-2013, at 10:00, Liming Hu <dawninghu(at)gmail(dot)com> wrote:
>
> On 5/17/2013 9:10 PM, Atri Sharma wrote:
>
> On Sat, May 18, 2013 at 9:27 AM, Liming Hu <dawninghu(at)gmail(dot)com> wrote:
>
> On 5/17/2013 12:39 PM, Liming Hu wrote:
>
> On Fri, May 17, 2013 at 12:06 PM, Josh Berkus <josh(at)agliodbs(dot)com> wrote:
>
> Can we add Levenshtein-Damerau edit distance since it is used in
> spelling checker
> instead of levenshtein edit distance?
>
> Patches welcome! You, too, can be a PostgreSQL contributor.
>
> However, you will need to preserve the ability of users to use the old
> levenshtien algorithm as well, for backwards-compatibility. Shouldn't
> be hard, just add a new function called levenshtiend().
>
> I am working on it, I will make it this weekend project.
>
> I have done that. and put the code at github:
> https://github.com/liminghu/fuzzystrmatch
>
> liming(at)liming-UX31A:~/Downloads/postgresql-9.1.9/contrib/fuzzystrmatch$
> sudo cp fuzzystrmatch.so
> /usr/lib/postgresql/9.1/lib/fuzzystrmatch.so
> liming(at)liming-UX31A:~/Downloads/postgresql-9.1.9/contrib/fuzzystrmatch$
> sudo /etc/init.d/postgresql restart
>
> * Restarting PostgreSQL 9.1 database server
>
> [ OK ]
>
>
> select dameraulevenshteinnocompatible('cta', 'cat',1,1,1,1);
> CREATE EXTENSION fuzzystrmatch;
>
> ********** Error **********
>
> ERROR: could not load library
> "/usr/lib/postgresql/9.1/lib/fuzzystrmatch.so":
> /usr/lib/postgresql/9.1/lib/fuzzystrmatch.so: undefined symbol:
> damerau_levenshtein_internal_noncompatible
>
> Any one can help me on this? Thanks.
>
> The system is not able to find the required library, and I dont think
> using cp to place the library is a very good idea.Did you run Make
> Install after you added your work in the Makefile?
>
> I did not run make install. I am running a stable postgresql in my laptop, I
> do not
> want to reinstall everything, just want to try this contribution. I am
> afraid
> reinstall it will destroy my configurations, and databases, just do not want
> to mess up.
> did you see any thing wrong:
> https://github.com/liminghu/fuzzystrmatch/blob/master/fuzzystrmatch--1.0.sql
> https://github.com/liminghu/fuzzystrmatch/blob/master/fuzzystrmatch--unpackaged--1.0.sql
> https://github.com/liminghu/fuzzystrmatch/blob/master/fuzzystrmatch.c
> https://github.com/liminghu/fuzzystrmatch/blob/master/dameraulevenshtein.c
> https://github.com/liminghu/fuzzystrmatch/blob/master/
>
>
> You need not reinstall your entire database for installing/re installing an
> extension.Running make install from the extension's directory(after placing
> it in /contrib of a postgres database source directory) will install the
> extension in your current database without breaking anything.
>
> You mean:
> liming(at)liming-UX31A:~/Downloads/postgresql-9.1.9/contrib/fuzzystrmatch$
> make install
> ?
>
> Yes,although,I would run make clean before running make install,just for
> ensuring that all runs well.
>
> liming(at)liming-UX31A:~/Downloads/postgresql-9.1.9/contrib/fuzzystrmatch$
> sudo make clean
> rm -f fuzzystrmatch.so libfuzzystrmatch.a
> rm -f fuzzystrmatch.o dmetaphone.o
> liming(at)liming-UX31A:~/Downloads/postgresql-9.1.9/contrib/fuzzystrmatch$
> sudo make install
> gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith
> -Wdeclaration-after-statement -Wendif-labels -Wformat-security
> -fno-strict-aliasing -fwrapv -fexcess-precision=standard -fpic -I. -I.
> -I../../src/include -D_GNU_SOURCE -c -o fuzzystrmatch.o
> fuzzystrmatch.c
> In file included from fuzzystrmatch.c:250:0:
> dameraulevenshtein.c: In function ‘damerau_levenshtein_internal’:
> dameraulevenshtein.c:290:57: warning: unused variable ‘trans’
> [-Wunused-variable]
> dameraulevenshtein.c:328:57: warning: unused variable ‘trans’
> [-Wunused-variable]
> In file included from fuzzystrmatch.c:253:0:
> dameraulevenshtein.c: In function ‘damerau_levenshtein_less_equal_internal’:
> dameraulevenshtein.c:290:57: warning: unused variable ‘trans’
> [-Wunused-variable]
> dameraulevenshtein.c:328:57: warning: unused variable ‘trans’
> [-Wunused-variable]
> dameraulevenshtein.c: In function
> ‘dameraulevenshtein_with_costs_noncompatible’:
> dameraulevenshtein.c:480:9: warning: ISO C90 forbids mixed
> declarations and code [-Wdeclaration-after-statement]
> dameraulevenshtein.c:494:10: warning: ISO C90 forbids mixed
> declarations and code [-Wdeclaration-after-statement]
> fuzzystrmatch.c: In function ‘damerau_levenshtein_with_costs_noncompatible’:
> fuzzystrmatch.c:266:2: warning: implicit declaration of function
> ‘damerau_levenshtein_internal_noncompatible’
> [-Wimplicit-function-declaration]
> fuzzystrmatch.c: At top level:
> dameraulevenshtein.c:40:12: warning: ‘dameraulevenshtein_internal’
> declared ‘static’ but never defined [-Wunused-function]
> dameraulevenshtein.c:37:12: warning:
> ‘dameraulevenshtein_less_equal_internal’ declared ‘static’ but never
> defined [-Wunused-function]
> dameraulevenshtein.c:464:12: warning:
> ‘dameraulevenshtein_with_costs_noncompatible’ defined but not used
> [-Wunused-function]
> gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith
> -Wdeclaration-after-statement -Wendif-labels -Wformat-security
> -fno-strict-aliasing -fwrapv -fexcess-precision=standard -fpic -I. -I.
> -I../../src/include -D_GNU_SOURCE -c -o dmetaphone.o dmetaphone.c
> gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith
> -Wdeclaration-after-statement -Wendif-labels -Wformat-security
> -fno-strict-aliasing -fwrapv -fexcess-precision=standard -fpic -shared
> -o fuzzystrmatch.so fuzzystrmatch.o dmetaphone.o -L../../src/port
> -Wl,--as-needed -Wl,-rpath,'/usr/local/pgsql/lib',--enable-new-dtags
> /bin/mkdir -p '/usr/local/pgsql/lib'
> /bin/mkdir -p '/usr/local/pgsql/share/extension'
> /bin/mkdir -p '/usr/local/pgsql/share/extension'
> /bin/sh ../../config/install-sh -c -m 755 fuzzystrmatch.so
> '/usr/local/pgsql/lib/fuzzystrmatch.so'
> /bin/sh ../../config/install-sh -c -m 644 ./fuzzystrmatch.control
> '/usr/local/pgsql/share/extension/'
> /bin/sh ../../config/install-sh -c -m 644 ./fuzzystrmatch--1.0.sql
> ./fuzzystrmatch--unpackaged--1.0.sql
> '/usr/local/pgsql/share/extension/'
> liming(at)liming-UX31A:~/Downloads/postgresql-9.1.9/contrib/fuzzystrmatch$
>
>
> After that:
>
> CREATE EXTENSION fuzzystrmatch;
> select dameraulevenshteinnocompatible('cta', 'cat',1,1,1,1);
>
>
>
>
> ERROR: function dameraulevenshteinnocompatible(unknown, unknown,
> integer, integer, integer, integer) does not exist
> LINE 1: select dameraulevenshteinnocompatible('cta', 'cat',1,1,1,1);
> ^
> HINT: No function matches the given name and argument types. You
> might need to add explicit type casts.
>
>
> ********** Error **********
>
> ERROR: function dameraulevenshteinnocompatible(unknown, unknown,
> integer, integer, integer, integer) does not exist
> SQL state: 42883
> Hint: No function matches the given name and argument types. You might
> need to add explicit type casts.
> Character: 8
>
>
>
> Ok,so now, we are in issues with the code and possibly, the configurations.
>
> First up, I would fix the warnings
> that are being generated while compiling.Those may lead to hard to detect
> errors later on.
>
> It seems that the functions you added are not being created in the
> database.Are you sure that you have modified the .SQL files correctly to
> create you functions as well,and that you are using the correct SQL files
> while installing?
>
> Does this happen only with dameraulevenshteinnocompatible, or with every
> function that you added? Have you tried using one of the original functions
> of fuzzystrmatch,to ensure that the original functionalities are still
> working?
>
>
> it seems the make install command will copy fuzzystrmatch.so to:
> liming(at)liming-UX31A:/usr/local/pgsql/lib$ ls -la
> total 48
> drwxr-xr-x 2 root root 4096 May 17 23:14 .
> drwxr-xr-x 4 root root 4096 May 17 22:39 ..
> -rwxr-xr-x 1 root root 40640 May 17 23:14 fuzzystrmatch.so
>
> liming(at)liming-UX31A:/usr/local/pgsql/share/extension$ ls -la
> total 28
> drwxr-xr-x 2 root root 4096 May 17 23:14 .
> drwxr-xr-x 3 root root 4096 May 17 22:39 ..
> -rw-r--r-- 1 root root 2250 May 17 22:48 fuzzystrmatch--1.0.sql
> -rw-r--r-- 1 root root 2250 May 17 23:14 fuzzystrmatch--1.1.sql
> -rw-r--r-- 1 root root 175 May 17 23:14 fuzzystrmatch.control
> -rw-r--r-- 1 root root 1945 May 17 22:48 fuzzystrmatch--unpackaged--1.0.sql
> -rw-r--r-- 1 root root 1945 May 17 23:14 fuzzystrmatch--unpackaged--1.1.sql
>
> instead of:
>
> liming(at)liming-UX31A:/usr/local/pgsql/lib$ ls -la
> /usr/lib/postgresql/9.1/lib/fuzzystrmatch.so
> -rw-r--r-- 1 root root 30520 May 17 19:50
> /usr/lib/postgresql/9.1/lib/fuzzystrmatch.so
>
>
> The files will be copied to your pkglibdir path, which you can find by
> running pg_config --pkglibdir
>
> pg_config
> You need to install postgresql-server-dev-X.Y for building a
> server-side extension or libpq-dev for building a client-side
> application.
>
>
> (Please keep the list marked in your replies).
>
> How did you install the Postgres instance you are trying to install the
> extension in? Did you use pre built binaries or make it from source?
>
>
> I am running ubuntu, I install postgresql from the ubuntu software center.
> I directly copy those files, now it works.
>
> select dameraulevenshteinnocompatible('cta', 'cat',1,1,1,1);
>
>
>
> 1
>
>
> thanks a lot.
>
> Liming
>
>
> Regards,
>
> Atri
>
>

Awesome.

For reference, if you are using pre built binaries(as you are using),
you should install the client side applications and
postgresql-server-dev-X.Y as well.

Regards,

Atri
--
Regards,

Atri
l'apprenant

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Liming Hu 2013-05-18 08:17:01 Re: request a new feature in fuzzystrmatch
Previous Message Liming Hu 2013-05-18 08:00:05 Re: request a new feature in fuzzystrmatch

Browse pgsql-www by date

  From Date Subject
Next Message Liming Hu 2013-05-18 08:17:01 Re: request a new feature in fuzzystrmatch
Previous Message Liming Hu 2013-05-18 08:00:05 Re: request a new feature in fuzzystrmatch