PDA

Показать полную графическую версию : [решено] помогите упорядочить массив слов


kontox
25-05-2013, 12:41
Помогите, пожалуйста,как сделать, чтобы например из книги в док формате из всего массива текста взять случайным образом какие то слова и их выставить в столбец, страниц на 10.
примерно, чтобы это так выглядело
слово1
слово2
...
слово(n)

и такой столбик на 10 страниц. Единственное, чтобы слова не повторялись и выстраивались по алфавиту;)

Iska
25-05-2013, 17:02
1. Зачем?
2. Выкладывайте:
книги в док формате »

kontox
25-05-2013, 17:18
нечто вроде небольшого словаря составлю. это к занятиям.
вот сама книжка
http://rghost.ru/46249871
просто так она не прикреплялась, много весит)) 14 мегов

Iska
25-05-2013, 22:45
много весит)) 14 мегов »
Не пробовали воспользоваться архиватором? Есть бесплатные.
Выкладывать rtf под видом doc — моветон.

Выбор документа крайне неудачен. Из-за того, что весь (!) текст содержится во фреймах, обработка идёт дико медленно. В тексте содержится немало латинской речи и нумерации, ссылок, что не способствует составлению словаря.

Откройте Ваш rtf-файл «The Psychophysiology of Sex.doc» и сохраните его как нормальный «Документ Word (*.doc)», например, под именем «The Psychophysiology of Sex 2.doc». Укажите путь к сохранённому «The Psychophysiology of Sex 2.doc» в строке:
Set objDocument = objWord.Documents.Open("E:\Песочница\0260\The Psychophysiology of Sex 2.doc")

Укажите примерное число слов в строке:
If iCount >= 1000 Then
(1000 слов мне хватило примерно на 20 страниц).

Option Explicit

Const adVarChar = 200
Const adFldKeyColumn = 32768
Const adFilterNone = 0

Dim objWord
Dim objDocument
Dim objRange

Dim objRegExp
Dim objRecordset

Dim lngWords
Dim strWord
Dim iCount


Set objWord = WScript.CreateObject("Word.Application")
Set objRegExp = WScript.CreateObject("VBScript.RegExp")

objRegExp.Pattern = "^[A-Za-z]{2,}$"

With WScript.CreateObject("ADODB.Recordset")
.Fields.Append "Word", adVarChar, 2^8 - 1, adFldKeyColumn

.Open
.Fields.Item("Word").Properties("Optimize") = True
.Sort = "Word ASC"

Set objDocument = objWord.Documents.Open("E:\Песочница\0260\The Psychophysiology of Sex 2.doc")

lngWords = objDocument.Words.Count

For Each objRange In objDocument.Words
strWord = LCase(objRange.Text)

If objRegExp.Test(strWord) Then
.Filter = "Word = '" & strWord & "'"

If .RecordCount = 0 Then
.AddNew Array("Word"), Array(strWord)

iCount = iCount + 1

WScript.Echo "[" & CStr(iCount) & "] of [" & CStr(lngWords) & "]: " & strWord

If iCount >= 1000 Then
Exit For
End If
End If
End If
Next

objDocument.Close
Set objDocument = Nothing

.Filter = adFilterNone
.MoveFirst

Set objDocument = objWord.Documents.Add()

Do Until .EOF
objDocument.Paragraphs.Last.Range.InsertAfter .Fields.Item("Word").Value & Chr(13)
.MoveNext
Loop

Set objDocument = Nothing

.Close
End With

objWord.Visible = True

WScript.Quit 0

Вызов скрипта из-под командной строки:
cscript.exe //nologo "Путь к скрипту\Скрипт.vbs"

Iska
25-05-2013, 23:01
Так… Для полного счастья — там ещё и переносы слов некорректно распознаны, так что будьте готовы, например, к тому, что «atten» и «tion» — это два слова.

kontox
26-05-2013, 00:29
Iska, благодарствую добрый человек:))




© OSzone.net 2001-2012