第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 difflib 突出顯示(僅)單詞錯誤?

如何使用 difflib 突出顯示(僅)單詞錯誤?

翻閱古今 2023-03-22 16:34:13
我正在嘗試將語音轉(zhuǎn)文本 API 的輸出與地面實況轉(zhuǎn)錄進行比較。我想要做的是將語音到文本 API 遺漏或誤解的基本事實中的單詞大寫。例如:真相:  The quick brown fox jumps over the lazy dog.語音到文本輸出: the quick brown box jumps over the dog期望的結(jié)果: The quick brown FOX jumps over the LAZY dog.我最初的直覺是從基本事實中刪除大寫和標點符號并使用 difflib。這讓我得到了準確的差異,但我無法將輸出映射回原始文本中的位置。我想保留基本事實的大寫和標點符號來顯示結(jié)果,即使我只對單詞錯誤感興趣。有什么方法可以將 difflib 輸出表示為原始文本的詞級變化嗎?
查看完整描述

3 回答

?
慕斯王

TA貢獻1864條經(jīng)驗 獲得超2個贊

我還想建議一個使用 difflib 的解決方案,但我更喜歡使用 RegEx 進行單詞檢測,因為它會更精確并且更能容忍奇怪的字符和其他問題。


我在您的原始字符串中添加了一些奇怪的文字以表明我的意思:


import re

import difflib


truth = 'The quick! brown - fox jumps, over the lazy dog.'

speech = 'the quick... brown box jumps. over the dog'


truth = re.findall(r"[\w']+", truth.lower())

speech = re.findall(r"[\w']+", speech.lower())


for d in difflib.ndiff(truth, speech):

    print(d)

輸出


  the

  quick

  brown

- fox

+ box

  jumps

  over

  the

- lazy

  dog

另一個可能的輸出:


diff = difflib.unified_diff(truth, speech)

print(''.join(diff))

輸出


---

+++

@@ -1,9 +1,8 @@

 the quick brown-fox+box jumps over the-lazy dog


查看完整回答
反對 回復 2023-03-22
?
HUX布斯

TA貢獻1876條經(jīng)驗 獲得超6個贊

為什么不將句子拆分成單詞然后在這些單詞上使用 difflib?


import difflib


truth = 'The quick brown fox jumps over the lazy dog.'.lower().strip(

    '.').split()


speech = 'the quick brown box jumps over the dog'.lower().strip('.').split()


for d in difflib.ndiff(truth, speech):

    print(d)


查看完整回答
反對 回復 2023-03-22
?
神不在的星期二

TA貢獻1963條經(jīng)驗 獲得超6個贊

所以我想我已經(jīng)解決了這個問題。我意識到 difflib 的“contextdiff”提供了其中有變化的行的索引。為了獲取“ground truth”文本的索引,我刪除了大寫/標點符號,將文本拆分為單個單詞,然后執(zhí)行以下操作:



altered_word_indices = []

diff = difflib.context_diff(transformed_ground_truth, transformed_hypothesis, n=0)

for line in diff:

  if line.startswith('*** ') and line.endswith(' ****\n'):

    line = line.replace(' ', '').replace('\n', '').replace('*', '')

    if ',' in line:

      split_line = line.split(',')

      for i in range(0, (int(split_line[1]) - int(split_line[0])) + 1):

        altered_word_indices.append((int(split_line[0]) + i) - 1)

    else:

      altered_word_indices.append(int(line) - 1)


在此之后,我將更改后的單詞大寫打印出來:


split_ground_truth = ground_truth.split(' ')

for i in range(0, len(split_ground_truth)):

    if i in altered_word_indices:

        print(split_ground_truth[i].upper(), end=' ')

    else:

        print(split_ground_truth[i], end=' ')

這讓我可以打印出“The quick brown FOX jumps over the LAZY dog”。(包括大寫/標點符號)而不是“快速的棕色 FOX 跳過 LAZY 狗”。


這不是一個超級優(yōu)雅的解決方案,它需要經(jīng)過測試、清理、錯誤處理等。但這似乎是一個不錯的開始,并且可能對遇到相同問題的其他人有用。我會把這個問題懸而未決幾天,以防有人想出一種不太粗略的方法來獲得相同的結(jié)果。


查看完整回答
反對 回復 2023-03-22
  • 3 回答
  • 0 關(guān)注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號