我有未分割的字词,例如PageMetadataServiceConsumer
,PowerSellerUpdateConsumerApplication
,MetaDataDomain
等。这些字词没有任何标点符号或动词。但是当我们看到这个词时,我们知道它们是由什么构成的。
有没有办法将PowerSellerUpdateConsumerApplication
分成Power
,Seller
,Update
,Consumer
,Application
使用 nltk < /强>
答案 0 :(得分:1)
您可以尝试以下方法:
这个想法是在大写字符的左边添加一个拆分器字符串(在下面的字符串中是###)......如果你认为###可能显示为一个字符串,那么你可以使用〜!@ * @&amp; $ @#等任何东西!或者你认为100%安全的东西根本不会出现在字符串中。
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.
如果您只是想要这些词,请使用以下内容: -
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