Python将单个单词排序为列中的字母+对应翻译

时间:2012-05-06 05:08:29

标签: python

所以,这是作为首发者给予我非常友好的脚本:

#!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import with_statement    # needed for Python 2.5
from itertools import chain

def chunk(s):
    """Split a string on whitespace or hyphens"""
    return chain(*(c.split("-") for c in s.split()))

def process(latin, gloss, trans):
    chunks = zip(chunk(latin), chunk(gloss))
    # now you have to DO SOMETHING with the chunks!

def main():
    with open("examples.txt") as inf:
        try:
            while True:
                latin = inf.next().strip()
                gloss = inf.next().strip()
                trans = inf.next().strip()
                process(latin, gloss, trans)
                inf.next()    # skip blank line
        except StopIteration:
            # reached end of file
            pass

if __name__=="__main__":
    main()

然而,

我刚刚和我的讲师说过话,他让我知道他不希望我们使用

__ x __ 

功能,因为它“在课程的这一点上”对于学生的需求来说太先进了“。 我对于我需要放入“块”或“过程”字段的内容感到非常难过,到目前为止,我已经能够完成大部分其他练习(有一些提示)但是这个只是超越我的方式。这个特别的部分在20分中值15分,这让我觉得有点不舒服! 任何进一步的帮助将不胜感激。


原帖(抱歉这么久!)

我正在尝试执行以下操作:我的文本使用英语以外的语言,使用连字符分解为语素(每个单词的部分),英语光泽(每个语素的语言翻译)和直接翻译如下。例如

  

Itali-am fat-o profug-us Lavini-a-que ven-it

     

意大利 - Fem:Sg:Acc fate-Neut:Sg:Abl逃离 - Masc:Sg:Nom Lavinian-Neut:Pl:Acc来:Perf-3-Sg:印度:行动

     在命运的飞行[驱动]来到意大利和拉维尼安[海岸]'

我将在一个文件中有几个如上所述的文本 - 即

blank line

a line of latin broken up with hyphens

a line of gloss broken up with corresponding hyphens, using colons to join elements

a line of translation

blank line

latin

gloss

translation

ad infinitum.

我需要做的是写一个文件,它给我以下输出:

Itali:    1    Italy
am:    1    Fem:Sg:Acc
fat:    1    fate
o:    1    Neut:Sg:Abl
profug:   1    fleeing
us:    1    Masc:Sg:Nom
Lavini:    1    Lavinian
a:    1    Neug:Pl:Acc
que:    1    come:Perf
ven:    1   3
it:     1   Sg:Indic:Act

其中第一列表示没有连字符的第一行文本;第二列表示出现次数(在本例中仅为1),第三列是第一列的英文翻译,如文中所示。

如果有一个没有相应英语光泽/翻译的拉丁语素,拉丁语列将正常,但英语列将打印[未知],如:

a:  1   [unknown]

如果相反,即没有相应拉丁语的英语语素,则应打印

[unknown]:  1   kitten

最后,编程需要能够处理同音词素(即具有不同含义的两个相同拼写的拉丁语素)。 e.g。

a:  16  Neuter:Plural
a:  28  Feminine:Singular

1 个答案:

答案 0 :(得分:1)

每当你需要对事件进行计数时,你需要一个dictonary。

创建一个字典,其中键是由zip生成的元组,值是包含以下内容的列表:[latin,amount,translation]。每次遇到相同的元组时,都会增加数量。

字典必须比该函数更长,因此您可能希望将其添加为参数。

完成后,你可以这样做:result = dict.keys(); result.sort()。

我不确定我是否了解未知部分。如果这不能解决该部分,您可能需要显示相关示例。