2017-04-19 13 views
-1

期待される出力ファイルが生成されるわけではありません:Lexicon_aの私は現在のような構成されている辞書フィルタリングしようとしています

スニペット:非無音電話のファイルに

<oov> <oov> 
A AH0 
A EY1 
A''S EY1 Z 
A'BODY EY1 B AA2 D IY0 
A'COURT EY1 K AO2 R T 
A'D EY1 D 
A'GHA EY1 G AH0 
A'GOIN EY1 G OY1 N 
A'LL EY1 L 
A'M EY1 M 
A'MIGHTY EY1 M AY1 T IY0 
A'MIGHTY'S EY1 M AY1 T IY0 Z 
A'MOST EY1 M OW2 S T 
A'N'T EY1 AH0 N T 
A'PENNY EY1 P EH2 N IY0 
A'READY EY1 R IY1 D IY0 
A'RIGHT EY1 R AY2 T 
A'RONY EY1 R OW1 N IY0 
A'S EY1 Z 
A'TER EY1 T ER0 
A'TERNOON EY1 T ER0 N UW1 N 
A'TERWARDS EY1 T ER0 W ER0 D Z 
A'THEGITHER EY1 DH AH0 JH IH1 DH ER0 
A'THING EY1 DH IH0 NG 
A'TIM EY1 T IH2 M 
A'VE AH0 V 
AA AA1 

を。つまり、基本的にファイルにリストされているすべての音素を持つファイルです。音素はファイル内にのみ現れなければならない。

私はこの

cut -f 2- lexicon.txt | sed 's/ /\n/g' | sort -u > nonsilence_phones.txt 

のようなものを試してみました。しかし、これは、出力を台無しにビットを与えるように見えます。単語とphoenemesの組み合わせ。どのように音素を抽出すればよいのですか? 台無し出力:

<oov> 
A 
A'S 
AA1 
AA2 
AH0 
AO2 
AY1 
AY2 
B 
D 
DH 
EH2 
ER0 
EY1 
G 
IH0 
IH1 
IH2 
IY0 
IY1 
JH 
K 
L 
M 
N 
NG 
OW1 
OW2 
OY1 
P 
R 
S 
T 
UW1 
V 
W 
Z 

辞書エントリよう

word '\t' phonemes 

としてリストされている私は カット2- lexicon.txt -F '' -d試み| sedの//\ n/g '|ソート-u>

nonsilence_phones.txt正しい出力が

AA 
AE 
AH 
AO 
AW 
AY 
B 
CH 
D 
EH 
ER 
EY 
F 
G 
HH 
IH 
IY 
JH 
K 
L 
M 
N 
<oov> 
OW 
P 
R 
S 
T 
TH 
UW 
V 
W 
Y 
Z 

lexicon_aとlexicon_b間の唯一の違いは、その単語と音素であること生成された異なるlexicon_b.txt

<oov> <oov> 
A AH 
AND AH N D 
APOSTROPHE AH P AA S T R AH F IY 
APRIL EY P R AH L 
AREA EH R IY AH 
AUGUST AA G AH S T 
B B IY 
C S IY 
CODE K OW D 
D D IY 
DECEMBER D IH S EH M B ER 
E IY 
EIGHT EY T 
EIGHTEEN EY T IY N 
EIGHTEENTH EY T IY N TH 
EIGHT EY T TH 
EIGHTY EY T IY 
ELEVEN IH L EH V AH N 
ELEVENTH IH L EH V AH N TH 
ENTER EH N T ER 
ERASE IH R EY S 
F EH F 
FEBRUARY F EH B Y AH W EH R IY 
FIFTEEN F IH F T IY N 
FIFTEENTH F IH F T IY N TH 
FIFTH F IH F TH 
FIFTY F IH F T IY 
FIRST F ER S T 
FIVE F AY V 
FORTY F AO R T IY 
FOUR F AO R 
FOURTEEN F AO R T IY N 
FOURTH F AO R TH 
G JH IY 
GO G OW 
H EY CH 
HALF HH AE F 
HELP HH EH L P 
HUNDRED HH AH N D R AH D 
I AY 
J JH EY 
JANUARY JH AE N Y UW EH R IY 
JULY JH UW L AY 
JUNE JH UW N 
K K EY 
L EH L 
M EH M 
MARCH M AA R CH 
MAY M EY 
N EH N 
NINE N AY N 
NINETEEN N AY N T IY N 
NINETY N AY N T IY 
NINTH N AY N TH 
NO N OW 
NOVEMBER N OW V EH M B ER 
O OW 
OCTOBER AA K T OW B ER 
OF AH V 
OH OW 
ONE W AH N 
P P IY 
Q K Y UW 
R AA R 
REPEAT R IH P IY T 
RUBOUT R AH B AW T 
S EH S 
SECOND S EH K AH N D 
SEPTEMBER S EH P T EH M B ER 
SEVEN S EH V AH N 
SEVENTEEN S EH V AH N T IY N 
SEVENTH S EH V AH N TH 
SEVENTY S EH V AH N T IY 
SIX S IH K S 
SIXTEEN S IH K S T IY N 
SIXTEENTH S IH K S T IY N TH 
SIXTH S IH K S TH 
SIXTY S IH K S T IY 
START S T AA R T 
STOP S T AA P 
T T IY 
TEN T EH N 
THIRD TH ER D 
THIRTEEN TH ER T IY N 
THIRTIETH TH ER T IY AH TH 
THIRTY TH ER D IY 
THOUSAND TH AW Z AH N D 
THREE TH R IY 
TWELFTH T W EH L F TH 
TWELVE T W EH L V 
TWENTIETH T W EH N T IY AH TH 
TWENTY T W EH N T IY 
TWO T UW 
U Y UW 
V V IY 
W D AH B AH L Y UW 
X EH K S 
Y W AY 
YES Y EH S 
Z Z IY 
ZERO Z IH R OW 

オンタブはlexicon_bで区切られ、lexicon_aのスペースで区切られています。私はタブに切断して、区切り文字を変更することは十分だろうと想定する理由である

..

+0

スローアップされた出力はスニペットの実際の出力です... – bash

+2

しかし、これまでのコメントでは何が期待されているのかはっきりしません:以前のコメントでは、私は小さなサンプルを意味しました... – Sundeep

+0

私はそれを少し変えましたそれはmoe感覚を作る – bash

答えて

0

あなたは自分のlexicon.txtファイルにすべての文字列が、最初の列の値を取り、ちょうど取得したい場合そこからユニークな文字列は、試してみてください。

cut -d' ' -f2- lexicon.txt | sed 's/^ *//g' | tr ' ' '\n' | sort -u 

つまり:

cut -d' ' -f2- 

は、最初の列を削除します

tr ' ' '\n' 

ユニークソート出力:

単一の列に異なる文字列を取得するために、新しい行に

sed 's/^ *//g' 

変更スペース:10

は、行の先頭に末尾のスペースを削除します。

sort -u 
+0

応答のおかげで..私はそれを試みたが、それは2つの列を作成します... – bash

+0

どのようなファイルを試しましたか?出力は1つの列にしか表示されません –

0

awkを使用してそれぞれの行で文字列を抽出し、sort | uniqを使用して複製を除外します。これはあなたのために働くかもしれない

$ awk '{for(i=2;i<=NF;i++)print $i}' file | sort | uniq 
0

(GNUは&ソートをSED):

sed 's/^\S\S*\s*//;s/\s\s*/\n/g' file | sort -u 

を、次に改行との以上の空白のいずれかのfurthurグループを置き換える、最初のフィールドとその空白を削除します。重複をソートして削除します。

関連する問題