标签: string-matching

如何在python中将一个列表中最"相似"的字符串映射到另一个列表?

给出两个包含字符串的列表.

  1. 一个包含世界各地的组织(主要是大学)的名称 - 不仅用英语写,而且总是使用拉丁字母.

  2. 另一个列表主要包含完整地址,其中可能出现第一个列表中的字符串(组织).

一个例子:

addresses = [
             "Department of Computer Science, Katholieke Universiteit Leuven, Leuven, Belgium",
             "Machine Learning and Computational Biology Research Group, Max Planck Institutes     Tübingen, Tübingen, Germany 72076",
             "Department of Computer Science and Engineering, University of Washington, Seattle, USA 98185",
             "Knowledge Discovery Department, Fraunhofer IAIS, Sankt Augustin, Germany 53754",    
             "Computer Science Department, University of California, Santa Barbara, USA 93106",
             "Fraunhofer IAIS, Sankt Augustin, Germany",
             "Department of Computer Science, Cornell University, Ithaca, NY",
             "University of Wisconsin-Madison"
            ] …
Run Code Online (Sandbox Code Playgroud)

python string-matching

8
推荐指数
1
解决办法
852
查看次数

如何在Delphi中实现一组标准的超链接检测规则

我目前在我的程序中自动检测文本中的超链接.我做的很简单,只查找http://www.

但是,用户建议我将其扩展为其他形式,例如:https://.com

然后我意识到它可能不止于此,因为有ftp和mailto和文件,所有其他顶级域名,甚至电子邮件地址和文件路径.

我认为最好的方法是通过遵循当前使用的一些常用的标准超链接检测规则集来限制它.也许Microsoft Word是如何做到的,或者RichEdit是如何做到的,或者你知道更好的标准.

所以我的问题是:

是否有内置函数,我可以从Delphi调用来进行检测,如果有,那么调用会是什么样的?(我计划将来去FireMonkey,所以我更喜欢能在Windows之外运行的东西.)

如果没有可用的功能,是否有一些地方我可以找到一组记录在Word,RichEdit中检测到的内容的规则,或者应该检测到的任何其他规则集?那将允许我自己编写检测代码.

delphi hyperlink string-matching

8
推荐指数
1
解决办法
435
查看次数

与一个或零不匹配匹配的字符串模式

给定一个字符串和一个匹配的模式,找到匹配的效率有多为零或一个不匹配.

e.g) 
S = abbbaaabbbabab
P = abab

Matches are abbb(index 0),aaab(index 4),abbb(index 6),abab(index 10)
Run Code Online (Sandbox Code Playgroud)

我试图修改KMP算法,但我不确定这种方法.

请让我知道继续解决问题.

谢谢.

string algorithm pattern-matching string-matching knuth-morris-pratt

8
推荐指数
1
解决办法
3118
查看次数

将大字符串中的子字符串与大量关键字列表匹配的最佳方法是什么?

想象一下,你有数百万条包含平均2000个单词(每个)的文本的记录,而且你还有另一个包含大约100000个项目的列表.

例如:在关键词列表中你有一个像"奥巴马总统"这样的项目,在其中一个文本记录中你有这样的事情:".....总统奥巴马......",所以我想找到这个关键词在文中用一些像这样的东西替换它:"..... {奥巴马总统} ...."为了突出显示文本中的关键字,关键字列表包含多名词的例子.

在拥有数百万条文本记录的庞大列表中,最快的方法是什么?

笔记:

  1. 现在我以贪婪的方式完成这项工作,逐字检查并匹配它们,但每个文本记录大约需要2秒钟,我想要零时间附近的东西.

  2. 我也知道这就像命名实体识别一样,我使用了很多NER框架,比如Gate和...,但是因为我想要这个框架不支持的语言,我想手动这个.

c# regex lookup named-entity-recognition string-matching

8
推荐指数
1
解决办法
244
查看次数

C#:如何删除2个字符串之间的匹配子字符串?

如果我有两个字符串..说

string1 ="Hello亲爱的c'Lint"

字符串2 ="亲爱的"

..我想先比较字符串删除匹配的子字符串..
上述字符串对的结果是:

"你好c'Lint"

(即, "Hello" "c'Lint" 之间有两个空格)

为简单起见,我们假设string2将是string1的子集..(我的意思是string1将包含string2).

c# string string-matching

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

android <2.3和java.text.Normalizer

在2.3之前的Android版本中,java.text.Normalizer的最佳替代方法是什么? http://developer.android.com/reference/java/text/Normalizer.html

我需要匹配Strings

perché perchè perche
Run Code Online (Sandbox Code Playgroud)

谢谢

尼古拉

java string android string-matching

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

在ORACLE中搜索最长前缀的最快方法

我有一个为大量区域定义的电话号码前缀列表(在由gvcode和cgi定义的查询中).我需要有效地找到与给定数字PHONE_NR匹配的最长前缀.

我在字段数字上使用倒置LIKE子句(其中包含格式为+ 48%,+ 49%,+ 1%,+ 1232%等的前缀).

因此我不能在该字段上使用普通索引.

我通过在gvcode和cgi字段上使用IOT(它们是主键的一部分(前两个cols))设法获得了实质性的改进.我还查看了一些oracle文本索引,但找不到匹配表中较长前缀的较长输入的索引.

有没有其他方法来执行比这种方法更快的搜索.

这是一个查询,它给出了所有匹配前缀的列表(我在数字长度后对其进行排序).

  select  t.gvcode,  t.digits
                from NUMBERS t 
                    where 
                        t.gvcode=ZONE_SET_CODE 
                        and t.cgi=cgi_f
                       and ( PHONE_NR like t.digits)
                         order by length(digits) desc 
Run Code Online (Sandbox Code Playgroud)

sql oracle algorithm string-matching

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

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万
查看次数

高效的字符串后缀检测

我正在使用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
查看次数

R 中跨列的模糊匹配

如何衡量 r 中名称的相似程度?换句话说,可以进行模糊匹配的程度。

例如,我正在使用如下所示的数据框:

Name.1 <- c("gonzalez", "wassermanschultz", "athanasopoulos", "armato")
Name.2 <- c("gonzalezsoldevilla", "schultz", "anthanasopoulos", "strain")

df1 <- data.frame(Name.1, Name.2)
Run Code Online (Sandbox Code Playgroud)
df1
            Name.1             Name.2
1         gonzalez gonzalezsoldevilla
2 wassermanschultz            schultz
3   athanasopoulos    anthanasopoulos
4           armato             strain
Run Code Online (Sandbox Code Playgroud)

从数据中可以清楚地看出,第 1 行和第 2 行足够相似,足以确信名称相同。第三行是相同的名称,尽管拼写错误,第四行完全不同。

作为输出,我想创建第三列来描述名称之间的相似程度或返回某种布尔值以指示可以进行模糊匹配。

string r string-matching fuzzy-logic fuzzy-comparison

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