2016-10-13 1 views
1

이것은 일반적인 출력입니다. enter image description here구두점을 단어와 구별하면서 토큰 화에 사용할 정규식은 무엇입니까?

원하는 것은 도메인 이름을 단일 토큰으로 유지하는 것입니다. 예 : "https://www.twitter.com"은 단일 토큰으로 남아 있어야합니다.

내 코드 :

import nltk 
from nltk.tokenize.regexp import RegexpTokenizer 

line="My website: http://www.cartoon.com is not accessible." 
pattern = r'^(((([A-Za-z0-9]+){1,63}\.)|(([A-Za-z0-9]+(\-)+[A-Za-z0-9]+){1,63}\.))+){1,255}$' 
tokeniser=RegexpTokenizer(pattern) 

print (tokeniser.tokenize(line)) 

출력 : 내가 잘못

[] 

을 뭐하는 거지? 도메인 이름에 대한 더 나은 정규식?

편집 : 위의 예와 같이 특수 문자는 별도의 토큰으로 남아 있어야하며 토큰 화는 분리해야합니다 ('웹 사이트', ':').

+0

[this] (https://regex101.com/)에서 사용하려고 시도했지만 어느 정도 작동하는지 잘 모르겠습니다. – Grimlock

+1

'tokeniser = RegexpTokenizer (r '\ S +')'만 공백이 아닌 청크를 잡는 것만으로 충분합니다. –

+0

@ WiktorStribiżew, 그건 좋은거야! 특수 문자를 토큰으로 분리해야합니다. 예 : ('accessible', '.') – Grimlock

답변

2

당신은 사용할 수 있습니다

tokeniser=RegexpTokenizer(r'\b(?:http|ftp)s?://\S*\w|\w+|[^\w\s]+') 

regex demo

세부 :

  • \b - 프로토콜, http/https, ftp/ftps
  • - 단어 경계를 선도
  • (?:http|ftp)s?:// (전 비 단어 문자를 ...이 있어야합니다) \S* - 0 개 이상의 공백 기호
  • \w - 단어 char (= letter/digit/_)
  • | - 또는
  • \w+ - 1 개 이상의 단어 문자
  • | - 또는
  • [^\w\s]+ - 1 또는 공백을 제외 이상의 비 단어 문자.
0

는 '표준'도메인 정규식

import re 
line="My website: http://www.cartoon.com is not accessible." 
print(re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[[email protected]&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', line)) 

반환합니다 : [ 'http://www.cartoon.com']

또한 도메인 이름과 같은 99 % 작동을

+0

마지막으로 16 진수 조각이란 무엇입니까? –

관련 문제