bugOrdbanken - Bugs: bug #46362, bsd look krev utf-8-locale for å...

 
 

bug #46362: bsd look krev utf-8-locale for å handtera ikkje-ascii søkeord

Submitter:  None
Submitted:  Mon 02 Nov 2015 08:03:41 AM UTC
   
 
Category:  * programmet Status:  Fixed
Assigned to:  huftis Open/Closed:  Closed
* Mandatory Fields

Add a New Comment Rich Markup
   

Tue 23 Feb 2016 05:14:18 PM UTC, comment #3: 

No trur eg (igjen) eg har klart å fiksa problemet. Oppsummert:

«BSD look» har ingen problem med UTF-8 så lenge ein køyrer under eit UTF-8-lokale.

I utgangspunktet skulle ein derfor trudd ein måtte køyra under same lokale når ein genererer ordlistefilene (sidan sorteringa av ord er lokalespesifikk). Men det stemmer ikkje. På manualsida https://www.freebsd.org/cgi/man.cgi?query=look&apropos=0&sektion=0&manpath=FreeBSD+11-current&arch=default&format=html står det:

     Lines are not compared according to the current locale's
     collating order. Input files must be sorted with
     LC_COLLATE set to `C'.

Men kva med «look» frå linux-util? Her står det ingenting tilsvarande på manualsida. Men om me ser i kjeldekoden   https://github.com/karelzak/util-linux/blob/master/misc-utils/look.c finn me at programmet samanliknar tekstar med strncmp() i staden for med strcoll(). Med andre ord antar «look» same sorterings-/kollateringsrekkefølgje som under C-lokalet. Så dei to variantane av «look»-verktøyet skal altså oppføra seg likt.

Konklusjonen er at om me sorterer ordlista under C-lokalet men køyrer «look» under eit vilkårleg (UTF-8-)lokale, så skal alt fungera heilt fint! Iallfall fram til nokon gjer «look»-verktøya meir lokale-bevisst …

Lukkar saka igjen, og reknar problemet som løyst i revisjon 169.

Karl Ove Hufthammer <huftis>
Group administrator
Tue 23 Feb 2016 04:50:05 PM UTC, comment #2: 

Opna saka igjen. Det viste seg at løysinga berre tilsynelatande fungerte skikkeleg. For eksempel fungerte ikkje eit oppslag på «åtøle» lenger.

Karl Ove Hufthammer <huftis>
Group administrator
Sun 21 Feb 2016 05:45:23 PM UTC, comment #1: 

OK, no trur eg har funne ein måte å fiksa det. Her kjem ei oppsummering:

BSD look likar ikkje UTF-8 teikn om ein køyrer under C-lokalet (kanskje ikkje så rart), mens look frå util-linux ikkje har noko problem med det. Men viss me brukar argumentet «-d» kan me unngå det. Her er ein liten test:

LC_ALL=nn_NO.UTF-8 sort -d fullform_nn.dat > ord_utf8.txt
LC_ALL=C sort -d fullform_nn.dat > ord_c.txt

LC_ALL=nn_NO.UTF-8 look -d møllmiddel ord_utf8.txt
LC_ALL=nn_NO.UTF-8 look -d møllmiddel ord_c.txt
LC_ALL=C look -d møllmiddel ord_utf8.txt
LC_ALL=C look -d møllmiddel ord_c.txt

Av dei fire «look»-kommandoane fungerer 1 og 2 med BSD look (3 og 4 gjev feilmeldingar), mens 2 og 4 fungerer med look frå util-linux (ingen gjev feilmeldingar, men 1 og 3 gjev ingen resultat).

Ergo vil variant 2 fungera alle plassar. Me sorterer derfor med «LC_ALL=C sort -d» og køyrer «look -d» (utan nokon «LC_ALL»).

Men det er eit problem. «look -d» (frå util-linux) har ein annan definisjon av «-d» enn kva «sort -d» har. Det meiner eg er ein feil i «look -d», og har meldt han inn på
https://github.com/karelzak/util-linux/issues/284
Men uansett er konsekvensen at «look -d» ser vekk frå blankteikn ved oppslag, og sidan me skil ord med tabulator, får me ikkje lenger fullstendig filtrering. Eit oppslag på «hei» vil for eksempel også finna «heissjakt». Derfor må me etterfiltrera søkeresultata for å fjerna desse falske treffa.

Likevel hjelper filtreringa godt på (ein slepp for eksempel unna med å etterfiltrera berre dei cirka 2000 orda som begynner på «hei», i staden for dei halv million orda som finst i ordlista), og programmet er derfor for dei flesta orda omtrent like raskt som før. Unntak er «orda» æ, ø og å (og Æ, Ø og Å), sidan «look»-filtreringa ikkje hjelper i det heile tatt på filtreringa. Men det er ein liten pris å betala for kompatibilitet, synest eg.

Retta i revisjon 167 (med ei lita tilleggsendring i revisjon 168).

Karl Ove Hufthammer <huftis>
Group administrator
Mon 02 Nov 2015 08:03:41 AM UTC, original submission:  

$ dpkg-query -S `which look`
bsdmainutils: /usr/bin/look

$ LC_ALL=C /usr/bin/look -- møllmiddel  /usr/local/share/ordbanken/fullform_nn.dat
look: Invalid or incomplete multibyte or wide character

$ LC_ALL=nn_NO.UTF-8 /usr/bin/look -- møllmiddel  /usr/local/share/ordbanken/fullform_nn.dat
møllmiddel      møllmiddel      subst   nøyt    appell  eint    ub      61752   823
møllmiddel      møllmiddel      subst   nøyt    appell  fl      ub      61752   823
møllmiddel      møllmiddelet    subst   nøyt    appell  eint    bu      61752   823
møllmiddel      møllmidla       subst   nøyt    appell  fl      bu      61752   823


Dette er på Xubuntu 15.10, har vore sånn på alle *buntu eg har prøvd.

Merk forresten òg at man-sida til BSD look seier at den utgåva av «look uses a linear search by default instead of a binary search, which is what most other implementations use by default» – så det er kanskje ikkje så mykje raskare enn grep.



Her er éin måte å testa for om look er BSD:

$ echo ø >/tmp/ø; LC_ALL=C look ø /tmp/ø; echo $?
look: Invalid or incomplete multibyte or wide character
2

eventuelt:

$ look -h ; echo $?
look: invalid option -- 'h'
usage: look [-bdf] [-t char] string [file ...]
2

Anonymous

 

(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

Attach Files:
   
   
Comment:
   

No files currently attached

 

Depends on the following items: None found

Items that depend on this one: None found

 

Carbon-Copy List
  • -email is unavailable- added by huftis (Updated the item)
  •  

    Follow 7 latest changes.

    Date Changed by Updated Field Previous Value => Replaced by
    2016-02-23 huftis StatusNone Fixed
        Open/ClosedOpen Closed
    2016-02-23 huftis StatusFixed None
        Open/ClosedClosed Open
    2016-02-21 huftis StatusNone Fixed
        Open/ClosedOpen Closed
    2016-02-14 huftis Assigned toNone huftis

    Back to the top

    Powered by Savane 3.13-cf05.
    Corresponding source code