【问题标题】:Not the expected output file is generated未生成预期的输出文件
【发布时间】:2017-09-15 09:52:30
【问题描述】:

我目前正在尝试过滤结构如下的词典:

Lexicon_a 的 sn-p:

<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

但这似乎给出了一些混乱的输出。单词和音素的组合。我如何只提取音素,并且只显示音素。 输出混乱:

<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

我试过了 cut -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 中它们是用空格分隔的。

这就是为什么我认为将 cut 中的分隔符更改为制表符就足够了..

【问题讨论】:

  • 乱七八糟的输出是sn-p的实际输出...
  • 但不清楚什么是预期输出...以及之前评论中的错字:我的意思是smaller sample...
  • 我改了一下希望它有意义

标签: bash sorting sed cut


【解决方案1】:

如果您只想获取 lexicon.txt 文件中除第一列值之外的每个字符串并仅从那里获取唯一字符串,请尝试:

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

即:

删除第一列:

cut -d' ' -f2-

删除行首的尾随空格:

 sed 's/^ *//g'

将空格更改为新行,以便在单个列中获取不同的字符串:

tr ' ' '\n'

对输出进行唯一排序:

sort -u

【讨论】:

  • @bash 您尝试使用什么文件?我只在一列中看到输出
【解决方案2】:

使用 awk 提取单独一行中的字符串,并使用sort | uniq 清除重复项。

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

【讨论】:

    【解决方案3】:

    这可能对你有用(GNU sed & sort):

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

    删除第一个字段及其空格,然后用换行符替换任何一个或多个空格的进一步组。排序并删除重复项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 1970-01-01
      • 2021-03-06
      相关资源
      最近更新 更多