音位和字形

2024-10-02 08:17:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个csv文件,如下所示:

    W IY K D EY,w ee k d ay
    T EH K S T,t e x _ t
    Y UW,ewe _
    SH UW T,chu te
    SH UW T,chu te
    SH UW T,chu te !
    SX AH K,s u ck

其中,文件的前半部分是音素,下半部分在逗号之后是字母。音素和字形互相匹配。我想编写一个函数graphemes_phonemes,它包含三个参数:

  1. 初始csv文件,csv_文件
  2. 另一个csv文件,valid_phonemes其中包含所有有效的音素,如下所示:

    AA
    AE
    AH
    AO
    AW
    AY
    B
    CH
    D
    DH
    EH
    ER
    EY
    F
    G
    HH
    IH
    IY
    JH
    K
    L
    M
    N
    NG
    OW
    OY
    P
    R
    S
    SH
    T
    TH
    UH
    UW
    V
    W
    Y
    Z
    ZH
    
  3. 以及一个可选参数valid_graphemes,它是一个包含所有有效字符的集合,其中还包括一个下划线“”字符。

我希望能够返回一个4元组,它跟在csv文件中的音素图形数据后面。在

  1. 我希望它能够返回无效行的数量,其中音素的数量与字形的数量不匹配。或者数据中不存在音素或字母。下划线是有价值的,但不是感叹号之类的东西。最后四行无效。前两个无效,因为长度不匹配,第三个无效,因为它有一个“!”,最后一个无效,因为“SX”不是有效的音素。

  2. 每个单词的平均音素数。

  3. 每个单词的平均字符数。在
  4. 有一个或多个下划线的字符的比例。在

我希望最后三个值只基于有效的行。如果一行无效,则最后三个返回输出的计算不应计入比例的平均值。如果最后三个值的分母为零,则返回值应返回到“无”。在

这里有一个例子

    >>>graphemes_phonemes("csv_file.csv", valid_phonemes = "valid_p.txt")
    (4, 4.0, 4.666666666666667, 0.6666666666666666)

以下是我目前所掌握的情况:

    import csv

    def phonemes_graphemes(csv_file, valid_phonemes = "valid_p.txt")

        csv_read = open(csv_file)
        reader = csv.reader(csv_read)

        phonemes_valid = open(valid_phonemes)
        phonemes_read = csv.reader(phonemes_valid)

我只是不知道该怎么做。任何帮助都将不胜感激。在


Tags: 文件csvread数量sh字符readeruw
1条回答
网友
1楼 · 发布于 2024-10-02 08:17:38

有效的音素或有效的图形文件不需要csv.reader,因为它们每行只包含一个值。我会将它们读入set,使用类似于:

with open(valid_phonemes) as v_ph:
    valid_phoneme_set = set(line.strip() for line in v_ph)

然后,当您通读CSV文件时,您可以对照使用if phoneme in valid_phoneme_set的集合来检查每个音素。下面是一个非常快速的实现,它可以实现我认为您想要的:

^{pr2}$

不过,这两个平均值应该始终相同,因为每次都要求字母和音素的列表长度相同(或者行无效,所以我们不计算它们)。如果你有其他的逻辑,你想应用于一种项目的计数,而不是另一种,你只需要写一个适当的计算来代替我上面的len(例如,sum(grapheme != "_" for grapheme in graphemes)将把下划线从字形的计数中排除)。在

相关问题 更多 >

    热门问题