我有一个公司名称列表,其中一些有缩写。例如:
compNames = ['Costa Limited', 'D B M LTD']
我需要使用以下内容将文本的compNames转换为令牌计数矩阵。但是,这不会在B D M
D B M LTD
的列
count_vect = CountVectorizer(analyzer='word')
count_vect.fit_transform(compNames).toarray()
连接文本中单个字符的最佳方法是什么?
ex: 'D B M LTD' to 'DBM LTD'
答案 0 :(得分:1)
import re
string = 'D B M LTD'
print re.sub("([^ ]) ", r"\1", re.sub(" ([^ ]{2,})", r" \1", string))
尴尬,但应该有效。它在LTD前面引入了一个额外的空间,然后取代了" D"与" D"," B"用" B"等等。
答案 1 :(得分:1)
这是一个简短的函数,它将空格字符上的字符串分解为列表,迭代列表,如果元素的长度为1,则构建临时字符串,当长度更大的元素时,将临时字符串附加到新列表而不是一个遭遇。
import re
a = 'D B M LTD'
def single_concat(s):
out = []
tmp = ''
for x in re.split(r'\s+', s):
if len(x) == 1:
tmp += x
else:
if tmp:
out.append(tmp)
out.append(x)
tmp = ''
return ' '.join(out)
single_concat(a)
# returns:
'DBM LTD'
答案 2 :(得分:0)
import re
s = "D B M LTD"
first_part = ''
for chunk in re.compile("([A-Z]{1})\s").split(s):
if len(chunk) == 1:
first_part += chunk
elif len(chunk) > 1:
last_part = chunk
print(first_part + " " + last_part)
打印DBM LTD
。
答案 3 :(得分:0)
import re
string = 'D B M LTD'
print re.sub(r"\+", r"", re.sub(r"\+(\w\B)", r" \1", re.sub(r"(\b\w) ", r"\1+", string)))
假设字符串中没有+字符,我使用+字符作为临时字符。如果有,请使用其他一些不会发生的事情。
答案 4 :(得分:0)
看,没有re
:
def mingle(s):
""" SO: 49692941 """
l = s.split()
r = []
t = []
for e in l:
if len(e) == 1:
t.append(e)
else:
j = "".join(t)
r.append( j )
r.append( e )
t = []
return " ".join(r)
print( mingle('D B M LTD') )
打印
DBM LTD