0

これは、スターターとして非常に親切に私に与えられたスクリプトです。

#!/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()

何かが足りないかどうかはわかりませんが、出力が空白になり、$に戻ります。

私は次のことをしようとしています:
英語以外の言語のテキストがあり、ハイフンを使用して形態素(各単語の一部)に分割され、英語の光沢(各形態素の言語翻訳)と以下の直接翻訳があります。

例えば。

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

イタリア-Fem:Sg:Acc fate-Neut:Sg:Abl fleeing-Masc:Sg:Nom Lavinian-Neut:Pl:Acc come:Perf-3-Sg:Indic:Act

「運命によって[運転された]飛行中はイタリアとラヴィニア人[海岸]にやってきた」

上記のようないくつかのテキストを1つのファイルに入れます-つまり

空白行

ハイフンで分割されたラテン語の行

コロンを使用して要素を結合し、対応するハイフンで分割された光沢の線

翻訳の行

空白行

ラテン

光沢

翻訳

広告無限。

私がする必要があるのは、次の出力を与えるファイルを書くことです。

イタリア:1イタリア
am:1 Fem:Sg:Acc
脂肪:1運命
o:1 Neut:Sg:Abl
逃亡者:1人の逃亡者
us:1 Masc:Sg:Nom
ラウィーニア:1ラウィーニア
a:1 Neug:Pl:Acc
que:1来る:パフォーマンス
ven:1 3
it:1 Sg:Indic:Act

ここで、最初の列はハイフンなしのテキストの最初の行を表します。2番目の列は出現回数を示し(この例ではそれぞれ1つだけです)、3番目の列はテキストに書かれているように最初の列の英語訳です。

対応する英語の光沢/翻訳がないラテン語の形態素がある場合、ラテン語の列は通常どおりになりますが、英語の列は次のように[不明]と出力されます。

a:  1   [unknown]

反対の場合、つまり対応するラテン語がない英語の形態素の場合は、次のように出力されます。

[unknown]:  1   kitten

最後に、progは、同音の形態素(つまり、異なる意味を持つ2つの同じスペルのラテン語の形態素)を処理できる必要があります。例えば

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

繰り返しになりますが、それは宿題であり、どんなポインタも素晴らしいでしょう。批評のためにここにアップロードするために、今いくつかのスクリプトをまとめることに取り組んでいます!

4

1 に答える 1

1

複数行構造のため、ファイルの処理は少し注意が必要です。通常の行ごとの反復ではなく、次のようなものを提案します(例では、ファイルは実際には空白行で始まっていないと思いますが、区切り文字として空白行を使用していると思います)。

with open("input.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

process次に、チャンクに分割latinglossて適切にペアリングする必要があります。

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))

これを次のように呼ぶ

process(
    "Itali-am fat-o profug-us Lavini-a-que ven-it",
    "Italy-Fem:Sg:Acc fate-Neut:Sg:Abl fleeing-Masc:Sg:Nom Lavinian-Neut:Pl:Acc come:Perf-3-Sg:Indic:Act",
    "in flight [driven] by fate came to Italy and the Lavinian [shores]")

chunks含む葉

[('Itali', 'Italy'),
 ('am', 'Fem:Sg:Acc'),
 ('fat', 'fate'),
 ('o', 'Neut:Sg:Abl'),
 ('profug', 'fleeing'),
 ('us', 'Masc:Sg:Nom'),
 ('Lavini', 'Lavinian'),
 ('a', 'Neut:Pl:Acc'),
 ('que', 'come:Perf'),
 ('ven', '3'),
 ('it', 'Sg:Indic:Act')]

残りは学生のための演習です-チャンクの実行カウントを維持し、それを適切にソートして表示します。お役に立てば幸いです。

于 2012-05-05T03:30:07.283 に答える