Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较多个字符串以查找';平均值'/最常用字符串 问题是:_Python_String - Fatal编程技术网

Python 比较多个字符串以查找';平均值'/最常用字符串 问题是:

Python 比较多个字符串以查找';平均值'/最常用字符串 问题是:,python,string,Python,String,我试图在许多字符串上找到一个常见的(最常见的,甚至是“平均”)短语。不同字符串之间的结构非常糟糕,并且充满了不一致性。许多字符串都添加了与所需输出无关的唯一位:一个新字符串,其作用类似于字符串集的某种摘要 为了说明这一点,我提供了一个小示例,实际数据更复杂,由更多字符串组成: 示例数据: 1. Small house, red roof, 2 windows, no garden 2. Big house, red roof, 2 windows, garage with driveway 3.

我试图在许多字符串上找到一个常见的(最常见的,甚至是“平均”)短语。不同字符串之间的结构非常糟糕,并且充满了不一致性。许多字符串都添加了与所需输出无关的唯一位:一个新字符串,其作用类似于字符串集的某种摘要

为了说明这一点,我提供了一个小示例,实际数据更复杂,由更多字符串组成:

示例数据:

1. Small house, red roof, 2 windows, no garden
2. Big house, red roof, 2 windows, garage with driveway
3. Small house, red roof, 2 windows, nice view 
所需输出应接近:

Small house, red roof, 2 windows
我的尝试和挑战: 在一个更小的数据集上,结构要复杂得多,我以前一直依赖字数:

words=df['Phrases'].str.split(expand=True).stack().value_counts()
words=words.reset_index()
summary=“”
对于范围(3)中的i:
summary+=f“{words['index'][i]}”
在这个更简单的数据集上,只需选取n个最常见的短语,就可以得到有用的摘要

看看类似的问题(例如或),它们之间有很多相似之处。“公共短语”存在于所有提供的字符串中,或者为单词出现设置了阈值。这里的情况都不是这样

我尝试的另一件事是使用交叉点:

短语=[] 对于df中的短语[‘短语’]: 短语.append(短语.split()) def intersect(列表1、列表2): 返回列表(集合(列表1)和集合(列表2)) 打印(相交(短语[0],短语[1]) 然后使用示例数据打印:

house red roof 2 windows
交叉点和两个以上列表的一个问题是,对于每个额外的列表/字符串,它只会删除越来越多的内容。如果短语中的差异足够大,则很快就会在所有短语中出现一个空交叉点

挑战:

  • 不保证所有字符串中都有一个通用短语
  • 短语不能保证顺序一致
  • 摘要字符串长度不固定
  • 单词经常(但不总是)以小组形式出现:例如大/小房子
可能的解决方案: 我想尝试但不知道如何正确处理的一件事是使用设置为百分比的字数,这将消除一组单词出现率阈值,但仍然需要一个未知的百分比阈值。也不会包含单词对/组。因此,这将更容易扩展,但可能不是一个正确的解决方案


另一个想法是实现某种形式的近似字符串匹配,但这似乎只在一种方式下起作用:表示两个字符串之间的相似性。因此,它不会提供与所有给定字符串具有最高相似性的新字符串。

这不是一个完整的答案,但可能会给您一些想法

  • 查看给出的示例,将字符串拆分为逗号分隔的字符串列表显然是第一步
  • 在此基础上,如果输入具有足够的结构,您可以通过索引在输入列表中进行压缩。例如,在提供的示例中,
    [“小房子”、“大房子”、“小房子”]、[“红屋顶”、“红屋顶”、“红屋顶”]、…]
    处理该列表,然后获取每个子列表中的模式元素(例如,如果它与至少30%的输入精确匹配,则忽略子列表或将其进一步分解,例如,分解为单词并查找最常见的单词)
  • <> LI>如果输入缺少足够的结构,可以考虑将每个标记化的输入列表与自然对象一起拉紧。这将给您一种方式来表达输入列表中的“早期”,一些令牌很可能出现,并因此对最终包含在输出中的令牌(或其单词)施加命令。
    这不是一个完整的答案,但可能会给你一些想法

  • 查看给出的示例,将字符串拆分为逗号分隔的字符串列表显然是第一步
  • 在此基础上,如果输入具有足够的结构,您可以通过索引在输入列表中进行压缩。例如,在提供的示例中,
    [“小房子”、“大房子”、“小房子”]、[“红屋顶”、“红屋顶”、“红屋顶”]、…]
    处理该列表,然后获取每个子列表中的模式元素(例如,如果它与至少30%的输入精确匹配,则忽略子列表或将其进一步分解,例如,分解为单词并查找最常见的单词)
  • <> LI>如果输入缺少足够的结构,可以考虑将每个标记化的输入列表与自然对象一起拉紧。这将给您一种方式来表达输入列表中的“早期”,一些令牌很可能出现,并因此对最终包含在输出中的令牌(或其单词)施加命令。
    您是否考虑过使用
    NLP
    词干分析
    来减少使用
    bigrams
    时出现的唯一字符?也可以尝试使用
    LDA
    建模。@KartikeySingh我目前正在尽可能多地清理文本,遗憾的是,到目前为止它提供的改进很少。您是否考虑过使用
    NLP
    词干分析
    ,以减少使用
    bigrams
    时出现的唯一字符?还可以尝试研究
    LDA
    建模。@KartikeySingh我目前正在尽可能多地清理文本,遗憾的是,到目前为止它提供的改进很少。我同意第一点,但如果数据没有结构化,最好创建一个da我同意第一点,但如果数据不是结构化的,最好创建一个逗号分隔数据的文档数据集,并在其上使用bigram。