我编写了以下用于计算字符双字母的代码,输出就在下面.我的问题是,如何获得排除最后一个字符(即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]
提前感谢您的建议.
我的目标是计算以下文本文档之间的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的做法不对?非常感谢你的建议.
我很难使用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) 下面是我想要组合成一个嵌套列表的三个列表:
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)
期望的结果:与我得到的结果相同,但考虑到我的实际数据的大小,这种方法非常慢.
我的目标是在两个文本段落中提取对齐的匹配序列.接下来是我的文字:
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)
......扭曲的结果.
有关如何达到预期结果的任何建议?谢谢.
有没有办法修剪字符串以在特定点开始和结束?
这是一个例子:我希望字符串(文本)在第一个完全停止后立即开始,并在最后一个完整停止时结束.
_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停了下来.
关于如何达到预期产量的任何想法?
以下是我的清单:
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中的列表列表:
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)
有什么建议?谢谢.
我有一个如下所示的列表:
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
作为一种刺痛.除了输出字符串之外,还有一种快速排除方法吗?
有什么建议?谢谢.
我编写了以下代码,迭代元组中的多个扩充.
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)
谢谢你的帮助.