我需要比较两个输出字符串,即原始转录和语音转文本服务的转录。通常,数字以数字格式或单词来表示,例如“四个”或“ 4”。考虑到这些不同的转录方法,如何比较字符串?
到目前为止,我只是将两个字符串都转换为小写字母,并用空格分隔每个单词。
#Read the two files and store them in s1_raw and s2_raw
with open('original.txt', 'r') as f:
s1_raw = f.read()
with open('comparison.txt', 'r') as f:
s2_raw = f.read()
#Transform all letters to minuscule letter
s1 = s1_raw.lower()
s2 = s2_raw.lower()
#Split texts with space as seperator to have a list of words
s1_set = s1.split(' ')
s2_set = s2.split(' ')
#Used later for confidence calculation
count1 = len(s1_set)
count2 = 0
x = 0
#Check which string is longer to prevent running out of indices
if len(s1_set) < len(s2_set):
#Loop through whole list and compare word by word
for x in range (0, len(s1_set)):
if s1_set[x] == s2_set[x]:
count2 += 1
x += 1
else:
#Loop through whole list and compare word by word
for x in range (0, len(s2_set)):
if s1_set[x] == s2_set[x]:
count2 += 1
x += 1
#Confidence level= correct words divided by total words
confidence = count2/count1
#Print out result
print('The confidence level of this service is {:.2f}%'.format(confidence*100))
我想测量几个* .txt文件的转录准确性,并考虑所有不同的语音到文本服务如何转录的方式。
答案 0 :(得分:0)
您必须先对文本进行规范化,然后再进行比较。首先确定four
或4
是您的规范形式,然后将所有字符串转换为该形式。
例如,如果four
是规范形式,则编写代码以将1
替换为one
,将213
替换为two hundred and thirteen
,依此类推,并与这些进行比较。
实际上,我认为将规范化为4
而不是four
更好,因为在某些语言中可以有多种表达数字的方法。通过首选4
,可以将所有等效的转录规范化为一种单一形式。
答案 1 :(得分:0)
感谢@Michael Veksler。我现在尝试使用NLTK库将字符串更有效地拆分为单词列表。另外,我尝试查找每个单词的同义词,并比较同义词是否匹配。这仍然不能真正解决问题,所以我想知道还能尝试什么。
我使用这两个库:
from nltk.tokenize import word_tokenize
from nltk.corpus import wordnet
拆分单词很容易:
s1_set = word_tokenize(list1)
现在,我尝试查找单词的同义词并采用第一个找到的同义词。我将其附加到名为“ wl1”的空列表中。我之前检查过是否找到任何同义词,因为并非总是如此。
for i in range(0, (len(s1_set)-1)):
#Find synonym of word in s1_set index i
t1 = wordnet.synsets(s1_set[i])
#Ensure t1 isn't empty
if t1:
wl1.append(t1[0].lemmas()[0].name())
然后我再次像上面我的第一篇文章一样逐字比较。这种方法也不是解决我的问题的令人满意的方法。 谁能想到更好的方法?