没有产生预期的输出文件

问题描述:

我目前正在过滤其构造为这样的词汇:没有产生预期的输出文件

的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 

我试图 切-d '' -f 2- lexicon.txt | sed's// \ n/g'|排序-u> nonsilence_phones.txt

在一个不同的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 

哪产生正确的输出是

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中,并且它们由lexicon_a中的空格分隔。

这就是为什么我认为改变定界符切是标签就足够了..

+0

乱七八糟的输出是片段的实际输出... – bash

+2

,但它不清楚什么是预期的输出...和在前面的评论中的拼写错误:我的意思是'小样本'... – Sundeep

+0

我改变了位希望它使moe感 – bash

如果你只是想抓住每一个字符串,但您lexicon.txt文件中的第一列的值,并获得刚从那里唯一的字符串,请尝试:

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

即:

删除第一列:

cut -d' ' -f2- 

删除的行的开头结尾的空格:

sed 's/^ *//g' 

变化空间到新的线路,以获得在一列中不同的字符串:

tr ' ' '\n' 

独特的排序输出:

sort -u 
+0

感谢您的回应..我试过了,但它创建了两列... – bash

+0

@bash你试过什么文件?我只在一列中看到输出 –

使用awk来提取每个字符串上的字符串和sort | uniq以清除重复项。

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

这可能会为你工作(GNU sed的&排序):

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

取出第一场和空格,然后替换的任何furthur组或多个空格用换行。分类并删除重复项。