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

Submitted by:  None
Submitted on:  Mon 02 Nov 2015 08:03:41 AM UTC  
 
Category: programmetStatus: Fixed
Assigned to: Karl Ove Hufthammer <huftis>Open/Closed: Closed

Add a New Comment(Rich Markup)
   

You are not logged in

Please log in, so followups can be emailed to you.

 

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>
Project AdministratorIn charge of this item.
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>
Project AdministratorIn charge of this item.
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>
Project AdministratorIn charge of this item.
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 File(s):
   
   
Comment:
   

No files currently attached

 

Depends on the following items: None found

Items that depend on this one: None found

 

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

    Please enter the title of George Orwell's famous dystopian book (it's a date):

     

     

    Follow 7 latest changes.

    Date Changed By Updated Field Previous Value => Replaced By
    Tue 23 Feb 2016 05:14:18 PM UTChuftisStatusNone=>Fixed
      Open/ClosedOpen=>Closed
    Tue 23 Feb 2016 04:50:05 PM UTChuftisStatusFixed=>None
      Open/ClosedClosed=>Open
    Sun 21 Feb 2016 05:45:23 PM UTChuftisStatusNone=>Fixed
      Open/ClosedOpen=>Closed
    Sun 14 Feb 2016 04:55:42 PM UTChuftisAssigned toNone=>huftis

    Back to the top


    Powered by Savane 3.1-cleanup1