november 30, 2012

Byte av epostadress, samt annat

Äntligen - säger kanske någon - så kommer det något livstecken från Håkan. Den som säger så har i så fall missat följande livstecken:

Men - "tyvärr" kanske någon säger, eventuellt samma någon som ovan nämnda någon - så är denna blogpost endast (fast nästan) för att meddela den viktiga information att jag numera helt gått över till en annan epostadress, nämligen hakank@gmail.com. Detta eftersom Bredbandsbolaget helt och hållet stänger trotjänaren bonetmailen-adressen som varit med i nästan exakt 10 år (tack för denna tid, för övrigt).

Dock, för att ni inte ska gå helt tomhänta härifrån så kan meddelas följande - till viss del helt orelaterade - saker, fast ändå inte eftersom sak numro 2 är väldigt relaterad, på vissa sätt och vis i alla fall:

Språkligheter

Följande ord innehåller vokalerna a,e,i,o,u,y i ordning:

Detta ord innehåller vokalerna a,e,i,o,u,y,å,ä,ö i ordning:

Och ordet tryckutjämningsbehållare är det ord (från den ordlista som be-sökts)
som innehåller flest olika bokstäver (20 stycken). Här är deras fördelning:

Och följande ord är de som innehåller flest distinkta bokstäver, exakt en förekomst alltså (16 unika bokstäver)
utifrån densamma ordlista:

Se nedan under "Senare not" för en senare not om detta.

Byte av mailadressen

Men - kanske någon kunde säga om just denne någon är bevandrad i data(sv)engelska -: Men hördudu Håkan, byte har ju en engelsk betydelse också, har du tänkt på det?. Varpå jag i så fall kunde svara: Ah, kul du tänkte på det! Det tänker man ju inte på om man bara säger ordet högt., och skulle då därefter kunna beskriva en algoritm för just denna betydelse av "byte av mailadress", nämligen transformeringen av hakank@gmail.com till en byte: Byt (sic!) ut varje bokstav till dess ASCII-värde, summera dess värden tillsammans och på denna summa gör man sedan en fin modulo 255 256. För min nya gmail-adress blir det 37. 43 (så nära!).

Varpå man skulle kunna implementera algoritmen i programspråket K (om man hade den inklinationen och det har man ju ibland, eller hur?):

  (+/{_ic x}'"hakank@gmail.com")!255
43

  (+/{_ic x}'"hakank@gmail.com")!256
37

(K är - för övrigt och som eventuellt kan ses med ovanstående kodexempel - ett väldigt uttrycksfullt "array language" som gör att man mycket kärnfullt kan uttrycka sina innersta tankar kring vissa saker i tillvaron, t.ex. saker såsom saker av ovanstående problemstruktur. Språket är en del i APL-familjen och typ en kusin till programspråket J. Hittills har K varit mer favoritspråk än J, men det är möjligt att detta ändras vad det lider.)

Senare not:
Samma person som påpekade (i ett mail som tyvärr - synnerligen felaktigt - ansetts av Google som spam) att det ska vara modulo 256 istället för 255, gav även förslaget "mödoutvecklingsbar" som ett längre ord med unika bokstäver än ovanstående. Även densamma person ansåg att det föreslagna ordet är "lite krystad, kanske" och påpekade att ordet inte fanns i Googles sökmotor; och det måste vi ju ändra på.
Slut senare not

Posted by hakank at 08:59 EM Posted to Diverse | Personligt | Program | Pyssel | Språk

januari 05, 2009

Isomorfa ord (Isomorphic Words) - programmet

2004 skrevs programmet Isomorphic words som söker efter isomorfa ord till ett givet källord. Programmet och begreppet "isomorfa ord" presenterades i Isomorfa ord (Isomorphic Words).

För ett tag sedan kom en förfrågan om källkoden till programmet, varpå en CLI (Command Line Interface)-version av webb-programmet skapades. Tänkte nu att programmet likaväl kunde komma till allmänhetens fromma.

isomorphic_words.py
Programmet isomorphic_words.py är ett Pythonprogram som gör i stort sett allting som CGI-programmet gör. Syntaxen är:

     python isomorphic_words.py word exact_match language

där argumenten har följande betydelse:

* word: ordet som ska isomorferas.
* exact_match: 0 eller 1 (default 1). Om det ska göras en exakt match eller inte. Se ovanstående länkar för betydelsen av detta.
* language: Språk, eller snarare ordlista. CLI-programmet stöder endast språk "eng" som är kopplat till ordlistan /usr/dict/words (standardplaceringen i Linux). Av copyright-skäl etc lämnas inte den svenska ordlistan ut.


Exempel
Här är en exempelkörning på "ordet" (snarare strukturen) abbab, dvs att första och fjärde bokstäverna ska vara samma, och andra, tredje och femte bokstäverna ska vara samma. Ordlistan är /usr/dict/words, dvs engelska ord.


     python isomorphic_words.py abbab

Med resultatet:


Word: abbab
Word structure of 'abbab': [0, 1, 1, 0, 1]
Exact isomorphism: yes
Language: english
Print mappings: yes

beebe
2 chars: "a" -> "b"
3 chars: "b" -> "e"

esses
2 chars: "a" -> "e"
3 chars: "b" -> "s"

poopo
2 chars: "a" -> "p"
3 chars: "b" -> "o"

taata
2 chars: "a" -> "t"
3 chars: "b" -> "a"


It was 4 isomorphics words to 'abbab', with exact isomorphism: yes


Not
Om programmet används får det gärna refereras till ovanstående program och/eller till undertecknad.

Posted by hakank at 11:00 FM Posted to Språk | Systemutveckling

juni 06, 2008

Blogglunch söndagen den 15/6 kl 13.00 samt Markovgenererade bloggträffsammanställningar

Zyrenna-Åsa manar till Blogglunch söndagen den 15/6 kl 13.00, naturligtvis på restaurangen Kin Long. Meddelena Åsa om du tänker komma.


Med anledning av en semantisk förrvirrning angående tidens riktning i en första version av kallelesen skriver hon i kommentarsflödet:


Någon borde testa [att skriva refererat för framtiden]. Skriva referatet i förväg och sedan jämföra med utfallet.

Sammanställningar om redan hända bloggträffar har gjorts. Men att skapa sammanfattningarna innan? Detta kändes som en utmaning!

Eftersom jag är alldeles för lat för att fantisera fram diskussionerna på en hel bloggareträff gjordes det näst bästa: utgick från de redan skriva sammanfattningarna. Det blev det Markovgenerering - inte helt förvånande för den som följt med ett tag. Se t.ex. Generering av Nobelpris-motiveringar (Markov såklart) för mer om Markovgenerering av texter.

Det aktuella programmet som skapar bloggträffsammanfattningar är Markovgenererade bloggträffsammanfattningar.

Om texten inte upplevs vara helt korrekt svenska, föreställ då att författaren är smått förvirrad, berusad eller skriver aningen för snabbt . Eller helt enkelt är poetiskt kryptisk, en kryptopoet .

Posted by hakank at 08:43 EM Posted to Bloggmiddagar | Språk | Statistik/data-analys | Comments (1)

oktober 28, 2007

Svar på Hakkes frågor angående monovokala ord

Den alltid nyfikne hakke skickade följande mail till Jonas Söderström och mig häromdagen. (Mailet är trivialt redigerat.)

Det går ju inte att kommentera den här gamla godingen :( Ooo, så långa ord

Så jag får mejla kommentaren istället :)

/Håkan (hakke)

Vissa saker man läst sitter liksom kvar i hjärnan som en lös liten
skruv, som ibland vickar till och gör sig påmind. Dit hör det här
inlägget, bland annat för att det var här jag upptäckte bloggarna men
också på grund av dess språkglädje.

Nyss stötte jag på ordet "kulturutbud" i en text. Det är inte särskilt
lättläst, en egenskap det troligen delar med många andra monovokala
ord.

Håkan Kjellerstrand hade ju vänligheten att publicera följande lilla
lista över förekomsten av monovokala ord för var och en av svenskans
vokaler:

Vokal: antal ord
----------------
a: 3137
e: 791
i: 1299
o: 960
u: 625
y: 192
ä: 590
å: 280
ö: 272

Några saker jag blir nyfiken på är:


Efter kom sedan tre (3) frågor som av besvaras (eller åtminstone bekommenteras) var och en i det nedanstående. Notera att ordlistan som användes för att skapa ovanstående förekomstfördelning är äldre i relation till den ordlista som används i dessa svar.


Hakkefråga 1. Vilka är de längsta fem monovokala orden för varje vokal?

Svar fråga 1.
Här är de inte bara de fem utan även de sex längsta ord för respektive monovokal . Ordlängden visas efter ordet. Not: Det kan finnas flera ord med samma ordlängd som den minst långa ordlängden för respektive vokal. Programmet visar då endast att det blir exakt sex stycken ord (och slumpmässighetens underbara men samtidigt starkt underskattade men starkt påverkande hand styrde exakt vilka som visas).


Vokal a:
brandalarmapparat: 17
andrahandsmarknad: 17
partssammansatt: 15
branschanpassad: 15
brandhandgranat: 15
tandspacklarnas: 15

Vokal e:
referensfrekvens: 16
frekvensmeterns: 15
telexreglemente: 15
referenselement: 15
meddelelsemedel: 15
pendelfrekvens: 14

Vokal i:
lindningsriktning: 17
tillfriskningstid: 17
lindningsstigning: 17
drivningsriktning: 17
visningsspridning: 17
stigningsriktning: 17

Vokal o:
motorfordonskontroll: 20
kontrollprotokoll: 17
domstolsprotokoll: 17
torvjordskompost: 16
fordonskontroll: 15
kontrollmottolk: 15

Vokal u:
ursprungspunkt: 14
djupbrunnspump: 14
sunhultsbrunns: 14
grundstruktur: 13
sunhultsbrunn: 13
kugghjulspump: 13

Vokal y:
skyddshytt: 10
styckfryst: 10
krymptryck: 10
tryckstyrd: 10
plymprydd: 9
frysskydd: 9

Vokal å:
stålspåntlås: 12
språngstråk: 11
tvångsvård: 10
stånggång: 9
nålsprång: 9
ståltråds: 9

Vokal ä:
rättshjälpsnämnd: 16
kärrsnäppsägg: 13
vändskärsfräs: 13
rännhärdsjärn: 13
skräntärnsägg: 13
ändskärsfräs: 12

Vokal ö:
mörkrödglöd: 11
bröstsköld: 10
förströtts: 10
bröstmjölk: 10
slöjdbjörk: 10
bröstböld: 9

Hakkefråga 2. De korta orden intresserar mig inte särskilt mycket. Det skulle vara intressant att se motsvarande sammanställning begränsad till de ord där det finns minst 3, 4 respektive 5 vokaler. Jag gissar att fördelningen mellan ordrikedomen per vokal då också kan komma att förändras något. Kanske blir ledningen för a och i ännu tydligare?

Svar fråga 2

Först kommer den totala fördelningen av antal vokaler per ord som har
minst 2 vokaler för att få en känsla för vad som kommer:


Fördelning av antal vokaler per ord:
2: 9868
3: 3215
4: 539
5: 60
6: 6

Sedan med hakkes föreslagna begränsningar om minst v vokaler.


Vanligaste bokstaven (minst 2 monovokaler):
a: 7377
e: 2080
i: 1612
o: 1275
u: 436
ä: 410
ö: 253
å: 196
y: 49

Vanligaste bokstaven (minst 3 monovokaler):
a: 2447
e: 717
i: 350
o: 229
u: 64
ä: 9
å: 2
ö: 2

Vanligaste bokstaven (minst 4 monovokaler):
a: 354
e: 179
i: 38
o: 33
u: 1

Vanligaste bokstaven (minst 5 monovokaler):
a: 42
e: 16
i: 4
o: 4

Vanligaste bokstaven (minst 6 monovokaler):
e: 4
a: 1
o: 1

Det finns inga ord i ordlistan med 7 eller fler monovokaler.


För fullständighetens skulle visas här även fördelningen av ordlängden (för ord med minst 2 monovokaler):


3: 22
4: 300
5: 1226
6: 2486
7: 2964
8: 2744
9: 1886
10: 995
11: 517
12: 299
13: 151
14: 62
15: 16
16: 6
17: 13
20: 1

Hakkefråga 3. Undrar om fördelningen ändras över tiden? Sedan listan skapades har det ju kommit en ny version av saol.


Svar (eller snarare kommentar till) fråga 3

Hakke har troligen en poäng att ovanstående beskrivna fördelningar förändras över tiden. Det är dock utanför mitt experimenterande eftersom jag inte använder SAOL utan Den stora svenska ordlistan (eller snarare ett derivat av den ordlista man kan ladda ner här och om vilket kommenteras något mer här nedan).

Svar på anticiperad följdfråga: Nej, jag har inte sparat olika DSSO-versioner för denna typ av jämförelse.

Några vidarekommentarer
För ett antal (cirka 2) månader sedan förnyades monovokaldiskussionen på Blind Höna, i Ooo, så många o:n! Monovokal toppnotering tangerad (där mina findings bygger på samma ordlista som ovanstående analyser). Se även Söndagspyssel där den ursprungliga monovokaldiskussionen fortsatte att diskuteras.

DSSO-listan är samma ordlista som man hittar på http://sv.speling.org/files/ (det görs en omdirigering till DSSO-sajten). Denna ordlista har även används i andra språk-/ordprojekt, t.ex.
* Visa ordklasser (presenteras i Svenska ordklasser samt gissning med hjälp av ordsuffix)
* Consonants Away (presentation i Consonants Away)
* samt ett gäng andra s.k. useless-projekt.

Posted by hakank at 09:50 FM Posted to Språk | Statistik/data-analys | Comments (7)

februari 04, 2007

Experimentellt tillägg i "Visa ordklasser": endast suffixgissning

En mailfråga som gäller något relaterat gjorde att programmet Visa ordklasser (presenterades i Svenska ordklasser samt gissning med hjälp av ordsuffix) nu har utökats med den experimentella funktionen Använd endast suffix för klassifikation, som försöker att klassificera ordklass helt utifrån ordens suffix, utifrån den lista som finns i suffixes1-4.txt.

Utan att ha gjort någon större undersökning kring funktionen kan berättas att det inte blir speciellt bra.

Frasen Sjön har sina källor ganska långt upp i norr och där är ett härligt land för en sjö testades. (För vidare bakgrund till frasen, se här.)

I standardläge (dvs klassifikationen görs endast med uppslag i ordlista) blir det följande resultat:

sjön<substantiv:bestämd form singularis> har<verb:presens> sina<pronomen|verb:infinitiv|verb:imperativ> källor<substantiv:obestämd form pluralis> ganska<adverb> långt<adjektiv:positiv neutrum|adverb> upp<adverb> i<preposition|adverb> norr<adverb> och<konjunktion> där<adverb> är<verb:presens> ett<räkneord> härligt<adjektiv:positiv neutrum> land<substantiv:obestämd form singularis|substantiv:obestämd form singularis|substantiv:obestämd form pluralis> för<verb:presens|verb:imperativ|substantiv:obestämd form singularis|preposition|konjunktion|adverb> en<räkneord|substantiv:obestämd form singularis|pronomen> sjö<substantiv:obestämd form singularis>


Med Använd endast suffix för klassifikation blir resultatet följande något nedslående. Alla möjliga varianter visas, sorterade efter antal förekomster i den ordlista som utgåtts ifrån. T.ex. klarar denna variant inte av att klassificera "sina". Ett framtida projekt vore att utöka antal tecken i suffixen. Samt naturligtvis även att göra en mer vetenskapsliknande undersökning hur bra denna metod är.


sjön<OKÄNT|n substantiv:bestämd form singularis(15411)|n substantiv:bestämd form pluralis(2767)|n substantiv:obestämd form singularis(1418)> har<OKÄNT|r substantiv:obestämd form pluralis(12206)|r verb:presens(5417)|r substantiv:obestämd form singularis(1339)|ar verb:presens(4446)|ar substantiv:obestämd form pluralis(4394)|r substantiv:obestämd form pluralis(12206)|r verb:presens(5417)|r substantiv:obestämd form singularis(1339)> sina<OKÄNT|na substantiv:bestämd form pluralis(13741)|a substantiv:bestämd form pluralis(13743)|a adjektiv:bestämd form(10374)|a adjektiv:pluralis(10335)|a verb:infinitiv(5005)|a verb:imperativ(4170)|a substantiv:obestämd form singularis(1648)> källor<OKÄNT|or substantiv:obestämd form pluralis(1641)|r substantiv:obestämd form pluralis(12206)|r verb:presens(5417)|r substantiv:obestämd form singularis(1339)> ganska<OKÄNT|ska adjektiv:bestämd form(2659)|ska adjektiv:pluralis(2659)|ka adjektiv:bestämd form(2751)|ka adjektiv:pluralis(2750)|a substantiv:bestämd form pluralis(13743)|a adjektiv:bestämd form(10374)|a adjektiv:pluralis(10335)|a verb:infinitiv(5005)|a verb:imperativ(4170)|a substantiv:obestämd form singularis(1648)> långt<OKÄNT|gt adjektiv:positiv neutrum(4337)|t adjektiv:positiv neutrum(10844)|t verb:supinum(5374)|t substantiv:bestämd form singularis(4404)|t substantiv:obestämd form singularis(2686)|t verb:perfekt particip, neutrum(1684)> upp<OKÄNT> i<OKÄNT> norr<OKÄNT|r substantiv:obestämd form pluralis(12206)|r verb:presens(5417)|r substantiv:obestämd form singularis(1339)> och<OKÄNT> där<OKÄNT|r substantiv:obestämd form pluralis(12206)|r verb:presens(5417)|r substantiv:obestämd form singularis(1339)|r substantiv:obestämd form pluralis(12206)|r verb:presens(5417)|r substantiv:obestämd form singularis(1339)> är<OKÄNT|r substantiv:obestämd form pluralis(12206)|r verb:presens(5417)|r substantiv:obestämd form singularis(1339)|r substantiv:obestämd form pluralis(12206)|r verb:presens(5417)|r substantiv:obestämd form singularis(1339)> ett<OKÄNT|t adjektiv:positiv neutrum(10844)|t verb:supinum(5374)|t substantiv:bestämd form singularis(4404)|t substantiv:obestämd form singularis(2686)|t verb:perfekt particip, neutrum(1684)|t adjektiv:positiv neutrum(10844)|t verb:supinum(5374)|t substantiv:bestämd form singularis(4404)|t substantiv:obestämd form singularis(2686)|t verb:perfekt particip, neutrum(1684)> härligt<OKÄNT|ligt adjektiv:positiv neutrum(1429)|igt adjektiv:positiv neutrum(4258)|gt adjektiv:positiv neutrum(4337)|t adjektiv:positiv neutrum(10844)|t verb:supinum(5374)|t substantiv:bestämd form singularis(4404)|t substantiv:obestämd form singularis(2686)|t verb:perfekt particip, neutrum(1684)> land<OKÄNT|d verb:perfekt particip, utrum(1400)> för<OKÄNT|r substantiv:obestämd form pluralis(12206)|r verb:presens(5417)|r substantiv:obestämd form singularis(1339)|r substantiv:obestämd form pluralis(12206)|r verb:presens(5417)|r substantiv:obestämd form singularis(1339)> en<OKÄNT|en substantiv:bestämd form singularis(12046)|en substantiv:bestämd form pluralis(2764)|n substantiv:bestämd form singularis(15411)|n substantiv:bestämd form pluralis(2767)|n substantiv:obestämd form singularis(1418)|en substantiv:bestämd form singularis(12046)|en substantiv:bestämd form pluralis(2764)|n substantiv:bestämd form singularis(15411)|n substantiv:bestämd form pluralis(2767)|n substantiv:obestämd form singularis(1418)> sjö<OKÄNT>


Posted by hakank at 06:52 EM Posted to Språk | Comments (3)

Ultimate Research Assistant (Web Edition)

Ultimate Research Assistant (Web Edition) är en trevlig (men tyvärr långsam) applikation för att sammanställa sökresultat på ett mer intelligent sätt än de sökmotorerna. Systemet listar ut fraser som anses vara signifikanta för sökordet och visar representativa sajter

Exempel: sökning på "blogg" ger följande nyckelord.

Av ovanstående fraser anses denna blogg vara representativ för flera: "att det", "jag har", "att jag", "om det", "det som", "om man", "som jag". Vilket kan få en att undra...

Vad gäller urvalet av fraser kan man möjligen anta att stackarn blivit förvirrad av innehållet av de 50 första sökresultaten av "blogg" på Yahoo!, eller så är det helt enkelt att - som det heter på julafton - att "Tony förstår inte språket så bra". Intressant nog finns "Climat Change" med, en het potatis i både inom och utanför bloggvärlden.

Sökningar på mer stringenta fackfraser såsom "text mining" (som råkar vara den teknik som Ultimate Research Assistant använder) och "Diaconis" (en husgud som ofta används för testning av sökverktyg) ger betydligt bättre resultat och känns användbart.

Man bör dock notera den brasklapp som står på sajten: It is an experimental proof-of-concept prototype, and should not be used for any official purposes.


Se vidare
Andy Hoskinson:
Creating the Ultimate Research Assistant där tekniken bakom verktyget förklaras.

Samme Hoskinson har även skapat verktyget Keyword Analysis Tool - Advanced Keyword and Keyphrase Extraction Technology for Content Analysis and Search Engine Optimization (SEO).

Wikipedia: Text mining

Tyvärr koms det här även att tänkas på 200 dagar som bl.a. visar förekomsterna av ord på hakank.blogg där ordet "jag" kom på fjärde plats, samt "jag" i bloggen där vidare språkanalyser genomfördes.


(Verktyget funnet via webbserverloggen.)

Posted by hakank at 05:46 EM Posted to Språk | Statistik/data-analys | Comments (4)

november 30, 2006

Alster på Karlskrona Konsthall

Enligt uppgift finns sedan helgen några av mina (litterära) alster på Karlskrona Konsthall. Och då menar jag , nämligen som fönsterdekor (tillsammans med andra textutsnitt).

Alstren är följande tre något-ur-sammanhangen-lösryckta-men-funkar-förhoppningsvis-ändå-som-oneliners:

Mer liknande - och inte fullt så liknande samt inte alls liknande - textuella sammanflätningar finns att beläsa i Litterära Alster. Texterna ovan är specifikt från Olika saker (ä.k.s. "Stories").


Den som har bildbevis på fönstertexterna eller annorstädes känner för att kommentera är välkommen att maila till hakank@bonetmail.com.

Posted by hakank at 09:14 EM Posted to Språk

september 27, 2006

Generering av Nobelpris-motiveringar (Markov såklart)

Nu ...
Nu har spekulationerna om Nobelpriset i litteratur börjat.


I stället för att gissa vem...
I stället för att gissa vem som kommer att få detta välansedda kulturpris har istället skrivits ett program som genererar motiveringar i syfte att efternå dessa de synnerligen elokventa språkliga konstruktionerna. Samtliga tidigare Nobelpris-motiveringar (litteraturpriset) finns hos Svenska akademien och är precis de som utgåtts ifrån i programmet.


Markovgenererade Nobelprismotiveringar (litteraturpriset)
Det nobelprismotiveringsgenererande programmet heter Markovgenererade Nobelprismotiveringar (litteraturpriset) och använder den här tidigare använda tekniken med Markovkedjor (se nedan för referenser).


Några slumpade exempel
Här är några slumpmässiga exempel på de av programmet genererade motiveringarna. Notera att orden "hans" respektive "hennes" har ersatts med "hans/hennes" så det är enkelt att bara kopiera-och-klistra texten och stryka endera val beroende på pristagarens kän, måhända efter ytterligare viss s.a.s. bearbetning av det givna materialet.


* för hans/hennes romankonstnärlig fulländning som med liknelser burna av fantastiska och levande i skildringen av människans belägenhet inom den dramatiska diktning som i nya former för roman buddenbrooks vilken stundom i sagospelets stora ryska berättarkonst som på självständigt besjälade diktning söker svar på människans belägenhet i en värld som genom en poesi som mot bakgrund av sinnlig styrka tolkat humana värden i tecknet av en historiska framställningskraft samt den skönhet och fantasifulla berättartradition levandegör en modern människans utsatthet

* för ett vidsträckt inflytande i vår vittskådande berättarkonst som infört en ny världsdel i litteratur

* för hans/hennes intensitet


Som kan ses ... (kommentar på ovanstående)
Som kan ses med viss men inte önskad tydlighet är inte alla förslag alldeles lysande. Därför presenteras flera förslag varje gång.


Parametern n (om parametern n)
Vad gäller parametern n (n såsom i n-gram) rekommenderas ett värde kring 5 eftersom ett betydligt högre värde ger i stort sett kopior av originaltexterna, och ett betydligt lägre ger gibberish (knappt igenkännlig svenska). Men experimentera gärna, det är precis sådant sådana här program är till för.


Man bör kanske notera... (om att n-gram har två något olika betydelser)
Man bör kanske notera att n-gram i dessa sammanhang har två något olika betydelser:
1) n är antalet ord som man arbetar med
2) n är antalet tecken (normalt bokstäver samt mellanslag, möjligen även siffror).

Ovan- och nedanstående program använder n-gram i den senare betydelsen, dvs arbetar på teckennivå. Det finns säkert någon tredje variant, men den är i så fall inte relevant. Ledsen om detta förvirrat någon läsare. Ledsen om denna kommentar ytterligare förvirrar samma eller andra läsare.

Se även
Automatisk identifikation av språk (språkidentifiering)
Bloggidentifiering (Blog Identification)
Magenta: När orden inte räcker till
Wikipedia: N-gram

Några andra program som använder samma teknik:


Andra bloggar om: , , , .

Posted by hakank at 08:25 EM Posted to Program | Språk | Comments (3)

juni 09, 2006

Utanvitsar (utangåtor, utanrebusar): ett program

Håkan Karlsson har beskrivit ett skoj ordpyssel i Utanvitsen, där det gäller att komma på vilket ordpar som avses utifrån en bokstav samt en liten beskrivning.

Några exempel:

k: barnlösa monarker ( = kungar utan ungar)
r: outvecklad kommunism (= revolution utan evolution)
r: torkade fikon (frukt utan fukt)

I kommentarerna ger Bloggblad följande paradigmatiska exempel (som Lotten Berglund löste elegant)

m = magerlagd engelsman (mister utan ister)

Läs mer underbara exempel hos hakke.

Mer schematiskt:

[bokstav]: "ord_X med [bokstav]" utan "ord_X utan [bokstav]"

Det kan även finnas mer strikta regler, t.ex. att [bokstav] måste finnas i början eller i slutet av ord_X (denna regel används i programmet som beskrivs nedani.


Programmet Utanvitsar
Efter och enligt önskemål från hakke har jag skrivit ett litet program för att underlätta konstruktionerna av själva utanvits-paren (som jag något fånigt kallar "utanvitskompisar"): Utanvitsar.

Ordlistan som används är på cirka 90 000 svenska ord.


Exempel på en körning
Ordet mister ger följande två kompisar:

* mister - ister
* mister - miste

Och ordet yra ger denna ansamling:

* fyra - yra
* hyra - yra
* lyra - yra
* myra - yra
* pyra - yra
* syra - yra
* yra - yr

För att underlätta konstruktionerna ännu mer har det skapats en fil med mer än 10 000 svenska sådana par (utifrån samma ordlista på cirka 90 000 ord som används i programmet): utanvitspar_swe.txt. Filen innehåller även ordböjningar som näppeligen är speciellt skojiga (t.ex. "frostskadad - frostskada").

Med ett enkelt handgrepp kan man även få engelska utanvitskompisar (without pal pairs?).


Noter
Not 1
Programmet söker endast efter utanvits-kompisar som kan skapas genom att första eller sista bokstaven tas bort/läggs till. Detta innebär att kombinationen "frukt - fukt" inte kommer med. Denna begränsning är helt enligt hakkes önskemål.

Not 2
Det är inte alls säkert att det finns en sådana kompisar för det givna ordet.

Not 3
Den där beskrivningen som följer efter den ensamma bokstaven - som helst ska vara poängfull och förvirrande och om möjligt med en samhällstillvänd udd - får man själv komma på.

Posted by hakank at 09:39 EM Posted to Program | Pyssel | Språk | Comments (1)

februari 13, 2006

Svenska synonymvägar

Gårdagens Svenska synonymer och begreppet "surfa synonymer" inspirerade till ett annat program: Svenska synonymvägar.

Programmet utgår från ett ord och dess synonymer (om sådana finns) och visar deras synonymer, och sedan deras synonymer osv. Man kan notera att ofta försvinner orginalordets betydelse snabbt så och det blir helt andra spår att vandra. Därav namnet synonymvägar.

Exempel
Ett väldigt litet exempel är synonymvägen för fågel som endast innehåller 5 ord. Det ser ut så här:


fågel


fjäderfä
flygfä
pippihöns

Synonymerna länkas alltså, vilket gör att man kan klicka runt så att man bli alldeles snurrig i huvudet....

Som sagt, detta var ett litet exempel med endast 5 ord i synonymvägen. Det finns betydligt större vägar, t.ex. för ordet känslig där vägen har 6682 ord. OBS: Det tar en stund för programmet att lista ut vägen, och sedan för webbläsaren att rendera sidan (som är på över 1 Mb).


Not
Synonymlistan är exakt samma som används i programmet Svenska synonymer, och som presenterades i blogganteckningen Svenska synonymer.

En not av mer teknisk natur är att jag hellre skulle vilja visa detta som en graf med bågar och noder för att visa kopplingarna (synonymer) mellan orden.


Eventuell vidare utveckling
Förutom att presentera det som en synonymgraf vore det intressant att se hur lång den största vägen är, hur många "isolerade synonymöar" det finns (där endast ett fåtal ord sammanbinds med varandra men inga andra), och överhuvudtaget analysera mer med grafteoretiska eller komplexa nätverkstekniker. Det bli eventuellt ett senare projekt.

Se även
Blogganteckningen Svenska synonymer
Programmet Svenska synonymer

För vidare utveckling och analys kan möjligen litteratur och redskap som presenteras i Social Network Analysis och Complex Networks - En liten introduktion vara av intresse.


Uppdatering 1 - angående synonymkluster
Det skapades ett analysprogram för att studera de olika synonymklustren. Ett kluster innebär alltså att oavsett vilket ord man söker i klustret kommer det att visas endast dessa ord, där endast den inbördes ordningen förändras beroende på vilket ord man börjar på.

Intuitionen som nämndes i kommentaren till Simon nedan stämde relativt bra: Det finns ett enda mycket stort kluster ("Den Stora Vägen", "Det Gigantiska Klustret") som innehåller 6682 ord (känslig-klustret), därefter ett på 32 ord (bandit), ett på 30 (bastard) etc.

Fördelningen av klusterstorlekn är som följer. Uttolkning: det finns 1269 synonymöar (synonymgränder?) med endast 2 ord, 271 stycken kluster som innehåller endast 3 ord etc, och som nämnts ovan ett kluster med 6682 ord. Power law, någon?


Klusterstorlek: Antal kluster
2: 1269
3: 271
4: 87
5: 57
6: 34
7: 21
9: 13
8: 8
11: 5
10: 5
16: 4
12: 4
6682: 1
32: 1
30: 1
24: 1
23: 1
21: 1
20: 1
19: 1
15: 1

Filen synonym_kluster.txt innehåller samtliga kluster, enligt strukturen:

Antal ord i klustret: Orden som ingår i klustret (alfabetiskt sorterade)

Filen är sorterad alfabetiskt efter första ordet i klustret.

Kommentar: I och med att det endast finns ett mycket stort kluster är strukturen relativt stabil i meningen att om man lägger till en synonym så påverkas inte resultatet så mycket. Det är dock kvar att studera vad som händer om man tar bort en eller ett fåtal synonympar från det stora klustret. Det är möjligt att det finns ett enda synonympar som håller ihop två (mindre) kluster till detta stora. Men det tänker jag inte kolla in i kväll...


Uppdatering 2 - Kortaste synonymvägen mellan två ord
[Senare not: Det uppstod tyvärr en tankebugg vid ursprungsbefolningen av talen i listan, och som upptäcktes efter att Simon kommenterat resultatet. De tidigare och felaktiga värdena är kvar men överstrukna för att kommentarerna ska bli förståeliga; samt i ärlighetens namn.
Trots denna nesliga händelse fortsätter jag hävda att simuleringar är ett bra sätt att räkna ut mer komplicerade sannolikheter.]

Simon föreslog i sin kommentar en trevlig applikation: Kortaste synonymvägen mellan två ord.

Klusteranalysen ovan gav dock upphov till en fundering hur stor sannolikhet det är att två ord verkligen har en synonymväg. Om de två orden överhuvudtaget finns i listan (av cirka 25000 ord) krävs det även att de tillhör samma kluster, annars kan man inte skapa någon synonymväg. Om orden finns i det stora klustret (med 6682 ord) kan det vara intressant, liksom om orden finns i de andra större klustren (säg större än 10 ord). Man kan här notera att det finns hela 1787 kluster (se ovan för den exakta fördelningen).

För att räkna ut sannolikheten att två ord tillhör samma kluster (om båda orden finns i listan) gjordes en R-simulering enligt följande:

* Varje kluster representeras av ett unikt tal, och antalet ord bestämmer hur många gånger detta tal finns i en lista (kallad "kluster" i R-koden nedan). Funktionen rep(tal, antal) kan användas för att populera listan med talen.

* Ur denna stora lista av tal dras slumpmässigt två element.

* Om de två dragna talen är lika motsvarar det samma kluster, vilket alltså ger en synonymväg. Är talen olika finns ingen sådan väg

* Detta görs ett antal 1000 gånger.

R-koden för själva simuleringen (med 100000 dragningar) ser ut så här:

> sum(replicate(100000, diff(sample(kluster,2)))==0)/100000
[1] 0.02567
0.33059

Resultatet innebär att det är cirka 2.6% 33% sannolikhet att två tal (ord) tillhör samma kluster. Det är inte mycket. Det är ju inte så pjåkigt.

Ovanstående resultat förutsätter alltså att båda två orden fanns i synonymlistan, vilket troligen inte är fallet för en normal användning av ett sådant program.

Varpå nästa analys göres: Om vi nu antar att det finns en möjlighet att användaren av systemet anger något av - säg - 75000 ord som inte finns i synonymlistan, hur stor är då sannolikheten att det finns en väg mellan dessa ord.

Här fortsätter simuleringen med samma princip och lägger 75000 unika tal en enda gång, vilket motsvarar det "klusterlösa" orden som inte finns i synonymlistan.

Motsvarande simulering (med 10000 dragningar) ger vid handen att sannolikheten är väldigt liten, nämligen endast:cirka 0.00051 (0.5 promille) 0.007 (7 promille). Det är ännu mindre. Det är inte så mycket.

Trots detta nedlyftande resultat finns det möjlighet att Simons föreslagna program ser världens ljus... Trots alternativt tack vare ovanstående resultat finns det möjlighet att någon variant av Simons föreslagna program kommer att se världens ljus...

Det finns även en tanke att från en ordlista med cirka ord lägga till böjningsformer till de synonymfilens grundord. Detta skulle göra sannolikhet för att orden finns med i (den då utökade) synonymlistan större.


Tillägg till Uppdatering 2
Vid uppdateringen av föregående analys (i "Uppdatering 2") testades även med att anta att det skulle vara färre ord än 75000 som inte fanns i synonymlistan. För 25000 sådana extra ord blir sannolikheten cirka 3.3% för en synonymväg. Möjligen är både 75000 och 25000 orealistiskt många. Här nedan är sannolikheten (inte procent) för några värden av antal icke-synonymord ("extra ord").

Antal extra ordSannolikhet (simulerad) att två
sökord ingår i sammakluster
750000.007
250000.033
100000.097
50000.161
10000.281

Det är troligen en uppgift för kognitiva psykologer att lista ut hur stor ens mentala ordlista är när man använder denna typ av tjänster. En möjlighet är att logga de ord som används i det eventuella framtida program och sedan göra lite analyser. Obs: ingen annan information än orden skulle i så fall loggas; inget IP-nummer, inget datum, utan endast de två potentiella synonymvägsorden..

Posted by hakank at 07:52 EM Posted to Program | Språk | Comments (7)

februari 12, 2006

Svenska synonymer

På sidan Folkets synonymlexikon Synlex - en sida under Skoldatanätet - Lexin - finns att ladda ner en XML-fil med cirka 25000 svenska synonymer (filen är ungefär 1.5Mb stor).

Synonymlistan har skapats bl.a. genom att användare av Lexin-programmen har fått skriva in egna synonymer samt bedömt hur bra synonymerna är, därefter har filteringar av materialet gjorts. Se Synlex-sidan för vidare förklaring. Nedan direktlänkas till två rapporter om projektet.


Programmet Svenska synonymer
Omedelbart efter att Synlex-sidan upptäcktes skrevs ett program för att söka i synonymlistan där en lokal kopia av preprocessad XML-filen används. Programmet heter Svenska synonymer och har följande finesser som jag saknat i andra webbaserade synonymlexikon:

Talen inom parentes efter synonymerna anger medelvärdet av hur bra synonymerna ansetts vara (kallas "level" i XML-filen) . Synonymlistan innehåller endast de synonymer som har medelvärde 3.0 eller mer, med max 5.0 (så man kan se det som betyg enligt den gamla skolordningen).

Fördelningen av dessa värden är

3.0: 3394
3.1: 1936
3.2: 2076
3.3: 1800
3.4: 1336
3.5: 1511
3.6: 1282
3.7: 837
3.8: 674
3.9: 176
4.0: 3158
4.1: 1160
4.2: 1390
4.3: 1064
4.4: 646
4.5: 914
4.6: 896
4.7: 446
4.8: 424
4.9: 60
5.0: 710


Se även
På sidan Folkets synonymlexikon Synlex finns (längst ned) två referenser till hur projektet fortlöpt:
Viggo Kann: Folkets användning av Lexin – en resurs (PDF)
Viggo Kann, Magnus Rosell: Free Construction of a Free Swedish Dictionary of Synonyms (PDF)


Sajten Synonymer.se använder data från Göran Walters Bonniers synonymordbok (boken finns även som bokreabok på Bokus att förhandsbeställa).

Posted by hakank at 09:13 EM Posted to Program | Språk

januari 30, 2006

Svenska ordklasser samt gissning med hjälp av ordsuffix

Programmet Visa ordklasser visar ordklasser för svenska texter. Programmet bygger helt på uppslag i en ordlista och gör ingen grammatisk analys eller något sådant avancerat. Finns flera möjliga ordklasser för ett ord visas samtliga kända.

Som exempel visas hur den första av föregående meningar analyseras av programmet:


programmet<substantiv:bestämd form singularis> visa<verb:infinitiv|verb:imperativ|adjektiv:bestämd form|adjektiv:pluralis|substantiv:obestämd form singularis|substantiv:obestämd form pluralis|substantiv:bestämd form pluralis> ordklasser<substantiv:obestämd form pluralis> visar<verb:presens|substantiv:obestämd form pluralis> ordklasser<substantiv:obestämd form pluralis> för<verb:presens|verb:imperativ|substantiv:obestämd form singularis|preposition|konjunktion|adverb> svenska<adjektiv:bestämd form|adjektiv:pluralis|substantiv:obestämd form singularis|substantiv:obestämd form singularis> texter<substantiv:obestämd form pluralis>


Ord i fetstil är de ord som analyseras. Därefter kommer en lista av kända ordklasser för detta ord inom hakar (< ... >). Finns det flera varianter avskiljes de med tecknet "|" (som här ska läsas som "eller").

Programmet bygger helt på information från Den stora svenska ordlistan (sv.speling.org, som dock verkar onåbar för tillfället). Rätt mycket efterarbete (filtering och annan skyffling å data) har gjorts för snabb access av informationen.


Gissa ordklass med hjälp av suffix
Alla svenska ord finns inte med i ordlistan (och hur skulle det kunna göra det med alla fina nya konstruktioner som ständigt skapas av alla härliga nyordkonstruktionskreativa personer). Den använda ordlistan innehåller cirka 200000 ord, inklusive böjningar och andra varianter. Okända av ordlistan ord visas som OKÄNT, och listas även sist på sidan.

Det har skapats en experimentell funktion att gissa ordklass med hjälp av ordens suffix, som slås på via valet Gissa ordklass via suffix. Det finns även möjlighet att sätta en gräns för hur stort "stöd" en suffix måste ha, dvs hur många ord som har ett visst suffix i kombination med en viss ordklass. Ju lägre värde desto fler förslag kan komma att visas; låga värden kan ge (allt för) många alternativ. Standardvärdet är 1000 som suffixstöd, men ändra det gärna för att experimentera lite.

Det största suffixstödet är 19976: suffixet s för ordklassen substantiv:bestämd form singularis, genitiv. En lista över samtliga använda suffix med minst suffixstöd 2 finns i filen suffixes1-4.txt, sorterad på suffixstöd.


Exempel på ordklassgissning
Låt oss ta orden blogg, bloggare, bloggat (som alltså inte finns i ordlistan). De visas på följande sätt när valet Gissa ordklass via suffix är påslaget och 1000 som suffixstöd:


blogg<OKÄNT|g adjektiv:positiv utrum(4278)|g substantiv:obestämd form singularis(2577)> bloggare<OKÄNT|are substantiv:obestämd form pluralis(1106)|are substantiv:obestämd form singularis(1077)|re substantiv:obestämd form pluralis(1107)|re substantiv:obestämd form singularis(1104)|e verb:preteritum(5120)|e substantiv:obestämd form singularis(2288)|e adjektiv:komparativ(1320)|e substantiv:obestämd form pluralis(1124)|e verb:perfekt particip, plural(1121)> bloggat<OKÄNT|at verb:supinum(4425)|at verb:perfekt particip, neutrum(1112)|t adjektiv:positiv neutrum(10844)|t verb:supinum(5374)|t substantiv:bestämd form singularis(4404)|t substantiv:obestämd form singularis(2686)|t verb:perfekt particip, neutrum(1684)>


Här ser vi t.ex. att första förslaget för blogg är felaktigt, däremot är det andra alternativtet korrekt (substantiv:obestämd form singularis). Siffrorna efter förslaget är suffixstödet.

Not: Gissningarna sorteras först på suffixlängd (med längsta suffixet först) och därefter antal suffixstöd. Anledningen till att längden valts som första sorteringsordning är att ett längre suffix är gissningsvis mer korrekt än ett kortare. Så är i alla fall min nuvarande experimentella teori.


Se även
Tyvärr har jag inte hittat någon bra webbsida som förklarar alla ordklasser/böjningsformer som används av programmet. sv.speling.org hade en sådan (har jag för mig), men den koms alltså inte åt nu. Förslag på sådan sida emottages gärna.


Möjligen relaterat
Något om prefixträd sorterade på lite olika sätt samt komprimering

Posted by hakank at 06:56 EM Posted to Program | Språk

januari 25, 2006

Word Meld Simple - en etyd med Ajax-tekniken

Som några andra bloggare leker jag lite med Ajax-tekniken, vilket pratas mer om nedan.

Men först något om själva programmet.


Word Meld Simple
Word Meld är ett program som försöker att skapa "kreativa" ord (helst skulle det vara "roliga", men det är lite väl förmätet) utifrån ett grundord och ord från en ordlista, genom att leta upp gemensamma prefix och suffix.

En nyss utvecklad variant är Word Meld Simple som använder en enklare strategi: Utifrån två givna ord föresöker programmet att vara kreativ genom att lista ut gemensamma prefix/suffix samt n-gram (infix). Det är alltså detta program som använder Ajax-tekniken.


Exempel
Användningsområdet för slika program är inte speciellt klart, men en tanke är att om två företag skulle gå ihop kan programmet vara till hjälp för att skapa det nya företagsnamnet. T.ex. om google och Microsoft skulle slå ihop sina påsar (hädiska tanke!) föreslår programmet två kombinationer:

gooft
microsogle

varav det ena förslaget (det andra) ju inte låter dåligt.

Andra tankar är att man tycker att en kombination av två ord är för lång och man vill slå ihop dem till ett enda. T.ex. statistiskt och signifikant:

signifikatistiskt
signifikt
signifiskt
stant
statistikant
statistisignifikant
statistiskant

Nå, det kanske inte blir så mycket enklare, men det är i alla fall ett ord.

En ytterligare användning är - naturligtvis - att skapa "vitsordet" för en ordvits.


Här är några fler kombinationer, mer eller mindre slumpmässigt tagna ur luften. Visst urval har gjorts av de av programmet presenterade ordkombinationerna.

firefox + unix:
unirefox


doktor + ordinera (som Henrik Sundström har en skoj liten tävling kring):
doktordinera


socialdemokraterna + moderaterna:

mokraterna
modemokraterna
socialderaterna
socialdemoderaterna


randomisera + kjellerstrand
kjellerstrandomisera


Ajax
Programmet är alltså skrivet med Ajax-tekniken, så några ord om detta kanske kan vara på sin plats. Möjligen är det inte det bästa exemplet, men good enough är också bra.

Vanliga CGI-program (som jag ofta använder för mina privata program) laddar om sidan för varje gång man kör programmet och man måste skyffla en massa information varje gång. Ajax använder en annan metodik och hämtar data (t.ex. kör nödvändiga program) i bakgrunden, s.a.s sömlöst. Detta gör att man kan behålla information från sidan utan att skicka med en massa parametrar (vilket tenderar att bli ett härke och är helt enkelt trist). Bibehållandet av datan på samma sida symboliseras med räknaren av antalet sökningar, en JavaScript-variabel som uppdateras varje gång.

För att göra programmeringen lite enklare har här används Perls modul CGI::Ajax (f.d. perljax), men det är inte speciellt svårt att rulla en egen-variant för ett så simpelt program som detta (enkelt vad gäller data som ska skyfflas via webben, alltså) . Uppdatering: jag fixade ett av problemen genom att skriva en egen variant.

Notera att något är lurt i vissa webbläsare vad gäller den nationella tecknena (t.ex. "å", "'ä" och "ö").


Se även
Andra "useless" program av liknande slag.

Ajax Patterns, med Ajax-ramverk i olika programspråk
googlering på "ajax programming vilket ger en massa träffar.


Uppdatering
Förutom problemet med de nationella tecknen har det rapporterats om att för vissa webbläsare "hänger det sig" när man skrivit in första ordet. Kollar på detta och återkommer...

Uppdatering 2 - återkomsten
Nu får i alla fall inte jag några problem med de nationella tecknen. Åtgärden var att i stället för att använda CGI::Ajax så skrev en egen variant av JavaScriptet istället för det färdiggenererade av Perl-modulen. Programmet nås nu på en något annorlunda adress än tidigare: Word Meld Simple.

Posted by hakank at 09:05 EM Posted to Program | Språk | Systemutveckling

januari 23, 2006

Något om prefixträd sorterade på lite olika sätt samt komprimering

Av en privat (och personlig) orsak behövdes ett program för att skapa unika prefix av ord i en lista, och sedan att presentera dessa prefix som ett träd. Anledningen var ungefär att korta ner en lista av ord till kortare ord (dess prefix).

Ett exempel på ett sådant prefixträd är för de svenska månadsnamnen:

a:
  ap: april
  au: augusti
d: december
f: februari
j:
  ja: januari
  ju:
    jul: juli
    jun: juni
m:
  ma:
    maj: maj (!!!)
    mar: mars
n: november
o: oktober
s: september

Här ser vi t.ex. att månadsnamnen december, februari och november kan komprimeras till en enda bokstav, medan april och augusti båda börjar på bokstaven a så vi måste här ta till en extra bokstav för att skilja dem åt. Man kan också notera att maj inte blev något prefix alls, utan här behövs hela ordet eftersom mars, den rackaren, ligger och stör. Sådana fall markeras med !!!!


Program Prefix Trees
Det har naturligtvis skapats ett program för att kunna leka vidare med sådana här ord-listor, och som - möjligen något missledande - kallas för Prefix trees.


Programkörningen för ovanstående svenska månadsnamen finns ungefär här.


Komprimering och annat skoj
Även om det primära syftet med programmet var att skapa unika prefix och prefixträd så var det svårt att låta bli att studera vissa saker i mer detalj.

Om man kör programmet för de svenska månadsnamnet kommer det, förutom det fina prefixträdet, även lite statistik (längst ner på sidan):

...
Original total length of words: 74
Total length of prefixes: 23
Mean prefix length: 1.92
Compression factor (original length/prefix length): 3.217

Man kan bl.a. se att det medellängden av de skapade prefixen är 1.92, vilket ska jämföras med medellängden av de ursprungliga orden på 6.17. Komprimeringsfaktorn är 3.217, vilket räknas ut med formeln

(sammanlagda längden av original orden) / (sammanlagda längden av prefixerna)

Dvs: genom att använda de unika prefixen istället för de hela orden sparar man en hel del, t.ex. träd (sic!) om man skulle använda papper för att skriva dem. Det kanske blir svårt att läsa det, men man skulle kunna spara både tid och pengar på detta. Nedan kommer vi att studera hur man kan spara något mer tid/papper/pengar men i gengäld blir det i stort sett oläsbart...


Frekvenssortering av bokstäver
En finess med programmet är att man kan studera lite olika varianter av representation av orden innan det skapas prefix. T.ex.

Sedan den mest intressanta varianten: bokstavsfrekvenssortering (valet Sort by letter frequency, som innebär att innan man skapar prefixen sorterar man ordets bokstäver i ordning av hur vanliga/sällsynta bokstäverna är bland samtliga ords bokstäver. T.ex. så är det troligt att bokstaven "z" är sällsynt vilket gör att ett ord med "z" kommer att prefixas som z + eventuellt någon annan bokstav.

Om vi fortsätter med månadsnamnsexemplet får man med bokstavsfrekvenssortering följande prefixträd:

d: december
f: februari
g: augusti
j: maj
k: oktober
l: juli
n:
  nj:
    nju:
      njui: juni
        njuia: januari
p:
  pl: april
  ps: september
s: mars
v: november
....
Original total length of words: 74
Total length of prefixes: 21
Mean original length: 6.17
Mean prefix length: 1.75
Compression factor (original length/prefix length): 3.524

Om man jämför med det "vanliga" prefixträdet så är komprimeringsfaktorn något lägre för bokstavsfrekvenssorteringsvarianten (3.524 jämfört med 3.217).

Denna skillnad tenderar att vara beständigt: Detta innebär att om man använder bokstavsfrekvenser istället blir det något bättre komprimering. Nackdelen är naturligtvis att "förkortningen" (prefixet) är fullständigt obegriplig. Se även en mer systematisk genomgång nedan.

Några noter kring detta
Möjligen skulle man här kunna göra en analogi med Huffman-kodning (ref till en.wikiedia) som skapar binära koder efter bokstävernas frekvens, där den kortaste koden tilldeleas den vanligaste bokstaven etc.

En mer avancerad variant av prefixträd skulle vara att analysera prefixträdet för att komprimera det ännu mer.

Det går naturligtvis också att göra det väldigt enkelt för sig och koda varje ord till ett eller flera fullständigt slumpmässiga tecken alltefter ordens/bokstävernas frekvens i texten. Men det är en övning som lämnas åt vidare öden (eller övning åt läsaren/skribenten).

Den ursprungliga poängen med prefixträden var att de skulle vara lätta att skapa och (relativt) lätt att uttyda när man ser dem. När man använder sorteringar av olika slag förloras detta syfte bort i skymningen varvid endast nästa dags solstrålar är glada att se det.


Liten undersökning
Det gjordes också en undersökning hur antalet olika ord i listan påverkar komprimeringsfaktorn respektive medelprefixlängden. Detta gjordes för ett olika antal slupmässiga svenska ord (ur en ordlista på nästan 400000 ord).

Det visar sig - inte speciellt förvånande - att ju fler slumpmässiga ord listan innehåller, desto sämre blir komprimeringsfaktorn och desto längre blir medellängden på prefixen. Som variansen visar är det relativt stabila värden förutom för den första körningen (10 ord i listan). Av tidsskäl kördes endast 10 gånger med samma liststorlek.

Prefix utan någon bokstavssortering

Antal ordKomprimeringsgradKomprimeringsgrad variansPrefix medellängdPrefix medellängd, varians
107.807304.675261.470000.12456
1004.140800.028742.637000.00842
2003.548600.035303.115000.01812
5003.042600.002013.608000.00775
10002.705900.001994.102000.00368
20002.399400.000784.602000.00717
30002.236200.000634.960000.00207
50002.068100.000305.364000.00158
100001.845000.000095.998000.00057
200001.654000.000026.688000.00040
500001.440400.000017.680000.00031
1000001.315200.000008.413000.00020

Prefix med frekvensbokstavssortering

Antal ordKomprimeringsgradKomprimeringsgrad variansPrefix medellängdPrefix medellängd, varians
109.688304.153061.150000.02500
1004.244700.026752.568000.01280
2003.819100.021282.948000.00544
5003.265200.001933.409000.00283
10002.893400.003513.835000.00372
20002.618100.000324.242000.00044
30002.471300.000824.489000.00159
50002.287800.000184.821000.00054
100002.064800.000095.362000.00042
200001.873100.000035.910000.00018
500001.650100.000016.708000.00008
1000001.507100.000007.344000.00014


Andra exempel
Jag har även kört programmet på några andra exempel, t.ex. 1000 vanligaste svenska orden, svenska förnamnen samt svenska efternamnen (plus "Kjellerstrand") från Språkbanken:


Se även
En möjlig variant att göra en komprimering eller på annat sätt förkorta saker och ting är att använda reguljära uttryck, t.ex. som i programmet MakeRegex,.

Posted by hakank at 10:51 EM Posted to Program | Språk | Statistik/data-analys | Comments (2)

januari 17, 2006

En liten undersökning om kuluriga ord

Henrik Sundström skriver i sin blogganteckning Kuluriga ord om ett ord han har hittat på: Kulurigheter. Ett annat exempel är "kulurig", som är byggt på de tre orden:

kul + klurig + lurig = kulurig

Thebe frågar i en kommentar följande fråga:


Och man undrar ju hur bildens kulurighet, den matematiska serien som måttstocken bildar, fortsätter ...

Den uppkastade handsken tages härmed upp!

Här har dock inte brytts så mycket om den matematiska serien (även om det ska bli spännande att se resultatet av detta), så den frågan är fortfarande obesvarad och handsken ska snarare ses som en tummetott.

Däremot - och genom en sedvanlig omdefinition av problemet - har gjorts en undersökning av ord som följer exakt samma struktur som "kuluriga", nämligen:

1. Ett grundord: här klurig 2. Ett delord som består av grundordet minus första bokstaven: här lurig
3. Ett tredje ord som består av de första tre bokstäverna från grundordet men är permuterat enligt formen 132: här kul (dvs "u" och "l" är omkastade).

Det visar sig att det finns flera sådana ord, nämligen hela 3870 stycken; myckenheten i detta antal upplevs som förvånade.

T.ex. finns

bracka + racka + bar = baracka

som möjligen kunna sägas om en bracka som sitter på en bar och rackar ner på sina medbargäster.

Eller kanske

vårliga + årliga + vrå = vrårliga

Som är något vi gör i vår vrå under våren. (En kanke inte helt optimalt konstruktion...)


Några andra varianter med potentialer:

trådgivare + rådgivare + tår = tårådgivare


trimmade + rimmade + tir = tirimmade

(En "tir" är enligt NE: det spiralformade mellanrum som uppstår mellan parterna (trådsträngarna) när repslagare slår samman klenare tågvirke till linor, trossar eller kablar.)


Dock måste sägas att:

1. Alla konstrukter är alltså inte alls lika kuluriga som kuluriga. T.ex. är följande

oanvänd + använd + ona = onanvänd

inte speciellt kulurig. Men eftersom NE tycker att ona betyder t.ex. hål eller (båt)ränna kanske någon kan hitta på något av detta. Här ställs man dock inför den fascinerande utmaningen att något ska vara både använd och oanvänd.


2. Det inkorporeras även böjningar av samma ord, vilka ha tagits med av fullständighetsskäl.

3. De där trebokstavsorden används ofta i många olika kombinationer, vilket gör att det hela eventuellt kan kännas lite ... programmatiskt.


Den fullständiga listan över dessa ordkombinationer finns att bestudera i kuluriga_ord.txt (en alldeles ren ASCII-fil).


Se även
Några andra sätt att konstruera konstruerade konstruktioner är bl.a.:

Isomorphics words som anger vilka andra ord som har samma ordstruktur som ett givet. T.ex. har "kulurig" 176 svenska isomorfiska ord, däribland "vetekli", "tabasco" och "bajadär".

Word Meld som försöker att slå ihop två ord till ett nytt (som möjligen inte tidigare fanns i sinnevärlden). T.ex. ger en word meld på klurig sådana ord som "klurendrejeri" och "klurigorös".

Chiasmus words som är ett annat program som givet två ord (t.ex. personnamn) skapar "korsningar" (chiasmus) mellan dessa ord. T.ex. ger henrik sundström chiasmusen "senrik hundström".

Posted by hakank at 08:38 EM Posted to Språk

oktober 09, 2005

Metaforer för att beskriva marknaden påverkar marknaden?

Det kanske inte är någon överraskning att vi påverkas av metaforer som används för att beskriva olika fenomen, speciellt inte för dem som läst t.ex. Geoge Lakoff et.al. om hur genomträngande ("pervasiva") metaforerna är i språket. Se t.ex. Kort om George Lakoff & Mark Turner: "Metaphors we live by" och lite annat relaterat till Lakoff för mer information.

Michael W. Morris från Columbia University Business School har genom att studera journalisters metaforiska beskrivningar av börsen samt experiment bland studenter, funnit troligt att mer figurativa metaforer påverkar åtminsone icke-professionella placerare.

Från artikeln Metaphors affect investors, researcher says:

The way we talk about the stock market has a lot to do with the way people respond to market changes – especially if we are listening to a reporter.
...
My research has to do with business journalism," said Morris, an advocate of the growing field of behavioral economics. He believes television's expanding role in business and market reporting in the '90s contributed to the Wall Street mania.

"Rationally, we know that when the market has gone up sharply it is better to sell than to buy, but emotionally we feel we want to jump on the bandwagon," Morris said.
...
In a sense, his research reaffirms one of the fundamentals of modern philosophy, that the reality we perceive is part us and part outside world. According to Morris, our minds are not wired to understand random systems, so we impose patterns where they may not exist.

"We anthropomorphize things, and this has consequences in the stock market because metaphors carry implications, in the sense that the event being described is seen as purposeful and goal-oriented. We take that to mean it is likely to continue," he said.

Artikeln avslutas med följande visdomsord:

The plain fact about the stock market, said Morris, is that on a short-term basis, "today's direction in the market tells you absolutely nothing about tomorrow's movement."

Se även rapporten av Michael W. Morris, Oliver J. Sheldon, Daniel R. Ames, Maia J. Young: Metaphor in Stock Market Commentary: Consequences and Preconditions of Agentic Descriptions of Price Trends (PDF, och är vid bloggningen oläst.)

Abstract:


We investigated the consequences and preconditions of two types of metaphors in stock market commentary. Agent metaphors describe price trends as actions of an animate, self- propelled actor, whereas object metaphors describe them as movements of an inanimate object caused by external physical forces. Study 1 examined the consequences of commentary for lay investors’ judgments. Agent metaphors, compared with object metaphors and non-metaphoric descriptions, caused investors to expect price trend continuance. The remaining studies examined preconditions, the features of a trend that cause commentators to use agent versus object metaphors. We hypothesized that the rate of agentic metaphors would depend on the trend direction (upday vs downday) and steadiness (steady vs unsteady). Two archival studies tracked the metaphoric content in end-of-day CNBC commentary as function of daily price trajectories. As predicted, agent metaphors were more likely for uptrends than downtrends and especially so when the trends were relatively steady. This held for both bull (Study 2) and bear market periods (Study 3). Study 4 replicated these findings in a laboratory study where participants took the role of a stock market commentator. We discuss implications of these findings for the literatures on metaphoric cognition and financial judgment.

Posted by hakank at 12:06 EM Posted to Spelteori och ekonomi | Språk

september 21, 2005

Enkel textsummering (mestadels åt Thebe)

Som ett beställningsverk åt Thebe har skapats programmet Simple Text Summation som reducerar en text till tre tal och en vektor: (Det ska visst vara "enkelt" nu. :)

* det första talet fås genom att man tar bokstäverna (a - ö) och siffrorna (0 - 9) och gör om dem till siffror enligt deras position i alfabetet samt siffrona, varpå dessa summeras. Texten hakank.blogg får t.ex. textsumman 89 genom att summera talen i vektorn: 8,1,11,1,14,11,0,2,12,15,7,7.

* siffrorna i detta textsummeringstal läggs sedan ihop till en tvärsumma: 17

* och till slut görs en "reducerad" tvärsumma så att det blir ett ensiffrigt tal.

Användningen av programmet kan läsas om i Thebes fantastiska och epokgörande alster: Haiku-färg och dagens Dagens humörfärg.

Det kommmer säkert att kommas på andra användningar...


Se även
Det finns betydligt mer seriös textsummeringar. Se t.ex.
SweSum - Automatisk Textsammanfattare
Vad är automatisk textsammanfattning?
The Text Summarization Project

Sist i min Automatisk identifikation av språk (språkidentifiering) finns några andra länkar.


Av någon anledning känns det ävan relevant att här länka till Devil's word.

Posted by hakank at 09:22 EM Posted to Språk | Comments (1)

Skapa enkla anagram

För några veckor sedan såg jag på en av de reklamfinansierade TV-kanalerna (ärligt talat har jag glömt vilken) det där bokstavsspelet som går ut på att man ska gissa vilket "förvanskat" ord (anagram) som står i rutan. Så kan man vinna en massa pengar om man gissar rätt och om man svarar på lite fler frågor och så.

Flera av de anagram som visades var enkla att lösa och jag misstänker att de är handskapade just för att inte vara så svåra. T.ex. stod det ungefär följande anagram:

vonellörftfaaetr


Hur skapa "enkla anagram"?
Hur som helst påbörjades funderingar på hur man automatiskt kan skapa enkla sådana anagram eller skapa en sorteringsmetod där man kan sortera genererade anagram efter hur enkla de är att lösa.

Not: "enkel att lösa" bygger på subjektiva grunder och detta är ingen vetenskapligt undersökning.


Generate Simple Anagram
Resultatet av detta funderande blev programmet Generate Simple Anagram som visar några olika metoder för att skapa eller sortera "enkla" anagram. Här nedan förklaras några delar av programmet.


n-step-metoden
En metod som jag tycker fungerar rätt bra är n-step-metoden som går ut på att man tar två bokstäver i ordet som ligger ganska nära varandra och låter dem byta plats; så fortsätter man med det nya angrammet och byter ut två andra bokstäver etc. n i n-step refererar till det maximala avstånd mellan bokstäverna man använder. Både position, avståndet och riktningen väljs slumpmässigt.

De par tre första genererade orden är troligen alldeles för enkla, men efter några körningar så kan det bli tillräckligt svårt att lösa så att det blir i alla fall någon minuts fundering; för den som inte känner till grundordet vill säga.


Två avstånds-metriker för sortering
För att testa min intuition kring n-step-metoden görs även jämförelse med andra typer av sorteringar av de ord som skapades:
* ordavstånd (edit distance)
* ngram-avstånd

Dessa metriker beskrivs mer nedan.

Som ytterligare en test slumpas det även ett gäng anagram (för närvarande 500 stycken) för att se hur bra dessa två avstånds-metriker sköter sig i detta sammanhang, nämligen hur lätt det är att identifiera anagrammets grundord. Tanken är att enklare anagram ska komma så tidigt som möjligt i listan, och svårare lite längre ned.

Min subjektiva åsikt är att ngram-avstånd ger rätt hyfsat resultat, i alla fall bättre än edit distance. (Sedan kan man alltid jämföra snabbheten/komplexiteten för respektive avståndsmetod men det är för tillfället en annan och möjligen senare fråga.,)


Exempel
Låt oss då ta ovanstående ord, som ju är novellförfattare, som exempel.

De första anagram som skapas (vid en slumpmässig n-stepkörning) är:

  • novellförftatare (10 <-> 11 : t <-> a edit dist: 2 ngram dist: 0.43)

  • nvoellförftatare (1 <-> 2 : v <-> o edit dist: 4 ngram dist: 0.23)

  • nvoellförfattare (11 <-> 10 : t <-> a edit dist: 2 ngram dist: 0.65)

  • nvoellförftatare (11 <-> 10 : a <-> t edit dist: 4 ngram dist: 0.23)

  • nvoelflörftatare (5 <-> 6 : f <-> l edit dist: 6 ngram dist: 0.10)

  • vnoelflörftatare (1 <-> 0 : n <-> v edit dist: 5 ngram dist: 0.11)

  • vnoelflörftatare (15 <-> 15 : e <-> e edit dist: 5 ngram dist: 0.11)

  • vnoelflörftatrae (13 <-> 14 : r <-> a edit dist: 6 ngram dist: 0.07)

  • vnoleflörftatrae (3 <-> 4 : l <-> e edit dist: 6 ngram dist: 0.05)

  • vnolelförftatrae (6 <-> 5 : f <-> l edit dist: 5 ngram dist: 0.12)
...


Första raden novellförftatare (10 <-> 11 : t <-> a edit dist: 2 ngram dist: 0.43) innebär fölljande:

* det skapade anagrammet är novellförftatare

* bokstäverna "t" och "a" har bytt plats med varandra och de var i respektive position 10 och 11 i ordet

* ordavståndet (edit distance) är 2 vilket innebär att det krävs två "redigeringar" för att transformera "novellförfattare" till "novellförftatare". Se vidare om ordavstånd i Ordavstånd (edit distances): Levenshtein och Hirschberg med lite extra finesser-

* ngram-avståndet visas sedan, här 0.43. Detta ngram-avstånd förklaras i nästa sektion.


ngram-avstånd
Ett ngram (n-gram) är en del av ett ord där betyder antal tecken som man ska använda. I programmet används samtliga möjliga ngram, dvs från 2-gram till det längsta möjliga, dvs hela ordet. T.ex. ordet "anagram" har ngrammen "an", "na", ""ag", "gr", "ra", "am", "ana", "nag", ... "gram", "anag", ... "gram", "anagr","nagr", etc.

Grundtanken bakom ngram-avstånd är att man först skapar grundordets ngram (här för "novellförfattare") och jämför sedan de ngram som de genererade anagrammen har. De genererade ord som har mest gemensamma ngram med grundordet är alltså mest lika (har bäst ngram-avstånd). För att kunna göra jämförelser av ngram-avstånd mellan (anagram av) olika ord normaliseras det genom att man delar antalet gemensamma ngram med antalet möjliga ngram.

Subjektivt: Någonstans kring ngram-avståndet 0.5-0.6 och lägre värden blir det svårt att direkt se vilket grundordet anagrammet bygger på. Det beror även på sådana saker som längden på ordet, hur vanligt det är och om man känner till det.

(Tekniken bakom ngram-avstånd används bland annat för att automatiskt lista ut vilket språk en text är skriven på. Se vidare om detta i Automatisk identifikation av språk (språkidentifiering) och Bloggidentifiering (Blog Identification) där den senare beskriver språkidentifieringsalgoritmen mer.)


Övrigt i programmet
Programmet har även några andra finesser såsom:
* slumpa ett ord på svenska eller engelska Eftersom n-step-metoden börjar väldigt enkelt är det tillrådligt att bläddra ner lite på sidan och starta i slutet på listan. Det korrekta ordet ser man om man markerar området till höger om "Word" i Resultat-avsnittet (det är alltså dolt genom att har color="white").
* man kan ändra hur många ord som ska visas (Number to show)
* ändra maximalt avstånd mellan bokstäverna (Max steps)

Lek gärna med parametrarna och orden!


Slutord
Som en förberedelse till programskrivandet gjordes lite olika statistiska undersökningar och simuleringar med lite skoj saker som resultat, men dessa får anstå till en annan dag.


Se även
Två program som är lite av samma stuk är:
Reading scrambled words
Generate spelling errors.

Posted by hakank at 09:06 EM Posted to Språk | Comments (1)

september 11, 2005

Ordavstånd (edit distances): Levenshtein och Hirschberg med lite extra finesser

Sedan länge har jag varit intresserad av hur lika ord är varandra. Ett sätt är att se hur många operationer som krävs för att transformera det ena ordet till det andra, och på detta vis få "ordavståendet" mellan orden. Se nedan för lite andra skriverier och program i detta och näraliggande ämnen.


Exempel
Ordavståndet mellan ordet håkan och ordet hakank är 2 eftersom det krävs två operationer för att transformera det första ordet till det andra: byt ut "å" till "a" och lägg till ett "k" på slutet. De möjliga operationerna för att omvandla ett ord till ett annat är:
* byt ut (replace)
* lägg till (insert)
* ta bort (delete)

samt "behåll" (keep) som egentligen inte är en operation eftersom ingenting görs. De engelska begreppen används nedan.


Edit distances
Sådana transformationer/jämförelser kallas för (används i) edit distance (googlesökning). En av de mer moderna användningarna är att jämföra två DNA-sekvenser med varandra för att se hur mycket eller på vilket sätt de matchar eller inte matchar, och det ligger mycket forskning (och pengar!) kring att göra ruskigt snabba och bra strängjämförelsemetoder.

Två av de mest kända algoritmerna för sådant är Levenshtein och Hirschberg (namnen från respektive upphovsperson).


Programmet Edit distances
Var lugn, jag tänker inte förklara algoritmerna här. Däremot vore det skoj att visa hur de fungerar och hur de kommer fram till ordavståndet. Detta är gjort i programmet Edit distances, som nu kommer att förklaras lite mer.


Körning av programmet
Låt oss jämföra orden håkan och hakank som nämndes ovan. En körning av programmet ger följande resultat:


...
Operations (graphical):
håkan-
| ||| 
hakank

Explanation:
'-': insert or delete
'|': keep
' ': replace

Long description (string position in parenthesis):
keep 'h' (1)
replace 'å' with 'a' (2)
keep 'k' (3)
keep 'a' (4)
keep 'n' (5)
insert 'k' (6)


Short description (k: keep, i: insert, d: delete, r: replace):
krkkki

It was 2 edit operations:
keep: 4
replace: 1
insert: 1
('keep' is not counted as an operation)


Förklaring
Här förklaras resultatet mer i detalj. Först visas den grafiska representationen av tranformationen:

håkan-
| ||| 
hakank

Ett "-" i den första raden betyder att en bokstav läggs till ("insert") i det andra ordet, dvs det avslutande "k". Tecknet "|" innebär att bokstäverna är samma (operationen "keep") i samma position. Om det är tomt i mellanraden innebär det att man byter ut en bokstav (här att "å" ersätts av "a"). Ett "-" i sista raden innebär att man tar bort en bokstav ("delete").


Efter det visas en "pratversion" av operationerna i korrekt ordning, där talen inom parentes anger radpositionen (eller "operationsnumret" om man så vill). Notera att positionen inte är för orden utan för den sträng som visas i den grafiska representationen.

keep 'h' (1)
replace 'å' with 'a' (2)
keep 'k' (3)
keep 'a' (4)
keep 'n' (5)
insert 'k' (6)

Så kommer en kortversion av operationern med koderna: k: keep, i: insert, d: delete, r: replace:

krkkki

vilket helt enkelt är första bokstäverna i de engelska namnen för operationerna.

Slutligen visas lite statistik där 2:an är det eftersöka ordavståndet. Och som sagt är keep inte någon egentlig operation, så 2 kommer här från antal replace och antal insert (1+1=2).


It was 2 edit operations:
keep: 4
replace: 1
insert: 1


Två algoritmer?
Varför två algoritmer, de ger ju samma resultat? Skoj att du noterat det. Visst, de ger ofta samma resultat, men inte riktigt alltid. T.ex. för jämförelsen mellan " abc e" och "abdec" (notera mellanslagen) så ger Hirschberg följande operationer: dddkkddrki:

   abc  e-
   ||   | 
---ab--dec

medan Levenshtein ger dddkkdrrr, dvs:

   abc  e
   ||    
---ab-dec

De ger olika antal keep-operationer (3 respektive 2), vilket kan vara viktigt. Det är dock samma antal edit distance operationer.

Om man vill man se den exakta skillnaden mellan dessa två operationslistor passar det ju bra att använda programmet för detta.


Tips: Lägg till mellanslag före eller efter
För vissa jämförelser kan det bli väldigt tråkiga operationer, t.ex. kjellerstrand -> hakank.blogg är det i stort sett bara utbyten: drrrrrrrrrrrr. Om man däremot lägger till lite mellanslag före eller efter endera ordet kan man se lite andra mappningar.

Exempel: lägg till ett gäng (t.ex. 13 mellanslag) före "kjellerstrand" så kommer följande mappning.

                          kjellerstrand

                          |   |        

---------------------hakank-.bl-----ogg


Naturligtvis innebär detta att antal operationer inte stämmer med ursprungsjämförelsen, men det är kanske av underordnad betydelse. I och för sig skulle programmet kunna justera för sådant trixande, men det finns alltid risker med sådan intelligens...


Fet credit
En stor fet credit måste göras till Lloyd Allison som kodat Javascript-versionerna av Levenshtein och Hirschberg.

Mitt program använder inte koden rakt av, men den är mer eller mindre strikt konverterad till Perl-kod. Programmet har även vissa finesser som saknas på Allisons sidor, t.ex. prat- och kortversionen av operationerna. Jag har inte brytt mig om att visa riktigt alla Allisons finesser, dvs tracen för Hirschberg.

Se även liknande program och skriverier
Skapa stavfel som råkar använda samma operationer som i ovan nämnda program. Där finns även några andra referernser.
Läsning av förvanskade ord
Nearest words
New Markov words II

Eventuellt relevant är också kategorin: Reguljära uttryck etc.

Lite länkar
Dan Hirschberg, speciellt dennes publikationer
Dan Gusfield: Algorithms on Strings, Trees, and Sequences
Alberto Apostolico, Zvi Galil (ed): Pattern Matching Algorithms.



(Det var det. Nu kan jag fundera lite på Thebes Visualiserad singulärvärdesuppdelning.)

Posted by hakank at 10:14 EM Posted to Program | Reguljära uttryck etc | Språk | Comments (4)

augusti 27, 2005

base_conv: Konvertering av ord till tal till ord

Som hjälp för Mats Anderssons födelsedagsgratulationshälsningshuvudbry samt ledtråd till en av gåtorna i Augusti-pyssel publiceras nu ett litet program: base_conv: Yet another word to number to word conversion.

Principen är enkel: Man utgår endera från ett "ord" eller från ett decimaltal varpå programmet konverterar till ett decimaltal respektive "ord" för så många baser som möjligt, från bas 2 till bas 68.


Exempel
T.ex. konverteras "ordet" blogg till decimaltalet 4640416 om blogg ses i bas 25. Bas 25 är för övrigt den minsta basen som kan representera detta "ord" eftersom "o" kräver åtminstone denna bas.

På samma sätt converteras "ordet" Håkan Kjellerstrand (utan mellanslag) i bas 68.till decimaltalet 661332330234565441547965347086985. Äsch, ni kan se hela listan här.


Språk, giltiga tecken
Det finns val för två olika språk med lite olika teckenuppsättning:
* engelska: 0..9 a-z A-Z
* svenska: 0..9 a-zåäö A-ZÅÄÖ

VI kan här se att både de små bokstäverna finns representerade och är väldigt olika. T.ex. "ordet" "åtgärdsförslag" (bas 45: 113728508327740105458241) är inte samma som "ÅTGÅRDSFÖRSLAG" som faktiskt inte ens går att representera i bas 45, eftersom "Ö" kräver bas 68, men det motsvarar decimaltalet 43778068670461409051480041 (sett i bas 68).


Ord, förresten
Konverteringen från decimaltal till "ord" skapar sällan ett "ord" utan är nästan alltid och för de högre baserna en blandning av siffror och bokstäver (förutom då man använder ett tal som konverterats från ett "ord", vill säga), och än mer sällan ett korrekt ord i respektive språk.


Mellanslag och andra lustiga tecken
Programmet tillåter alltså bara ovanstående tecken. Om andra tecken finns i ordet kommer ett felmeddelande. Mellanslag tas dock sonika bort.


En undring
Genom denna typ av konvertering kanske dubbeltydligheten i "tal" fått en praktisk mening. Möjligen kommer "riksdagstal" och 2672678331353573021 (bas 50) att användas omvartannat i framtiden?


Eventuell framtida utveckling
Jag har en liten idé om att göra någon form av "ordfaktorisering", med ungefär följande idéräcka:
* ett ord konverteras till decimaltal (för någon bas)
* decimalet faktoriseras
* faktorerna konvereras tillbaka till "ord" (i någon bas)
* om ett sådant "ord" finns i en ordlista ... vore det skoj.

Ta t.ex. "riksdagstal" (bas 50) = 2672678331353573021. Decimaltalets faktorer är:
174696276315679 samt 15299.

Visst skulle det vara lite skoj om "qqaicähbA" (bas 40 = 174696276315679) vore ett ord i svenskan. 15299 motsvarar en del kortare "ord": t.ex. "obo" (bas 25), "mgb" (bas 26), "kqh" (bas 27), "jeb" (bas 28).

Får se om det blir något med detta.


Programspråk
Programspråket som används för denna utilitet är Ruby (speciellt skoj när man vill rota i klasserna Integer och String.)

Posted by hakank at 10:32 FM Posted to Matematik | Program | Språk

augusti 21, 2005

ADIOS: System för att generera texter utifrån exempeltexter

Erik Starck skrev härförleden en kort notis Computers learn a new language om ADIOS, ett system som kunde skapa texter utifrån exempeltexter. Men han (och flera andra) länkade endast till New Scientist-notisen Computers learn a new language, som inte förklarar så mycket.

I Plus Magazine-artikeln Machine prose beskrivs däremot systemet mer:

Given a piece of text in any language, the program called ADIOS - automatic distillation of structure - searches for patterns and structures which it then generalises to produce new and meaningful sentences. The ADIOS algorithm is based on statistical and algebraic methods performed on one of the most basic and versatile objects of mathematics - the graph.
...


ADIOS-projektets sajt beskrivs systemet på följande sätt:


The ADIOS project addresses the problem, fundamental to linguistics, bioinformatics and certain other disciplines, of using corpora of raw symbolic sequential data to infer underlying rules that govern their production. Given a corpus of strings (such as text, transcribed speech, nucleotide base pairs, amino acid sequence data, musical notation, etc.), our unsupervised algorithm recursively distills from it hierarchically structured patterns. The ADIOS (Automatic DIstillation of Structure) algorithm relies on a statistical method for pattern extraction (The MEX algorithm) and on structured generalization, two processes that have been implicated in language acquisition. It has been evaluated on artificial context-free grammars with thousands of rules, on natural languages as diverse as English and Chinese, on coding regions in DNA sequences, and on protein data correlating sequence with function. This is the first time an unsupervised algorithm is shown capable of learning complex syntax, generating grammatical novel sentences, scoring well in standard language proficiency tests, and proving useful in other fields that call for structure discovery from raw data, such as bioinformatics.


Man kan även ladda ner en Lite-version (t.ex. en Linux-version som jag tyvärr inte fått att fungera). Mer akademisk litteratur finns här.

Det hänvisas även till en avhandling av Zach Solan. Det verkar vara den han beskriver som "The Syntax of Nature" - "The Nature of Syntax": a study of the hidden structures in human language and in other raw sequential data such as music, proteins, DNA and more..., vilket låter väldigt spännande men någon avhandling kan i alla fall inte jag se (han är väl inte klar ännu, stackarn).

Posted by hakank at 10:48 FM Posted to Språk | Comments (3)

augusti 03, 2005

Roterade ord (shifted words)

Som ett led i det ständiga sökandet efter struktur i vårt språk har nu strålkastarna kommit till roterade ord ("shifted words").

Roterat ord
Ett roterat ord är ett ord som bildar ett annat ord om man flyttar en eller flera bokstäver till slutet av orginalordet. T.ex. om man från ordet "affinerar" flyttar (roterar) första a:et och placerar det sist blir det "raffinerar", grafiskt åskådliggjort på följande sätt:

affinerar -> raffinera

Ovanstående var en 1-rotation (dvs man roterar 1 bokstav). Mer generellt kan man göra n-rotationer och får sådana konstruktioner såsom:

ansträngt -> trängtans (3-rotation)
tonåringar -> artonåring (8-rotation)

Vänster vs. högerrotation
Not: Rotationen ovan var en rotation s.a.s. åt vänster. Skulle man göra högerrotation i stället skulle det bli andra rotationstal, eventuellt lägre. T.ex. vänsterrotationstalet 8 för "tonåringar" -> "artonåring" motsvarar högerrotationstalet 2. Mer generellt: vänsterrotationstal = ordlängd - högerrotationstal. Skulle man göra en "optimal" rotation, dvs ta den höger- eller vänsterrotation som är lägst blir det maximalt en rotation på Len / 2, där Len är ordets längd.


Symmetri
En rotation är självklart även symmetrisk i betydelsen att en rotation "ord1 -> ord2" med rotationstalet Rot motsvarar rotationen "ord2 -> ord1" med ett rotationstal Len - Rot.


Högsta vänsterrotationstalen
De högsta vänsterrotationstalen som hittades var n=13.

nationaliserade -> denationalisera
sensibiliserade -> desensibilisera
transformatoreffekt -> effekttransformator
transformatorström -> strömtransformator


Sammansättningar
Tyvärr är många av dessa högre roteringar tråkiga sammansattningar av två ord (Ord1 och Ord2) på formen "Ord1Ord2" -> "Ord2Ord1", t.ex. just "transformatorström" -> "strömtransformator". (Någonstans finns här en potential att göra automatiserad uppdelning av sammansatta ord, dvs att den del av ordet som roterats torde vara ett giltigt ord, liksom den del som är kvar.)


Multirotationsord
Det finns några multirotationsord, dvs som ger andra ord för olika rotationer. T.ex följande (inon parentes anges vänsterrotationstalet):

anar -> nara (1)
anar -> aran (2)
anar -> rana (3)

aren -> rena (1)
aren -> enar (2)
aren -> nare (3)

asar -> sara (1)
asar -> aras (2)
asar -> rasa (3)

argas -> gasar (2)
argas -> sarga (4)

alarm -> larma (1)
alarm -> malar (4)

aspar -> spara (1)
aspar -> paras (2)
aspar -> raspa (4)

eskapad -> skapade (1)
eskapad -> kapades (2)

raskatt -> kattras (3)
raskatt -> traskat (6)

jojo -> ojoj (1)
jojo -> jojo (2)
jojo -> ojoj (3)

hihihi -> hihihi (2)
hihihi -> hihihi (4)


Rotationsgrupp
Ord såsom "anar", "nara", "aran" samt "rana" bildar en fullständig rotationsgrupp, dvs att samtliga rotationer av ett ord bildar ett annat giltigt ord. Här är "anar" en generator, dvs den som startar just denna rotationssekvens. Andra sådana fullständiga rotationsgrupper är ("aren", "rena", "enar", "nare") samt ("asar", "sara", "aras","rasa"). (Begreppet "grupp" här får gärna förväxlas med det matematiska gruppbegreppet.)


"Cykliska"
Man bör också notera de "cykliska" orden såsom "jojo" -> "ojoj", samt "hihihi" -> "hihihi" (som är ett "egenroterande"/"egencykliskt" ord) där det blir samma ord för varannan rotation.


Transitivitet
Och nog katten är rotationstal transitiva över addition (med bibehållande av roteringsriktningen). Om en rotation ord1 -> ord2, har rotationstalet R1 och rotationen ord2 -> ord3 har rotationstalet R2 så har rotationen ord1 -> ord3 rotationstalet R1 + R2. Här måste man vara noga med att hålla reda på vilken "bas" man arbetar med, dvs vilket ord man gör rotationen från. "Basen" anges inom parentes efter rotationstalet, t.ex. "1(anar") betyder att det är vänsterrotationstalet 1 från "anar", vilket alltså är ordet "nara".

Som exempel kan vi ta rotationsgruppen med "anar" som generator:

anar -> nara -> aran -> rana
(0) (1) (2) (3)

nara: anar -> nara: R1 = 1(anar)
aran: nara -> aran: R2 = 1(nara) = 2(anar)
rana: aran -> rana: R3 = 1(aran) = 2(nara) = 3(anar)

Rotationstalet för rotationen anar -> rana är alltså 1(anar) + 1(nara) + 1(aran) = 1 + 1 + 1 = 3(anar). (Vilket egentligen inte är något märkvärdigt alls.)


Ordlista
En fullständig lista över de upphittade roterade orden (6672 ordpar) finns här (rätt stor fil, > 270kB). Filen består av två delar. Först är alla ord, rad för rad på formen:

ord -> roterat ord (antal roteringar)

Efteråt i filen kommer en lista över ord som har ett visst (vänster)roteringstal.


Anagram
Not: Rotationsord är en delmängd av anagram, där man kan skyffla runt bokstäverna lite hur som helst (man måste använda samtliga bokstäver i ordet).

Posted by hakank at 12:56 EM Posted to Språk | Comments (1)

juni 19, 2005

Kort om George Lakoff & Mark Turner: "Metaphors we live by" och lite annat relaterat till Lakoff

Har nu läst ut den fascinerande boken Metaphors we live by (Bokus, ISBN: 0226468011) av George Lakoff (sajt/blogg) och Mark Johnson. Den lästes om för att bli lite mer "metaformedveten" (något som antyddes här).

Boken beskriver hur genomträngande metaforerna är och hur de påverkar vårt tänkande mer än vad vi normalt är medvetna om. I senare böcker utvecklar Lakoff detta t.ex. genom att analysera hur den politiska diskussionen inramas ("framing") genom olika metaforer (se nedan).

Den första delen (ungefär kapitel 1-17, 30 samt det nya efterordet för denna upplaga) ger många vardagliga exempel på ett - vad jag tycker lättillgängligt - sätt. Många metaforer analyseras där man i detalj beskriver deras konkreta användning och koppling till andra metaforer eller tankeuttryck. T.ex. finns metaforen "Argumentation är krig" med användningar såsom 'X attackerade Y:s argument', 'Hans argument är inte försvarbara'. Argument är också en handelsvara: 'Jag köper inte hans argument' etc. Fler exempel finns här.

Den andra halvan av boken (ungefär kapitel 18-29) är en mer fackteoretisk kritik av filosofiska inriktningarna objektivism respektive subjektivism som jag i och för sig tyckte var intressant men inte lika fängslande och tankeväckande som den första delen (jag läser inte alls lika mycket fackfilosofi som tidigare). Om man bara är intresserad av metaforerna som "pervasiva redskap" kan man läsa dessa kapitel mer kursivt.


Inramning i politiska diskussioner
Till skillnad från förra gången boken lästes (tidigt 80-tal) blev jag nu mer intresserad av de politiska konsekvenserna av dessa metaforinramningar, något Lakoff skriver/pratar om i
Metaphor and War: The Metaphor System Used to Justify War in the Gulf
Metaphor and War, Again
Framing the issues: UC Berkeley professor George Lakoff tells how conservatives use language to dominate politics
Metaphor of Terror


Detta är också något som den ständigt intressante Jonas Söderström har diskuterat flera gånger. (Det var f.ö. till viss del Jonas som var orsak till att jag började att läsa boken just när den började läsas, nämligen hans upprop om bloggar och metaforer: Efterlyses: En ny metafor för bloggar samt Mer om blogg-metaforen. Kanske kommer det någon kommentar om detta vid tillfälle.)


Radiointervju med Lakoff
Påpassligt intervjuades Lakoff i måndags (13 juni 2005) på KQED (radio): "Michael Krasny talks to linguist George Lakoff about the language of political discourse." Det handlar en hel del om det aktuella politiska läget i USA och om boken "Don't Think of an Elephant" som kom ut i september förra året (se nedan för referens, ett utdrag i PDF).


Några andra böcker av Lakoff som har beställts
Women, Fire And Dangerous Things - What Categories Reveal About the Mind
Don't Think of an Elephant: Know Your Values and Frame the Debate: The Essential Guide for Progressives (ISBN: 1931498717)
Moral Politics (ISBN: 0226467716)
Philosophy In The Flesh The Embodied Mind and Its Challenge to Western Thought (tillsammans med Mark Johnson, ISBN: 0465056741)


Se även
Wikipedia: George Lakoff
Rockridgde Institute (som Lakoff grundade)
Edge-intervju av Lakoff
danah boyd et.al. kursblogg George Lakoff :: Ling 290L :: Language of Politics (från hösten 2004)
länksamling: inglinks:lakoff_frames

Glöm inte att RSS:a Lakoffs sajt/blogg.


(2005-06-19: Uppdaterade med lite länkar. )

Posted by hakank at 10:06 FM Posted to Samhälle och politik | Språk

juni 01, 2005

Consonants Away

På direkt förfrågan från en av mina besökare/användare av "useless" program kommer här en variant på Vowels Away: Consonants Away som visar de ord som är samma när man tar bort konsonanterna (och alltså endast behåller vokalerna).

Exempel: Ordet litteratur består av vokalerna "ieau". De ord som finns i ordlistan som också består endast av dessa vokaler och i samma ordning är:
* linnehandduk
* mineralull
* minnesalbum
* rikemanshus
* sidenhalsduk
* tidsmellanrum

Programmet har även en engelsk ordlista. Ordet litterature Consonant Away-liknar följande ord:

* displeasure
* literature
* literatures

Tack Carl H. för förslaget.


Kan här också passa på att rekommendera programmet Isomorphic Words som försöker att hitta "isomorfa ord". Det beskrivs mer i Isomorfa ord (Isomorphic Words).

Posted by hakank at 10:14 EM Posted to Program | Språk | Comments (14)

maj 22, 2005

Filosofiska rummet: Hur vet vi vad orden betyder?

Dagens Filosofiska rummet handlar om semantik och innehåller bland annat en intressant diskussion om metaforer. Om en liten stund läggs programmet upp på antingen denna (ladda ner) eller denna (endast lyssna).


Så här beskrivs dagens program:
Vi människor är något av språkvirtuoser. Ett barn lär sig i snitt tio nya ord om dagen. Ingen annan form av inlärning går så smidigt som inlärandet av ord.

Men hur går det till när vi förstår vad orden betyder? Och vad är betydelse för något när vi pratar om ord? Filosofiska rummet om kognitiv semantik och inlärning.

Gäster: Peter Gärdenfors, kognitionsforskare o filosof, Ingar Brink, filosof och Björn Larsson, författare.

Programledare och producent: Peter Sandberg

Personligen tycker jag att denna typ av diskussioner (fackfilosofiska inom teoretisk filosofi eller kognitionsforskning) är de mest intressanta i Filosofiska rummet-serien, vilket kan bero på att både Peter och Ingar då oftast är med.


Som sagt diskuteras metaforer och man nämner bl.a. klassikern Metaphors we live by (Bokus, ISBN: 0226468011) av George Lakoff och Mark Johnson. Vilket är lite lustigt eftersom:
1. Jag beställde den ånyo i förrgår, inspirerad bl.a. av Doc Searls presentation på Les Blogs
2. Första gången jag köpte (och läste) boken var i början på 80-talet men lånade snart ut den, till just Ingar när hon skrev sin doktorsavhandling. (Det var dock Peter som nämnde boken.)

Posted by hakank at 05:31 EM Posted to Filosofi | Språk | Comments (2)

maj 15, 2005

Mats Anderssons veckodagsundersökning: Kommentar samt komplettering

I Vad har världen emot tisdagar? tar Mats Andersson åter upp sin fascinerande veckodagsnamnssökning.

Mitt rätt långa svar från i går på hans blogg följer nedan, justerat med länkar, pronomenjusteringar, punktomflyttning och aktuella sökresultat. Detta är dock inget försök att hijacka diskussionen från Mats, så gör eventuella kommentarer hos hos Mats.

Det har hänt saker i siffrorna sedan gårdagen, så de har lagts till (med "Idag:"). Om inte annat så lär detta oss att tillvaron fluktuerar ("man får inte samma sökresultat två dagar i rad"). Se även google som bevis.


3. Både [Mats] och jag har skrivit om detta tidigare. Här är min - vad jag tror då trodde - sista anteckning med länkar tillbaka till våra tidigare anteckningar: Veckodagsnamn på google - återkomsten


1. [Mats] har gjort en universell sökning (egentligen jordisk), men det - och det är här jag framhärdar - bör vara "sökningar på svenska" vid googlingen. Se t.ex. diskussionerna kring en av [hans] tidigare anteckningar (något senare än den [han] länkar till i den aktuella anteckningen).

T.ex. är "Måndag Oy" ett finskt namn. "å":et översätts också till "aa" där det blir en del utomsvenskliga träffar; Fredag är ett namn på en romanfigur etc.


2. Jag gjorde därför om sökningen på google med "sidor på svenska" och fick följande:

Måndag 758000 (3) Idag: 750000 (7)
Tisdag 687000 (4) Idag: 779000 (6)
Onsdag 626000 (7) Idag: 785000 (5)
Torsdag 680000 (5) Idag: 790000 (4)
Fredag 1060000 (1) Idag: 1190000 (1)
Lördag 928000 (2) Idag: 1120000 (2)
Söndag 673000 (6) Idag: 798000 (3)

Siffrorna inom parentes anger rankningen, fredag och lördag ligger alltså bäst till. (Idag: rankningen har förändrats kraftigt förutom för fredag och lördag)

Här ligger tisdag inte så pjåkigt till (Idag: jo, det gör den), vilket däremot onsdag gör. Det går tyvärr inte att jämföra mina äpplen (sökningar på svenska) med [Mats] päron (på alla språk), så vi kan inte direkt siffersätta förändringen...


3. [Flyttades upp.]

4. Diskuterade vi inte tidigare att det kanske finns mer "lördag" och "söndag" eftersom det är helg och bl.a. bloggare skriver fler anteckningar då? Detta är testbar hypotes. Här genom att söka på "blogg" samt veckodagsnamnet (vilket iofs kan kritiseras om det är en bra indikation):

blogg måndag 10100 (3) Idag: 31700! (1)
blogg tisdag 7980 (6) Idag: 7870 (7)
blogg onsdag 8930 (4) Idag: 29000! (2)
blogg torsdag 7550 (7) Idag: 22900! (3)
blogg fredag 13400 (1) Idag: 11900 (4)
blogg lördag 11800 (2) Idag: 11900 (4)
blogg söndag 8370 (5) Idag: 8350 (6)

Här [var det igår] i stort sett samma rankning som ovan, men idag (söndag) ligger tisdag mest pyrt till. Märkligt nog ligger söndag rätt dåligt till, och det stödjer inte helghypotesen.

Man kan f.ö. notera att bloggare står för drygt en procent av dagsnamnen och det skiljer sig inte märkbart över veckodagarna: alla ligger kring 1.3 procent. Här är mer exakta värdena (sökresultatet för "blogg veckodag" delat med antalet sökresultat för "veckodag", där "veckodag" är veckodagesnamnet).

Måndag: 0.013 (Idag: 0.042 !)
Tisdag: 0.012 (Idag: 0.010)
Onsdag: 0.014 (Idag: 0.037 !)
Torsdag: 0.011 (Idag: 0.029 !)
Fredag: 0.013 (Idag: 0.010)
Lördag: 0.013 (Idag: 0.011)
Söndag: 0.012 (Idag: 0.010)

Idag: Här står måndag, onsdag och torsdag ut ordentligt, vilket ännu mindre stöder "helghypotesen".


5. Jag tror att det finns en hel del slump och annan google-galenskap med i spelet.

Posted by hakank at 07:38 EM Posted to Språk | Statistik/data-analys | Sökmotorer | Comments (1)

maj 11, 2005

Taxonomy of Wordplay

Taxonomy of Wordplay innehåller en djupgående hierarki av olika typer av ordlekar och deras rekord; tyvärr endast för det engelska språket.

Mycket intressant, och ger inte så lite inspiration...


Se även Ordligheter - Recreational Linguistics för fler länkar inom detta fascinerande område.


Posted by hakank at 06:13 EM Posted to Språk

april 14, 2005

Amazons "Statistically Improbable Phrases" (SIPs)

I två separata maildiskussioner (med Peter Lindberg och Simon Winter) har Amazon.com:s "Statistically Imprabable Phrases" (SIPs i folkmun) diskuterats. Den enda svenska text jag har hittat om detta är Erik Starcks notis Amazon testar Statistically Improbable Phrases (med en kommentar av Simon).

Det känns som det är dags att göra en liten sammanfattning (och ett gemensamt ställe att kommunicera findings).

Sedan några veckor har flera böcker presenterats med vad Amazon.com kallar för "Statistically Improbable Phrases". Det är sådana fraser som används ofta i en viss bok men sällan i andra böcker. Så här förklarar de själva:

Amazon.com's Statistically Improbable Phrases, or "SIPs", show you the interesting, distinctive, or unlikely phrases that occur in the text of books in Search Inside the Book. Our computers scan the text of all books in the Search Inside program. If they find a phrase that occurs a large number of times in a particular book relative to how many times it occurs across all Search Inside books, that phrase is a SIP in that book.

För t.ex. Malcolm Gladwells The Tipping Point finns SIPparna: social epidemics, transactive memory, mouth epidemics, teenage smoking. Man kan notera att frasen "tipping point" inte finns med, vilket beror på att det används i och för sig ofta i Gladwells bok, men finns även ofta i andra böcker.

Tanken med sådana SIP:ar verkar vara att visa på utmärkande drag i boken, men jag är tveksam till hur nyttiga de egentligen är för detta ändamål. Anledningen till tveksamheten är att det verkar vara svårt att göra en bedömning av bokens innehåll med hjälp av endast dessa fraser. Det känns rätt mycket som en titta-vad-vi-kan-göra-funktion (som i och för sig är cool). I och för sig är jag benägen att ändra mig när jag ser detta.

Däremot ger möjligheten att SIP-surfa, dvs att klicka till andra böcker med samma fraser, ännu ett trevligt sätt att upptäcka nya böcker. Vi har nog bara sett början på detta...


Principen bakom SIPs är inte ny. T.ex. får man väl anse att det är en variant (konceptuellt i alla fall) av hapax legomenon, dvs helt unika ord i en text. Se även denna längre artikel.

Mer generellt änvänds (troligen) en variant av Term Frequency / Inverse Document Frequency (TFIDF), som det finns en hel del skrivet om. Det stora med Amazons implementation är naturligtvis att det är publikt surfbart och att metoden används på en stor mängd texter (böcker).


Inspirerad av allt detta började vi (Peter, Simon och jag i separata) att fundera på hur man bäst gör egna varianter för våra respektive blogganteckningar, där en bok skulle motsvaras av en blogganteckning.

Peter tipsade om ett litet Pythonprogram (dess notis), men som endast arbetade med "fraser" på ett enda ord, vilket inte är så skoj.

Själv kikade jag i helgen på ett Perl-paket som Simon fått nys om: Ngram Statistics Package (NSP), på CPAN heter det Text::NSP. Efter en del föreståendeskapande lekar med detta började de mer seriösa arbetet, men det kräves mycket tråkigt filtreringsarbete och annat så projektet lades på hyllan, i alla fall för tillfället.

Jag är nu, efter de trevlande inledande försöken, till viss del tveksam hur mycket detta projekt egentligen ger (förutom leken, utmaningen och äran) eftersom en blogganteckning innehåller så pass lite text att det kan vara svårt att det blir intressant. I och för sig påverkas jag inte mycket av nyttan av ett projekt. :-)

Troligen kommer man fram till att det finns en stor mängd ord som endast förekommer i en enda blogganteckning (dvs blogg-hapax legomenon), såsom namn eller begrepp, och så finns det en stor mängd fraser som har en frekvens som motsvarar det vanliga språkbruket. Frågan som är intresserant att undersöka är om det finns tillräckligt många ord som befinner sig mellan dessa två frekvenstyper och därmed betecknar något "statistiskt osannolikt" (och förhoppningsvis överraskande) om en blogganteckning.

En utökning av detta vore att arbeta med samtliga texter för en blogg och jämföra frasfrekvenserna med andra bloggar, vilket nog skulle ge bättre utdelning.

Andra finesser som Amazon infört den senaste tiden är presentation över vanligast förekommande ord (concordance), olika typer av textstatistik och complexity. Exempel på sådant finns t.ex. här (Peters exempel).


Ytterligare:
Google-sökning på "Statistically Improbable Phrases"
Det finns en Perl-modul som beräknar olika textindex för engelska texter. Lingua::EN::Fathom.


Uppdateringar
Blind "Jonas Söderström" Höna har även skrivit om detta:
Amazon letar fram "osannolika fraser" i böcker samt Mer på amazon: de hundra vanligaste orden

En annan sak. Böckerna beställes naturligtvis via Bokus:
* Malcolm Gladwell: The Tipping Point
* Lynne Truss: Eats, Shoots & Leaves - The Zero Tolerance Approach to Punctuation

Posted by hakank at 08:55 EM Posted to Böcker | Machine learning/data mining | Språk

april 04, 2005

Begreppslig utredning och försvar att använda "papret" i föregående blogganteckning

Snabbt som rackarn mailade Daniel Olovsson mig och frågade om "Papret", det allra första ordet i föregående anteckning, var felstavat, varpå nedanstående utläggning kändes påkallad. Notera att det är mina intuition kring dessa ord och de (intuitionerna) är naturligtvis inte spikade i sten.

Det var ingen felstavning eftersom det är en försvenskning av det engelska "paper" (med ett "p"). "pappret" låter inte riktigt lika bra i min bok. Några tänkbara kandidater skulle kunna vara:
* "uppsats", men det låter som en sådan där sak man skrev i högstadiet
* "vetenskaplig artikel", är lite för klumpigt
* "artikel" som ensamt ord är jag allergisk mot eftersom det används i alldeles för många sammanhang: (tidnings)artikel, (blogg)artikel, (produkt)artikel, (p)artikel etc.
* "skrivning", lite väl allmänt och används nog mer för att beteckna antingen de proven man hade i gymnasiet/universitetet eller för att betona en språklig figur
* "studie" respektive "vetenskaplig studie" är i och för sig rätt bra, men refererar - enligt min uppfattning - inte bara till själva dokumentet utan till hela studien (undersökningen), och dokumentet är endast en del av av denna. Mer korrekt skulle nog vara "Studien X visade sambanden A, B och C, vilket sålunda har nedtecknats i dokumentet P", vilket är något för långt för att inleda en bloggnotis.

Håller naturligtvis med om att en rak översättning av engelska termer utan att tänka på att de kan förvirra är inte bra. Jag är dock inte ensam om ofoget, men det är ingen ursäkt att skriva förvirrande. För detta (o-allenaheten) anför jag google.
Alla dessa förekomster kan inte vara stavfel, eller kan de det?

OK, jag ska bättra mig.

Posted by hakank at 06:52 EM Posted to Språk | Comments (13)

mars 22, 2005

Magenta #3 2005: Om Markovkedjor och andra språkutvidgande tekniker

Magenta är ett "Medietekniskt magasin i syfte att belysa området medieteknik. Produktion och formgivning görs i sin helhet av studenter vid Linköpings Universitet". (Från Om Magenta)

Nummer 3, årgång 2 (dvs 2005) har flera intressanta artiklar, bl.a. När orden inte räcker till som handlar om Markovkedjor för att skapa nya ord eller fullständiga meningar (med eller utan någon mening i övrigt). Några av mina program nämns som exempel på denna teknik. (Se min sida "useless programs" för några andra exempel.)

En intressant fråga som tyvärr inte diskuteras så mycket är copyrightaspekten: Här kommer vi in på en annan intressant aspekt som togs upp i artikeln om Björn Crona i förra numret av Magenta. När har materialet ändrats så mycket att upphovsrätten för det ursprungliga inte längre gäller?.


Några relevanta tidigare Magentaartiklar
Framtidens hitmaskin som beskriver Thomas Björkvalds och Erik Svenssons ex-jobb Semi-automatic Music Creation using the Continuous Wavelet Transform and Markov Chains (PDF) om att automatiskt generera musik utifrån tidigare musikstycken.
Björn Crona - Pärlplattekungen där Björn Crona intervjuas som skapat ett system för att tillverkar mönster för pärlplattor (och som nämndes av David i början av året).

Se även
avdelningen Nyheter
RSS-flödet till Magenta finns här.

Aha, den David Pettersson som nämns på Kontakta oss är ju vår Månhus beta-David. (Och saker och ting såsom findings i webbserverloggarna faller nu på sin plats.)

Posted by hakank at 07:16 FM Posted to Språk | Comments (4)

mars 14, 2005

John Allen Paulos om Oulipo: Google Made Surreal

John Allen Paulos: Google Made Surreal:

I thought of Oulipo recently while visiting a Web site listing the Top 10 queries posed to Google for the week ending Feb. 21, 2005. (http://www.google.com/press/zeitgeist.html) In lower case, these queries were: 1. nascar, 2. hunter s thompson, 3. sandra dee, 4. constantine, 5. westminster dog show, 6. numa numa, 7. jeff gannon, 8. daytona 500, 9. us weekly and 10. american idol. The Oulipian constraint I considered was a weekly "news summary" incorporating all 10 of the queries.


Se även en tidigare anteckningar
OuLiPo
Matematikspalter

Posted by hakank at 09:00 EM Posted to Språk

februari 27, 2005

Bokstavskex tillbaka!

Det berömda Bokstavskex-projektet skapades 1997 av Magnus Bodin och Petter Duvander för att lista ut hur mycket den så samlade informationen på Internet motsvarade i bokstavskex.

Tyvärr har projektsidan varit nedlagd ett tag, men Petter skriver glädjande nog i Favorit i repris att sajten nu finns uppe igen: bokstavskex.framtid.nu.

Gå dit och njut!


Projektet nämns f.ö. också i kommentarerna till Hur mycket information finns det?.

Posted by hakank at 08:38 FM Posted to Diverse | Humor | Språk

januari 15, 2005

Chiasmus-ord (omkastningar av bokstäver mellan ord)

Johnny Söderberg på stationsvakt (Sonny Jöderberg på vaktionsstat) skrev i Freila om hur han tycker det är roligt att leka med ord. En sysselsättning som jag också är road av.

I kommentarerna hos Johhny nämnde jag några program som eventuellt kan hjälpa till vid sådana ordlekar. (Se nedan för den fullständiga kommentaren.)

Ett exempel som Johnny tar upp är den s.k. chiasmus-tekniken, dvs att byta ut delar av ett ord med ett annat, t.ex. att de första bokstäverna byter plats (se även nedan under "Mera om chiasmus"). Exempel:

Laila Freivalds blir Faila Lreivalds
Johnny Söderberg blir Sonny Jöderberg
Sture Pyk blir Pure Styk

Det totades därför ihop ett litet program för slika operationer på två ord där operationerna för närvarande är:

  • de första 1..N bokstäverna i respektive ord byter plats
  • vokalerna byter plats (först de respektive första vokalerna, sedan respektive andra vokalen etc)
  • ordens respektive stavelser (rättare: allting från början av ordet till och med en stavelse) byter plats, där vokalen i stavelsen antingen inkluderas eller inte (två varianter alltså)

Programmet finns till allmänt beskådande och användande på Chiasmus words (characters). Johnny får härmed en officiell cred för inspirationen till detta program.

En exempelkörning på orden "Laila" och "Freivalds" blir som följer

Original words:
Laila Freivalds

Language: Swedish

Switching first N characters

N=1: Faila Lreivalds
N=2: Frila Laeivalds
N=3: Frela Laiivalds
N=4: Freia Lailvalds
N=5: Freiv Lailaalds

Switching vowels of order O
O=1: Leila Fraivalds
O=2: Laila Freivalds
O=3: Laila Freivalds

Switching syllables (including vowels) of order S
S=1: Freila Laivalds
S=2: Freila Laivalds
S=3: Freiva Lailalds

Switching syllables (excluding vowels) of order S
S=1: Fraila Leivalds
S=2: Freila Laivalds
S=3: Freiva Lailalds

Tips: Om man vill leka med ett enda ord, t.ex. "stationsvakt", kan man dela upp det så att första ordet blir "stations" och det andra "vakt". Det var nämligen så "vaktionsstat" i det inledande stycket tillkom. Uppdatering: En funktion för detta har nu byggts in i programmet.

Om du saknar någon operation i programmet får du gärna önska så får vi vad som kan göras, givet möjlighet, tid, lust och/eller andra nödvändiga resurser.

/Kjellan Håkerstrand a.k.a. Kåhan Strallerkjend

Uppdatering 1: 2005-01-16
Programmet har nu även följande funktioner:
* Det finns möjlighet att göra en "egen-chiasmus", dvs att byta bokstäver i ett och samma ord, t.ex. för att skapa konstruktioner såsom Kåhan Strallerkjend eller något på stationsvakt.

Välj Do single word chiasmus för detta.

* P.g.a. ovanstående tillägg som skapar en massa konstruktioner, finns det även möjlighet att slå av/på utskrifter av detaljerna för respektive konstruktion. Det är alltså valet Print all details. När man arbetar med egen-chiasmus kan det vara lämpligt att ha utskriften inaktiverad.

Ett exempel med all utskrift: Leila Freivalds.

* Det görs nu också en summering av samtliga konstruktioner som är rakt-upp-och-ned presentation utan fetstil etc. Summeringen visas allra sist på sidan. Summeringen för "Laila Freivalds"-sökningen ser ut så här.

Tips: det kan vara en idé att endast arbeta med små bokstäver i namn eftersom versalerna tenderar att störa helhetsintrycket.

Slut på uppdatering 1

Uppdatering 2: 2005-01-17
Nytt i denna version är:
* det finns möjlighet att göra en chiasmus på de resulterande ordparen (länken Chiasmus this word pair i summeringslistan). Exempel: första generationen av "johnny söderberg" är t.ex. "söde johnnyrberg". Om man nu gör en chiasmus på detta ordpar får man t.ex. "john södenyrberg" (och man får även originalparet "johnny söderberg"). Ja, så kan man hålla på tills man tröttnar eller maten blir klar.

* för en-ords-chiasmus presenteras de två resultatsträngarna ihopslagna inom parentes. För den vanliga två ords-chiasmus behövs ju ingen sådan ihopslagning.

* lite intelligens: om man skriver in två ord i första ordfältet men inget i det andra fältet, delas det automatiskt upp i två ord som läggs i respektive ordfält. Detta för att det ska bli enkelt att använda Mozilla Search pluginen för detta program som skrevs om i Förstaversionerna av Mozilla Search Plugins för ett par "useless program". Dessa plugins arbetar nämligen endast med ett sökfält. Säg till om det är för mycket intelligens, för då slår jag på en flagga för detta beteende.

Slut på uppdatering 2


Mer om chiasmus
chiasmus.com är en trevlig sajt som förklarar olika typer av chiasmus. Begreppet förklaras vidare i What is Chiasmus?. De tekniker som används i programmet kallas där Chiasmus of Letter Reversal, men se också t.ex. Phonetic Chiasmus.


Den (nästan) fullständiga kommentaren hos Johnny
Här är, som utlovats ovan, den fullständiga kommentaren på Johnnys Freila-anteckning (nästan eftersom kommentaren om att jag hade missat att det fanns en 1000-teckens begränsning i Johnnys kommentarssystem har tagits bort samt att URL:arna har länkats enligt gängse webbpraxis):

Johnny: Om du tycker om att vända på ord kanske du skulle bli road av program som gör en del av arbetet.

Ett exempel är programmet "Word Meld" som går igenom en ordlista och föröker hitta likheter till ett visst ord. Ibland blir det småroligt, oftast inte. Men det skapas en massa förslag i alla fall.

Programmet ger bl.a. följande varianter på "freivalds" (resultatet är något redigerat; inom parentes visas ordlisteordet som matchade):
* freivallmo (vallmo)
* freivalpig (valpig)
* freivaluta (valuta)
* freivaldehyd (aldehyd)

Med ditt efternamn, dvs Söderberg får man t.ex. följande:
* flöderberg (flöde)
* söderberest (berest)
* söderbergonom (ergonom)
* söderbergfast (bergfast)

Om inte annat kan de föreslagna orden vara utgångspunkt får egna övningar.

Två varianter av programmet finns:
En Javaversion samt en vanlig webbapplikation (som är långsammare).

Och om du känner för det kan du även kika på liknande program på Useless programs.

T.ex. Combograms som listar vilka ord man kan skapa från bokstäverna i ett annat ord.
. (Det var alltså detta program som användes i Mats Anderssons ordtävlingar i höstas.)

Eller Vowels Away som kollar vilka ord som är lika om man tar bort vokalerna från orden.

Orden "freivalds" och "förvildas" är alltså 'konsonantidentiska' eftersom de båda motsvarar konsonantföljden "frvlds". Jag drar dock inga större politiska slutsatser av detta.

Posted by hakank at 08:14 EM Posted to Program | Språk | Comments (3)

november 27, 2004

Spelling out words: En liten lek med ljudande ord

Vad har följande gemensamt: BCND, BTND, FMR, XMN, LRA, IDLA, QNLN, RND?

Jo, de motsvarar riktiga ord om man uttalar dem enligt hur bokstäverna läses ("ljudar dem"), nämligen beseende, beteende, efemär, eksemen, ellära, ideella, quenellen samt ärende. Läs ut "BCND" som "be-se-en-de", "LRA" som "ell-är-a", etc.

En fullständig (nåja) lista över de svenska ord som är "Spelling Out Words" ("Ljudande Ord"?) finns här.
Man kan notera att för dessa ord är även vokaler medräknande (som ju ljudas endast som en bokstav, dvs "a" => "A", "e" => "E").

Det finns också en lista över ord som inte fullständigt kan översättas men som innehåller tillräckligt många översättningar att det blir lite skoj. Vokalerna har ignorerats eftersom de inte tillför speciellt mycket.

De ord som kunde konverteras mest listas härnedan. Talet efteråt är andelen konverterade bokstäver delat med ordets totala antal bokstäver.


quenellens: QNLNs: 0.90
elementet: LMNTt: 0.89
resenären: rSNRN: 0.89
elementär: LMNtR: 0.89
beteendes: BTNDs: 0.89
begärelse: BgRLC: 0.89
elelement: LLMNt: 0.89
elementen: LMNTn: 0.89
bevekelse: BVkLC: 0.89
beteenden: BTNDn: 0.89
beteendet: BTNDt: 0.89
eksemens: XMNs: 0.88
perennen: PrNN: 0.88
esseltes: SLTs: 0.88
essensen: SNCn: 0.88
essenser: SNCr: 0.88
quenells: QNLs: 0.88
serveess: CrVS: 0.88


Några andra favoriter:

insektsätande: InCktZnD
bearbetade: BarBtaD
empedokles: MPdoklS
esteter: STTr
enkelelement: NkLLMNt
elementärkurser: LMNtRQrCr


Det gjordes också ett litet program som listar sådana översättningar. Se Spelling out words för att leka med programmet. Än så länge är det endast svenska ord som hanteras.


Översättningsreglerna är som följer (vänsterledet är de bokstäver som ersätts med högerledet):

be => B
ce => C
se => C
de => D
ef => F
eff => F
ge => G
hå => H
ji => J
kå => K
ell => L
el => L
em => M
emm => M
en => N
enn => N
pe => P
qu => Q
ku => Q
err => R
är => R
ärr => R
es => S
ess => S
te => T
dubbelve => W
ve => V
we => V
eks => X
ex => X
äx => X
zäta => Z
säta => Z


Slutligen: För andra ord/språk/etc-saker se även mina andra "useless programs".

Posted by hakank at 12:14 EM Posted to Program | Språk | Comments (5)

november 20, 2004

TvärGranska; Grammatikgranskningsprogram

TvärGranska prototyp:
TvärGranska är ett interaktivt webbgränssnitt som arbetar mot grammatikgranskningsprogrammet Granska. Granska är ett språkgranskgranskningsprogram som utvecklas på Kungliga Tekniska Högskolan i Stockholm. Granska har konstruerats i Nadas nya och gamla grammatikgranskningsprojekt.

TvärGranska har utvecklats i projekten; CrossCheck - svensk grammatikkontroll för andraspråksskribenter och Språkliga datorstöd och andraspråksinlärning.

(Via Stationsvakt.)

Har inte testat det ordentligt ännu, men det är skoj. Några funna småsaker:
I Firefox (1.0) blir tecknen "åäö" konstiga i felfönstret. "blogg" finns inte med i ordlistan, utan i stället föreslås "logg", däremot finns "webblogg". Ordet "grönköpingsk" finns inte heller med.


Se även
Granska - ett program för svensk språkgranskning (populärbeskrivning)
WebbGranska
Grim - en interaktiv miljö med fokus på det svenska språket: Grim är ett program som skall stödja inlärning av svenska. Grundtanken är att inläraren skall få möjlighet att dels få direkt återkoppling vad det gäller stavning och grammatik, dels att ge inläraren verktyg för att utforska sitt eget inlärarspråk och målspråket svenska.

Posted by hakank at 01:40 FM Posted to Språk | Comments (4)

november 07, 2004

Records from From Chris Cole's Wordplay

Records from From Chris Cole's Wordplay

This file contains some of the content used in the Chris Cole's Wordplay. It is on the Puzzlers's website at the suggestion and with the permission of the author.

Wordplay by Chris Cole, Sterling Publishing Co., Inc, New York 1999, 191 pages. Introduction by Will Shortz. ISBN 49725-01797.


Se även
National Puzzlers' League (puzzlers.org).

Posted by hakank at 12:51 FM Posted to Språk

juni 22, 2004

Constraints, Peter Lindberg och Shaggy Dog

Peter Lindberg skriver i Oulipo and Constrained Universes of Expression om constrained i olika former. Peter länkar till sina tidigare och mycket intressanta bloggningar i ämnet "Constrained Universes of Expression", vilka naturligtvis rekommenderas att läsas.

Han skriver även om den ganska nya bloggen MadInkBeard vars tema är "constrained" (tvungen eller tvingad är väl den bästa svenska motsvarigheten), såsom den fascinerande skriftformen "Constrained writing" som bl.a. författargruppen Oulipo excellerar i. Se lite mer om denna grupp i blogganteckningen OuLiPo. En översikt om constrained writing finns t.ex. på wikipedia.

Dock saknar jag min personliga favoritgenre, nämligen "shaggy dog", där man skriver en (normalt längre) historia som avslutas med en ordvits. Det finns flera olika betydelser av detta begrepp, men här innebär det att tvingadheten ligger i att man utgår från vitsen och skapar historien utifrån denna. En av de mest kända shaggy-dog-författarna var Myles na Gopaleen (pseudonym för Flann O'Brien), som i boken Best of Myles ger mängder av riktigt roliga exempel.

Några av mina egna shaggy dog-etyder finns att läsa här (sök efter "SHAGGY DOG OCH VITSAR", börjar på nummer 38).


Kan också passa på att nämna att i går var det exakt ett år sedan Peter och jag började e-brevväxla, ett faktum som också framkommer i Peters ovan nämnda mångfacetterade anteckning. Till dags dato har det totalt blivit cirka 378 mail - ungefär lika många av vardera skribent, något mer än ett om dagen alltså. Det har varit ömsom korta länkmail, ömsom väldigt långa essäer, ömsom varkendera och/eller ömsom både och. Oavsett vad, har det alltid varit skoj och lärorikt att läsa Peters mail. Hoppas att det varit lika roligt att skriva dem, Peter.

Posted by hakank at 11:21 EM Posted to Språk

juni 07, 2004

Lagomduktig

Lagomduktig är en blogg som jag kommer att följa med intresse. Månne man lär sig en hel del där.

Så här presenterar Billy McCormac sitt sök: Lagomduktig documents my quest to unravel the mysteries of translating the Swedish language.

Via Göran H på nästan som jag....

Posted by hakank at 07:34 EM Posted to Blogging | Språk

maj 08, 2004

Isomorfa ord (Isomorphic Words)

Mats Andersson ställde häromdagen en kryptografisk gåta Nytt krypto, som helt enkelt frågar vad F O J K Ö N W Å C W N O S Q betyder.

Efter några försök med standardsaker såsom "difford", rot13, rotN etc, funderade jag på om det kanske var ett substitutionschiffer (ersättningschiffer, substitution cipher), dvs där varje bokstav ska bytas ut mot en annan.

Eftersom sådana chiffer inte nödvändigtvis har unika lösningar, skrevs ett litet program för att kontrollera vilka och hur många ord (från en ordlista) som skulle kunna vara tänkbara kandidater.

I det följande kallar jag två ord som kan förvandlas till varandra med sådan substitution för isomorfa ord (av "iso": samma + "morf": form/struktur).

Programmet Isomorphic Words
Programmet som skapades har nu gjorts webbanpassats och finns på Isomorphic Words, där det beskrivs mer hur programmet fungerar, vad som menas med isomorfism etc.

Tillbaka till Mats pyssel
Listan med isomorfa ord till strängen FOJKÖNWÅCWNOSQ blev 984 ord lång (från en ordlista på cirka 117000 svenska ord)! Här är några av dem, kanske inte helt slumpmässigt utvalda:

  • alfabetisering
  • antediluviansk
  • automatisering
  • bakgrundsmusik
  • bokstavstrogen
  • bredvidläsning
  • dataöverföring
  • desinformation
  • förväntansfull
  • gemenskapsform
  • glädjespridare
  • gudsnådelighet
  • högteknologisk
  • kryptogamflora
  • kuriosasamling
  • meningsfullhet
  • oklassificerad
  • operativsystem
  • outgrundlighet
  • rekordslagning
  • schvungfullhet
  • sifferunderlag
  • självalstrande
  • skarpsinnighet
  • snackesalighet
  • textbehandling
  • tolkningsmetod
  • trollkunnighet
  • vardagsgöromål
  • vilkensomhelst
  • stjärneskådare

Programmet visar även en möjlig mappning (av möjligen flera möjliga mappningar) mellan bokstäverna i orden. T.ex. för ordet stjärneskådare kan man göra följande mappning från strängen FOJKÖNWÅCWNOSQ:

  • 1 char: [CÅFKJQSÖ] -> [aäkjntåd]
  • 2 chars: [ONW] -> [esr]

Detta innebär att de bokstäver som förekommer exakt en gång i det inknappade ordet, dvs bokstäverna [CÅFKJQSÖ], kan ersättas med vilken bokstavs som helst som förekommer exakt en gång i stjärneskådare, dvs [aäkjntåd]. På samma sätt kan de bokstäver som förekommer två gånger i respektive ord kan bytas ut mot varandra.

Exakt isomorfism
Programmet har även möjlighet att göra en mer strikt kontroll, där inte bara antalet förekomster av respektive bokstäver ska vara samma i de två orden, utan även där bokstävernas positioner är relevanta. T.ex. orden anna, amma och esse är exakt isomorfa eftersom de har exakt samma uppbyggnad/form: Först en bokstav, sedan en annan, därefter samma bokstav som nummer 2 och till sist samma bokstav som började ordet. Ett ord som jojo är isomorft (två förekomster av respektive två bokstäver) men inte exakt isomorft eftersom det inte har den eftersökta strukturen.

För strängen FOJKÖNWÅCWNOSQ hittades ingen exakt isomorfism i den svenska ordlistan; inte heller i den engelska för den delen.

Uppdatering:
Efter att ha kollat i en betydligt större engelsk ordlista som även inkluderar fraser, hittades den exakta isomorfismen parcel of land som vad jag förstår betyder ungefär "jordlott" (som enligt NE i sin tur har "parcell" som synonym). Mappingen är:

  • 1 char: "CÅFKJQSÖ" -> "cedfonpr"
  • 2 chars: "ONW" -> "a' 'l"

Där hittades även en exakt isomorfism på kjellerstrand: nämligen shipping note med mappningen

  • 1 char: "adkjnst" -> "' 'eghost"
  • 2 chars: "elr" -> "inp"

(Slut på uppdateringen.)

Däremot har ordet Ordet andersson har följande fyra svenska exakta isomorfismer:


  • lakryssja
    • 1 char: "aedor" -> "kjlry"
    • 2 chars: "ns" -> "as"

  • professur
    • 1 char: "aedor" -> "efopu"
    • 2 chars: "ns" -> "sr"

  • trägaller
    • 1 char: "aedor" -> "aeägt"
    • 2 chars: "ns" -> "lr"

  • undfallen
    • 1 char: "aedor" -> "aedfu"
    • 2 chars: "ns" -> "ln"

Själva mappningen är här något annorlunda jämfört med "vanliga" isomorfa ord, eftersom positionen spelar roll. För ordet undfallen innebär det att bokstäverna "a", "e" och "d" (från andersson) mappas till samma bokstav i undfallen, men "o" ska mappas till "f", "r" till "u", "n" till "i" samt "s" till "n".

Man kan även notera att mats andersson har 806 isomorfa ord, t.ex. visirvärdighet, trosbekännelse samt amfiteatralisk, men inga exakta isomorfa ord.

Här är några exempel på mer strukturerade former. Man kan notera det förenklade sättet att skriva ut strukturen på de eftersökta ordet.

abcdefghijklm, dvs 13-bokstavsord utan upprepning av bokstäverna,. Det finns 42 sådana i ordlistan, t.ex. vänskaplighet, fasmodulering och fetischdyrkan.

abbccdd: irreell
abbcc: reell

Palindrom:
abcba: 12 stycken, t.ex. varav, girig och kajak
abccba: tillit


Se även
Mats tidigare kryptoproblem: Kod.
Mina andra "useless" program.

Programmet är f.ö. skrivet i Python, och innehåller inte ett endaste reguljärt uttryck.

Uppdatering: OK, kryptogåtan är löstes till slut. Det var inte något substitutionschiffer. Se kommentarerna i problemlänken.

Posted by hakank at 10:04 FM Posted to Program | Språk

april 23, 2004

Fortsatt stavning av "Henning Mankell". Samt lite om agrep

I Programspråket Icon och stavningen av "Henning Mankell" skrevs om möjliga stavningar av "Henning Mankell". Här följer en uppdatering kring detta.

Language Log finns det, förutom den artikel som inspirerade mig att skriva programmet: The mysteries of... what's his name?, några andra bloggningar i ämnet:

I Henning Mangled görs en intressant google-analys av de olika stavningarna.

Henning Mankellismus in icon innehåller en uppmaning om hjälp kring det prinicpiella problemet: I've been hoping, though, that someone will follow up on David Beaver's post by writing a program to help with (various approaches to) estimating the statistical density of what David called "the Henning Mankell morpheme space".. Där finns, roligt nog, också ett pek till min förra anteckning.

agrep - approximate grep
I näst sista stycket på The mysteries of... what's his name? nämns sökprogrammet grep som kan hantera reguljära uttryck.

Om man nu inte vill skriva slika uttryck kan man använda agrep, approximate grep, som även tillåter felstavningar. Programmet är skapat av Sun Wu och Udi Manber (en gammal husgud) från University of Arizona,

Man anger antalet tilllåtna felstavningar genom parametern -# där # är ett heltal från 0 till 8, där 0 innebär att det inte ska vara någon felstavning alls.

Låt oss nu testa detta på den fil som skapades av Icon-programmet (se föregående blogganteckning) när vi tillåter 1 fel:

agrep -1 "Henning Mankell" pattern_generation.txt

Då hittas följande varianter:

Henking Mankell
Hening Mankell
Henning Menkell
Henning Mankell
Henning Mankall
Henning Manell
Henning Mannell
Hanning Mankell

Om man använder parametern -8 (dvs 8 fel) hittas 547 av de 648 varianterna. Men med så många tillåtna fel kommer programmet att hitta en massa andra irrelevanta ord också, så det är inte speciellt användbart. Det normala är att man tillåter 1 eller kanske 2 fel.

En annan feature i agrep är parametern -p ("find records in the text that contain a supersequence of the pattern") som hittar alla strängar som matchar initialerna. T.ex. agrep -p HM fil hittar alla strängar som kan bildas av två intilliggande ord som börja på "H" respektive "M". För den specifika uppgiften är detta också overkill.


Agrep använder edit distance för att avgöra antalet felstavningar, dvs räknar ut avstånden mellan orden. För mer om detta se t.ex. de Postscript-filer som finns i agrep-katalogen. Se även blogganteckningen Skapa stavfel.


Det finns ett annat system för approximerad sökning: TRE (0.6.6 i skrivande stund) som har en version av agrep som verkar skoj.
TRE includes a version of the agrep command line tool for approximate regexp matching in the style of grep. Unlike other agrep implementations (like the one by Sun Wu and Udi Manber from University of Arizona available here) TRE agrep allows full regexps of any length, any number of errors, and non-uniform costs for insertion, deletion and substitution.

Posted by hakank at 10:22 FM Posted to Reguljära uttryck etc | Språk | Comments (2)

april 22, 2004

Programspråket Icon och stavningen av "Henning Mankell"

Jonas Söderström på Blind Höna riktade uppmärksamheten på problemet att veta exakt hur en känd svensk författare stavar sitt namn. Är det "Menking Hannell", "Manking Hannall", "Manning Henkell"? Artikeln visar en massa alternativ.

Det är enkelt att skapa alla dessa varianter genom permutationer. Anledningen till denna blogganteckning är att visa hur elegant man kan göra detta i programspråket Icon. Själv använder jag Unicon, en efterföljande och superset av Icon, som i sin tur är en utveckling av och efterföljare till det fantastiska språket SNOBOL.

Problemformulering
Generera alla möjliga varianter av följande reguljära uttryck

  [HM][ea](nk|n|nn)(ing|ell|all)

där [HM] betyder endera bokstaven "H" eller bokstaven "M", och ing|ell|all innebär någon av strängarna "ing", "ell" eller "all". (Egentligen kan man skriva [HM] som (H|M), men vanligen används [...] för sådana "character classes".)

Både för- och efternamn genereras av detta uttryck med restriktionen att de inte får börja på samma bokstav.

En Icon-lösning på detta problem ser ut så här.

procedure main()
   every x:= HM() do write(x)
end

procedure HM()
   suspend ("H" || _HM() || " " || "M" || _HM()) |
      ("M" || _HM() || " " || "H" || _HM())
end

procedure _HM()
  suspend (!"ea" || !["nk","n", "nn"] || !["ing","ell","all"]);
end

Lite förklaringar av Icon-koden:
Operatorn ! (utropstecken) gör själva genereringen, när man använder every.

!"ea" motsvarar det reguljära uttrycket [ea], och genererar både "e" och "a", dvs alla tecken som finns i strängen. Kontruktionen !["ing","ell","all"] motsvarar det reguljära uttrycket (ing|ell|all) och genererar alla element i listan.

| (enkelt "pipe"-tecken) innebär alternation, dvs "eller". Man skulle kunna uttrycka !"ea" på följande sätt: !("e"|"a").

|| (dubbla "pipe"-tecken) är strängkonkatenator, dvs slår ihop två strängar.

Funktionen suspend är en speciellt funktion som håller reda på var någonstans i genereringen man är. Denna typ av funktioner kallas även för generator eller closure.

Ovanstående program skapar 648 namnvarianter, varav samtliga är med i listan på den ovan nämnda sajten. Programmet pattern_generation.icn är en utbyggd version som visar lite mer information etc. Här är output från detta program.

Not: skulle vi inte haft restriktionen att för-/efternamn inte får börja på samma bokstav skulle programmet bli ännu enklare:


procedure main()
   every x:= (HM2() || " " || HM2()) do write(x)
end

procedure HM2()
  suspend !"HM" || !"ea" || !["nk","n", "nn"] || !["ing","ell","all"]
end

Detta program genererar 1298 namn.


Lite mer om Icon
Icon har många andra trevliga features, framförallt ett mycket kraftfullt system för pattern matching (influerat av SNOBOL) som är helt olikt den numera förhärskande metoden med reguljära uttryck.

Förutom ovan nämnda sajter finns det några PDF-böcker om Icon/Unicon som rekommenderas:

Ralph E. Griswold, Madge T. Griswold: The Icon Programming Language (3rd ed)
Clinton Jeffery, Shamim Mohamed, Ray Pereda, Robert Parlett: Programming with Unicon (eventuellt en blivande O'Reilly-bok).
Thomas W Christopher: Icon Programming Language Handbook


För mer om reguljär uttryck (regular expressions) se t.ex. blogganteckningen Reguljära uttryck.

Posted by hakank at 01:39 EM Posted to Reguljära uttryck etc | Språk

december 28, 2003

OuLiPo

Det tolfte och trettonde numret av Pequod (se även www.pequod.se) handlar (handlade) om och av den fascinerande litteraturgruppen OuLiPo, som inkluderade författare med namn såsom George Perec, Raymond Roussel, Raymond Queneau, Harry Mathews et cetera etc.

Förutom den lätt (läs svårt) absurda tendensen i skriverierna och dess generativa principer (vilka jag erkänner en definitiv influens av) tycker jag speciellt om de myckna kopplingarna till matematik. T.ex. skrev matematikern Claude Berge en kriminalhistoria där problemet löses med hjälp av grafteori (se Mathematical Fiction: Who Killed the Duke of Densmore? för lite mer info.)

Några av artiklarna i PEQUOD:
Livet är en häst: presentation av gruppen
Teaterträdet - Kombinationskomedi av Paul Fournel (i samarbete med Jean-Pierre Enard).

Några trevliga böcker som innehåller OuLiPo-gruppens alster liksom historik är
Oulipo: A Primer of Potential Literature
Oulipo Compendium (samt www.oulipocompendium.com/)
Oulipo Laboratory: Texts from the Bibliotheque Oulipienne

[Samtliga dessa står inte av en händelse på samma bokhylla bokhyllehylla som mina böcker av Jorge Luis Borges, ordlighetsböckerna, biografin över tidskriften MAD:s grundare Mad World of William M. Gaines samt, men detta är en händelse, ett gäng Kafka-böcker. For easy reference på vägen till köket.]

Mer info:
Oulipo
Mathematics and Literature: Cross Fertilization (PDF)
Harry Mathews
Paul Harris Oulipo-sida

googlesökning på oulipo. Mycket är på franska så 1 fulländade 2 skickliga, talangfulla av och i detta språk har en klar fördel framför oss andra.

Posted by hakank at 08:45 EM Posted to Böcker | Humor | Husgudar | Matematik | Språk | Comments (2)

december 24, 2003

God Jul! Och ett litet julpyssel

God Jul alla!

Här är några ord som kan skapas av bokstäverna i "god jul":

du, duo, glo, go, god, gud, gul, guld, jo, jod, judo, jul, ljud, ljug, lo, lod, loj, oj, oljud, uj

vilket ju kan passa bra till julgröten.

Julpyssel
Stora virtuella guldstjärnor utgår till den som kan skapa en fullständig (och på något sätt förståelig) mening av samtliga och endast orden i ovanstående lista. För att dessa guldstjärnor ska lysa ordentligt tarvas ett sammanhang där meningen skulle kunna vara "naturlig". Ogillas görs dock förslag som använder citering såsom:

Ljud/oljud: "duo, glo, go, god, gud, gul, guld, jo, jod, judo, jul, ljud, ljug, lo, lod, loj, oj, oljud". Uj!

Däremot gillas kreativ grammatik och inlagd sill.


Om vi tillåter bokstäverna i "god jul" att förekomma flera gånger blir det en något större lista:
dogg, dojo, dold, du, dugg, duo, glo, glugg, go, god, gid, gul, guld, guldgul, gull, jo, jod, jojo, ju, judo, jul, ljud, ljug, lo, lod, logg, loj, ludd, lugg, lull, lullul, loj, ojoj, oljud, udd, uddljud, uj, ull.

(Noteras kan det märkliga sammanträffande att både dojo och judo finns med.)

Det program som användes för att skapa dessa listor är Combograms.

Posted by hakank at 10:19 FM Posted to Språk | Comments (3)

december 22, 2003

Markov av svenska bloggar

Efter Bengt O. Karlssons förslag i kommentarerna till Automatisk bloggning? (Blog Markov) har jag nu hackat ihop ett litet wrapperprogram för att markovifiera de bloggar som finns på weblogs.se:s Webbloggsindex, och är väl alla de bloggar som någonsin pingat weblogs.se?

Programmet Web Markov weblogs.se läser in ovanstående sida, mixtrar och joxar lite, samt länkar alla blogg-sidorna till Markov-programmet.

Det är inte snyggt men det är fult. :-)


Om systemansvarig på weblogs.se eller annan anser att programmet på något sätt är otillbörligt ber jag om en fin liten vink om detta.

Uppdatering
Sagde Bengt har nu en kul julgåta att knäcka där han använder texter skapade via sagda program. Se vidare Vilka bloggar är det som markoviserats så här?. Han förklarar lite mer i sin anteckning rubricerad Några nötter att knäcka daterad 2003-12-22, men bokmärkeslänken är till nämnda julnöttersida.

På en icke förekommen anledning kanske jag även bör nämna att Markov-programmen är slumpmässiga, vilket innebär att det är ganska osannolikt att exakt samma text skapas flera gånger. Jag tar inget som helst ansvar för ett eventuellt uppkommmet Markov-beroende.

Posted by hakank at 10:13 FM Posted to Blogging | Program | Språk | Comments (1)

december 19, 2003

Automatisk identifikation av språk (språkidentifiering)

Mats Andersson frågar hur man identifierar ett visst språk.

Tyvärr fungerar det inte så bra att bara titta på fördelningen av enskilda bokstäver (som Mats antyder som en lösning), utan man arbetar ofta med n-gram, dvs "löpande" n-boktavsdelar av texten. (Exempel: 2-gram (bigram) på ordet "mats" är "ma", "at", "ts".) Efter att ha analyserat en stor mängd dokument på olika språk arbetar man vidare med tekniker som beskrivs via nedanstående länkar.
[F.ö. är det n-gram jag använder i mina markov-program för att generera ord eller texter, t.ex. New Markov words II, skapa svenska ordstäv, Bob Hund texter, etc. Om det nu förklarar något. :-)]

Exempel:
Gå till Unknown Language Identification och skriv in en text, t.ex. den där Mats skriver sin fråga. Förklaringen av hur programmet fungerar finns på The Acquaintance Algorithm.

Här är några andra länkar om automatisk språkigenkänning (språkidentifiering, language identification):
TextCat, som också har kod skriven i Perl.
Det finns en bibliografi t.ex. på Automatic Language Identification Bibliography. Tyvärr är rätt många länkar obsoleta.

En massa andra språkidentifieringsredskap finns på Language Identification Tools. Där finns även pekare och referenser.
Fagan Finder har samlat en hel del av dessa som man kan testa, men det funkar tydligen inte nu. Däremot fungerar många av de sajter som finns på sidan, så klicka vidare.

Mer finns via google: "language identification".


Ett annat skoj område är automatisk textsammanfattning (text summarization). Se t.ex.
SweSum - Automatisk Textsammanfattare av
Vad är automatisk textsammanfattning?
Textsammanfattning
The Text Summarization Project
Text Summarization

Se även den alltid inspirerande Viggos språktekniksida (Viggo Kann)

Posted by hakank at 01:33 EM Posted to Språk | Statistik/data-analys

december 11, 2003

Bra frågor

Mats Andersson ställde igår frågan En bra fråga? Här är några reflexioner kring detta.

Mats börjar respektive avslutar sin anteckning med följande:

Vad är en bra fråga? Om någon ställer en fråga till dig och du inte kan svara då kanske du svarar att det är en bra fråga. Vad är det för bra med en fråga man inte kan svara på? Och om nu en fråga man inte kan svara på är en bra fråga, vad är då en dålig fråga?
...
Så vad är en bra fråga egentligen? Och framför allt, är frågan "Vad är en bra fråga?" en bra fråga? Och är i så fall frågan Är frågan "Vad är en bra fråga?" en bra fråga? en bra fråga? Vilket leder till nya frågor som leder till nya frågor.

Enligt min mening är det flesta av ovanstående frågorna bra frågor. I slutet försöker jag mig på ett samlat svar på den oändliga regressen.

Först lite om själva begreppet "bra fråga".

Mats undrar om en bra fråga är samma som en svår fråga (vilket jag inte anser), och leder vidare till tanken att "bra" egentligen skulle innebära "dålig". Intressant ansats, men då skulle ju begreppen "bra" och "dåligt" helt förlora sina betydelser. Och det vill vi ju inte, eller hur? Mats visar alltså att "bra fråga" inte kan betyda det han först föreslår.

Det intressanta ("bra") - i alla fall för mig - med Mats frågor har inte så mycket att göra hur vi definierar "bra" rent allmänt utan snarare i vilka situationer som vi använder uttrycket "bra fråga". För mig är t.ex. uttrycket "bra svar" inte lika intressant (även om det kan vara svårt att reda ut exakt vad det innebär).

Om man funderar på hur man normalt använder uttrycket "bra fråga" (t.ex. i "Det var en bra fråga!") kan vi mena lite olika beroende på situationen. Här är några exempel:

En lärare ställer en fråga på ett prov. Några av eleverna skriver svar som visar att de förstått vad frågan gällde. Några andra elever svarar inte eller svarar på ett sätt som visar att de inte förstått vad det handlade om. Det är då en bra fråga eftersom den gjorde så att lärararen lättare kan bedöma hur eleverna skiljer sig i sin kunskapsnivå, och förhoppningsvis även ge antydan vad det är som en viss elev har svårigheter med.

Här är det en bra fråga utifrån lärarens perspektiv eftersom denne fick reda på sakerna om eleverna som förr kanske var okänt. Som Mats antyder är det märkligt att eleverna skulle tycka att det var en bra fråga. Å andra sidan kanske de elever som får bra betyg på provet anser att det är en bra fråga eftersom den gjorde så att de utmärkte sig jämfört med andra.

Men detta är nog inte den normala användningen av "bra fråga". Följande nyligen självupplevda exempel kan ge lite mer ledtrådar:

Häromdagen roade vi oss med Lateral thinking-problem, dvs där först en kort histora berättas varefter deltagarna ska fråga ja/nej-frågor och komma fram till bakgrunden till historien. Ett exempel: "En man kommer till sitt jobb, tänder ljuset och hittar en massa döda människor. Vad har hänt?". Mitt under ett sådant frågepass var det någon som ställde frågor varpå lekledaren spontant sade: Det där var bra frågor!.

Vad menade lekledaren med "bra fråga" här?

Ovanstående är exempel då någon faktiskt vet det korrekta svaret och där någon annan ska komma på en lösning. Då är det rätt enkelt att se att en fråga är nära lösningen. I andra fall, t.ex. i vetenskaplig forskning eller när man debuggar ett program som inte riktigt fungerar som man vill, har man bara ett fenomen framför sig som man försöker att förstå.

En bra fråga i dessa sammanhang är då en fråga som gör att man får en ny syn på problemet och - kanske - löser det. Här är ett enkelt exempel från min värld:

- Hmmm, vad händer om du testar på en annan dator?
- Bra fråga, det har jag inte tänkt på!

Man skulle här också kunna se frågan som en bra reminder ("påminnare") om sådant som man brukar fundera på. Och kommentaren skulle då även kunnat vara "Bra påminnelse. Det hade jag glömt!".

Det skulle alltså lika väl ha kunnat låta på följande sätt:

- Hmmm, vad händer om du testar på en annan dator?
- Dum fråga, det var naturligtvis det första jag tänkte på.

För frågeställaren var frågan ställd utifrån en kunskap (modell) om hur saker fungerar och orsaker till problem (dvs att man kan få olika resultat beroende på vilken dator man kör på) men visste inte om att svararen redan hade kontrollerat detta. (I slutet på denna anteckning återkommer jag lite till detta med modeller.)

Jag tror att essensen i det vi normalt menar med "bra fråga" är att frågan penetrera ett (svårt) problem genom att gå på djupet, nå kärnan i problemet eller får oss att tänka på en annat sätt än tidigare.

Det går nog också ganska omedelbart att säga om en fråga är bra eller inte, oavsett om frågan verkligen leder till ett korrekt svar. Frågan ledde ju hur som helst till nya tankegångar. [Kanske man borde införa uttrycken "felaktig fråga" för sådana som inte leder till en bra lösning. :-) Hur uttrycker man sig i Jeopardy(TM)?]

Motsatsen till "bra fråga" skulle då egentligen inte vara "dålig fråga" utan snarare "ointressant fråga". För att travestera en av Mats dialoger där man kan säga att följande fråga är bra eftersom den löste problemet.

- Vad är det för dag idag?
- Det är söndag, men varför frågar ... . Å, k*tten, det är alltså därför banken är stängd!

"Bra fråga" verkar alltså vara ungefär samma sak som "intressant fråga". Tyvärr finns det en tendens att används både "bra fråga" respektive "intressant fråga" när man inte själv vet svaret och inte vill verka okunnig. Men detta ska ses som ett parasistiskt användande som lever på den ursprungliga betydelsen. När man säger dessa fraser antyder man att man kan bedöma kvaliteten på frågan, vilket ju kräver en hel del kunskap (som man kanske inte har).


Här är en kommentar om Mats oändliga regress i det första citatet ovan. Låt oss för enkelhets skull kalla hela denna sekvens av frågor för Z:

X = "vad är en bra fråga?"
Y(0) = "är X en bra fråga?"
Y(1) = "är Y(0) en bra fråga"
Y(2) = "är Y(1) en bra fråga"
...
Y(n) = "är Y(n-1) en bra fråga?"
för n -> oändligheten.

Grundfrågan, dvs om den sammansatta frågan Z är en bra fråga, är en bra och intressant fråga, liksom frågorna X och Y(0) och möjligen Y(1). Anledningen till att jag tycker att det är bra frågor är att de på olika sätt gav nya infallsvinklar på ett problem som jag tycker är intressant. Däremot anser jag inte att t.ex. Y(3) är en bra fråga eftersom den inte tillför något nytt jämför med Y(2).

Sidospår:
En sak som fascinerar mig i allt detta är vilken typ av representation (modeller) vi har och hur vi använder dessa när vi löser olika typer av problem, jämför ovan om datorproblemet. Ibland är jag mycket visuell när jag ska lösa ett problem. T.ex. kan vissa programmeringsproblem representeras som en mental Whyteboard där kopplingar mellan olika begrepp är linjer av olika slag. Några gånger har jag sett problemen ungefär som i en 3D-värld; om det råkar komma in något helt annat relevant för problemet, t.ex. genom någon association, är det som en ny box dyker upp och kopplar upp sig mot de övriga. I sällsynta fall har det faktiskt varit som en Virtual Reality-resa med zoomningar och allt.

Tråkigt nog är det mycket svårt att direkt överföra en sådan modell till annan person och det är frustrerande när man tycker sig se lösningen så klart men kan inte riktigt formulera den.

För att göra en koppling till huvuddiskussionen skulle man med ovanstående bild kunna säga att bra frågor är sådana som gör att man lättare kan fundera på de olika boxarna och dess relationer, t.ex. genom att undersöka vad skulle hända om en koppling fanns mellan dessa två boxar; eller då en fråga skapar en helt ny värld eller nytt perspektiv.

Apropos Lateral Thinking-leken: Ett datorbaserat Lateral Thinking-system skulle vara en bra träning i att ifrågasätta de förutsättningar (modell) man har (skapar) när man hör historien och hur den sedan utvecklas. T.ex. följande som kan ses som ledtrådar: "Vilken typ av jobb var det?" "Varför arbetade han där?", "Hur mycket var klockan?". En övning som lämnas åt läsaren är att formulera om dessa till ja/nej-frågor. :-)


Så tillbaka till "bra". Det vi har kommit fram till är väl egentligen bara att "bra" i konstruktionen "bra fråga", fyller sin vanliga funktion att betyda det "bra" ska betyda, nämligen - för att citera NE:

bra
...
1. som har lämpliga eller tillfredsställande egenskaper el. fyller berättigade krav
...


Som avslutning nämns två böcker som har anknytning till ovanstående.
Först en bok jag tidigare nämnt några gånger: Johan Asplunds "Om undran inför samhället" som bland annat diskuterar vetenskaplig forskning genom en jämförelse med gåtor och detektivromaner. Se t.ex. referensen i Mats Anderssons matematiska gåta.

Så en annan gammal favorit: "Universum, döden och den logiska analysen" av Sören Halldén (Almqvist & Wiksell, 1961). Det är en underbar liten introduktion i filosofiska tekniker (främst begreppsanalys) som bland annat tar upp olika typer av filosofiska frågor samt "nyttan" med dessa.

Posted by hakank at 05:07 EM Posted to Filosofi | Språk | Comments (5)