문자열 목록 (원래 문자열의 순열)을 생성하는 프로그램 (C#)이 있습니다. 대부분의 문자열은 예상대로 원래 문자를 무작위로 그룹화합니다 (예 : etam, aemt, team). 목록에있는 하나의 문자열을 실제 영어 단어 인 프로그램 적으로 찾고 싶습니다. 조회하고 각 문자열을 비교하기 위해 시소러스/사전이 필요합니다. 어느 누구도 사용 가능한 리소스를 알고 있습니다. 임 VS2008 C#을 사용하여.문자열 목록과 사용 가능한 사전/동의어 사전 비교
답변
웹에서 단어의 목록을 다운로드 할 수 있습니다 (예를 들어 여기에 언급 된 파일 중 하나를 http://www.outpost9.com/files/WordLists.html)를 선택한 다음, 다음 빠른 작업을 수행합니다
// Read words from file.
string [] words = ReadFromFile();
Dictionary<String, List<String>> permuteDict = new Dictionary<String, List<String>>(StringComparer.OrdinalIgnoreCase);
foreach (String word in words) {
String sortedWord = new String(word.ToArray().Sort());
if (!permuteDict.ContainsKey(sortedWord)) {
permuteDict[sortedWord] = new List<String>();
}
permuteDict[sortedWord].Add(word);
}
// To do a lookup you can just use
String sortedWordToLook = new String(wordToLook.ToArray().Sort());
List<String> outWords;
if (permuteDict.TryGetValue(sortedWordToLook, out outWords)) {
foreach (String outWord in outWords) {
Console.WriteLine(outWord);
}
}
또한 위키 낱말 사전을 사용할 수 있습니다. MediaWiki API (Wikionary는 MediaWiki를 사용합니다)를 사용하면 기사 제목 목록을 쿼리 할 수 있습니다. 위키 백과 사전에서, 기사 제목은 (다른 것들 중에서) 사전의 단어 항목입니다. 유일한 어법은 외국어도 사전에 있기 때문에 때로는 "잘못된"일치를 얻을 수도 있습니다. 물론 인터넷 사용자도 필요합니다.
http://en.wiktionary.org/w/api.php?action=query&format=xml&titles=dog|god|ogd|odg|gdo
이 다음 XML 반환 : 여기에 쿼리 URL의 예입니다 http://en.wiktionary.org/w/api.php
: 당신의 API에 대한 도움과 정보를 얻을 수
C#에서<?xml version="1.0"?>
<api>
<query>
<pages>
<page ns="0" title="ogd" missing=""/>
<page ns="0" title="odg" missing=""/>
<page ns="0" title="gdo" missing=""/>
<page pageid="24" ns="0" title="dog"/>
<page pageid="5015" ns="0" title="god"/>
</pages>
</query>
</api>
, 당신은 할 수 System.Xml.XPath를 사용하여 필요한 부분을 가져옵니다 (pageid가있는 페이지 항목). 그것들은 "진짜 단어"입니다.
필자는 구현을 작성하고 테스트했다 (위의 간단한 "dog"예제 사용). 그것은 단지 "개"와 "신"을 반환했습니다. 좀 더 광범위하게 테스트해야합니다. 이 같은
public static IEnumerable<string> FilterRealWords(IEnumerable<string> testWords)
{
string baseUrl = "http://en.wiktionary.org/w/api.php?action=query&format=xml&titles=";
string queryUrl = baseUrl + string.Join("|", testWords.ToArray());
WebClient client = new WebClient();
client.Encoding = UnicodeEncoding.UTF8; // this is very important or the text will be junk
string rawXml = client.DownloadString(queryUrl);
TextReader reader = new StringReader(rawXml);
XPathDocument doc = new XPathDocument(reader);
XPathNavigator nav = doc.CreateNavigator();
XPathNodeIterator iter = nav.Select(@"//page");
List<string> realWords = new List<string>();
while (iter.MoveNext())
{
// if the pageid attribute has a value
// add the article title to the list.
if (!string.IsNullOrEmpty(iter.Current.GetAttribute("pageid", "")))
{
realWords.Add(iter.Current.GetAttribute("title", ""));
}
}
return realWords;
}
전화를 :
IEnumerable<string> input = new string[] { "dog", "god", "ogd", "odg", "gdo" };
IEnumerable<string> output = FilterRealWords(input);
나는 XML에 LINQ를 사용하여 시도하지만 고통이었고 나는 그것을 포기 그래서 나는 그것으로 그 익숙하지 않다.
WebHttpBinding이있는 WCF는 여기 웹 서비스 호출에 사용되어야한다고 생각합니다. 꽤 쉽게 할 수 있고 결과를 LINQ-to-Objects를 사용할 수있는 개체 목록으로 가져올 수 있습니다. – casperOne
@casperOne. 아, 전에 WCF를 사용한 적이 없으므로 완전히 익숙하지 않습니다. 그러나 WebClient와 XPath는 쉽게 할 수있었습니다. 기본적으로 위와 같은 논리를 사용하여 XML에 LINQ를 작성했지만 ILINqQueryable 또는 기타 객체가 아닌 원하는 것을 반환했습니다. WCF는 쉽게 설정하고 사용할 수 있습니까? –
- 1. 사전 및 목록과 함께 MvcContrib Grid 사용
- 2. 이진 문자열 비교/정렬 대 사전 문자열 비교/정렬
- 3. 일반 목록과 배열 비교
- 4. 파일을 변수 목록과 비교 AWK
- 5. 속성 목록과 iPhone의 XML 비교
- 6. 람다 식 내부 목록과 비교
- 7. 무료 문자열 사전
- 8. 문자열을 PHP의 문자열 목록과 어떻게 비교합니까?
- 9. 방법은 다음과 같은 사전의 목록과 사전
- 10. NameValueCollection은 사전 대 <문자열, 문자열>
- 11. 비교 문자열
- 12. 비교 문자열
- 13. 비교 자바 문자열
- 14. 검색 가능한 사전 예에
- 15. "2.0.1", "2.0.09"형식의 문자열 비교
- 16. C 문자열 비교 오류?
- 17. 두 언어 문자열 비교
- 18. SQL Server에서 문자열 비교!
- 19. LINQ를 사용하여 문자열 목록과 일치하는 데이터 찾기
- 20. 날짜 정규 표현식과 문자열 비교
- 21. 문자열 []을 사전 키로 사용 예 : 사전 <문자열 []의 StringBuilder>
- 22. 목록과의 빠른 문자열 비교
- 23. 문자열 비교 : 연산자 ==() 대 같음()
- 24. 2 문자열 형식 SID 비교
- 25. 숫자와 문자열 비교
- 26. 두 문자열 비교 문제 ...!
- 27. 문자열 비교 xslt 시트
- 28. .LT와의 포트란 문자열 비교
- 29. 이진 문자열 비교
- 30. PostgreSQL의 문자열 비교
감사합니다. 가장 주요한 관심사는 영어를 폭넓게 사용하는 단어 목록을 어디에서 얻을 수 있는지 (준비된 자료가 있는지 여부에 관계없이)였습니다. 그러나 귀하의 코드가 내가 가진 모든 질문에 대답했습니다 ... "어떻게 사용합니까?" 감사합니다. – sMaN
아마도 도움이 될 것입니다. http://www.outpost9.com/files/WordLists.html –
+1 최고의 성능을 제공 할 가능성이 있으므로이 솔루션을 고려해보십시오. 아마 각 단어를 HashSet에 붙여 두는 편이 좋을 것입니다. 여기에 '가치'가 없기 때문에 단어 집합 만 있습니다. –