2016-03-02 92 views
0

我正在传递一个文本文件,我希望摆脱所有可能的忽略。 我使用下面的函数:我怎样才能摆脱撇号?

def apost(nostop): 
    for n in nostop: 
     final=[] 
     removed=[] 
     for y in n: 
      r=remove_apos(y) 
      final.append(r) 
     removed.append(final) 
    print("Task 2: Apostrophy removed!") 
    return removed 

而且remove_apos的这身:

def remove_apos(stemmed): 
    for suffix in ["'s", "'v", "'t", "'d", "'r", "'"]: 
     if stemmed.endswith(suffix): 
      return stemmed[:-len(suffix)] 
    return stemmed 

当我传递一个句子:football's awesome 它返回我football' 我无法摆脱的撇号。 此外,当我打印removed,我得到:[[u'football\u2019s']]

+0

这个问题更适合HT tp://codereview.stackexchange.com/ –

+1

@PeterGibson,不,它并不像预期的那样工作。请阅读[Stack Overflow用户代码评论指南](http://meta.codereview.stackexchange.com/questions/5777/a-guide-to-code-review-for-stack-overflow-users) – holroy

+0

@ holroy有趣感谢 –

回答

1

这真的很容易删除所有的撇号:

def remove_apos(nostop): 
    return "".join(char for char in nostop if char != "'") 

你也可以用while循环删除它们和str.remove()方法:

def remove_apos(nostop): 
    while "'" in nostop: 
     nostop = nostop.remove("'") 
    return nostop 
+0

我仍然收到足球 ' DEF apost(将对不停止): 米= [] 用于将对不停止X: 而以x “'”: x.remove( “'”) m.append( x) print(m) return m – minks

+1

@minks:您没有运行我提供的代码。你仍然在使用一个列表。 – zondo

+0

如果我不使用列表,它仍然不起作用。我认为这是编码错误。 – minks

3

您的问题似乎是,您正在比较一个ASCII撇号,但您的文本包含或还包含Unicode撇号。

普通的老撇号,U + 0027是你默认情况下会得到什么,当你点击['/“]美式键盘上的键没有击中转变。

‘正确的单引号’,U +2019是完全不同的东西,你可以从文字处理软件或者电子邮件程序中得到这些信息,这些程序试图自动将直引号转换为斜引号(例如,Word和Office Email都是在文本框中这样做的)。不自由报办公室文档中。)

你或许应该使用正则表达式来匹配所有这些可能的字符。

+0

我想这样做: 与codecs.open(sys.argv [1],'r','utf8')作为fil: 为线在fil: z = re.sub(“'”,“”, line) dataset.append(z.lower()。strip().split()) 但是,这似乎不起作用。我必须在'utf-8'中打开它,否则词干化和词形化不起作用 – minks

+0

您有正确的想法,但需要将正则撇号和U + 2019放入字符匹配中。或者直接用'取代U + 2019'并从那里出发。 ''re.sub(“[\ u2019'](?:[rv] e | [dst] |)\ b”,“”,line)' - 应该处理“Smiths”(所有格复数),“ “,”你是“,”他是“,”我们会“和”不“。 –

相关问题