连接文本中的单个字符

时间:2018-04-06 12:35:05

标签: python scikit-learn string-concatenation

我有一个公司名称列表,其中一些有缩写。例如:

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'

5 个答案:

答案 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