我正在寻找一个有效的解决方案,找到一个字符串中最长的子字符串,容忍主字符串中的n个不匹配
例如:主字符串
搜索字符串:
另外我可能会遇到子串的一部分位于主字符串末尾的情况,我也想选择它.
如果你能给出一些指示,我将不胜感激.
PS:我将有一个搜索字符串和大约1亿个主字符串来搜索子字符串.
谢谢!-Abhi
以下是Suffix array和LCP 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) 基本上我只是想找到一种方法来找到最接近的匹配(不一定是精确的) String
例如,发现"delicous"在{"pie", "delicious", "test"}
这很明显,但数组中的值可能并不总是那么明显.
有人可以帮助我实现这一目标.
我上周接受了一次采访.我被困在算法回合中的一个问题中.我回答了这个问题,但面试官似乎并不相信.这就是我分享同样的原因.
请告诉我这个问题的任何优化方法,以便在将来的采访中帮助我.
问题: -
给出了20个文本文件,所有文件都是ASCII文本文件,大小小于10 ^ 9字节.还有一个输入,这也是一个ASCII文件,比如input.txt.
我们的任务是战略性地将此输入文件的内容与给定的20个文件匹配,并打印最接近的匹配文件的名称.输入文件的内容可能只是部分匹配
提前致谢.寻找你的回复.
str = "fa, (captured)[asd] asf, 31"
for word in str:gmatch("\(%a+\)") do
print(word)
end
Run Code Online (Sandbox Code Playgroud)
嗨!我想在括号中捕捉一个单词.
我的代码应该打印"捕获"字符串.
Run Code Online (Sandbox Code Playgroud)lua: /home/casey/Desktop/test.lua:3: invalid escape sequence near '\('
我得到了这个语法错误.
当然,我可以找到括号的位置并使用string.sub函数
但我更喜欢简单的代码.
另外,括号给了我类似的错误.
我有一个表,称之为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,只使用第一个元素"
任何有关如何做到这一点的帮助将不胜感激.谢谢!
我正在尝试模糊匹配两个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) 我试图弄清楚如何检查一个字符串是否包含一个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)
但由于多个代码点,这对美国国旗不起作用.
我正在使用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)
我认为domains和gooddomains有效的域名.
我想要做的是过滤掉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
我正在寻找一种方法,每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)
任何帮助表示赞赏。
string-matching ×10
string ×5
algorithm ×2
java ×2
python ×2
apache-spark ×1
bioperl ×1
c ×1
c# ×1
c++ ×1
dataframe ×1
double-byte ×1
emoji ×1
fuzzy-search ×1
fuzzywuzzy ×1
grepl ×1
lua ×1
lua-patterns ×1
matching ×1
perl ×1
pyspark ×1
r ×1
substring ×1
unicode ×1