有效地将字符串转换为 python 2.7 的 unicode
Effectively turning strings into unicode for python 2.7
我正在关注 LDA 上的教程并遇到问题,因为该教程是在 python 3 中制作的,而我在 2.7 中工作(turtorial 声称可以在两者中工作)。据我了解,我需要先将 python 2.x 中的字符串转换为 unicode,然后才能应用 token.isnumeric()
。由于我缺乏经验和知识,我不确定如何在下面的脚本中很好地做到这一点。有人有解决办法吗?
data_dir = 'nipstxt/'
yrs = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']
dirs = ['nips' + yr for yr in yrs]
docs = []
for yr_dir in dirs:
files = os.listdir(data_dir + yr_dir)
for filen in files:
# Note: ignoring characters that cause encoding errors.
with open(data_dir + yr_dir + '/' + filen) as fid:
txt = fid.read()
docs.append(txt)
tokenizer = RegexpTokenizer(r'\w+')
for idx in range(len(docs)):
docs[idx] = docs[idx].lower() # Convert to lowercase.
docs[idx] = tokenizer.tokenize(docs[idx]) # Split into words.
docs = [[token for token in doc if not token.isnumeric()] for doc in docs]
docs = [[token for token in doc if len(token) > 1] for doc in docs]
将字节字符串转换为 Unicode 字符串的通用方法是使用 decode
。如果您知道该字符串将仅包含 ASCII 字符(如数字那样),则不必指定参数,它将默认为 ascii
.
docs = [[token for token in doc if not token.decode().isnumeric()] for doc in docs]
如果字符串有可能包含非 ASCII 字符,您可以将这些字符替换为不计入数字的特殊字符。
docs = [[token for token in doc if not token.decode(errors='replace').isnumeric()] for doc in docs]
我正在关注 LDA 上的教程并遇到问题,因为该教程是在 python 3 中制作的,而我在 2.7 中工作(turtorial 声称可以在两者中工作)。据我了解,我需要先将 python 2.x 中的字符串转换为 unicode,然后才能应用 token.isnumeric()
。由于我缺乏经验和知识,我不确定如何在下面的脚本中很好地做到这一点。有人有解决办法吗?
data_dir = 'nipstxt/'
yrs = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']
dirs = ['nips' + yr for yr in yrs]
docs = []
for yr_dir in dirs:
files = os.listdir(data_dir + yr_dir)
for filen in files:
# Note: ignoring characters that cause encoding errors.
with open(data_dir + yr_dir + '/' + filen) as fid:
txt = fid.read()
docs.append(txt)
tokenizer = RegexpTokenizer(r'\w+')
for idx in range(len(docs)):
docs[idx] = docs[idx].lower() # Convert to lowercase.
docs[idx] = tokenizer.tokenize(docs[idx]) # Split into words.
docs = [[token for token in doc if not token.isnumeric()] for doc in docs]
docs = [[token for token in doc if len(token) > 1] for doc in docs]
将字节字符串转换为 Unicode 字符串的通用方法是使用 decode
。如果您知道该字符串将仅包含 ASCII 字符(如数字那样),则不必指定参数,它将默认为 ascii
.
docs = [[token for token in doc if not token.decode().isnumeric()] for doc in docs]
如果字符串有可能包含非 ASCII 字符,您可以将这些字符替换为不计入数字的特殊字符。
docs = [[token for token in doc if not token.decode(errors='replace').isnumeric()] for doc in docs]