2017-02-11 7 views
0

한다고 가정 파이썬 dataframe에 걸쳐나는 일반적인 텍스트와 그룹을 비슷한을 찾으려면 다음과 같이 내가 파이썬 dataframe을

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

청소를 들어, 정규 표현식을 사용할 수 있습니다.

다른 접근법은 일반적인 패턴을 일치 시키려고합니다. 예를 들어 많은 텍스트 세그먼트에 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

고마워요! 그것 workd – Observer