R-最長の共通部分文字列
-
07-07-2019 - |
質問
なんだろうけど、日本人向けパッケージを解決 最長共通部分文字列の問題?私も実際にスマートフォンでの作業のベクトル.
解決
「Rlibstree」をチェックアウト; omegahatのパッケージ: http://www.omegahat.org/Rlibstree/ 。
これは、 http://www.icir.org/christian/libstree/ を使用します。
他のヒント
qualV
パッケージの LCS
関数をご覧ください。 Cで実装されているため、非常に効率的です。
の質問はこちらにならない明確な使用目的の解の最長共通部分文字列の問題です。アプリケーションが一般的で私が出会いはとのマッチングの名前の異なるデータセットの stringdist
パッケージには便利な機能 amatch()
として適してこの課題です。
概要, amatch()
どのように受け入れる入力の二つのベクトル、最初に x
vectorの文字列を探したい試合からもうする単一の文字列)を table
, のベクトルの文字列またはじめてでききた両津勘吉と申しを選択すると、最長の共通部分文字列. amatch()
返されますベクトルがequalsとの x
-各要素にこの結果は、インデックス table
を含む最高の戦いました。
詳細: amatch()
か method
引数を指定します lcs
したい場合マッチングの最長共通部分文字列.その他の多くのオプションのための異なる文字列マッチング技術などLevenshtein距離).が必須 maxDist
引数です。すべての文字列 table
は表れないものの、かなり大きな"距離"から指定された文字列に x
, その amatch()
戻ります NA
その一つの要素を出力します。"距離"を定義する機種によって異なるという文字列照合アルゴリズムの使い分けてみましょう。のための低炭素社会戦略センター(lcs)は、()とどのように多くの異なる(非整合の文字があります。ドキュメンテーションを参照します。
並列化:他のもの amatch()
で自動的に並列化の動きは、合理的な推測システムの資源を利用します。したい場合に制御することで、切り替える nthread
引数です。
例アプリケーション:
library(stringdist)
Names1 = c(
"SILVER EAGLE REFINING, INC. (SW)",
"ANTELOPE REFINING",
"ANTELOPE REFINING (DOUGLAS FACILITY)"
)
Names2 = c(
"Mobile Concrete, Inc.",
"Antelope Refining, LLC. ",
"Silver Eagle Refining Inc."
)
Match_Idx = amatch(tolower(Names1), tolower(Names2), method = 'lcs', maxDist = Inf)
Match_Idx
# [1] 3 2 2
Matches = data.frame(Names1, Names2[Match_Idx])
Matches
# Names1 Names2.Match_Idx.
# 1 silver eagle refining, inc. (sw) silver eagle refining inc.
# 2 antelope refining antelope refining, llc.
# 3 antelope refining (douglas facility) antelope refining, llc.
### Compare Matches:
Matches$Distance = stringdist(Matches$Names1, Matches$Match, method = 'lcs')
また、日本では機能 LCS
から qualV
, このまで考慮されていない点も課題として"サブシーケンス"の試合を伴う無視中の文字を形成するため、一致して議論 こちらの).例えばこちらをご覧ください:
Names1 = c(
"hello"
)
Names2 = c(
"hel123l5678o",
"hell"
)
Match_Idx = amatch(tolower(Names1), tolower(Names2), method = 'lcs', maxDist = Inf)
Matches = data.frame(Names1, Match = Names2[Match_Idx])
Matches
# 1 hello hell
Rはわかりませんが、以前は高速でスペースをあまり消費しないHirschbergのアルゴリズムを実装していました。
覚えているように、それは2つまたは3つだけ再帰的に呼ばれる短い関数です。
リンクは次のとおりです。 http://wordaligned.org/articles/longest-common-subsequence
したがって、Rでそれを実装することをheしないでください。非常に興味深いアルゴリズムなので、努力する価値があります。