11

私は大学の専攻に関するデータのリストをクリーンアップすることを含むプロジェクトに取り組んでいます。多くのスペルが間違っていることがわかったので、この関数を使用しgsub()て、スペルが間違っているものを正しいスペルに置き換えることを検討していました。たとえば、メジャーと呼ばれるメジャーのリストで「biolgy」のつづりが間違っているとします。Rにスペルミスを検出させ、正しいスペルに置き換えるにはどうすればよいですか?私は試しましgsub('biol', 'Biology', Major)たが、それは「biolgy」の最初の4文字を置き換えるだけです。私がそうgsub('biolgy', 'Biology', Major)する場合、それはその場合だけで機能しますが、それは「生物学」の他の形式のスペルミスを検出しません。

ありがとうございました!

4

5 に答える 5

13

気の利いた正規表現を定義するか、パッケージagrepから使用する必要があります。パッケージは別のオプションです。人々がそれを使用していることは知っていますが、私は正規表現の大ファンなので、私にとってはノーノーです。basestringr

とにかく、agrepトリックを行う必要があります:

agrep("biol", "biology")
[1] 1
agrep("biolgy", "biology")
[1] 1

編集:

また、を使用する必要がありますignore.case = TRUEが、「手作業」で簿記を行う準備をしてください。

于 2011-03-14T18:43:23.930 に答える
2

考えられるすべてのスペルミスのベクトルを設定してから、gsub呼び出しでループを実行できます。何かのようなもの:

biologySp = c("biolgy","biologee","bologee","bugs")

for(sp in biologySp){
  Major = gsub(sp,"Biology",Major)
}

よりスマートなことをしたい場合は、CRANにあいまい一致パッケージがあるかどうか、または「soundex」一致を使用するものがあるかどうかを確認してください。

約のウィキペディアのページ。文字列照合が役立つ場合があります。R-helpでいくつかの重要な用語を検索してみてください。

http://en.wikipedia.org/wiki/Appearance_string_matching

于 2011-03-14T18:32:40.487 に答える
2

最初にメジャーを利用可能なメジャーのリストと照合することができます。一致しない場合は、スペルミスの可能性があります。次に、agrep関数を使用して、これらを既知のメジャーと再度照合します(agrepは近似照合を行うため、正しい値に類似している場合は一致します)。

于 2011-03-14T18:44:48.570 に答える
0

vwrパッケージには、文字列照合のメソッドがあります。

http://ftp.heanet.ie/mirrors/cran.r-project.org/web/packages/vwr/index.html

したがって、最善の策は、可能な対象の文字列からレーベンシュタイン距離が最小の文字列を使用することです。

> levenshtein.distance("physcs",c("biology","physics","geography"))
  biology   physics geography 
        7         1         9 

同一の最小値を取得した場合は、コインを裏返します。

> levenshtein.distance("biolsics",c("biology","physics","geography"))
  biology   physics geography 
        4         4         8 
于 2011-03-15T10:50:24.843 に答える
0

例1a)perl / linux正規表現:'s/oldstring/newstring/'

例1b)1aに相当するR:srcstring=sub(oldstring, newstring, srcstring)

例2a)perl / linux正規表現:'s/oldstring//'

例2b)2aに相当するR:srcstring=sub(oldstring, "", srcstring)

于 2014-11-16T04:38:35.420 に答える