Jeg vil bruge det til en funktion, der forsøger at gætte hvilket sprog
en tekst er skrevet på, og automatisk vælger den rigtige stavekontrol.
Se evt. <news:ye4eluc...@alpha18.bocal.cs.univ-paris8.fr>
> Er der nogen der kender en liste over frekvensen af de mest almindelige
> ord på dansk?
Ikke på stående fod, men det kan du nemt lave, hvis din liste ikke
skal være frygteligt lang. Eller sagt på en anden måde: Man skal
ikke se meget dansk tekst for at finde ud af, at "og" er et hyppigt
ord, men for at finde ud af, hvad de 5000 hyppigste ord er, skal man
have adgang til meget store mængder tekst.
/Thomas
--
Thomas Martin Widmann, Universitetsparken 8, 2., -333, DK-8000 Århus C
+45/702 84 406 vira...@daimi.au.dk http://www.daimi.au.dk/~viralbus
MA stud. (ling-dat); stud.prog.; aktiv radikal; formand/DK-TUG; T4ONF/TK
Der stemmes om sci.lang.scandinavian (se CFV i news.announce.newgroups)!
1. Using "sed", take a large block of ordinary text (chapter in a
book,
or other equivalent) and substitute "\n" for spaces. "\\n" places
a
newline character after every word in the file, thus putting every
word on its own line in the resulting new file that is sent
to standard output by "sed".
2. Pipe the output from sed to the "sort" command to get a
list of all of the words in the original file, in alphabetical
order.
3. Pipe that output to the "uniq" command with its "-c"
(word-count) option to get a listing of all words in the
original text, again one word on each line, but each word
appearing only once in the list with a number preceding it
on the same line, showing how many times it appeared in the file.
4. Pipe that to "sort" with its "-r" option to get the word list in
reverse order, most frequently used words first, with the number
of times it appeared still preceding the word on the same line.
5. Redirect the output to a file.
The following command line should work (I don't have a Unix machine to
test it on, but I wrote a user manual for "sed" when I worked at
Hewlett-Packard as an engineer, and I was responsible for the HP-UX
operating-system Reference Manual for several years. I've written many
large scripts, so this looks reasonably correct. I also wrote most of
"The Ultimate Guide to the Vi and Ex Text Editors" published by
Benjamin Cummings Publishing Company, a subsidiary of Addison Wesley
and a user guide for nroff and troff.)
sed -e'1,$s/ /\\n/g' <text_file> | sort | uniq -c | sort -r
>frequency_file
^
+ this is the number "one", not the letter "ell", meaning the
first
line in the file. "$" means the last line in the input file.
The file named "frequency_file" contains the information you want for
that file. You can repeat the exercise on various text files to
determine
how closely they correlate. If you have GNU Tools on a PC, you cannot
do
this because it does not include the "sed" command. However, it should
work with GNU and other versions of Linux.
Clarke
==========================================================
> sed -e'1,$s/ /\\n/g' <text_file> | sort | uniq -c | sort -r >frequency_file
Jeg har ikke prøvet det, men mangler der ikke noget, der fjerner
tegnsætningen?
--
Allan Olesen, Lunderskov
Hvorfor er det kun Nej-sigerne, der må køre 55 i byen?
sed 's/[.,-:;!"%&/()]/ /g'
Indsæt selv flere tegn mellem [].
Mvh
Kent
--
Nu med en e-mail adresse der virker...
>sed 's/[.,-:;!"%&/()]/ /g'
sed 's/[^a-zA-ZæøåÆØÅ]/ /g'
Så skal man ikke gætte på, hvilken underlig tegnsætning, teksten kan
indeholde.
Endnu simplere:
sed 's/\W / /g'
Men så får man også lidt tal og underscores med.
Men forinden burde man vel også samle alle ord, der er ombrudt ved et
linieskift. Noget i retning af:
sed 's/-\n//g'
Det vil dog ikke virke på Mac-, Dos- og Windows-tekstfiler.
Hvis jeg skulle lave en sådan funktion, tror jeg jeg ville kigge på
frekvensen af bogstaverne. Jeg tror, at det vil være nemmere at
implementere, og give næsten lige så godt resultat. Er der nogen
forskning på dette område? Er der kendte algoritmer til en sådan
sprogbestemmelse?
--
Lars Kongshøj
Jeg ville slå godt efter i det aktuelle tegnsæt, inden jeg turde
inkludere hele tegnintervallet fra "," til ":" som ovenfor ;-)
--
Lars Kongshøj
Jesper Harder wrote:
Jeg ved at der findes en liste over de 250 mest almindelige danske ord.
måske:
og der en et den at til det jeg han nogen ...
> Jesper Harder wrote:
> > Er der nogen der kender en liste over frekvensen af de mest almindelige
> > ord på dansk?
> >
> > Jeg vil bruge det til en funktion, der forsøger at gætte hvilket sprog
> > en tekst er skrevet på, og automatisk vælger den rigtige stavekontrol.
> > Se evt. <news:ye4eluc...@alpha18.bocal.cs.univ-paris8.fr>
>
> Hvis jeg skulle lave en sådan funktion, tror jeg jeg ville kigge på
> frekvensen af bogstaverne. Jeg tror, at det vil være nemmere at
> implementere, og give næsten lige så godt resultat.
Resultatet vil nok blive noget bedre hvis man bruger bogstavpar
i stedet for enkelte bogstaver.
Nå - men jeg kørte forresten lige et tjek af indenrigsstoffet på
Jyllandspostens hjemmeside - Weiss fik 19 forekomster,
hende gider vi ikke have med, så vi starter ved 20:
20 'ved' 'vi'
21 'sig' 'så'
22 'havde'
25 'skal'
27 'jeg'
28 'siger'
29 'men' 'vil'
30 'kan'
36 'var'
42 'hun'
46 'fra'
48 'et'
52 'om'
55 'har'
57 'som'
59 'med' 'ikke'
64 'de'
67 'den'
83 'der' 'af'
86 'på'
92 'til'
94 'for'
110 'er'
112 'og'
118 'det'
119 'en'
213 'i' 'at'
Der var 5962 ord i alt.
Man kan diskutere om materialet er repræsentativt, men det kan
sikkert godt anvendes til formålet: at genkende dansk.
Jeg er sikker på, at der findes en "Dansk Frekvensordbog", men jeg tager
måske fejl...? Eller også er den ikke brugbar i dette tilfælde?
Mvh.
Peter
> > Jeg ved at der findes en liste over de 250 mest almindelige danske ord.
>
> Jeg er sikker på, at der findes en "Dansk Frekvensordbog", men jeg tager
> måske fejl...?
Minsandten:
Forfatter: Bergenholtz, Henning
Titel: Dansk frekvensordbog : baseret på danske romaner, ugeblade og aviser, 1987-1990
Udgivet: Kbh. : G.E.C. Gad , 1992
Fysisk form: 1445 s.
Note: 2 eks.
ISBN: 87-12-02200-4,
Lokal klassifikation: No Spr 50 b
> Eller også er den ikke brugbar i dette tilfælde?
Jo da. Det er ikke så svært selv at lave en liste, men når andre har
lavet arbejdet med at finde et repræsentativt tekstudvalg er det jo
perfekt.
Men næsten alle ord på listen er også med i bokmål, så der skal nok
lidt mere til for at skelne mellem dansk og norsk.
> Jesper Harder wrote:
>
> > Jeg vil bruge det til en funktion, der forsøger at gætte hvilket sprog
> > en tekst er skrevet på, og automatisk vælger den rigtige stavekontrol.
> > Se evt. <news:ye4eluc...@alpha18.bocal.cs.univ-paris8.fr>
>
> Hvis jeg skulle lave en sådan funktion, tror jeg jeg ville kigge på
> frekvensen af bogstaverne. Jeg tror, at det vil være nemmere at
> implementere, og give næsten lige så godt resultat.
Implementeringen er ikke det store problem. Specielt fordi jeg allerede
har et program der skelner mellem engelsk, fransk, tysk, spansk og
italiensk -- jeg skal bare indsætte nogle ordfrekvenser for dansk.
> Er der nogen forskning på dette område? Er der kendte algoritmer til
> en sådan sprogbestemmelse?
Jeg vil gætte på at ordfrekvenser virker bedre end bogstavfrekvenser.
Men det kunne da være en sjov lille statistikopgave at undersøge det
nærmere.
Jeg havde forresten altid undret mig over, hvordan søgemaskiner bærer
sig ad med at begrænse søgningen til sider på et bestemt sprog. Mon ikke
de bruger en teknik i stil med den her?
> If you have access to a Unix system, use a single Unix command line to
> develop the list for almost any common European language (Asian
> multi-byte character sets are a different problem). All you need is
> a relatively large file containing ordinary text in the language
> of interest. Here is how to do it:
Thanks. I would probably have done it in elisp, because I need the final
result as a Lisp alist. Something like:
(let ((wordlist (split-string (downcase (buffer-string)) "\\W")))
(sort (mapcar #'(lambda (x)
(cons x (count x wordlist :test 'string-equal)))
(remove-duplicates wordlist :test 'string-equal))
#'(lambda (a b) (> (cdr a) (cdr b)))))
But for large texts, sed + friends is *much* faster, though.
> I also wrote most of "The Ultimate Guide to the Vi and Ex Text
> Editors"
Oh dear, the eVIl editor :-) Let's all say 'C-u 100 M-x all-hail-emacs'
Ja, så er det jo nemt nok.
> Jeg vil gætte på at ordfrekvenser virker bedre end bogstavfrekvenser.
> Men det kunne da være en sjov lille statistikopgave at undersøge det
> nærmere.
Det tror jeg også. Men man vil normalt kunne bestemme en teksts sprog
udelukkende ved at kigge på de almindeligt forekommende bogstaver.
Hvis man kun kigger på de germanske sprog, så kan man for eksempel
slutte, at hvis teksten indeholder ä, ö og ü (men næsten ikke q, y og å)
er der med meget stor sandsynlighed tale om tysk.
Hvis teksten indeholder ed og thorn er det med stor sandsynlighed
islandsk; ed, men ikke thorn: færøsk. Osv.
Der vil være problemer med at adskille dansk fra de norske skriftsprog
med denne metode, men mon ikke man kan komme med et kvalificeret bud ved
at kigge på de enkelte bogstavers frekvenser?
> Jeg havde forresten altid undret mig over, hvordan søgemaskiner bærer
> sig ad med at begrænse søgningen til sider på et bestemt sprog. Mon ikke
> de bruger en teknik i stil med den her?
Ud fra de fejlskud på sprog, jeg er støt på på søgemaskiner, gætter jeg
på at de benytter en metode, i stil med den, jeg skitserer.
--
Lars Kongshøj
> Jesper Harder wrote:
>
> > Jeg vil gætte på at ordfrekvenser virker bedre end bogstavfrekvenser.
> > Men det kunne da være en sjov lille statistikopgave at undersøge det
> > nærmere.
>
> Det tror jeg også. Men man vil normalt kunne bestemme en teksts sprog
> udelukkende ved at kigge på de almindeligt forekommende bogstaver.
Jeg kiggede lidt rundt omkring for at se hvordan folk gør. Det lader til
at være ret populært at se på frekvensen af digrammer eller
trigrammer. Men i øvrigt ser det ud til, at man bruger mange forskellige
teknikker: bogstavfrekvens, ordfrekvens og forskellige ad-hoc regler.
>> 22 'havde'
>Men næsten alle ord på listen er også med i bokmål, så der skal nok
>lidt mere til for at skelne mellem dansk og norsk.
Havde forekommer ikke på norsk, så da kan en vel finne en måte å skille på
ut fra noe slikt?
TF
Man kan skrive meget lange tekster uden at bruge ordet _havde_.
> The following command line should work (I don't have a Unix machine to
> test it on, but I wrote a user manual for "sed" when I worked at
> Hewlett-Packard as an engineer, and I was responsible for the HP-UX
> operating-system Reference Manual for several years. I've written many
> large scripts, so this looks reasonably correct. I also wrote most of
> "The Ultimate Guide to the Vi and Ex Text Editors" published by
> Benjamin Cummings Publishing Company, a subsidiary of Addison Wesley
> and a user guide for nroff and troff.)
"should work"? Indeholder alle dine bøger utestede scripts?
Det ville have taget kortere tid at boote en minidistribution og teste, end at
skrive ovenstående "gode råd".
--
Thorbjørn Ravn Andersen "...plus...Tubular Bells!"
http://bigfoot.com/~ravn
> > The following command line should work (I don't have a Unix machine to
> > test it on,
> "should work"? Indeholder alle dine bøger utestede scripts?
Svar på usenet skriver folk i deres fritid. Du har ikke noget krav på
at få svar af nogen speciel kvalitetsstandard, og hvis ham der svarer
dig ikke gider/kan/vil teste sit svar, må du pænt stille dig tilfreds
med enten selv at teste det af eller ignorere det.
--
Henning Makholm "Check the sprog."