我目前有大量的医疗记录,其中包括需要翻译的医疗术语。出于成本考虑,我们不想为每条记录翻译每个术语。例如,如果我们发现记录中的术语已经频繁出现在以前的记录中,这意味着这些术语可能已经在先前的记录中被翻译过,那么我们就不想再次翻译它们。我被要求设计一个程序来实现这个目标。我得到的提示是,我可能需要将记录分解为字母级别,并且可能需要矩阵来解决此问题。我实际上是编程的初学者。因此,我正在这里寻求帮助。残酷的想法/建议现在已经足够。谢谢。
答案 0 :(得分:0)
因此,如果我没看错,您想知道bi
是否不在A
中。
我没有用python编写代码,但我看到了这样的内容(在 C ++ 类似语言中)
bool untranslated(int j,int m,int n,string *a,string *b)
{
// the dictionaries are: a[m],b[n]
for (int i=0;j<m;i++) // inspect all tokens of A
if (b[j]==a[i]) // if b[j] present in A
return false;
return true;
}
现在,如果字典很大,那么您需要将此线性搜索更改为二进制搜索。另外,为了加快速度(如果单词很大),您需要使用哈希(哈希图)进行匹配。粗略地视您的语言而定,您不能与==
天真地比较单词,而是实现一些功能,该功能会将单词转换为其简单语法形式并存储到字典中只是。实现起来可能非常复杂。
现在整个句子的概率为:
// your dictionaries:
const int m=?,n=?;
string A[m],string B[n];
// code:
int j; float p;
for (p=0.0,j=0;j<n;j++) // test all words of B
if (untranslated(j,m,n,A,B)) p++; // and count how many are untranslated
p/=float(n); // normalize p to <0,1> its your probability that sentence B is not in A
结果概率p
在<0,1>
范围内,因此,如果要百分比,只需将其乘以100
。
[Edit1]出现bi
这是完全不同的问题,但是相对容易解决。它与计算直方图相同,因此:
为A
词典中的每个单词添加计数器
所以A的每个记录都是这样:
struct A_record
{
string word;
int cnt;
};
int m=0;
A_record a[];
处理B
句
bi
上的进入字典A
。如果不存在,则将其添加到字典中,并将其计数器设置为1
。如果存在,则将其计数器加1。
const int n=?; // input sentence word count
string b[n]={...}; // input sentence words
int i,j;
for (i=0;i<n;i++) // process B
for (j=0;j<m;j++) // search in A (should be binary search or has-map search)
if (b[i]==a[j].word)
{ a[j].cnt++; j=-1; break; } // here a[j].cnt is the bi occurrence you wanted if divided by m then its probability <0,1>
if (j<0)
{ a[m].word=b[i]; a[m].cnt=1; m++; } // here no previous occurrence of bi
现在,如果您只想先前出现bi
,则在搜索过程中查看匹配的a[j].cnt
。如果您希望整个文本中出现任何b[i]
单词,请在处理完整个文本后查看同一个计数器。