【问题标题】:parsing words from symbols on a list in python从python列表中的符号解析单词
【发布时间】:2013-01-24 09:14:01
【问题描述】:

我必须从单词数据集中训练语言模型。为此,我只需要在一列中排列所有文本,因为这是模型工作的唯一方式。到目前为止,我可以根据需要使用 Python 将文档分成一列,而不会出现任何问题。

例如: 原始文件

佐默,1951
De wereld bestond uit het wazige blauw van een wolkenloze zomerhemel, het goudgroen van koel, gerruststellend naaldbos en het lijnrechte wit van de betonnen weg, die nieuw was, hij stond nog op geen enkele kaart。

按要求提供文件

Zomer, 
1951.
De 
wereld  
bestond 
uit  
het  
wazige 
blauw  
van  
een 
wolkenloze   
zomerhemel, 
het            
goudgroen 
van  
koel, 
geruststellend  
naaldbos 
en   
het      
lijnrechte     
wit   
van  
de    
betonnen    
weg,  
die 
nieuw    
was,  
hij  
stond   
nog   
op      
geen  
enkele  
kaart.

当我尝试将符号(逗号、冒号、分号等)放入新行并在每个句号 (.) 后包含一个额外的空格时,问题就开始了 例如:

Zomer
, 
1951
. 

De 
wereld

我还没有找到合适的方法。到目前为止,我已经尝试了使用 .split().find() 等函数的不同方法,但没有任何积极的结果。打开文件后:

 fileHandle = open("C:\Language Model\Corpora\Computing Clients 3.txt",'r')

我尝试了循环和条件,但没有任何效果。而到现在为止得到的所有结果都是:

 AttributeError: 'list' object has no attribute 'find'

我知道我可能遗漏了一些东西,这就是为什么我请求您提供宝贵的帮助,因为这些文件非常庞大,而且知道 Python 可以为我完成手动操作是没有用的。

【问题讨论】:

  • 请显示您尝试过的“循环和条件”
  • 如果没有相关代码,您认为有人会如何提供帮助?
  • 我很确定 nltk 有一个方法

标签: python list parsing symbols words


【解决方案1】:

如果你的文件名是paragraph.txt那么

f = open('paragraph.txt', 'r')

单词 = []

lines = f.readlines()

换行:

   words.extend(line.split())

以上行列出所有单词

这些是要删除的。和,从那些话

for i in range(len(words)):

    words[i] = words[i].replace('.' ,'')

    words[i] = words[i].replace(',' ,'')

    #here you can add a line to remove some other character

用于打印文字:

单词中的单词:

    print(word)

【讨论】:

  • @isedev:嗨,我发现了错误,我可以运行代码。谢谢。
  • 感谢您的信息,我实现了它来修改特殊字符。
【解决方案2】:

如果您确保标点符号与带有空格的文本分开,我认为您可以达到您想要的效果。正则表达式在任何非字母数字字符前加一个空格,因此它可以是 split 与任何前面的单词分开。

>>> import re
>>> text = "Zomer, 1951 De wereld bestond uit het wazige blauw van een wolkenloze zomerhemel, het goudgroen van koel, geruststellend naaldbos en het lijnrechte wit van de betonnen weg, die nieuw was, hij stond nog op geen enkele kaart."
>>> text2 = re.sub(r'([^a-zA-Z0-9-]+)',r' \1',text)
>>> text2
'Zomer , 1951  De  wereld  bestond  uit  het  wazige  blauw  van  een  wolkenloze  zomerhemel , het  goudgroen  van  koel , geruststellend  naaldbos  en  het  lijnrechte  wit  van  de  betonnen  weg , die  nieuw  was , hij  stond  nog  op  geen  enkele  kaart .'
>>> text2.split()
['Zomer',                                                                       
 ',',                                                                           
 '1951',                                                                        
 'De',                                                                          
 'wereld',
 'bestond',
 'uit',
 'het',
 'wazige',
 'blauw',
 'van',
 'een',
 'wolkenloze',
 'zomerhemel',
 ',',
 'het',
 'goudgroen',
 'van',
 'koel',
 ',',
 'geruststellend',
 'naaldbos',
 'en',
 'het',
 'lijnrechte',
 'wit',
 'van',
 'de',
 'betonnen',
 'weg',
 ',',
 'die',
 'nieuw',
 'was',
 ',',
 'hij',
 'stond',
 'nog',
 'op',
 'geen',
 'enkele',
 'kaart',
 '.']

【讨论】:

  • @fnokke and moter 我不是程序员,几天前我开始在这个领域工作,我才意识到保存你所做的一切是多么重要,但我没有尝试过.所以我最后得到的唯一代码就是用于拆分文档的代码,对不起。
  • 感谢您的回复。我遵循了您的代码,现在我试图理解错误消息: Traceback(最近一次调用最后一次):文件“C:/Users/Language Model/Corpora/answers.py”,第 9 行,在 text2 = re. sub(r'([^a-zA-Z0-9-]+)',r' \1',text) 文件“C:\Python27\lib\re.py”,第 151 行,在 sub return _compile( pattern, flags).sub(repl, string, count) TypeError: 预期的字符串或缓冲区。现在我正在检查所有这些的含义,如果我能解决它,我会告诉你。
猜你喜欢
  • 2013-06-10
  • 2017-07-11
  • 2021-12-23
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 2011-05-12
  • 2013-07-04
  • 1970-01-01
相关资源
最近更新 更多