私はこの小さな機能を持っていて、テキストの一致スコアを取得します。
getAssonanceScore <- function(book, count) {
#for each sentence
for (i in length(book[[1]])){
words <- strsplit(book[i], "\ ")
for (j in length(words[[1]])){
if (substr(words[[1]][j],1,1) == substr(words[[1]][j+1],1,1) ) {
count <- count + 1
}
}
}
count <- count / length(book)
return (count)
}
それがすることはそれが1行のリストを得ることですその1番目の位置にあるテキストの2番目の位置にあるテキストの2行目などです。この行を取得した後、文を分割し、それをすべての構成単語を含むリストに入れます。それを行うのは、最初の単語の最初の文字を2番目の単語の最初の文字と比較し、2番目の単語の最初の文字と3番目の単語の最初の文字を比較して総和声スコアを得ることです。次にこれを本の長さで割る。私はこの関数をフォームの小さな入力リスト "word"でテストしようとしたとき:
> words
[1] "babbling brook by blue grass"
それは私にこのエラーを与える:
> Error in if (substr(words[[1]][j], 1, 1) == substr(words[[1]][j + 1],
> : missing value where TRUE/FALSE needed
私はRStudioで働いています、そしてRの非常に初心者です、どんな助けでも大いに感謝されるでしょう。ありがとうございます。
編集:getAssonanceScore:DではなくgetAlliterationScoreにしてください。
回答:
回答№1の場合は3for j in length(words[[1]])
期待通りのことをしない。 j
リストの全長に等しいです。これはまた j + 1
リストの最後から実行します words[[1]][j + 1]
返品 NA
)。
あなたの変更 for
ループライン
for (j in seq_len(length(words[[1]]) - 1)) {
今
getAssonanceScore("babbling brook by blue grass", 0)
3を返します。
コメントで述べたように、より良い、計算上より効率的で、より簡潔なアプローチは、
all_words <- unlist(strsplit(book, " "))
count <- sum(substr(head(all_words, -1), 1, 1) ==
substr(tail(all_words, -1), 1, 1))