Freedict sözlüklerinden kelimeleri ayıklayan, dizeleri kelime benzerliğine göre filtreleyen, iyi denenmemiş, mantığı gelişmemiş bir iki bash-kırıntısı.
Ne yapar:
➊ Freedict-Sözlüğü’nün (tur-eng) kaynağını github-reposundan indirir:
.tei
sözlük dosyasını indir.
➋ Kelimeleri ayıklar:
Freedict sözlüğünün kullandığı .tei
dosya-türünün tag
'lerini temizle.
➌ Kriterlenize göre ayıklanmış kelimeleri filtreler:
Filtre kriterleri sadece betiğin içerisinden değiştirilebilir.
Dizedeki ilk kelimeye göre filtreler. ‘Kelime’ satır başından ilk boşluğa kadar olan karakterlerden oluşur.
Patikalar:
Ev-Dizini’nde kelime-ayikla
adında bir dizin oluşturulur:
/home/ISMINIZ/kelime-ayikla/
Betik kelime-ayikla
dizininde ayikla.bash
adında oluşturulur:
/home/ISMINIZ/kelime-ayikla/ayikla.bash
Kur:
Aşağıdaki “kod-kutusunda” bulunan (tüm) satırları kopyalayıp, bir uçbirim-penceresinde yapıştırın.
#!/usr/bin/env bash
# özgün20180302 | copyleft
# ((! $#)) && echo -e "\n\e[31mHATA:\e[0m\nFreedict-sözlüğünü indirdiğiniz patikayı argüman olarak verin.\n\nMesela\n\t\e[34m./kelime-ayikla.bash \e[1m~/sözlük/\e[0m\n" && exit 1
## değişkenler
fd_tureng='https://raw.githubusercontent.com/freedict/fd-dictionaries/master/tur-eng/tur-eng.tei'
# sözlüğün patikası
fsbaz="$HOME/kelime-ayikla"
(($#)) && fsbaz="${1%/}"
isimler=isimler/all.names
freedict_ham="$fsbaz/tur-eng.tei"
freedict="$fsbaz/tur-eng.txt"
# dolaylı referanslar (döngü için)
# IPTAL: `isimler`i şimdilik iptal.
# process=(isimler freedict)
process=(freedict)
out="$fsbaz/oldu"
outisimler=$out/isimler
outfreedict=$out/freedict
# dizin oluştur
dizinler=(${!out*})
for d in ${dizinler[@]} ; do
[[ ! -d ${!d} ]] && mkdir -p ${!d}
done
## freedict al (sadece yoksa yeniden al)
[ ! -e "$freedict_ham" ] && wget "$fd_tureng" -O "$freedict_ham"
## ayıkla: meta temizle, içerik al
awk 'NR<80{next}
$0~/<entry>/{print ""}
{
gsub(/^\s*/,"")
gsub(/<\/form>/,"|")
gsub(/<cit/," » <cit")
gsub(/<[^>]+>/,"")
printf("%s",$0)
}
END{print ""
}' "$freedict_ham" > "$freedict"
## filtre: ilk aynı
# Ilk N harfi aynı olan isimler
ayni_ilk(){
local i=$1 in=$2 out=$3 non=0
while read -r dize ; do
local isim="${dize/ *}"
((${#isim} < $i)) && continue
local ilk="${dize:0:$i}"
# debug
# echo " $ilk == $silk | $dize"
if [[ $ilk == $silk ]] ; then
(($non)) && echo "$sdize"
echo "$dize"
non=0
else
non=1
fi
local silk="$ilk" sdize="$dize"
done < <(cat $in) > $out
}
i=8
for f in ${process[@]} ; do
echo ayni_ilk $i ${!f} "$out/${f}/ilk-${i}-harf-aynı.txt"
ayni_ilk $i ${!f} "$out/${f}/ilk-${i}-harf-aynı.txt"
done
## filtre: ilk ve son aynı
# Ilk N ve son N harfleri aynı olan isimler
ayni_ilkson(){
local i=$1 s=$2 in="$3" out="$4" non=0
while read -r dize ; do
local isim="${dize/ *}" enaz=$((i+s))
((${#isim} < $enaz)) && continue
local ilk="${isim:0:$i}"
local son="${isim: -$s}"
# denet:
# echo " $ilk == $silk | $dize"
# echo " $son == $sson | $dize"
if [[ $ilk == $silk ]] && [[ $son == $sson ]] ; then
(($non)) && echo "$sdize"
echo "$dize"
non=0
else
non=1
fi
local silk="$ilk" sson="$son" sdize="$dize"
done < <(cat $in) > $out
}
i=2
s=3
for f in ${process[@]} ; do
echo ayni_ilkson $i $s ${!f} "$out/${f}/ilk-${i}-ve-son-${s}-harf-aynı.txt"
ayni_ilkson $i $s ${!f} "$out/${f}/ilk-${i}-ve-son-${s}-harf-aynı.txt"
done
bet="$HOME/kelime-ayikla/ayikla.bash" ; > "$bet" ; mapfile -t cb < <(xclip -selection clipboard -o ); for i in $( seq 0 $((${#cb[@]}-3)) ) ; do echo "${cb[$i]}" >> "$bet" ; done ; chmod ug+x "$bet"
Kullanım:
-
Çalıştırmak için:
- Herhangi bir yerden
$HOME/kelime-ayikla/./ayikla.bash
- “
/home/ISMINIZ/kelime-ayikla
” klasöründen./ayikla.bash
olarak çalıştırabilirsiniz.
- Herhangi bir yerden
-
Filtre kriterlerini değiştirmek için:
Filtre kriterleri sadece betiğin içerisinden değiştirilebilir.-
ayni_ilk()
fonksiyonu içini
değişkenini meselai=9
olarak değiştirin.
-
ayni_ilkson()
fonksiyonu içini
ves
değişkenlerini meselai=3 s=3
olarak değiştirin.
-
NOT:
- Sözlüğü yeniden indirmek için mevcut sözlüğü silin.
- Filtre kriterlerini betik argümanı olarak değiştirilebilir hale getirmek mantıklı olabilir.
-
isimler
'in işlenmesini iptal ettim. TDK’dan izin istedim (listelerini kullanabilmek için) henüz cevap gelmedi. Etkin hale getirmek kolayca yapılabilir. -
xclip
programı kurulu değilse, betik (“fiziki olarak”) oluşturulamaz. - Bazı iptal ettiğim satırları, kurcalamak isteyen olur diye, silmeden yorum halinde bıraktım.
Bitti