使用NLTK / Python3对未分割的工作进行标记

时间:2017-10-05 04:28:30

标签: regex python-3.x nltk

我有未分割的字词,例如PageMetadataServiceConsumerPowerSellerUpdateConsumerApplicationMetaDataDomain等。这些字词没有任何标点符号或动词。但是当我们看到这个词时,我们知道它们是由什么构成的。

有没有办法将PowerSellerUpdateConsumerApplication分成PowerSellerUpdateConsumerApplication使用 nltk < /强>

2 个答案:

答案 0 :(得分:1)

您可以尝试以下方法:

这个想法是在大写字符的左边添加一个拆分器字符串(在下面的字符串中是###)......如果你认为###可能显示为一个字符串,那么你可以使用〜!@ * @&amp; $ @#等任何东西!或者你认为100%安全的东西根本不会出现在字符串中。

Run Here

import re

regex = r"([A-Z]+)"
test_str = "agePowerSellerUpdateConsumerApplicationMetaDataDomainageMetadataServiceConsumerBBc"
subst = "###\\1"
result = re.sub(regex, subst, test_str, 0)

if result:
  print(re.split("###", result))

答案 1 :(得分:0)

import re
s='PageMetadataServiceConsumer, PowerSellerUpdateConsumerApplication, MetaDataDomain'
reg=r'[A-Z](?![a-z]*\b)[a-z]+'
a=re.sub(reg,'\g<0> ',s)
print(a)

<强>输出

Page Metadata Service Consumer, Power Seller Update Consumer Application, Meta Data Domain

<强>解释

[A-Z]        #First char with capital letter
(?!          #START Negative Look ahead: Do not match if the first char is followed by this
[a-z]*\b    #do not match if it ends with a word boundary \b(last part)
)            #END Negative Look ahead
[a-z]+      #Select all the remaining lower case chars.


a=re.sub(reg,'\g<0> ',s) #Replace the matches with match \g<0> by appending a space to it.

工作正则表达式here。 使用python示例here

如果您只是想要这些词,请使用以下内容: -

reg=r'[A-Z]+[a-z]+'
for a in re.findall(reg,s):
  print(a)

<强>输出

Page
Metadata
Service
Consumer
Power
Seller
Update
Consumer
Application
Meta
Data
Domain