제목에서 알 수 있듯이 stopWords = ["the", "and", "with", etc...]
처럼 단어 목록을 가지고 있으며 "여우와 강아지를 죽여라"와 같은 텍스트가 전송됩니다. 나는 "여우를 죽여라"같은 결과물을 매우 효율적이고 빠르게 원합니다. 나는이 작업을 수행 할 수있는 방법단어 목록이있는 경우 목록에 단어가 포함되어 있지 않고 효율적으로 문자열에 단어가 포함되어 있는지 확인하려면 어떻게해야합니까?
답변
가장 중요한 대화 개선이 으로 설정하면 stopWords는 set
이됩니다. 이것은 당신이 바로 중지 단어 중 하나가
if any(word in stopWords for word in msg.split()):
...
이 list comprehension 사용 (내가 루프를 사용하여 반복 할 수 알지만, 매우 효율적이지 먹으 렴) :
stopWords = ["the", "and", "with"]
msg = "kill the fox and the dog"
' '.join([w for w in msg.split() if w not in stopWords])
을 제공합니다
이'kill fox dog'
'가 각각 확인하기 위해 목록을 반복해야하기 때문에 중지 단어가 길어지면하지 stopWords'에서 승 것은 느린 얻을 것이다. 이런 이유로 stopWords를 설정하는 것이 중요합니다. –
@gnibbler 좋습니다. 감사합니다. 새로운 것을 배울 수있어서 항상 행복합니다 (나는 거의 세트를 사용하지 않습니다) – Levon
- 사전에 단어의 원래 목록을 넣어 텍스트에있는 경우 알고 싶은 경우 조회가
stopWords = set(["the", "and", "with", etc...]) " ".join(word for word in msg.split() if word not in stopWords)
매우 빠르게 될 것을 의미합니다.
- 단어의 구분 기호로 공백을 사용하여 주어진 문자열의 문자를 반복합니다. 사전에서 각 단어를 찾으십시오.
가장 빠른 작업은 "stopwords"를 목록 대신 설정하고 "x in stopwords"가있는 구성원을 직접 확인하는 것입니다. 이 구조는 이러한 종류의 작업을 위해 빠르게 설계되었습니다.
는 (다른 사람이 제안 같은) set()
에 중지 단어를 가지고에 다른 단어를 축적 당시로서는 단순히이 모두와 함께 작업 집합을 가지고 working = working - stopWords
를 ... 사용하여 차이 집합을 설정 작업 stopWords가 필터링되었습니다. 또는 단지 그러한 단어의 존재를 확인하기 위해 조건부를 사용하십시오. 예를 들어 :
#!python
stopWords = set('the a an and'.split())
working = set('this is a test of the one working set dude'.split())
if working == working - stopWords:
print "The working set contains no stop words"
else:
print "Actually, it does"
실제로 사용할 수있는 이러한 trie 등보다 효율적인 데이터 구조가 있습니다 정지 단어의 집합, 상대적으로 밀도가 큰. 바이너리 (C) 확장자로 쓰여진 것을 볼 수는 없지만 순수 파이썬에서 구현 된 trie와 파이썬의 set()
지원을 사용하는 크로스 오버 포인트가 어디인지 궁금합니다. (그래도 Cython의 좋은 경우 일 수 있습니다.)
실제로 누군가가이 질문을 여기에서 따로 따로 처리했다고 생각합니다. SO: How do I create a fixed length mutable array of python objects in cython.
궁극적으로 간단한 세트 기반 버전을 만들어 테스트하고 프로파일 링 한 다음, 필요할 경우 trie 및 Cython-trie 변형을 가능한 개선 사항으로 시도해야합니다.
대신 정규식에서 목록을 조합하고 주변 단어와 함께 하나의 공백으로 단어를 대체 할 수 있습니다.
import re
stopWords = ["the", "and", "with"]
input = "Kill the fox and dog"
pattern = "\\s{:s}\\s".format("\\s|\\s".join(stopWords))
print(pattern)
print(re.sub(pattern, " ", input))
출력됩니다
\sthe\s|\sand\s|\swith\s
Kill fox dog
- 1. PocketSphinx가 말한 문자열에 단어가 포함되어 있는지 인식합니까?
- 2. 문자열에 PHP에 단어가 포함되어 있는지 테스트 하시겠습니까?
- 3. JS - 배열 위치는 단어가 포함되어 있는지 확인하고
- 4. Linq : 열을 검색하여 단어 목록의 단어가 포함되어 있는지 확인하려는 경우
- 5. 페이지에 특정 단어가 포함되어 있는지 확인하십시오.
- 6. PHP 정규식 - 문자열에 단어가 있지만 다른 단어가 포함되어 있지 않은지 확인합니다.
- 7. Ruby 정규식에 "단어가 포함되어 있습니다."
- 8. 문자열에 사전 파일의 단어가 포함되어 있는지 확인하는 빠른 방법은 무엇입니까?
- 9. 링크 문자열에 단어가 포함되어 있는지 확인하는 방법은 무엇입니까? (PHP)
- 10. db에서 단어가 전송 된 문자열에 포함되어 있는지 확인하는 방법
- 11. 문자열에 배열의 모든 단어가 포함되어 있는지 확인하는 방법?
- 12. 비밀번호에 사전 단어가 포함되어 있는지 확인
- 13. 입력 한 문자열에 내 목록에 무언가가 포함되어 있는지 확인하십시오.
- 14. 문자열에 단어가 있지만 특정 위치에만 있는지 확인하십시오.
- 15. C# 문자열에 단어가 있는지 확인하십시오.
- 16. jquery url에 단어가 포함되어 있는지 확인하는 방법은 무엇입니까?
- 17. 변수에 특정 텍스트가 포함되어 있는지 확인하려면 어떻게해야합니까?
- 18. Java Regex를 사용하여 문자열에 세트의 단어가 포함되어 있는지 확인하는 방법은 무엇입니까?
- 19. 문자열에 적어도 2 단어가 있는지 찾으려고 시도합니다.
- 20. NSString에 단어가 있는지 확인
- 21. 목록에 문자열이 포함되어 있는지 확인하십시오.
- 22. 문자열에 날짜가 포함되어 있는지 확인
- 23. 문자열에 숫자가 포함되어 있는지 확인
- 24. 목록에 다른 목록이 포함되어 있는지 확인
- 25. 단어가 데이터베이스에 있는지 확인
- 26. 목록에 특정 유형의 개체가 포함되어 있는지 확인하려면 어떻게합니까? C#
- 27. 지도가 필요하지만 포함되어 있는지 알아야하나요?
- 28. 문자열에 대한 정규식이 포함되어 있습니까?
- 29. 문자열에 배열의 단어 집합 중 하나가 포함되어 있는지 확인하십시오.
- 30. 한 문자열에 다른 문자열이 포함되어 있는지 확인
정규 표현식을 만드는 것보다 더 효율적입니까? – mlt
@ mlt, 그렇지 않을 수도 있습니다. 이 일과는 너무 다르게 추측하기가 어렵습니다. 정규 표현식을 사용하여 답을 써야합니다. –