标签: string-matching

perl中的高效子字符串匹配

我正在寻找一个有效的解决方案,找到一个字符串中最长的子字符串,容忍主字符串中的n个不匹配

例如:主字符串

  1. AGACGTAC TACTCTACT AGATGCA*TACTCTAC*
  2. AGACGTAC TACTCTACT AGATGCA*TACTCTAC*
  3. AGACGTAC TACTCTACA AGATGCA*TACTCTAC*
  4. AGACGTAC TACTTTACA AGATGCA*TACTCTAC*

搜索字符串:

  1. TACTCTACT:这应该被认为是对所有上述主要字符串的匹配.

另外我可能会遇到子串的一部分位于主字符串末尾的情况,我也想选择它.

如果你能给出一些指示,我将不胜感激.

PS:我将有一个搜索字符串和大约1亿个主字符串来搜索子字符串.

谢谢!-Abhi

string perl substring string-matching bioperl

7
推荐指数
2
解决办法
1716
查看次数

最长的通用前缀阵列

以下是Suffix arrayLCP array字符串信息MISSISSIPPI.我知道这LCP提供了有关str[i - 1]和之间最长公共前缀的长度的信息str[i].如何在此字符串的任意两个任意后缀之间获得最长的公共前缀长度.例如,我想要MISSISSIPPI和之间最长的公共前缀ISSIPPI

SA  LCP
12  0     $
11  0     I$
8   1     IPPI$
5   1     ISSIPPI$
2   4     ISSISSIPPI$
1   0     MISSISSIPPI$
10  0     PI$
9   1     PPI$
7   0     SIPPI$
4   2     SISSIPPI$
6   1     SSIPPI$
3   3     SSISSIPPI$
Run Code Online (Sandbox Code Playgroud)

algorithm string-matching data-structures

7
推荐指数
1
解决办法
6601
查看次数

Java:有没有人有方法在数组中找到字符串的最佳匹配?

基本上我只是想找到一种方法来找到最接近的匹配(不一定是精确的) String

例如,发现"delicous"{"pie", "delicious", "test"}

这很明显,但数组中的值可能并不总是那么明显.

有人可以帮助我实现这一目标.

java pattern-matching matching string-matching

7
推荐指数
1
解决办法
4610
查看次数

将一个输入文件与给定数量的文件匹配的算法

我上周接受了一次采访.我被困在算法回合中的一个问题中.我回答了这个问题,但面试官似乎并不相信.这就是我分享同样的原因.

请告诉我这个问题的任何优化方法,以便在将来的采访中帮助我.

问题: -

给出了20个文本文件,所有文件都是ASCII文本文件,大小小于10 ^ 9字节.还有一个输入,这也是一个ASCII文件,比如input.txt.

我们的任务是战略性地将此输入文件的内容与给定的20个文件匹配,并打印最接近的匹配文件的名称.输入文件的内容可能只是部分匹配

提前致谢.寻找你的回复.

c c++ string algorithm string-matching

7
推荐指数
1
解决办法
750
查看次数

如何在括号中捕获字符串?

str = "fa, (captured)[asd] asf, 31"

for word in str:gmatch("\(%a+\)") do
    print(word) 
end
Run Code Online (Sandbox Code Playgroud)

嗨!我想在括号中捕捉一个单词.

我的代码应该打印"捕获"字符串.

lua: /home/casey/Desktop/test.lua:3: invalid escape sequence near '\('
Run Code Online (Sandbox Code Playgroud)

我得到了这个语法错误.

当然,我可以找到括号的位置并使用string.sub函数

但我更喜欢简单的代码.

另外,括号给了我类似的错误.

string lua string-matching lua-patterns

7
推荐指数
2
解决办法
4354
查看次数

如何在数据框的其他列中的一列中搜索字符串

我有一个表,称之为df,有3列,第一个是产品的标题,第二个是产品的描述,第三个是一个单词的字符串.我需要做的是在整个表上运行一个操作,创建2个新列(称为'exists_in_title'和'exists_in_description'),它们具有1或0,表示第3列是否存在于第1列或第2列.我需要它只是一个1:1的操作,所以例如,调用行1'A',我需要检查单元格A3是否存在于A1中,并使用该数据创建列exists_in_title,然后检查是否A3存在于A2中,并使用该数据创建列exists_in_description.然后转到B行并进行相同的操作.我有数千行数据,所以一次一个地执行这些数据是不现实的,为每一行编写单独的函数,肯定需要一个函数或方法,一次性遍历表中的每一行.

我玩过grepl,pmatch,str_count,但似乎没有真正做我需要的东西.我认为grepl可能是最接近我需要的,这里是我编写的2行代码的例子,它逻辑上做了我想要的,但似乎不起作用:

df$exists_in_title <- grepl(df$A3, df$A1)

df$exists_in_description <- grepl(df$A3, df$A2)
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,我收到以下消息,这使我相信它无法正常工作:"参数'模式'的长度> 1,只使用第一个元素"

任何有关如何做到这一点的帮助将不胜感激.谢谢!

string r string-matching dataframe grepl

7
推荐指数
1
解决办法
5375
查看次数

Python模糊匹配(FuzzyWuzzy) - 保持最佳匹配

我正在尝试模糊匹配两个csv文件,每个文件包含一列相似但不相同的名称.

我的代码到目前为止如下:

import pandas as pd
from pandas import DataFrame
from fuzzywuzzy import process
import csv

save_file = open('fuzzy_match_results.csv', 'w')
writer = csv.writer(save_file, lineterminator = '\n')

def parse_csv(path):

with open(path,'r') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        yield row


if __name__ == "__main__":
## Create lookup dictionary by parsing the products csv
data = {}
for row in parse_csv('names_1.csv'):
    data[row[0]] = row[0]

## For each row in the lookup compute the partial ratio
for row in parse_csv("names_2.csv"): …
Run Code Online (Sandbox Code Playgroud)

python fuzzy-search string-matching fuzzywuzzy

7
推荐指数
3
解决办法
1万
查看次数

如何在C#中比较和转换表情符号字符

我试图弄清楚如何检查一个字符串是否包含一个specfic表情符号.例如,查看以下两个表情符号:

自行车骑手:http: //unicode.org/emoji/charts/full-emoji-list.html#1f6b4

美国国旗:http://unicode.org/emoji/charts/full-emoji-list.html#1f1fa_1f1f8

骑自行车的是U+1F6B4美国国旗U+1F1FA U+1F1F8.

但是,要检查的表情符号是以这样的数组提供给我的,只有字符串中的数值:

var checkFor = new string[] {"1F6B4","1F1FA-1F1F8"};
Run Code Online (Sandbox Code Playgroud)

如何将这些数组值转换为实际的unicode字符并检查字符串是否包含它们?

我可以为自行车骑士工作,但是对于美国国旗,我很难过.

对于自行车骑士,我正在做以下事情:

const string comparisonStr = "..."; //some string containing text and emoji

var hexVal = Convert.ToInt32(checkFor[0], 16);
var strVal = Char.ConvertFromUtf32(hexVal);

//now I can successfully do the following check

var exists = comparisonStr.Contains(strVal);
Run Code Online (Sandbox Code Playgroud)

但由于多个代码点,这对美国国旗不起作用.

c# unicode double-byte string-matching emoji

7
推荐指数
1
解决办法
8234
查看次数

高效的字符串后缀检测

我正在使用PySpark处理一个庞大的数据集,我希望根据另一个数据框中的字符串过滤数据帧.例如,

dd = spark.createDataFrame(["something.google.com","something.google.com.somethingelse.ac.uk","something.good.com.cy", "something.good.com.cy.mal.org"], StringType()).toDF('domains')
+----------------------------------------+
|domains                                 |
+----------------------------------------+
|something.google.com                    |
|something.google.com.somethingelse.ac.uk|
|something.good.com.cy                   |
|something.good.com.cy.mal.org           |
+----------------------------------------+  

dd1 =  spark.createDataFrame(["google.com", "good.com.cy"], StringType()).toDF('gooddomains')
+-----------+
|gooddomains|
+-----------+
|google.com |
|good.com.cy|
+-----------+
Run Code Online (Sandbox Code Playgroud)

我认为domainsgooddomains有效的域名.

我想要做的是过滤掉dd不结束的匹配字符串dd1.所以在上面的例子中,我想过滤掉第1行和第3行,最后得到

+----------------------------------------+
|domains                                 |
+----------------------------------------+
|something.google.com.somethingelse.ac.uk|
|something.good.com.cy.mal.org           |
+----------------------------------------+  
Run Code Online (Sandbox Code Playgroud)

我目前的解决方案(如下所示)只能考虑最多3个字的域名.如果我要添加say,verygood.co.ac.ukin dd1(即白名单),那么它将失败.

def split_filter(x, whitelist):
    splitted1 = x.select(F.split(x['domains'], '\.').alias('splitted_domains'))
    last_two = splitted1.select(F.concat(splitted1.splitted_domains[F.size(splitted1.splitted_domains)-2], \
       F.lit('.'), \
       splitted1.splitted_domains[F.size(splitted1.splitted_domains)-1]).alias('last_two'))
    last_three = splitted1.select(F.concat(splitted1.splitted_domains[F.size(splitted1.splitted_domains)-3], \
       F.lit('.'), \
       splitted1.splitted_domains[F.size(splitted1.splitted_domains)-2], \
       F.lit('.'), \
       splitted1.splitted_domains[F.size(splitted1.splitted_domains)-1]).alias('last_three'))
    x = …
Run Code Online (Sandbox Code Playgroud)

python string-matching apache-spark apache-spark-sql pyspark

7
推荐指数
1
解决办法
733
查看次数

如何每10个字分割一个字串?

我正在寻找一种方法,每10个字分割我的字符串块。我正在使用下面的代码。

我的输入将是一个长字符串。
例如:这是一个示例文件,可以用作该程序的参考,我希望每行每10个单词对这一行进行拆分(换行)。

private void jButton27ActionPerformed(java.awt.event.ActionEvent evt) {                                          

    String[] names = jTextArea13.getText().split("\\n");

           var S = names.Split().ToList();
           for (int k = 0; k < S.Count; k++) {
               nam.add(S[k]);
               if ((k%10)==0) { 
                   nam.add("\r\n");       
               }
           }

           jTextArea14.setText(nam);


output:
this is an example file that can be used as
a reference for this program, i want this line to
be split (newline) by every 10 words each.
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏。

java string string-matching

7
推荐指数
1
解决办法
106
查看次数