【发布时间】:2019-02-21 10:14:03
【问题描述】:
我有两个字符串
string1 = "apple banna kiwi mango"
string2 = "aple banana mango lemon"
我想要这两个字符串相加的结果(不是串联),即结果应该是这样的
result = "apple banana kiwi mango lemon"
我目前的方法相当简单。
- 标记多行字符串(以上字符串是标记后的),去除任何噪音(特殊/换行符/空字符串)
- 下一步是识别字符串的余弦相似度,如果大于0.9,那么我将其中一个字符串添加到最终结果中
现在,问题来了。它不包括一个字符串包含一个单词的一半而另一个包含单词的另一半(或在某些情况下是正确的单词)的部分。我还在我的脚本中添加了this 函数。但问题仍然存在。任何有关如何推进这一点的帮助表示赞赏。
def text_to_vector(text):
words = WORD.findall(text)
return Counter(words)
def get_cosine(vec1, vec2):
intersection = set(vec1.keys()) & set(vec2.keys())
numerator = sum([vec1[x] * vec2[x] for x in intersection])
sum1 = sum([vec1[x]**2 for x in vec1.keys()])
sum2 = sum([vec2[x]**2 for x in vec2.keys()])
denominator = math.sqrt(sum1) * math.sqrt(sum2)
if not denominator:
return 0.0
else:
return float(numerator) / denominator
def merge_string(string1, string2):
i = 0
while not string2.startswith(string1[i:]):
i += 1
sFinal = string1[:i] + string2
return sFinal
for item in c:
for j in d:
vec1 = text_to_vector(item)
vec2 = text_to_vector(j)
r = get_cosine(vec1, vec2)
if r > 0.5:
if r > 0.85:
final.append(item)
break
else:
sFinal = merge_string(item, j)
#print("1.", len(sFinal), len(item), len(j))
if len(sFinal) >= len(item) + len(j) -8:
sFinal = merge_string(j, item)
final.append(sFinal)
#print("2.", len(sFinal), len(item), len(j))
temp.append([item, j])
break
【问题讨论】:
-
好主意!你试过什么?
-
我已经提到了我的方法。你也需要代码吗?
-
@JackDaniels 是的,您需要向我们展示您已经尝试过的内容。
-
好的,让我更新一下。
-
我认为没有正确拼写单词的字典或两个以上列表的情况下没有正确的方法可以做到这一点,因此您可以应用某种“多数票”可供选择的变体。
标签: python regex string text nlp