【问题标题】:sentence segmentation within a dictionary using spacy dependency parse使用 spacy 依赖解析的字典中的句子分割
【发布时间】:2021-09-06 16:22:08
【问题描述】:

我有一个包含原文句段和译文句段的 TMX 文件。其中一些片段由几个句子组成。我的目标是分割这些多句段,使整个 TMX 文件由单句段组成。

我打算用spacy的依赖解析器来分割这些多句段。

为此,我使用翻译工具包提取了原文和译文句段。

然后我将源句段和目标句段添加到字典 (seg_dic) 中。接下来,我将这些片段转换为 nlp doc 对象,并再次将它们存储在字典 (doc_dic) 中。我现在想使用 spacy 的依赖解析器分割任何多句段...

for sent in doc.sents:
    print(sent.text)

...但我不知道如何处理存储在字典中的段。

这是我目前所拥有的:

import spacy
from translate.storage.tmx import tmxfile

with open("./files/NTA_test.tmx", 'rb') as fin:
    tmx_file = tmxfile(fin, 'de-DE', 'en-GB')

nlp_de = spacy.load("de_core_news_lg")
nlp_en = spacy.load("en_core_web_lg")

seg_dic = {}
doc_dic = {}

for node in tmx_file.unit_iter():
    seg_dic[node.source] = node.target
for source_seg, target_seg in seg_dic.items():
    doc_dic[nlp_de(source_seg)] = nlp_en(target_seg)

谁能解释我如何从这里开始?如何使用“for sent in doc.sents”逻辑迭代我的字典键和值?

【问题讨论】:

    标签: python spacy tmx


    【解决方案1】:

    这里的解决方案是你不应该把你的东西放在这样的字典里——使用一个列表。也许是这样的。

    import spacy
    from translate.storage.tmx import tmxfile
    
    with open("./files/NTA_test.tmx", 'rb') as fin:
        tmx_file = tmxfile(fin, 'de-DE', 'en-GB')
    
    de = spacy.load("de_core_news_lg")
    en = spacy.load("en_core_web_lg")
    
    out = []
    
    for node in tmx_file.unit_iter():
        de_sents = list(de(node.source).sents)
        en_sents = list(en(node.target).sents)
        assert len(de_sents) == len(en_sents), "Different number of sentences!"
        
        for desent, ensent in zip(de_sents, en_sents):
            out.append( (desent, ensent) )
    

    当句子的数量不对齐时,最难的部分是怎么办。另请注意,我首先会对您的转换持谨慎态度,因为翻译可能会整体上做事,所以即使句子按数字排列,也不能保证第一个 DE 对应于第一个 EN,例如。

    【讨论】:

    • 非常感谢,这真的很有帮助!
    • 很高兴我能帮上忙。对于有帮助的答案,您可以通过点击他们左上角的向上箭头来投票,然后点击复选标记接受他们。
    • 谢谢,我已接受您的回答,但似乎没有足够的分数来支持您的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 2019-02-11
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多