Python 连接文本中的单个字符
我有一份公司名称的清单,其中有些有缩写。例:Python 连接文本中的单个字符,python,scikit-learn,string-concatenation,Python,Scikit Learn,String Concatenation,我有一份公司名称的清单,其中有些有缩写。例: compNames = ['Costa Limited', 'D B M LTD'] 我需要使用以下方法将文本的名称转换为令牌计数矩阵。但这不会在dbm有限公司中为bdm输出列 count_vect = CountVectorizer(analyzer='word') count_vect.fit_transform(compNames).toarray() 连接文本中单个字符的最佳方式是什么 ex: 'D B M LTD' to 'DBM LT
compNames = ['Costa Limited', 'D B M LTD']
我需要使用以下方法将文本的名称转换为令牌计数矩阵。但这不会在dbm有限公司中为bdm
输出列
count_vect = CountVectorizer(analyzer='word')
count_vect.fit_transform(compNames).toarray()
连接文本中单个字符的最佳方式是什么
ex: 'D B M LTD' to 'DBM LTD'
很尴尬,但应该有用。它在LTD前面引入了一个额外的空格,然后用“D”替换“D”,用“B”替换“B”,依此类推。这里有一个简短的函数,它将空白字符上的字符串拆分为一个列表,迭代列表,如果元素长度为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'
打印DBM有限公司
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)))
我使用+字符作为临时字符,假设字符串中没有+字符。如果有,请使用其他没有出现的方法。看,没有
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
我不明白决定是否连接的标准是什么。您如何决定将
D
、B
、M
连接到DBM
,但LTD
应保持分离。我的意思是,在这个具体的例子中,它可能在语义上很明显,但为了提出一个算法,需要有一个通用的标准,它将以所需的方式对所有输入工作…算法应该只连接单个字符(bdm
),而不是单词(LTD
)。对不起,我不知道你说的另一个节点是什么意思。我在这个列表中有数百万个公司名称,我需要将列表中每个公司名称中的单个字符连接在一起。这是我需要的一个通用标准。我认为任何单个字符(不在非空白旁边)都是有意义的。好吧,现在我明白了。你为什么说它“笨拙”?这似乎很有效。有缺点吗?一个bug:re.sub(([^]),r“\1”,re.sub(([^]{2,})”,r“\1”,“ffdjk g”)
->“ffdjkg”
@Shana因为它使用sub-twiceI,我认为你真的不需要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