gpt4 book ai didi

python - 如何将带分隔符的字符串拆分成一个集合?

转载 作者:太空宇宙 更新时间:2023-11-03 14:01:25 26 4
gpt4 key购买 nike

我想将文件中的单词读入这样的集合中:

# Text file
bill
beep-boop
wow
apostrophe'

然后当我打印

>>> print(mySet)
{'bill', 'beep', 'boop', 'wow', 'apostrophe'}

所以我也不想要任何前导或结束撇号,但是如何使用 split() 函数使用多个分隔符?我只有这个:

mySet = set((stdin.read().split()))

最佳答案

与其关注定界符,不如关注单词/标记的构成。从您的评论中,

  • A word is one or more case insensitive characters. The characters can be all letters of the English language and or a single-quote/apostrophe. No decimal digits. No leading or ending apostrophes.

  • 'Some99' would not be considered a word and should not be put into the set. Same goes for 'w3rd'.

  • If there are 2 words 'He' & 'he'--I only want the lowercase version.

这是一个封装它的分词器:

import re

regex = re.compile(r'\b[A-Za-z\'"]+\b', flags=re.U)

示例文本文件:

bill
beep-boop
wow
apostrophe'
a
bb
a?c?d?
abcd-abcd?
J'aime
I'm
He said, "Yep"
Some99\words\here\\
One more w3rd

可以读作:

with open('textfile.txt', 'r') as f:
text = set(word.lower() for word in regex.findall(f.read()))

text
# {'d', 'a', 'said', 'abcd', 'apostrophe', 'beep', 'bb', 'c', 'more', 'he', 'words', "i'm", 'yep', 'bill', "j'aime", 'one', 'wow', 'here', 'boop'}

这类似于某些机器学习算法用于将文本文档转换为标记计数矩阵的正则表达式。 scikit-learn 的 CountVectorizer使用 token_pattern='(?u)\b\w\w+\b',它将单词定义为具有两个或更多字母。

要从命令行运行它,请创建一个名为 tokenizer.py 的脚本:

# tokenizer.py

import re
import sys

regex = re.compile(r'\b[A-Za-z\'"]+\b', flags=re.U)


if __name__ == '__main__':
file = sys.argv[1]
with open(file, 'r') as f:
text = set([word.lower() for word in regex.findall(f.read())])
print(text)

然后你可以像这样从命令行运行它:

 $ python3 tokenizer.py textfile.txt

您可以试验一下 here .

关于python - 如何将带分隔符的字符串拆分成一个集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48759223/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com