Re: Weighting Schemes: Implementing Piv+ Normalization

Vivek Pal <[email protected]>
Newsgroups gmane.comp.search.xapian.devel
Message-ID <CAGxcUfw_WqYpG3b8dj3XReQhcn5GSLDvO7+8UOMppGUrPtUU_Q@mail.gmail.com>
> `ptr` is, if I inferred correctly, a `const char *`. (I'm not sure,
> because I don't know why you're incrementing it. Please push your code
> to github if you need further help so people can see the entire
> context of your changes.)

I've pushed all the changes I made so far
https://github.com/xapian/xapian/compare/master...ivmarkp:piv+?diff=split&name=piv%2B

Can you please add some comments on it? Support for normalization weighting
is complete -- just these issues with serialisation.

Meanwhile, I'm working on adding an overloaded constructor and pass
parameters s and delta to it. Thus, separating the normalization strings
altogether which will be left to the existing constructor to deal with.
Does this sound like a viable approach though?

Thanks,
Vivek

On Fri, Jul 29, 2016 at 6:09 PM, James Aylett <[email protected]>
wrote:

> On Fri, Jul 29, 2016 at 12:35:57AM +0530, Vivek Pal wrote:
>
> > > I can't tell for sure without seeing the diff. You may mean just
> > > `ptr++`? But it could be something else, depending on what you're
> > > trying to do.
> >
> > I'm trying to unserialise normalization strings (e.g. "nfn", "nbsl"
> etc.)
> > along with the new double parameters (s and delta) but
> > it isn't turning out to be smooth because there's no method for
> > unserialising strings in serialise-double.h
>
> Serialising it about round-tripping numbers through strings. You
> shouldn't need to serialise a string; you don't even have to worry
> about encoding with those strings, since they're all covered by ASCII
> anyway.
>
> > Although, doing just
> >
> > const string normals = ptr++; or, const string normals =
> static_cast<const
> > string>ptr++; fixes compile errors.
>
> `ptr` is, if I inferred correctly, a `const char *`. (I'm not sure,
> because I don't know why you're incrementing it. Please push your code
> to github if you need further help so people can see the entire
> context of your changes.)
>
> const string normals = "something";
>
> will work because there's a suitable constructor. `static_cast<>`
> isn't appropriate here (again, providing I've inferred the type of
> `ptr` correctly).
>
> > But tfidfweight3 test case is failing with remote backends :-
> >
> > $ ./runtest gdb ./apitest -v tfidfweight3
> >
> > Running test: tfidfweight3... SerialisationError: REMOTE:Bad encoded
> > double: short mantissa (context: remote:prog(../bin/xapian-progsrv
> -t300000
> > .glass/db=apitest_simpledata)
>
> You're deserialising something that wasn't serialised, or wasn't
> serialised properly.
>
> If I put 'xapian bad encoded double short mantissa' into Google, I get
> this page as the top result (it may be further down the page for you):
>
> https://xapian.org/docs/sourcedoc/html/serialise-double_8cc_source.html
>
> The error message is at line 173 of unserialise_double. I don't need
> to read the code to understand what the error is telling me, because
> mantissa is a common term when dealing with floating point numbers
> (again, Google is directly fairly helpful here).
>
> > I'm wondering if I need to introduce a new method in serialise-double.h
> for
> > string parameters (normalizations in this case)? To be honest, I have
> > little idea about that part of Xapian so probably a workaround might be
> > better. :)
>
> Again: no. And generally, applying a workaround because you don't
> understand something isn't a good idea, because how will you know if
> the workaround isn't working around some important issues you need to
> address directly?
>
> J
>
> --
>   James Aylett, occasional trouble-maker
>   xapian.org
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.