2017-02-11 7 views
0

は次のように私はPythonのデータフレームがあるとし、Pythonのデータフレーム間で類似したテキストが

data['text'] 

abc.google.com 
d-2667808233512566908.ampproject.net 
d-27973032622323999654.ampproject.net 
def.google.com 
d-28678547673442325000.ampproject.net 
i1-j4-20-1-1-13960-2081004232-s.init.cedexis-radar.net 
d-29763453703185417167.ampproject.net 
poi.google.com 
d-3064948553577027059.ampproject.net 
i1-io-0-4-1-20431-1341659986-s.init.cedexis-radar.net 
d-2914631797784843280.ampproject.net 
i1-j1-18-24-1-11326-1053733564-s.init.cedexis-radar.net 

を探す私は同様の一般的なテキストやグループにそれを見つけたいです。例えば、abc.google.com、def.google.com、poi.google.comはgoogle.comを指すとなりますなど

必要な出力があり、

google.com 
ampproject.net 
ampproject.net 
google.com 
ampproject.net 
s.init.cedexis-radar.net 
ampproject.net 
google.com 
ampproject.net 
s.init.cedexis-radar.net 
ampproject.net 
s.init.cedexis-radar.net 

それは、より多くのデータのようなものです私は不要な部分をきれいにすることができます。 1つの方法は、可能なすべてのグループを手動で検査してコード化することです。しかし、私は数百万のテキストを持っているでしょう。だから、これを行うためのpythonの方法/パッケージはありますか?

申し訳ありませんが何も試してこないでください。私はこれを多くの成功なしで研究しようとしました。どのように私は開始する必要がありますか分からない。もし誰かが私に取っておかなければならないアプローチを知らせることができれば、それは私の役に立つかもしれません。あなたは、データセット内のテキストセグメントの特定の形式がどうなるかを確信している場合

おかげ

答えて

1

は清掃のために、あなたは正規表現を使用することができます。

もう1つの方法は、共通のパターンに一致させることです。たとえば、多くのテキストセグメントでは、google.comです。前処理中にこの情報を使用することができます。

lines = ['abc.google.com', 
     'd-2667808233512566908.ampproject.net', 
     'd-27973032622323999654.ampproject.net', 
     'def.google.com', 
     'd-28678547673442325000.ampproject.net', 
     'i1-j4-20-1-1-13960-2081004232-s.init.cedexis-radar.net', 
     'd-29763453703185417167.ampproject.net', 
     'poi.google.com', 
     'd-3064948553577027059.ampproject.net', 
     'i1-io-0-4-1-20431-1341659986-s.init.cedexis-radar.net', 
     'd-2914631797784843280.ampproject.net', 
     'i1-j1-18-24-1-11326-1053733564-s.init.cedexis-radar.net'] 


def commonSubstringFinder(string1, string2): 
    common_substring = "" 
    split1 = string1.split('.') 
    split2 = string2.split('.') 
    index1 = len(split1) - 1 
    index2 = len(split2) - 1 
    size = 0 
    while index1 >= 0 & index2 >= 0: 
     if split1[index1] == split2[index2]: 
      if common_substring: 
       common_substring = split1[index1] + '.' + common_substring 
      else: 
       common_substring += split1[index1] 
      size += 1 
     else: 
      ind1 = len(split1[index1]) - 1 
      ind2 = len(split2[index2]) - 1 
      if split1[index1][ind1] == split2[index2][ind2]: 
       common_substring = '.' + common_substring 
      while ind1 >= 0 & ind2 >= 0: 
       if split1[index1][ind1] == split2[index2][ind2] and split1[index1][ind1].isalpha(): 
        if common_substring: 
         common_substring = split1[index1][ind1] + common_substring 
        else: 
         common_substring += split1[index1][ind1] 
       else: 
        break 
       ind1 -= 1 
       ind2 -= 1 

      break 
     index1 -= 1 
     index2 -= 1 

    if size > 1: 
     return common_substring 
    else: 
     return "" 

output = [] 
for line in lines: 
    flag = True 
    for i in range(len(output)): 
     result = commonSubstringFinder(output[i], line) 
     if len(result) > 0: 
      output[i] = result 
      output.append(result) 
      flag = False 
      break 
    if flag: 
     output.append(line) 

for item in output: 
    print(item) 

この出力:このアイデアについて

google.com 
ampproject.net 
ampproject.net 
google.com 
ampproject.net 
s.init.cedexis-radar.net 
ampproject.net 
google.com 
ampproject.net 
s.init.cedexis-radar.net 
ampproject.net 
s.init.cedexis-radar.net 
+0

感謝。私が尋ねたように出力を得るのを助けてくれますか?このコードをその要件に変更することは困難です。 – Observer

+0

@Observer自分のコードを更新しました。それがあなたを助けるならば、upvoteを忘れることはなく、あなたの必要性を支えているなら、それを答えとして受け入れることもできます。 –

+0

ありがとう!それは働いた – Observer

関連する問題