假设有以下代码:
for data in soup.findAll('div',{'class':'value'}):
print(data)
Run Code Online (Sandbox Code Playgroud)
给出以下输出:
<div class="value">
<p class="name">Michael Jordan</p>
</div>
<div class="value">
<p class="team">Real Madrid</p>
</div>
<div class="value">
<p class="Sport">Ping Pong</p>
</div>
Run Code Online (Sandbox Code Playgroud)
我想创建以下字典:
Person = {'name': 'Michael Jordan', 'team': 'Real Madrid', 'Sport': 'Ping Pong'}
Run Code Online (Sandbox Code Playgroud)
我可以使用文本获取文本,data.text但如何获取文本class以命名keys字典(人 [key1],Person[key2] ...)?
我有以下列表:
x=['a','3','4','b','1','2','c','4','5']
Run Code Online (Sandbox Code Playgroud)
我怎样才能制作以下字典:
b = {'a':[3,4],'b':[1,2],'c':[4,5]}
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
Category = defaultdict(int)
for i in a:
if Varius.is_number(i)==False:
Category[i]=[]
keys.append(i)
else:
Category[keys(i)] = i
Run Code Online (Sandbox Code Playgroud)
密钥是在我有问题插入值后创建的.(is_number是一个检查列表值是数字还是字符串的函数).第一天离开MATLAB.第一天在Python中..
下图显示了在R中导入数据(记事本)之前和导入之后数据的状态。
我使用以下命令将其导入R:
Data <- read.csv('data.csv',stringsAsFactors = FALSE,header = TRUE,quote = "")
Run Code Online (Sandbox Code Playgroud)
可以看出,诸如ae之类的特殊字符已被替换为A |之类的东西。(第19行位于左侧,第18行位于右侧)。有没有办法按原样导入CSV文件?(使用R)
是否有任何字符串距离算法没有考虑到单词的顺序?
以下算法未提供所需结果(在该示例中,所需结果应为1):
import jaro
jaro.jaro_winkler_metric(u'Michael Jordan',u'Jordan Michael')
>>>0.47
import Levenshtein
Levenshtein.ratio('Michael Jordan', 'Jordan Michael')
>>>0.5
from difflib import SequenceMatcher
SequenceMatcher(None, 'Michael Jordan', 'Jordan Michael').ratio()
>>>0.5
Run Code Online (Sandbox Code Playgroud)
制作它的一种方法是按字母顺序排列字符串,然后使用上述算法:
''.join(sorted('Michael Jordan'))
>>>' JMaacdehilnor'
''.join(sorted('Jordan Michael'))
>>>' JMaacdehilnor'
Run Code Online (Sandbox Code Playgroud)
但是这里姓名和姓氏的信息丢失了,不会有"稳定"的结果.
我创建了一个使用permutationsfrom 的函数,itertools它接受所有可能的单词编译并比较字符串并输出最大值.结果令人满意,但是当我必须比较数百万个名字时,整个程序真的很慢.
可以做的其他事情是对单词进行排序,例如:
' '.join(sorted('Michael Jordan'.split()))
>>>'Jordan Michael'
' '.join(sorted('Jordan Michael'.split()))
>>>'Jordan Michael'
Run Code Online (Sandbox Code Playgroud)
似乎很好的方式和简单的方法来减少计算,但我们放松了一些敏感的情况.例:
name1 = ' '.join(sorted('Bizen Dim'.split()))
>>>'Bizen Dim'
name2 = ' '.join(sorted('Dim Mpizen'.split()))
>>>'Dim Mpizen'
SequenceMatcher(None, name1, name2).ratio()
>>> 0.55
Run Code Online (Sandbox Code Playgroud)
这两个名字是相同的,有些人将'他们的名字'从'b'翻译成'mp'(我就是其中之一).用这种方式我们就失去了这个'匹配'.
是否有任何字符串距离算法比较单词而不考虑单词的顺序?或者是否有建议如何有效地实现所需的功能?
假设我有以下数据帧:
dummy_data = [('a',1),('b',25),('c',3),('d',8),('e',1)]
df = sc.parallelize(dummy_data).toDF(['letter','number'])
Run Code Online (Sandbox Code Playgroud)
我想创建以下数据帧:
[('a',0),('b',2),('c',1),('d',3),('e',0)]
Run Code Online (Sandbox Code Playgroud)
我所做的是将其转换为rdd使用zipWithIndex函数并在加入结果后:
convertDF = (df.select('number')
.distinct()
.rdd
.zipWithIndex()
.map(lambda x:(x[0].number,x[1]))
.toDF(['old','new']))
finalDF = (df
.join(convertDF,df.number == convertDF.old)
.select(df.letter,convertDF.new))
Run Code Online (Sandbox Code Playgroud)
是否存在与zipWIthIndex数据帧类似的功能?还有另一种更有效的方法来完成这项任务吗?
我正在尝试使用stanford-nlp库训练NER模型.我有一个所需格式的文件,大小为6GB.配置文件:
usePrevSequences=true
useClassFeature=true
useTypeSeqs2=true
useSequences=true
wordShape=chris2useLC
useTypeySequences=true
useDisjunctive=true
noMidNGrams=true
serializeTo=ner-model50.ser.gz
maxNGramLeng=6
useNGrams=true
usePrev=true
useNext=true
maxLeft=1
trainFile=trainData
map=word=0,answer=1
useWord=true
useTypeSeqs=true
Run Code Online (Sandbox Code Playgroud)
每个句子都按照文档中的建议用空行拆分.所以当我运行命令时mx25g:
java -mx25g -cp stanford-ner.jar edu.stanford.nlp.ie.crf.CRFClassifier -prop config.prop
Run Code Online (Sandbox Code Playgroud)
我收到了错误:
线程"main"中的异常java.lang.OutOfMemoryError:Java堆空间
在库的FAQ页面中,建议在发生内存错误时将文件拆分为多个文件.
为此,您需要使用trainFileList选项而不是trainFile选项来更改配置文件.现在我有多个文件,每个文件大约250MB.运行相同的命令时出现以下错误:
线程"main"中的异常java.lang.OutOfMemoryError:超出了GC开销限制
因此,分割文件似乎没有帮助.你认为拆分甚至更小的文件会有帮助吗?或者无关紧要?有什么办法可以绕过这个问题吗?任何见解都很有用.提前致谢.
我正在尝试使用Keras API实现翘曲损失(成对排名函数的类型)。我有点卡住了如何成功。
经损失的定义取自lightFM文档:
对于给定的(用户,正项对),从所有剩余项中随机抽取一个负项。计算两个项目的预测;如果阴性项目的预测超过阳性项目的预测加上边距,请执行梯度更新以将阳性项目的排名提高到阴性项目的排名降低。如果没有等级违规,则继续对否定项进行采样,直到找到违规为止。
扭曲函数用于例如#hashtags的语义嵌入中,该标签是facebook AI研究发表的论文。在本文中,他们尝试为短文本预测最具代表性的主题标签。在哪里'user'被认为是短文本,'positive item'是短文本的主题标签,并且negative items是从“主题标签查找”中统一采样的一些随机主题标签。
我正在遵循另一种三重态损失的含义来创建变形:github
我的理解是,对于每个数据点,我将有3个输入。嵌入示例(“ semi”伪代码):
sequence_input = Input(shape=(100, ), dtype='int32') # 100 features per data point
positive_example = Input(shape=(1, ), dtype='int32', name="positive") # the one positive example
negative_examples = Input(shape=(1000,), dtype='int32', name="random_negative_examples") # 1000 random negative examples.
#map data points to already created embeddings
embedded_seq_input = embedded_layer(sequence_input)
embedded_positive = embedded_layer(positive_example)
embedded_negatives = embedded_layer(negative_examples)
conv1 = Convolution1D(...)(embeddded_seq_input)
.
.
.
z = …Run Code Online (Sandbox Code Playgroud) 我想创建一个虚拟变量的向量(只能采用O或1).我正在做以下事情:
data = ['one','two','three','four','six']
variables = ['two','five','ten']
Run Code Online (Sandbox Code Playgroud)
我有以下两种方式:
dummy=[]
for variable in variables:
if variable in data:
dummy.append(1)
else:
dummy.append(0)
Run Code Online (Sandbox Code Playgroud)
或列表理解:
dummy = [1 if variable in data else 0 for variable in variables]
Run Code Online (Sandbox Code Playgroud)
结果还可以:
>>> [1,0,0]
Run Code Online (Sandbox Code Playgroud)
是否有更快的功能构建功能?如果变量是数千,它有点慢.
编辑:结果使用time.time():我使用以下数据:
data = ['one','two','three','four','six']*100
variables = ['two','five','ten']*100000
Run Code Online (Sandbox Code Playgroud)
假设我有以下RDD:
rdd = sc.parallelize([('a', (5,1)), ('d', (8,2)), ('2', (6,3)), ('a', (8,2)), ('d', (9,6)), ('b', (3,4)),('c', (8,3))])
Run Code Online (Sandbox Code Playgroud)
如何使用repartitionAndSortWithinPartitionsx [0]和x [1] [0]后排序.使用以下内容我只按键(x [0])排序:
Npartitions = sc.defaultParallelism
rdd2 = rdd.repartitionAndSortWithinPartitions(2, lambda x: hash(x) % Npartitions, 2)
Run Code Online (Sandbox Code Playgroud)
这样做的方法如下,但我认为应该更简单:
Npartitions = sc.defaultParallelism
partitioned_data = rdd
.partitionBy(2)
.map(lambda x:(x[0],x[1][0],x[1][1]))
.toDF(['letter','number2','number3'])
.sortWithinPartitions(['letter','number2'],ascending=False)
.map(lambda x:(x.letter,(x.number2,x.number3)))
>>> partitioned_data.glom().collect()
[[],
[(u'd', (9, 6)), (u'd', (8, 2))],
[(u'c', (8, 3)), (u'c', (6, 3))],
[(u'b', (3, 4))],
[(u'a', (8, 2)), (u'a', (5, 1))]
Run Code Online (Sandbox Code Playgroud)
可以看出,我必须将其转换为Dataframe才能使用sortWithinPartitions.还有另外一种方法吗?用repartitionAndSortWIthinPartitions?
(数据不是全局排序并不重要.我只关心在分区内进行排序.)
假设我在一个分支上test-a,我从其中创建了两个新分支,a并对每个分支进行了一些单独的提交(对每个分支中的不同文件):
#in branch test-a
$git checkout test-a
#creating branch test-b and push a commit
$git checkout -b test-b
$git commit -a -m "initial commit in test-b"
$git push
#creating branch test-b and push a commit
$git checkout test-a
$git checkout -b test-c
$git commit -a -m "initial commit in test-c"
$git push
Run Code Online (Sandbox Code Playgroud)
现在,我怎么能合并test-b使用test-c的一个分支,无论是test-b或test-c或在一个新的分支merged-b-c的分支?(未与 合并test-a)
merge在我的情况下,这是命令的用法?:
$git checkout test-b
$git merge test-c
Run Code Online (Sandbox Code Playgroud) python ×7
apache-spark ×2
pyspark ×2
csv ×1
dictionary ×1
git ×1
keras ×1
list ×1
merge ×1
r ×1
stanford-nlp ×1
string ×1