ライブラリには、これに対して事前に構築された関数がありtm
ますか、それともうまく機能する関数はありますか?
私の現在のコーパスは、次のように tm にロードされます。
s1 <- "This is a long, informative document with real words and sentence structure: introduction to teaching third-graders to read. Vocabulary is key, as is a good book. Excellent authors can be hard to find."
s2 <- "This is a short jibberish lorem ipsum document. Selling anything to strangers and get money! Woody equal ask saw sir weeks aware decay. Entrance prospect removing we packages strictly is no smallest he. For hopes may chief get hours day rooms. Oh no turned behind polite piqued enough at. "
stuff <- rbind(s1,s2)
d <- Corpus(VectorSource(stuff[,1]))
koRpusを使用してみましたが、既に使用しているパッケージとは別のパッケージで再トークン化するのはばかげているようです。また、結果を に再組み込みできるように、戻りオブジェクトをベクトル化する際にも問題がありましたtm
。(つまり、エラーが原因で、コレクション内のドキュメントの数よりも多くの、または少ない可読性スコアが返されることがよくあります。)
母音を音節として解析する単純な計算を行うことができることは理解していますが、すでにエッジケースを処理するより完全なパッケージが必要です (サイレント e に対処するなど)。
私が選んだ可読性スコアは、Flesch-Kincaid または Fry です。
d が 100 個のドキュメントのコーパスである最初に試したこと:
f <- function(x) tokenize(x, format="obj", lang='en')
g <- function(x) flesch.kincaid(x)
x <- foreach(i=1:length(d), .combine='c',.errorhandling='remove') %do% g(f(d[[i]]))
残念ながら、x が返すドキュメントは 100 未満であるため、成功を正しいドキュメントと関連付けることはできません。(これは、R における「foreach」と「lapply」の私の誤解の一部ですが、テキスト オブジェクトの構造が非常に難しく、適切にトークン化できず、flesch.kincaid を適用できず、適用の合理的な順序でエラーを正常にチェックできないことがわかりました。声明。)
アップデート
私が試した他の2つのこと、koRpus関数をtmオブジェクトに適用しようとしています...
デフォルトのトークナイザーを使用して、引数を tm_map オブジェクトに渡します。
tm_map(d,flesch.kincaid,force.lang="en",tagger=tokenize)
トークナイザーを定義し、それを渡します。
f <- function(x) tokenize(x, format="obj", lang='en') tm_map(d,flesch.kincaid,force.lang="en",tagger=f)
これらの両方が返されました:
Error: Specified file cannot be found:
次に、d[ 1 ]の全文をリストします。見つかったような?関数を正しく渡すにはどうすればよいですか?
更新 2
koRpus 関数を lapply で直接マップしようとすると、次のエラーが表示されます。
> lapply(d,tokenize,lang="en")
Error: Unable to locate
Introduction to teaching third-graders to read. Vocabulary is key, as is a good book. Excellent authors can be hard to find.
これは奇妙なエラーのように見えます---テキストが見つからないという意味ではないと思いますが、見つかったテキストをダンプする前に、空白のエラー コード (「tokenizer」など) が見つからないということです。 .
更新 3
を使用した再タグ付けのもう 1 つの問題koRpus
は、(tm タガーと比較して) 再タグ付けが非常に遅く、トークン化の進行状況が stdout に出力されることでした。とにかく、私は次のことを試しました:
f <- function(x) capture.output(tokenize(x, format="obj", lang='en'),file=NULL)
g <- function(x) flesch.kincaid(x)
x <- foreach(i=1:length(d), .combine='c',.errorhandling='pass') %do% g(f(d[[i]]))
y <- unlist(sapply(x,slot,"Flesch.Kincaid")["age",])
ここでの私の意図は、y
上記のオブジェクトtm(d)
をメタデータとしてコーパスに再バインドすることmeta(d, "F-KScore") <- y
です.
残念ながら、実際のデータ セットに適用すると、次のエラー メッセージが表示されます。
Error in FUN(X[[1L]], ...) :
cannot get a slot ("Flesch.Kincaid") from an object of type "character"
私の実際のコーパスの 1 つの要素は、NA であるか、長すぎるか、その他の法外なものであるに違いないと思います。
tm
そのため、現在、ライブラリとうまく連携するスコアを読み取るためのビルド済み関数はないようです。誰かがエラーをキャッチする簡単な解決策を見つけない限り、関数呼び出しに挟み込んで、明らかに間違っている、不正な形式のドキュメントをトークン化できないことに対処できますか?