Hjälp med Ruby, åäö

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Rofhök
Inlägg: 560
Blev medlem: 11 februari 2006, 14:15:19
Ort: nässjö

Hjälp med Ruby, åäö

Inlägg av Rofhök »

Hej håller på lite med ett program som crawlar webbsidor och sparar enskilda ord.
som jag sen ska ha till ordlistor.

Det är inte skrivet av mig från början.

http://www.digininja.org/projects/cewl.php

Problemet jag har är att den vägrar skriva ut åäö har provat varenda regexp som kan tänkas.
Skulle någon vänlig själ vilja ge mig tips eller en knuff i rätt riktning?



Har provat att ändra encoding osv. Jag misstänker att det har med det att göra..

Tack på förhand!
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hjälp med Ruby, åäö

Inlägg av sodjan »

> Har provat att ändra encoding osv.

Från och till vadå ?
I Python brukar jag lösa det med "Latin-1" eller "ISO-8859-1".

>

675 rader kod! Utan någon hint om *var* problemet uppstår.
Går det verkligen inte att göra en mindre "reproducer"? D.v.s.
minsta möjliga kodexempel som uppvisare det aktuella problemet.
Rofhök
Inlägg: 560
Blev medlem: 11 februari 2006, 14:15:19
Ort: nässjö

Re: Hjälp med Ruby, åäö

Inlägg av Rofhök »

Jag har provat 8859-1 och UTF-8

rad 602

Kod: Markera allt

# remove any symbols
words.gsub!(/[^a-z0-9]/i," ")
# add to the array
words_arr+=words.split(" ")
om jag ändrar min regex till

Kod: Markera allt

words.gsub!(/[^A-Za-z0-9\xE4\xE5\xF6\xC4\xC5\xD6]/," ")
Vilket jag tror är rätt avslutning?
Då borde den väl spotta fram de åäö den hittar?

Exempel på hur det ser ut

Kod: Markera allt

tillgng
tjnst
tjnsten
tjnster
tjnstern
tj�nst
tj�nster
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hjälp med Ruby, åäö

Inlägg av sodjan »

Det är inte så att verktyget, på samma sätt som Python, jobbar
med Unicode per default? Då kanske det inte räcker med encoding,
utan man måste convertera till/från Unicode också, kanske...
Gissar lite vilt här... :-)

Varför har du både "tjnst" och "tj�nst" i exemplet?
Kommer de inte från samma källa?

Hur är den där symbolen kodad? Det ser ut som 6E om
jag kollar rätt, det saknas i och för sig i din regex.

Var kommer koderna "xE4\xE5\xF6" från?
Varför just *de* koderna?
Rofhök
Inlägg: 560
Blev medlem: 11 februari 2006, 14:15:19
Ort: nässjö

Re: Hjälp med Ruby, åäö

Inlägg av Rofhök »

Om jag tvingar fram ISO-8859-1 genom att lägga till:

Kod: Markera allt

#Encoding: ISO 8859-1
Så får jag följande:

Kod: Markera allt

checking page http://hemsida.net/sida...
There was a problem handling word generation
Error: #<Encoding::CompatibilityError: incompatible encoding regexp match (ISO-8859-1 regexp with ASCII-8BIT string)>
när den träffar på åäö i texten på en websida
meconer
EF Sponsor
Inlägg: 497
Blev medlem: 27 april 2010, 20:07:46
Ort: Järfälla

Re: Hjälp med Ruby, åäö

Inlägg av meconer »

En googling på felmeddelandet ger t.ex:

http://yehudakatz.com/2010/05/05/ruby-1 ... for-rails/

Där verkar det stå en hel del förklarat.
Rofhök
Inlägg: 560
Blev medlem: 11 februari 2006, 14:15:19
Ort: nässjö

Re: Hjälp med Ruby, åäö

Inlägg av Rofhök »

Nu har jag gjort framsteg tror jag?

Kod: Markera allt

words.gsub!(/[^A-Za-z0-9\xE4\xE5\xF6\xC4\xC5\xD6]/," ").force_encoding("ISO-8859-1")
Ger mig några rätt, men kan inte alls förstår varför vissa ord blir rätt och andra fel?

Kod: Markera allt

Auml
Bara
Behöver
Load
Någon
Senaste
Varfr
Vra
anvnder
behva
bestlla
bestllningar
bestllningsformulren
betaltjnster
brja
frgor
frn
full
hjälp
ivg
jmt
lga
lgga
mail
mailkonton
med
menyn
mjligheten
mnads
ngra
nya
nyheten
nyheter
någon
och
oss
paket
priser
raderats
rsavgift
sjlva
skerhet
skicka
slja
stndigt
support
till
tillgng
tjnst
tjnsten
tjnster
tjnsterna
tjänst
tjänster
trenden
varfr
vlkommen
vra
våra
meconer
EF Sponsor
Inlägg: 497
Blev medlem: 27 april 2010, 20:07:46
Ort: Järfälla

Re: Hjälp med Ruby, åäö

Inlägg av meconer »

Du kan inte köra koden i någon debugger så att du ser vad som händer när den bearbetar texten? Eller modifiera programmet så att du skriver ut källtexten innan. Det kan ju vara någon skillnad på indata som gör att det inte blir några åäö. Du hade ju t.ex både "Tjnst" och "Tjänst" med i listan.
Rofhök
Inlägg: 560
Blev medlem: 11 februari 2006, 14:15:19
Ort: nässjö

Re: Hjälp med Ruby, åäö

Inlägg av Rofhök »

Meconer!

Jag såg precis det mönstret, tjnst och tjänst alltså
Kollade igenom vad den läst och fick fram att den hittade åäö i klartecken.
men så klart hittar den inte HTML-koderna..

Kod: Markera allt

&Ouml; Ö
&ouml; ö
&Auml; Ä
&auml; ä
&Aring; Å
&aring; Å
Något tips på hur jag kan fixa det?
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hjälp med Ruby, åäö

Inlägg av sodjan »

> Jag såg precis det mönstret, tjnst och tjänst alltså

Märkligt, fast jag skrev just det för 5-6 inlägg sedan ?

> Något tips på hur jag kan fixa det?

Det brukar finnas escape/unescape funktioner för att konvertera
dessa koder till/från "vanliga" tecken.
meconer
EF Sponsor
Inlägg: 497
Blev medlem: 27 april 2010, 20:07:46
Ort: Järfälla

Re: Hjälp med Ruby, åäö

Inlägg av meconer »

Jag skulle lägga in en regex till som byter ut alla uml-delar mot de "riktiga" tecknen innan ordletningen.
Rofhök
Inlägg: 560
Blev medlem: 11 februari 2006, 14:15:19
Ort: nässjö

Re: Hjälp med Ruby, åäö

Inlägg av Rofhök »

Sodjan, helt korrekt, men jag började studera det mönstret nyss när jag fick igång åäö. Innan dess så förstod jag inte innebörden av det.

Jag funderar på om det inte är enklare att filtrera bort ord som har html-översatta åäö
Lite input på det kanske?

om jag vill filtrera bort ett helt ord som innehåller tex &Auml; hur ska jag utforma regexen då?

Jag är mycket tacksam för er hjälp, och har även lärt mig att lyssna på Sodjan :)
meconer
EF Sponsor
Inlägg: 497
Blev medlem: 27 april 2010, 20:07:46
Ort: Järfälla

Re: Hjälp med Ruby, åäö

Inlägg av meconer »

Nu kan jag inte Ruby men vad jag förstår så är gsub en global regex replace. Då borde du kunna ha words.gsub( /&Auml;/ , "Ä" ) så byter den ut alla
&Auml; mot Ä. Det blir ju en för varje av ÅÄÖåäö då. Men kikar man på rad 525 i koden så finns det följande:

# check if this is needed
words.gsub!(/&[a-z]*;/, "")

Den där rackaren tar ju bort en massa specialtecken (ej versaler dock). Av kommentaren att döma så är det nåt som den ursprunglige programmeraren har tänkt sig undersöka närmare "sen". Och eftersom han förmodligen har engelska som sitt språk så har han inga bekymmer och därför har "sen" aldrig kommit. Tyska y borde ju också gå bort vad jag förstår. Men det kanske finns något som fixar specialtecknen innan man ens kommer dit, som Sodjan säger. Det är ju i så fall enklast.
Rofhök
Inlägg: 560
Blev medlem: 11 februari 2006, 14:15:19
Ort: nässjö

Re: Hjälp med Ruby, åäö

Inlägg av Rofhök »

meconer, sodjan Tack för er hjälp!

Nu fungerar det ganska bra, ska testköra det inatt, finns säkert fler saker jag kommer på!
Ordlistorna ska det generas hashar av senare. Sen får vi se vad det blir av det.
Förslag är välkomna!

Kod: Markera allt

# strip comment tags
body.gsub!(/<!--/, "")
body.gsub!(/-->/, "")
body.gsub!("&Auml;", "\xC4")
body.gsub!("&auml;", "\xE4")
body.gsub!("&aring;", "\xE5")
body.gsub!("&Aring;", "\xC5")
body.gsub!("&Ouml;", "\xD6")
body.gsub!("&ouml;", "\xF6")

Kod: Markera allt

använder
behöva
beställa
beställningar
beställningsformulären
betaltjänster
frågor
månads
möjlighet
tjänst
tjänsten
tjänster
tjänsterna
trenden
varför
välkommen
årsavgift
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hjälp med Ruby, åäö

Inlägg av sodjan »

Letade du efter någon "unescape" ?
Det brukar ligga i HTML delen av olika verktyg, det
gör så i Python i alla fall. Fördelen är att den tar även
de "&xxx;" som man inte redan har sett... :-)

10 sekunder med Google gav: http://www.ruby-forum.com/topic/183789

Även : http://stackoverflow.com/questions/3788 ... i-for-ruby
Skriv svar