我想确定一个字符串是否是问题。如何分析“?”符号(python)
这是一个问题:
"Where is the car?"
这不是一个问题:
"Check this out: http://domain.com/?q=test"
我该如何写一个函数来分析一个字符串,以确定它确实是一个问题,而不是网址的一部分呢?
6 个回答
2
基本上,其他人说的没错。在问号前面不应该有空格。不过,如果问题是用户输入的,那就有点复杂了。
在这种情况下,使用一种合适的解析器,按照无上下文语法来处理,可能会得到更好的结果。即使是那些没有问号结尾的问题,也能处理得不错。但它可能无法识别所有的问题。要覆盖所有可能的结构变化、词形变化等等,并不是一件简单的事。
不过,如果你确定所有的问题总是以问号结尾,你可以做一些简单的事情,比如:
if question_text.strip().endswith("?"):
print `question_text`, "is a question"
或者:
import re
p = re.compile( r"\w+\?\s*" )
if p.search( question_text ):
print `question_text`, "contains a question"
虽然没有测试过,但应该适用于大多数情况。
3
这个正则表达式可以找到紧跟在一个字母或数字后面的问号,并且这个问号后面要么是空格,要么是字符串或行的结尾。虽然不是完美的,但大部分情况都能处理到...
\w\?[$\s]
补充一下(缺少咖啡的影响...):
其实应该是:
\w\?(\s|$)
在最开始的版本中,$被当作一个普通字符来处理。(谢谢Gumbo)
3
如果问号总是存在的话,你可以像这样检查:
if question.strip().endswith("?") and "://" not in question:
# do something ?
如果你真的想分析完整的句子,可能需要用到nltk这个工具,我对这种情况不太确定。
补充一下,这只是一个示例,如果文本是固定的,没人能用正则表达式解析真正的英语语法。