$ cat Missing
brannmann
brannmenn
$ cat Source
brann-mann
les delingsord fra Source inntil ferdig# inn i assosiativt array S
tmp=delingsord # f.eks. brann-mann
nøkkel= tmp uten bindestrek # gsub(/-/."",tmp), f.eks. brannman
# nøkkelen er nøyaktig slik den vil komme fra Missing, se under
S[nøkkel]=delingsord
lukk(Source)
les mangelord fra Missing inntil ferdig# inn i assosiativt array M
tmp=mangelord # f.eks. brannmann
nøkkel= tmp # hvis noe skal gjøres med tmp først
M[nøkkel]++
lukk(Missing)
# iterer over nøklene i M
for hvert mangelord i M
hvis mangelord i S
skriv S[mangelord] # delingsord, f.eks. brann-mann
ellers
skriv mangelord # f.eks. brannmenn
du
jeg
brann
brann-mann
brann-mannen
brann-stifter
høyeste-retts-justitiarius
ord-bok
ord-bøker
ord-bøkene
osv
tull
abonnementskontrakten
brannsjef
brannmester
brannmesteren
databasegrensesnittets
hoppsjef
landslag
operaskoler
ps
sensurfri
tv-skjerm
WORD: abonnementskontrakten
STATUS: +
EDITOR: En eller annen fyr <hans_mail@domenet.no>
DATE: 20060422
WORD: databasegrensesnittets
STATUS: +
COMPOSITE-WORD: database=grense=snittets
EDITOR: Lars-Erik Aunevik Labori <meg@mittdomene.nu>
DATE: 20070329
WORD: operaskoler
STATUS: +
COMPOSITE-WORD: opera~skoler
EDITOR: Lars-Erik Aunevik Labori <meg@mittdomene.nu>
DATE: 20070329
WORD: sensurfri
STATUS: +
EDITOR: Lars-Erik Aunevik Labori <meg@mittdomene.nu>
DATE: 20070329
abonnementskontrakten
brannsjef
brannmester
brannmesteren
database-grense-snittets
hoppsjef
landslag
opera-skoler
ps
sensurfri
tv-skjerm
Prøv med noe slikt:Det jeg trenger fra disse filene er: De ordene i Missing, som står oppført i Source.gz med COMPOSITE-WORD, ønsker jeg at blir importert til en egen fil, der = og ~ tegnene blir erstattet med et - tegn
grep -A3 -f Missing Source.gz | grep 'COMPOSITE-WORD' | cut -d" " -f2 | sed 's/[~|=]/-/g' >> nyeord.txt
#!/bin/bash
<<'EOF' awk -f '-' -v source=Source -v missing=Missing | sort
BEGIN {
# les source
word=""
compword=""
while (getline<source){
if ($1=="WORD:") {
word=$2
compword=word # avvik fra pseudo-kode
continue
}
if ($1=="COMPOSITE-WORD:") {
compword=$2
gsub(/[=~]/,"-",compword)
continue
}
if (NF==0 && word != ""){
S[word]=compword
word=""
compword=""
continue
}
}
close(source)
# les missing
while (getline<missing){
if (NF==1){
word=$1
M[word]=word
}
}
close(missing)
# iterer over ordene i missing
for ( word in M){
if (word in S){
printf "%s\n",S[word]
}
else{
printf "%s\n",M[word]
}
}
} # end of BEGIN
EOF
exit 0
$ bash skript.bash
abonnementskontrakten
brannmester
brannmesteren
brannsjef
database-grense-snittets
hoppsjef
landslag
opera-skoler
ps
sensurfri
tv-skjerm
#!/bin/bash
# Formål: Ordliste-oppdatering
# dato: 31.03.2007
# Forfatter: Geir
# Filer som skal brukes, tilpass etter behov.
missing=~/ordliste/Missing #Missingfilen
sourcefil=~/ordliste/Source.gz #Sourcefilen
norskword=~/ordliste/norsk.word #Hoved Ordlisten. Ikke brukt...
loggfil=~/ordliste/loggfil.txt #Logg over forandringer. Oppdateres hver gang scriptet kjøres.
nyeord=~/ordliste/nye_ord.txt #Her legges de nye ordene.
clear
echo " ---> Oppdatering startet `date` <--- " >> $loggfil # Merke i loggfile for start.
echo " **** Ord fra Source.gz lagt til. **** " >> $loggfil # Legger Source-ord til i nyeord listen.
for i in `grep -A3 -f $missing $sourcefil | grep 'COMPOSITE-WORD' | cut -d" " -f2 | sed 's/[~|=]/-/g'`
do
uod=`echo $i | cut -d" " -f2 | sed 's/-//g'` # Fjerner orddeler fra ordet
if ( ! grep -qw $i $missing ) || ( ! grep -qw $uod $missing ) # Sjekk om ordet finnes i Missing
then # med eller uten orddeler.
if ( ! grep -qw $i $nyeord ) && ( ! grep -qw $uod $nyeord ) # Sjekker om den allerede er i nyeord listen.
then
echo $i >> $nyeord # Legger ordet til i nyeord listen
echo "$i" >> $loggfil # og noterer det i loggfilen.
fi
fi
done
# Så legger vi ord fra Missing som ikke finnes i Source inn i listen med nye ord.
echo " **** Ord fra Missing lagt til. **** " >> $loggfil # Legger Missing-ord til i nyeord listen.
grep 'COMPOSITE-WORD' $sourcefil | cut -d" " -f2 | sed 's/[~|=]//g' | sort -u > tmp.fil
for resten in `grep -vw -f tmp.fil $missing`
do
if ( ! grep -qw $resten $nyeord )
then
echo "$resten" >> $nyeord
echo "$resten" >> $loggfil
fi
done
rm tmp.fil
echo " ---> Oppdatering avsluttet `date` <--- " >> $loggfil # Merke i loggfile for stopp.
#END
database-grense-snittets
opera-skoler
abonnementskontrakten
brannsjef
brannmester
brannmesteren
hoppsjef
landslag
ps
sensurfri
tv-skjerm
Neste steg da, er jo å få ordene inn i norsk.word, samtidig som jeg får en liste med de endringene som utføres. Slik at dette kan oppføres i endringsloggen. Hadde også vært en fordel om det finnes noen måte å kontrollere at ordene som tilføyes ikke finnes oppført der ifra før, og om de gjør det, så må det ordet som har orddeling beholdes, mens det andre fjernes.
du
jeg
brann
brann-mann
brann-mannen
brann-stifter
høyeste-retts-justitiarius
ord-bok
ord-bøker
ord-bøkene
osv
tull
norsk.words (Ordbok)
brann-mann * 19 B
brann-mannen * 17 B
# norsk.words --- list of Norwegian words, version 2.0.
#
# Copyright (C) 2000, Rune Kleveland
#
# Maintainer: Rune Kleveland, runekl at opoint.com
# Keywords: Norwegian, Dictionary
#
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This file is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
#
# Commentary
#
# This file contains a list of Norwegian words. Each word is
# hyphenated at compound points, and has a frequency indicator
# essentially of log log type. Words requiring special hyphenation,
# like `spisslede', are marked spi"sslede. There is also a group
# indicator for each `bokmål' word:
#
# B Normal words
# A `newspaper' words.
# N Words from NOU
# M Words from mathematics
# S Samnorsk, radical forms
# K Conservative writing
# D Words from Dagbladet
# O Words from technical oil business
# C Sammendragning, like `idag'.
#
# This tagging should not be taken too seriously!
#
# The words marked with `*' are allowed in nynorsk (modulo a large but
# finite number of bugs). There is no frequency information
# available for nynorsk, since I have not been able to collect a
# sufficient amount of nynorsk text to generate a useful index.
#
# Some special words has suffixes indicating this. This information is
# most useful for generating dictionaries for Ispell, and the tagging is
# not complete.
#
# yyyy Word is allowed as first part of a compound word, and all its
# derived forms are allowed as the second part.
# xxxx Word allowed as first part of a compound word.
# zyzyzy Word allowed as first part of a compound word, but not alone.
#
#
Aasane *
Aase * 24 B
Aasen * 23 B
Aasens 19 B
Aaser * 20 A
Aasers 15 B
Aasheim * 22 A
Aasmund * 23 B
Aasmunds 2 B
Aass * 20 B
Abadan * 10 B
Abadans 0 B
Abba * 19 B
Abbas 19 B
Abdul * 20 B
Abduls 4 B
Abeba * 20 B
Abebe * 12 B
Abel * 21 B
Abel-haugen * 17 A
Abel-konkurransen * 11 A
Abel-konkurransens 1 A
Abel-vær * 5 B
Abel-værs 0 B
|
|
pidestall * 17 B
pidestallen * 16 B
pidestallens 1 B
pidestaller 12 B
pidgin-engelsk *
pidgin-engelsken *
pidgin-språk *
pidgin-språka *
$ cat norsk.word
databasegrensesnittets
du
jeg
brann
brann-mann * 19 B
brann-mannen * 17 B
brann-stifter
høyeste-retts-justitiarius
ord-bok
ord-bøker
ord-bøkene
osv
tull
$ bash ny2norsk.bash
NYTT: sensurfri
NYTT: abonnementskontrakten
NYTT: landslag
NYTT: ps
NYTT: brannmester
NYTT: opera-skoler
NYTT: brannsjef
ENDRING: databasegrensesnittets => database-grense-snittets
NYTT: brannmesteren
NYTT: hoppsjef
NYTT: tv-skjerm
#!/bin/bash
#innfiler
nyeord=nyeord.txt
norskword=norsk.word
# utfiler
norskwordny=norsk-$(date +%Y.%m.%d-%H).word
log=norsk-$(date +%Y.%m.%d-%H).log
for i in $nyeord $norskword
do
if [ ! -f "$i" ]; then
echo "feil: kan ikke finne filen: $i" >&2
exit 1
fi
done
# skrive ut kommentarlinjer (alle vil komme på toppen)
awk '/^[ \t]*\#/' "$norskword" >"$norskwordny"
# leser nyeord og norskword og skriver til norskwordny
<<'EOF' awk -f '-' -v nyeord="$nyeord" -v norskword="$norskword" 2>"$log" 1>>"$norskwordny"
BEGIN {
stderr="/dev/stderr"
# les nyeord
flag=0
word=""
while ( (getline<nyeord)>0){
flag++
word=$1
compword=word
gsub(/[-]/,"",word) # word uten bindestrek (nøkkelen)
Nyeord[word]=compword
}
close(nyeord)
if (flag==0) {
print "error: ingen ord lest fra filen: " nyeord >stderr
exit 1
}
# les norskword
flag=0
while ( (getline<norskword)>0 ){
flag++
gsub(/^[ \t]*\#.*$/,"",$0) # fjerner kommentarer
if (NF==0) continue # dropper tomme linjer
#
word=$1
gsub(/[-]/,"",word) # word uten bindestrek (nøkkelen)
if (word in Norskword){ # håndterer ord med flere brytningsmønster ?
word = word " x"
}
rest=$0 # $0 = 'compword rest'
sub(/^[ \t]*[^ \t]+/,"",rest) # fjerner compword, rest gjenstår
Ordindeks[word]++
Norskword[word,"compword"] = $1
Norskword[word,"rest" ] = rest
}
close(missing)
if (flag==0) {
print "error: ingen ord lest fra filen: " norskword >stderr
exit 1
}
# itererer over Nyeord, setter inn brytningsmønstre og legger inn nye ord
for (word in Nyeord){
newcompword=Nyeord[word]
if (word in Ordindeks){ # mulig endring i brytningsmønster
if (newcompword~/-/) # et nytt og forbedret brytningsmønster
printf("ENDRING: %-30s => %s\n",
Norskword[word,"compword"],newcompword) >stderr
# denne 'resten' under er modifisert kun for
# kvalitetssikringsformål, bør kommenteres ut
Norskword[word,"rest"]=sprintf("%s #ENDRET: var %s",
Norskword[word,"rest"],Norskword[word,"compword"])
Norskword[word,"compword"]= newcompword
}
else{ # legger inn et helt nytt ord
printf("NYTT: %-30s\n", newcompword) >stderr
Ordindeks[word]++
# denne 'resten' under er modifisert kun for
# kvalitetssikringsformål, bør kommenteres ut
Norskword[word,"rest"]=sprintf("%s #NYTT",Norskword[word,"rest"])
Norskword[word,"compword"]=newcompword
}
}
# skriver ut alle ordene i sortert rekkefølge
for (word in Ordindeks){
printf("%s%s\n",Norskword[word,"compword"],
Norskword[word,"rest"]) | "sort -k1,1"
}
} # end of BEGIN
EOF
cat "$log"
exit 0
#!/bin/bash
# Formål: Ordliste-oppdatering
# dato: 02.04.2007
# Forfatter: Geir Endre
# Variabler først. Gjør endringer her for å tilpasse scriptet til systemet.
norskword=~/ordliste/norsk.word # Ordlisten.
nyeord=~/ordliste/nye_ord.txt # Fil med nye ord som skal inn i ordlisten.
loggfil=~/ordliste/oppdateringer.log # Logger oppdateringer i en fil
skigard="########################################################"
teller=0 # Teller antall ord som legges til i ordlisten.
tid=`date +%d-%m-%Y_%H:%M`
clear
# Fancy overskrift:
echo $skigard | tee -a $loggfil
echo " Synkronisering av ordliste $tid " | tee -a $loggfil
echo $skigard | tee -a $loggfil
cp $norskword $norskword.$tid # Tar backup av den originale ordlisten.
echo "Backup av gammel ordliste lagret som $norskword.$tid" | tee -a $loggfil
echo $skigard | tee -a $loggfil
# Så til jobben:
for i in `cat $nyeord`
do
oud=`echo $i | sed 's/-//g'`
if ( grep -qw $oud $norskword ) && ( echo $i | grep -q '-' )
then
echo "Ordet \"$oud\" endret til \"$i\"." | tee -a $loggfil
cat $norskword | sed s/$oud/$i/ > $norskword
(( teller++ ))
else
if ( ! grep -qw $i $norskword )
then
echo "Ordet \"$i\" finnes ikke i ordlisten, legger det til listen." | tee -a $loggfil
echo $i >> $norskword
(( teller++ ))
fi
fi
done
# Vi sortere den endelige filen. Må dele kommentarfeltet øverst i filen fra resten før sortering.
awk '/^[^#]/ { print }' $norskword > tmp.txt # Flytte ordene til en tempfil hvor de kan sorteres.
awk '/^#/ { print }' $norskword > tmpword.txt # Flytter overskriften til en annen tempfil.
mv tmpword.txt $norskword
sort -u tmp.txt >> $norskword
rm tmp.txt
# 'sort' sorterer ord som begynner med aa sist, som jo egentlig er rett.....
# Avslutter med fancy bunntekst.
echo $skigard | tee -a $loggfil
echo " Synkronisering ferdig, $teller ord lagt til i ordlisten. " | tee -a $loggfil
echo $skigard | tee -a $loggfil
#END
satellitt-målingaålinga *
satellitt-målinganeålingane *
satellitt-målingarålingar *
satellitt-målingeneålingene 5 A
satellitt-målingenålingen 1 A
satellitt-målingensålingens 0 A
satellitt-målingerålinger 11 A
satellitt-målingåling * 1 A
satellitt-mottager 10 K #ENDRET: var satellitt-mottager
satellitt-mottagere 11 K #ENDRET: var satellitt-mottagere
satellitt-mottageren 8 K #ENDRET: var satellitt-mottageren
satellitt-mottagerens 0 K #ENDRET: var satellitt-mottagerens
satellitt-mottageres 0 K #ENDRET: var satellitt-mottageres
satellitt-mottagerne 1 K #ENDRET: var satellitt-mottagerne
satellitt-mottagernes 0 K #ENDRET: var satellitt-mottagernes
satellitt-mottagers #NYTT
satellitt-mottakar *
satellitt-mottakarane *
satellitt-mottakarar *
satellitt-mottakaren *
satellitt-mottaker 0 A
satellitt-mottakere 1 A
satellitt-mottakeren 0 A
satellitt-mottakerens 0 A
satellitt-mottakeres 0 A
satellitt-mottakerne 0 A
satellitt-mottakernes 0 A
satellitt-mottakers #NYTT
satellitt-mottager 10 K
satellitt-mottagere 11 K
satellitt-mottageren 8 K
satellitt-mottagerens 0 K
satellitt-mottageres 0 K
satellitt-mottagerne 1 K
satellitt-mottagernes 0 K
satellitt-mottakar *
satellitt-mottakarane *
satellitt-mottakarar *
satellitt-mottakaren *
satellitt-mottaker 0 A
satellitt-mottakere 1 A
satellitt-mottakeren 0 A
satellitt-mottakerens 0 A
satellitt-mottakeres 0 A
satellitt-mottakerne 0 A
satellitt-mottakernes 0 A
satellitt-måling * 1 A
satellitt-målinga *
satellitt-målingane *
satellitt-målingar *
satellitt-målingen 1 A
satellitt-målingene 5 A
satellitt-målingens 0 A
satellitt-målinger 11 A
Sara
satellittmottager
satellitt-mottagere
satellitt-mottageren
satellitt-mottagerens
satellitt-mottageres
satellitt-mottagerne
satellitt-mottagernes
satellitt-mottagers
satellitt-mottakers
saue-bønders
sannhets-karakterens 0 B
sannhets-kjærligeærlige 4 B
sannhets-kjærlighetenærligheten 0 B
sannhets-kjærlighetensærlighetens 0 B
sannhets-kjærlighetærlighet 6 B
sannhets-kjærligærlig 4 B
Sannhets-kommisjon 14 A
Sannhets-kommisjonen 15 A
Sannhets-kommisjonens 10 A
rest=$0 # $0 = 'compword rest'
sub(/^[ \t]*[^ \t]+/,"",rest) # fjerner compword, rest gjenstår
Ordindeks[word]++
Norskword[word,"compword"] = $1
Norskword[word,"rest" ] = rest
Ordindeks[word]++
Norskword[word,"compword"] = $1
$1=""
Norskword[word,"rest" ] = $0
Returner til Utvikling i Linux
Registrerte brukere: Google [Bot]