Python 如何将带分隔符的字符串拆分为一个集合?
我想将文件中的单词读入如下集合:Python 如何将带分隔符的字符串拆分为一个集合?,python,regex,string,io,set,Python,Regex,String,Io,Set,我想将文件中的单词读入如下集合: # Text file bill beep-boop wow apostrophe' 然后当我打印的时候 >>> print(mySet) {'bill', 'beep', 'boop', 'wow', 'apostrophe'} 所以我也不想要任何前导或结尾的撇号,但是如何使用split()函数来设置多个分隔符呢?我所拥有的只是: mySet = set((stdin.read().split())) 您可以将重点放在单词/标记的构成上
# Text file
bill
beep-boop
wow
apostrophe'
然后当我打印的时候
>>> print(mySet)
{'bill', 'beep', 'boop', 'wow', 'apostrophe'}
所以我也不想要任何前导或结尾的撇号,但是如何使用split()
函数来设置多个分隔符呢?我所拥有的只是:
mySet = set((stdin.read().split()))
您可以将重点放在单词/标记的构成上,而不是放在分隔符上。从你的评论来看
- 单词是一个或多个不区分大小写的字符。字符可以是英语中的所有字母,也可以是单个引号/撇号。没有十进制数字。没有开头或结尾的撇号
- “Some99”不会被认为是一个词,也不应该放在集合中。“w3rd”也是如此
- 如果有两个词“他”和“他”——我只想要小写版本
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使用了token\u 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
你可以尝试一下。你到底有什么分隔符?@A单词是一个或多个不区分大小写的字符。字符可以是英语中的所有字母,也可以是单个引号/撇号。没有十进制数字。没有前导或结尾撇号你的正则表达式与“J'aime”和“I'm”不匹配。对不起,实际上这些应该是一个单词。例如,在
不
中,撇号属于项下,字符可以是所有英文字母和/或撇号。
只应删除开头和结尾的撇号。所以它应该在列表中:{'Some','Other','Words','Don'}
是的,如果文本文件中有两个单词:He
&He
我只想要小写版本@BradSolomon P.S.感谢大家的帮助:)@BradSolomonSome99
不会被认为是一个词,不应该放在mySet中。w3rd的情况也是如此,这是我最后一次更新。如果需要的话,你可以自己做一些研究。祝你好运