连接文本中的单个字符

Concatenate the single characters in texts

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

compNames = ['Costa Limited', 'D B M LTD']

我需要使用以下方法将文本的 compNames 转换为标记计数矩阵。但这不会在 D B M LTD

中输出 B D M 的列
count_vect = CountVectorizer(analyzer='word')
count_vect.fit_transform(compNames).toarray()

连接文本中单个字符的最佳方法是什么?

ex: 'D B M LTD' to 'DBM LTD'
import re
string = 'D B M LTD'
print re.sub("([^ ]) ", r"", re.sub(" ([^ ]{2,})", r"  ", string))

笨拙,但应该可以。它在LTD前面引入了一个额外的space,然后将"D "替换为"D",将"B "替换为"B"等等。

这是一个简短的函数,它将白色 space 字符的字符串分解为列表,迭代列表,如果元素的长度为 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'
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.

import re
string = 'D B M LTD'
print re.sub(r"\+", r"", re.sub(r"\+(\w\B)", r" ", re.sub(r"(\b\w) ", r"+", 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