假设我有一个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
它更像是一个数据清理练习,我可以清理不需要的部分。一种方法是手动检查和编码每个可能的组。但我会有数百万的文字。那么在python中有一个方法/包来做这个吗?
很抱歉没有尝试任何问题。我试图对此进行研究但没有取得多大成功。不知道我应该如何开始。如果有人能让我知道需要采取的方法,那对我有帮助。
由于
答案 0 :(得分:1)
对于清洁,如果您确定数据集中文本片段的特定格式是什么,则可以使用正则表达式。
另一种方法是尝试匹配常见模式。例如,在许多文本细分中,您有var model = Mapper.Map<Cash>( cashViewModel );
。您可以在预处理时使用此信息。
实施例
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)