在Python中选择彼此差异最大的字符串

2024-10-02 18:26:55 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,这个问题可能有点奇怪,所以首先让我给你一个简短的背景。你知道吗

我使用^{}来生成给定一组可选短语的大块文本。我将spin插入一个范围从0到10的循环中,因此它创建了多个字符串,每个字符串都是不同的。你知道吗

for i in range(0, 10):
   L.append(spintax.spin(            
  " ----<h1>{" +Title+ " - {køb online|sammenlign {priser|online supermarkederne}} via x.dk|Få din "+y+ "\
  leveret til døren og spar penge via x.dk|Køb din "+y+ " online og spar penge  via x.dk }\
  \n  \
  ----<h2>{{Få adgang til|vælg fra} {et stort|Danmarks største} {udvalg} af} " +y+ "<h2>\
  \n  \
  {Når|Hvis} du {besøger|handler ind gennem|benytter|køber ind via|køber dine varer via}\
  x.dk, {er det {vigtigt|væsentligt} at forstå|skal du huske|skal du vide}"))

  L2.append(df['ID'][index])
df2 = pd.DataFrame(np.column_stack([L, L2]), columns=['Text' ,'ID'])

好的,这是我的代码的一个例子。L是一个获取生成的文本的列表,L2是一个id列表(因为它离题了,所以不打算解释这个列表的内容)。因此,我的df2数据帧将如下所示:

Index            Text                                 Id
0            <h1>Få din Mælk & Fløde leveret til      4169
             døren og spar penge via...
1            <h1>Mælk & Fløde - køb online via x.dk   4169
              ....
12           <h1>Få din Yoghurt leveret til døren     4178
             og spar penge via 
              ....

所以现在,每个Id有10个文本字符串,我需要把它们降到1,我的问题开始了。我想确保这些文本字符串在某种程度上彼此不同。从每个Id的这10个字符串中,我需要选择一个与其他Id的字符串不同的字符串。你知道吗

希望这有点道理。。。你知道吗

总结一下,如果你在路上迷路了:有没有办法比较字符串之间的相似性?一种比较文本字符串并选择其中最不同的字符串的方法?你知道吗


Tags: 字符串文本idh1viaonlineogdk
1条回答
网友
1楼 · 发布于 2024-10-02 18:26:55

在下面的数据中,TextIndex0 & 2TextIndex4 & 5中最相似,因为它们包含彼此的文本。所以最不相似的是每个Index1 & 3之间的Id

为了找到最不相似的Text,我们可以使用TF-IDF将每个Text编码成一个数字向量。然后,我们找到每组中每对行之间的euclidean distance,并对每行的距离求和,并假设最大平均值是最不相似的。最后,我们获取每组Id's平均值最大的索引。你知道吗

数据:

| Index | Text                                                       | Id   |
|   -|                              |   |
| 0     | Få din Mælk & Fløde leveret til døren og spar penge via... | 4169 |
| 1     | Mælk & Fløde - køb online via x.dk                         | 4169 |
| 2     | Fløde leveret til døren og spar penge via...               | 4169 |
| 3     | Få din Mælk & Fløde leveret til døren og spar penge via... | 4170 |
| 4     | Mælk & Fløde - køb online via x.dk                         | 4170 |
| 5     | køb online via x.dk                                        | 4170 |

在:

from sklearn.feature_extraction.text import TfidfVectorizer
from scipy.spatial.distance import cdist

df = pd.read_clipboard()
df.columns = df.columns.str.strip()

v = TfidfVectorizer()
X = v.fit_transform(df['Text'])

df = df.join(pd.DataFrame(X.toarray()))

group = df.groupby('Id', as_index=False)

df = group.apply(lambda x : x.iloc[cdist(x.iloc[:,3:].values, x.iloc[:,3:].values).mean(axis=0).argmax()])

df[['Index', 'Text', 'Id']]

输出:

|   | Index | Text                                                       | Id   |
| -|   -|                              |   |
| 0 | 1     | Mælk & Fløde - køb online via x.dk                         | 4169 |
| 1 | 3     | Få din Mælk & Fløde leveret til døren og spar penge via... | 4170 |

相关问题 更多 >