我试图在许多字符串上找到一个常见的(最常见的,甚至是“平均”)短语。不同字符串之间的结构非常糟糕,并且充满了不一致性。许多字符串都添加了与所需输出无关的唯一位:一个新字符串,其作用类似于字符串集的某种摘要。
为了说明这一点,我提供了一个小示例,实际数据更复杂,由更多字符串组成:
示例数据:
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 = ""
for i in range(3):
summary += f"{words['index'][i]} "
在这个更简单的数据集上,只需选取n个最常见的短语,就可以得到有用的摘要。
查看类似的问题(例如,从包含最常用单词的多个字符串中提取新字符串,或在ArrayList()中找到最常用的字符串),它们之间有很多相似之处。“公共短语”存在于所有提供的字符串中,或者为单词出现设置了阈值。这里的情况都不是这样。
我尝试的另一件事是使用交叉点:
phrases = []
for phrase in df['Phrases']:
phrases.append(phrase.split())
def intersect(list1, list2):
return list(set(list1) & set(list2))
print (intersect(phrases[0], phrases[1])
然后使用示例数据打印:
house red roof 2 windows
交叉点和两个以上列表的一个问题是,对于每个额外的列表/字符串,它只会删除越来越多的列表。如果短语中有足够的差异,那么很快就会在所有短语之间出现一个空的交叉点。
挑战:
我想尝试但不知道如何正确处理的一件事是使用wordcounts设置为百分比,这将消除一个单词出现次数阈值,但仍然需要一个未知的百分比阈值。也不包含单词对/组。因此,这将更容易扩大规模,但可能不是一个合适的解决方案。
另一个想法是实现某种形式的近似字符串匹配,但这似乎只在一种方式下起作用:表示两个字符串之间的相似性。因此,它不提供与所有给定字符串具有最高相似性的新字符串。
这不是一个完整的答案,但可能会给你一些想法。
问题内容: 我正在尝试 使用循环从两个不同的用户输入中打印常用字母。(我需要使用for循环来完成它。)我遇到了两个问题:1.我的语句“ If char not in output …”没有提取唯一值。2.输出为我提供了单个字母列表,而不是单个字符串。我尝试分割输出,但是分割遇到类型错误。 问题答案: 您正在尝试执行“设置相交”。Python有 相同的方法。您可以将其用于您的用例,例如: 将返回字符
问题内容: 我有一个简单的疑问。如果有人帮助我,那就太好了。 我有两个字符串: 这两个值相等,但是如何在Java中比较它们呢?我们拥有并用于比较字符串alpha值,类似地,如何比较数字值。 问题答案: 这就对了。您可以使用方法将数字字符串转换为整数,该方法将返回类型。然后比较与相同。
问题内容: 我想知道如何在一行中比较多个字符串。我尝试使用|| 但不适用于布尔值或字符串。这是我的代码是什么样的: 对于那些将其标记为重复的对象,我在此处检查了200多个关于堆栈溢出的问题,但没有一个起作用。@Chrylis发布的一个实际上没有帮助。他们只是在问==和.equals()的区别 问题答案: 首先,不要用于字符串。稍后您将了解原因。您想按字符串的内容而不是它们在内存中的位置比较字符串。
首先,考虑这个例子: 我期望什么:因为“123”是一个< code>const char*,我期望这些字符串的地址(就像其中一个答案所说的)被比较。 …因为和将只比较这些字符串的基址。不是字符串本身的内容。 但输出仍然是。好吧,我们实际上不知道如何比较两个prvalue对象的地址(或者至少我不明白会怎么做)。所以让我们将这些字符串声明为变量,看看会发生什么: 输出仍然是 。所以字符串不会衰减吗?或
查找字符串中出现最多的字符和个数? 如 sdsdsddssssssdd -> 字符最多的是s,出现9次 思路说明 利用python中的collections模块的Counter,查此函数详细内容.对字符串进行统计。 然后将结果转化为字典类型。 特别注意,在字符串中可能会出现数量并列第一的字符,因此要通过循环找出最大数之后,再通过循环找出最大数对应的字母(键)。 解答1(python) import
问题内容: 我知道的结果是布尔值,因此无法进行比较,但是我们如何检查是否存在多个字符? 问题答案: 这不是您想要的。请使用堆栈语句: 或者,由于我是 正则表达式的狂热者 ,因此这是一种使用 正则表达式 的方法!:) 由于user2980077 ,此后修复的代码中有一个错误