小编Mpi*_*ris的帖子

BeautifulSoup:获取类文本

假设有以下代码:

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] ...)?

python beautifulsoup

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

如何在循环内的字典中的键中添加值?

我有以下列表:

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中..

python dictionary list

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

在R中导入带有特殊字符的数据

下图显示了在R中导入数据(记事本)之前和导入之后数据的状态。

在此处输入图片说明

我使用以下命令将其导入R:

Data <- read.csv('data.csv',stringsAsFactors = FALSE,header = TRUE,quote = "")
Run Code Online (Sandbox Code Playgroud)

可以看出,诸如ae之类的特殊字符已被替换为A |之类的东西。(第19行位于左侧,第18行位于右侧)。有没有办法按原样导入CSV文件?(使用R)

csv r character-encoding special-characters

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

计算两个字符串之间距离的算法

是否有任何字符串距离算法没有考虑到单词的顺序?

以下算法未提供所需结果(在该示例中,所需结果应为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'(我就是其中之一).用这种方式我们就失去了这个'匹配'.

是否有任何字符串距离算法比较单词而不考虑单词的顺序?或者是否有建议如何有效地实现所需的功能?

python string levenshtein-distance

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

Spark:数据框中的zipwithindex equivelant

假设我有以下数据帧:

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数据帧类似的功能?还有另一种更有效的方法来完成这项任务吗?

python apache-spark pyspark spark-dataframe

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

训练NER模型避免内存错误

我正在尝试使用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开销限制

因此,分割文件似乎没有帮助.你认为拆分甚至更小的文件会有帮助吗?或者无关紧要?有什么办法可以绕过这个问题吗?任何见解都很有用.提前致谢.

stanford-nlp

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

Keras中WARP丢失的暗示

我正在尝试使用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)

python keras

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

在python中创建虚拟变量的有效方法

我想创建一个虚拟变量的向量(只能采用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)
  • 循环(来自我的例子):2.11秒
  • 列表理解:1.55秒
  • list comprehension(变量是set的类型):0.0004992 sec
  • 彼得的例子:0.0004999秒
  • 假的示例:0.000502秒

python

4
推荐指数
1
解决办法
1358
查看次数

Pyspark:使用具有多种Critiria的repartitionAndSortWithinPartitions

假设我有以下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

(数据不是全局排序并不重要.我只关心在分区内进行排序.)

python apache-spark pyspark

4
推荐指数
1
解决办法
3113
查看次数

在两个分支之一或新分支中合并 2 个分支

假设我在一个分支上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-btest-c或在一个新的分支merged-b-c的分支?(未与 合并test-a

merge在我的情况下,这是命令的用法?:

$git checkout test-b
$git merge test-c
Run Code Online (Sandbox Code Playgroud)

git merge

4
推荐指数
1
解决办法
6049
查看次数