小编Tig*_*er1的帖子

使用python快速实现字符n-gram

我编写了以下用于计算字符双字母的代码,输出就在下面.我的问题是,如何获得排除最后一个字符(即t)的输出?有没有更快更有效的计算字符n-gram的方法?

b='student'
>>> y=[]
>>> for x in range(len(b)):
    n=b[x:x+2]
    y.append(n)
>>> y
['st', 'tu', 'ud', 'de', 'en', 'nt', 't']
Run Code Online (Sandbox Code Playgroud)

这是我想得到的结果:['st','tu','ud','de','nt]

提前感谢您的建议.

n-gram python-2.7

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

使用numpy计算文本文档之间的Kullback-Leibler(KL)距离

我的目标是计算以下文本文档之间的KL距离:

1)The boy is having a lad relationship
2)The boy is having a boy relationship
3)It is a lovely day in NY
Run Code Online (Sandbox Code Playgroud)

我首先将文件矢量化,以便轻松应用numpy

1)[1,1,1,1,1,1,1]
2)[1,2,1,1,1,2,1]
3)[1,1,1,1,1,1,1]
Run Code Online (Sandbox Code Playgroud)

然后,我应用以下代码计算文本之间的KL距离:

import numpy as np
import math
from math import log

v=[[1,1,1,1,1,1,1],[1,2,1,1,1,2,1],[1,1,1,1,1,1,1]]
c=v[0]
def kl(p, q):
    p = np.asarray(p, dtype=np.float)
    q = np.asarray(q, dtype=np.float)
    return np.sum(np.where(p != 0,(p-q) * np.log10(p / q), 0))
for x in v:
    KL=kl(x,c)
    print KL
Run Code Online (Sandbox Code Playgroud)

以下是上述代码的结果:[0.0, 0.602059991328, 0.0].文本1和3完全不同,但它们之间的距离为0,而高度相关的文本1和2的距离为0 0.602059991328.这不准确.

有没有人知道我对KL的做法不对?非常感谢你的建议.

numpy distance python-2.7

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

使用NLTK摆脱停用词和文档标记化

我很难使用nltk消除和标记.text文件.我不断收到以下错误消息:AttributeError:'list'对象没有属性'lower'.我只是无法弄清楚我做错了什么,虽然这是我第一次做这样的事情.以下是我的代码.感谢任何建议,谢谢

Import nltk
from nltk.corpus import stopwords
s = open("C:\zircon\sinbo1.txt").read()
tokens = nltk.word_tokenize(s)
def cleanupDoc(s):
        stopset = set(stopwords.words('english'))
    tokens = nltk.word_tokenize(s)
    cleanup = [token.lower()for token in tokens.lower() not in stopset and  len(token)>2]
    return cleanup
cleanupDoc(s)
Run Code Online (Sandbox Code Playgroud)

tokenize nltk stop-words

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

将多个单独的列表组合到列表列表中

下面是我想要组合成一个嵌套列表的三个列表:

List_1=[1,2,3]
List_2=[4,5,6]
List_3=[7,8,9]
Run Code Online (Sandbox Code Playgroud)

我的尝试:

List_x=[]
List_x.append(List_1)
List_x.append(List_2)
List_x.append(List_3)
print List_x
Run Code Online (Sandbox Code Playgroud)

结果:

[[1,2,3],[4,5,6],[7,8,9]]
Run Code Online (Sandbox Code Playgroud)

期望的结果:与我得到的结果相同,但考虑到我的实际数据的大小,这种方法非常慢.

python list

5
推荐指数
1
解决办法
2897
查看次数

文本对齐:使用python提取匹配序列

我的目标是在两个文本段落中提取对齐的匹配序列.接下来是我的文字:

txt1='the heavy lorry crashed into the building at midnight'
txt2='what a heavy lorry it is that crashed into the building'
Run Code Online (Sandbox Code Playgroud)

预期产量:

'heavy lorry'
'crashed into the building'
Run Code Online (Sandbox Code Playgroud)

我的尝试:

def sequ(s1,s2):
    _split1=s1.split()
    _split2=s2.split()
    _match=''.join(list(set(_split1) & set(_split2)))
    return _match

print sequ(txt1, txt2)

Result: heavybuildingintocrashedthelorry
Run Code Online (Sandbox Code Playgroud)

......扭曲的结果.

有关如何达到预期结果的任何建议?谢谢.

python text alignment sequence

5
推荐指数
1
解决办法
2429
查看次数

如何修剪字符串:在第一个完全停止后立即开始,最后一个结束

有没有办法修剪字符串以在特定点开始和结束?

这是一个例子:我希望字符串(文本)在第一个完全停止后立即开始,并在最后一个完整停止时结束.

_string = "money is good. love is better. be lucky to have any. can't really have both"
Run Code Online (Sandbox Code Playgroud)

预期产量:

"love is better. be lucky to have any."
Run Code Online (Sandbox Code Playgroud)

我的尝试:

import re
pattern = "\.(?P<_string>.*?.*?).\"
match = re.search(pattern, _string)
if match != None:
    print match.group("_string")
Run Code Online (Sandbox Code Playgroud)

我的尝试开始很好,但在第二个full_stop停了下来.

关于如何达到预期产量的任何想法?

python string

5
推荐指数
1
解决办法
427
查看次数

如何加快列表理解速度

以下是我的清单:

col = [['red', 'yellow', 'blue', 'red', 'green', 'yellow'],
       ['pink', 'orange', 'brown', 'pink', 'brown']
      ]
Run Code Online (Sandbox Code Playgroud)

我的目标是消除每个列表中出现一次的项目.

这是我的代码:

eliminate = [[w for w in c if c.count(w)>1]for c in col]

Output: [['red', 'red', 'yellow','yellow'], ['pink','pink', 'brown','brown']]
Run Code Online (Sandbox Code Playgroud)

该代码适用于小数据集,例如上面的列表,但是,我的数据集非常大.每个列表最多包含1000个项目.

有没有办法让上面的代码更快?比如将代码分解为两个或更多个for循环,因为我的理解是正常的for循环比列表理解更快.

有什么建议?谢谢.

python list-comprehension list python-2.7

3
推荐指数
2
解决办法
756
查看次数

如何将列表转换为python中的列表列表

这是一个列表示例,我想将其转换为python中的列表列表:

P = [1,2,3,4]

我写了以下代码来解决这个问题:

u=[]
v=[x for x in p]
u.append(v)
Run Code Online (Sandbox Code Playgroud)

我的结果: [[1,2,3,4]]

Result I would like to have: **[[1],[2],[3],[4]]**
Run Code Online (Sandbox Code Playgroud)

有什么建议?谢谢.

python

0
推荐指数
1
解决办法
101
查看次数

快速排序嵌套列表的方法

我有一个如下所示的列表:

N_y=[[[1,2,3],[4,5,3],[2,5,8]]]
Run Code Online (Sandbox Code Playgroud)

如何分解N_y为一个项目列表,即:

预期产量: [[1,2,3],[4,5,3],[2,5,8]]

我的尝试:

j=str(N_y)[1:-1]
print j
Run Code Online (Sandbox Code Playgroud)

产量 "[[1,2,3],[4,5,3],[2,5,8]]"

现在的问题是,j作为一种刺痛.除了输出字符串之外,还有一种快速排除方法吗?

有什么建议?谢谢.

python

0
推荐指数
1
解决办法
676
查看次数

对元组(python)中不同参数的多次迭代

我编写了以下代码,迭代元组中的多个扩充.

def div (*tup):
    return [x/10 for x in tup]

>>> print div(100,50,30)
[10, 5, 3]
Run Code Online (Sandbox Code Playgroud)

我希望我的输出在列表中显示为三个单独的列表:

[[10], [5], [3]]
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

python

0
推荐指数
1
解决办法
45
查看次数