我有一个有点大的输出文本文件,我需要删除两个模式之间的所有行,但保持模式匹配.
这些文件看起来像以下输出一样模糊.
TEST #1
coef1 | 48.36895 3.32013 14.57 0.000 41.86141 54.87649
coef2 | -50.08894 10.47335 -4.78 0.000 -70.61697 -29.56092
|
indicator |
0 | .6647992 2.646627 0.25 0.802 -4.55925 5.888849
1 | 2.118701 5.225777 0.41 0.686 -8.19621 12.43361
|
year |
2 | -.4324005 2.231387 -0.19 0.847 -4.836829 3.972028
3 | -.362762 1.97184 -0.18 0.854 -4.254882 3.529358
|
_cons | 16.95753 6.342342 2.67 0.008 4.526383 29.38869
TEST #2
coef2 | 48.36895 3.32013 14.57 0.000 41.86141 54.87649
coef3 | -50.08894 …Run Code Online (Sandbox Code Playgroud) 我有一个有点高级别的问题,所以我会尝试尽可能具体.
我正在进行大量研究,涉及将不同的数据集与引用同一实体(通常是公司或财务安全性)的标题信息相结合.此记录链接通常涉及标题信息,其中名称是唯一的公共主要标识符,但通常可用某些辅助信息(例如城市和州,操作日期,相对大小等).这些匹配通常是一对多,但可能是一对一甚至多对多.我通常手工完成这种匹配或者对清理过的子串进行非常基本的文本比较.我偶尔使用一种简单的匹配算法,比如Levenshtein距离测量,但我从来没有太多的东西,部分是因为我没有一个很好的正式应用方法.
我的猜测是,这是一个相当普遍的问题,并且必须有一些正式的流程可以用来做这类事情.我已经阅读了一些关于这个主题的学术论文,这些论文涉及给定方法的理论适用性,但我没有找到任何有用的资料来完成一个配方或至少一个实际的框架.
我的问题如下:
有没有人知道实现多维模糊记录匹配的良好来源,如书籍或网站,发表的文章或工作文件?
我更喜欢有实际例子和明确方法的东西.
该方法可以是迭代的,人工检查中间阶段的改进.
(编辑)链接数据用于统计分析.因此,一点点的噪音是可以的,但是对于较少的"错误的不匹配"而言,更少的"不正确的匹配"是强烈的偏好.
如果他们在Python中是很棒的,但不是必需的.
最重要的是,如果重要的是,我不太关心计算效率.我没有动态实现它,我通常处理几千条记录.
theory algorithm string-matching fuzzy-comparison record-linkage
我不知道这是我对 UTF-8 还是 python 的误解,但我无法理解 python 如何将 Unicode 字符写入文件。顺便说一下,我使用的是 OSX 下的 Mac,如果这有什么区别的话。
\n\n假设我有以下 unicode 字符串
\n\nfoo=u'\\x93Stuff in smartquotes\\x94\\n'
这里 \\x93 和 \\x94 是那些糟糕的智能引号。
\n\n然后我将其写入文件:
\n\nwith open('file.txt','w') as file:\n file.write(foo.encode('utf8'))
当我在 TextWrangler 等文本编辑器或网络浏览器中打开文件时,file.txt它看起来像是写成
\n\n\n\\xc2\\x93**smartquotes 中的内容\\xc2\\x94\\n
\n
文本编辑器正确地理解该文件是 UTF8 编码的,但它将 \\xc2\\x93 呈现为垃圾。如果我进入并手动删除 \\xc2 部分,我会得到我所期望的结果,并且 TextWrangler 和 Firefox 将 utf 字符呈现为智能引号。
\n\n这正是我将文件读回 python 而不将其解码为“utf8”时得到的结果。然而,当我用该方法读入它时read().decode('utf8'),我得到了我最初输入的内容,没有 \\xc2 位。
这让我抓狂,因为我试图将一堆 html 文件解析为文本,而这些 unicode 字符的错误渲染导致一堆东西搞砸了。
\n\n我也在 python3 中尝试使用正常的读/写方法,它具有相同的行为。
\n\n编辑:关于手动删除 …
这几乎可以肯定是我对发电机如何工作的无知的结果,但我完全迷失了.
如果我以交互方式创建以下生成器:
def neighborhood(iterable):
iterator = iter(iterable)
prev = None
item = next(iterator)
for post in iterator:
yield (prev,item,post)
prev = item
item = post
yield (prev,item,None)
Run Code Online (Sandbox Code Playgroud)
然后测试它像:
for prev,item,next in neighborhood([1,2,3,4,5]):
print(prev, item, next)
Run Code Online (Sandbox Code Playgroud)
它产生:
None 1 2
1 2 3
2 3 4
3 4 5
4 5 None
Run Code Online (Sandbox Code Playgroud)
正如所料.如果我再次运行它,或尝试以任何方式重新定义它,我得到一个
'NoneType'对象不可调用"
错误.