私はスペルのためのいくつかの辞書がありますfile.dic
。たとえば、
abc
aword
bword
cab
worda
wordzzz
別の言葉を探しています。アレンジ(またはスペルを変更)お互い。
「アルファベット順にソート」するコマンドがある場合は、次のようにします。
cat file.dic | letter-sort | paste - file.dic | sort
これは私に次のことを与えます:
abc abc
abc cab
adorw aword
adorw worda
bdorw bword
dorwzzz wordzzz
これで、ファイルにスペルの変更が明確に表示されます。そのようなコマンドがあるか、letters-sort
そうでなければそのような結果を得る方法はありますか?
答え1
ファイル内の文字を1行ずつ並べ替えるには、次のようにします。
while read line; do
grep -o . <<< "${line}" | sort | tr -d '\n'
echo
done < file.dic
出力:
abc
adorw
bdorw
abc
adorw
dorwzzz
答え2
このfold
コマンドを使用すると、以下のスクリプトのように文字列を個々の文字配列に分割できます。
#!/bin/bash
CHARS=`echo $1 | fold -w1`
# $CHARS now contain an array of single character in the string $1
for i in "${CHARS[@]}"
do
# do something with each character
echo $i;
done
上記のスクリプトを保存したと仮定すると、test.sh
次のように実行できます。
$./test.sh abcde
文字列 "abcde"を文字配列に分割し、それを使用してスペル置換を見つけることができます。
答え3
あなたが言及したことをpython
そのままにしてくださいpython
。 1. 同じ文字を含み、2. 文字の頻度が一致する場合、2 つの単語は互いのスペルを置き換えます。組み込みCounter
クラスを使用すると、ソートせずに1回の文字頻度を実行できます。
from __future__ import print_function
from collections import Counter, defaultdict
from itertools import combinations_with_replacement
with open('file') as f:
data = (l.rstrip('\n') for l in f)
data = ((l, Counter(l)) for l in data)
perms = defaultdict(list)
for l, c in data:
perms[frozenset(c.iteritems())].append(l)
for anagrams in perms.itervalues():
print(*anagrams)
bword
aword worda
abc cab
wordzzz
答え4
Perlと対応するコマンドラインフラグは簡潔です。
次のコマンドは単語の文字をソートします。
perl -CS -ne 'chomp; print(join("", sort(split("", $_ . "\n"))))'
実際、単語パズルをしている場合は、このan
ユーティリティを使用する方が良いかもしれません。これは辞書を引数として使用できます。
an -d /usr/share/dict/ngerman Anagramword