R에 다음 수식을 구현하려고하는데 문제가 있습니다.길이가 다른 두 개의 문자열에 대한 근접 채점 (R에서 이중 집계 구현)
내 현재의 접근 방식은 다음과 같다,하지만 난 같은 점수가 완벽하게 일치로 얻을 수 있기 때문에 정확하지 두려워 (긴, 단순한 코드에 대한 유감 : 나는 아주 새로운 해요) :
query = "acut myeloid leukemia"
document1 = "acut myeloid leukemia normal karyotyp"
document2 = "acut myeloid leukemia"
document3 = "acut normal karyotyp"
Q <- unlist(strsplit(query, " "))
d1 <- unlist(strsplit(document1, " "))
d2 <- unlist(strsplit(document2, " "))
d3 <- unlist(strsplit(document3, " "))
y <- adist(d1,Q)
double_summation1 = 0
for (i in 1:nrow(y-1)) {
for (j in 1:ncol(y-1)) {
double_summation1 = double_summation1 + abs(i-j)
}
}
double_summation1
scatter <- sum(do.call(pmin, lapply(1:nrow(y), function(x)y[x,])))
dist_d_Q1 <- scatter/double_summation1
y <- adist(d2,Q)
double_summation2 = 0
for (i in 1:nrow(y-1)) {
for (j in 1:ncol(y-1)) {
double_summation2 = double_summation2 + abs(i-j)
}
}
double_summation2
scatter <- sum(do.call(pmin, lapply(1:nrow(y), function(x)y[x,])))
dist_d_Q2 <- scatter/double_summation2
y <- adist(d3,Q)
double_summation3 = 0
for (i in 1:nrow(y-1)) {
for (j in 1:ncol(y-1)) {
double_summation3 = double_summation3 + abs(i-j)
}
}
double_summation3
scatter <- sum(do.call(pmin, lapply(1:nrow(y), function(x)y[x,])))
dist_d_Q3 <- scatter/double_summation3
c(dist_d_Q1, dist_d_Q2, dist_d_Q3)
[1] 23
[1] 8
[1] 8
[1] 0.00 0.00 1.75
나는 stringdist 패키지와 같은 거리 측정을하는 쉬운 방법이 있다는 것을 알고 있습니다. 그러나 저의 목표는 기본 방안으로 공개 방정식 접근법을 구현하는 것입니다. 시간 내 주셔서 감사합니다!
'dat'이란 무엇입니까? –
코드가 업데이트되었고 'dat'이 행렬 'y'로 바뀌 었습니다. –
왜'y <- adist (d1, Q)'입니까? d1과 Q 모두에 공통된 단어와 같지 않아야합니까? 'adist'는 문자 간의 거리가 아니라 거리가 아닌 문자의 불일치입니다. 나는 그것이'y <-length (intersect (d1, Q)) '이어야한다고 생각한다. –