質問

なんだろうけど、日本人向けパッケージを解決 最長共通部分文字列の問題?私も実際にスマートフォンでの作業のベクトル.

役に立ちましたか?

解決

「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しないでください。非常に興味深いアルゴリズムなので、努力する価値があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top