Вы могли бы хотеть зарегистрироваться проект WordNet в Принстонском университете. Один возможный подход к этому был бы к первому показу каждой фразой через список стоп-слова (для удаления "общих" слов такой как, "к", и т.д.) Тогда для каждого из остающихся слов в каждой фразе, Вы могли вычислить семантическое "подобие" между каждым из слов в другой фразе с помощью меры по расстоянию на основе WordNet. Мера по расстоянию могла быть чем-то как: количество дуг необходимо пройти в WordNet для получения от word1 до word2.
Жаль это - довольно высокий уровень. Я, очевидно, никогда не пробовал это. Просто быстрая мысль.
Принятый ответ на этот вопрос здесь , кажется, стоит изучить; предлагается использовать функцию Win32 API WNetUseConnection .
Из MSDN:
Функция WNetUseConnection делает подключение к сетевому ресурсу. В функция может перенаправить локальное устройство к сетевому ресурсу.
Что, кажется, выполняет то, что вы ищете, без упоминания net.exe
. Это поможет?
Для этого можно использовать WNetAddConnection. Вам нужно будет использовать pInvoke. приведенный ниже код работал у меня после того, как я настроил объявления pInvoke. Второй блок кода (ниже) содержит объявления pInvoke - просто вставьте его в класс.
public static void CopyFile(string from, string shareName, string username, string password)
{
NETRESOURCE nr = new NETRESOURCE();
nr.dwType = ResourceType.RESOURCETYPE_DISK;
nr.lpLocalName = null;
nr.lpRemoteName = shareName;
nr.lpProvider = null;
int result = WNetAddConnection2(nr, password, username, 0);
System.IO.File.Copy(from, System.IO.Path.Combine(shareName, System.IO.Path.GetFileName(from)));
}
Вам нужно будет вставить следующий вспомогательный код в класс (взятый из pInvoke.Net). Не забудьте добавить в свой код параметр using:
using System.Runtime.InteropServices
[DllImport("Mpr.dll", EntryPoint = "WNetAddConnection2", CallingConvention = CallingConvention.Winapi)]
private static extern int WNetAddConnection2(NETRESOURCE lpNetResource, string lpPassword,
string lpUsername, System.UInt32 dwFlags);
[StructLayout(LayoutKind.Sequential)]
private class NETRESOURCE
{
public ResourceScope dwScope = 0;
public ResourceType dwType = 0;
public ResourceDisplayType dwDisplayType = 0;
public ResourceUsage dwUsage = 0;
public string lpLocalName = null;
public string lpRemoteName = null;
public string lpComment = null;
public string lpProvider = null;
};
public enum ResourceScope
{
RESOURCE_CONNECTED = 1,
RESOURCE_GLOBALNET,
RESOURCE_REMEMBERED,
RESOURCE_RECENT,
RESOURCE_CONTEXT
};
public enum ResourceType
{
RESOURCETYPE_ANY,
RESOURCETYPE_DISK,
RESOURCETYPE_PRINT,
RESOURCETYPE_RESERVED
};
public enum ResourceUsage
{
RESOURCEUSAGE_CONNECTABLE = 0x00000001,
RESOURCEUSAGE_CONTAINER = 0x00000002,
RESOURCEUSAGE_NOLOCALDEVICE = 0x00000004,
RESOURCEUSAGE_SIBLING = 0x00000008,
RESOURCEUSAGE_ATTACHED = 0x00000010,
RESOURCEUSAGE_ALL = (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED),
};
public enum ResourceDisplayType
{
RESOURCEDISPLAYTYPE_GENERIC,
RESOURCEDISPLAYTYPE_DOMAIN,
RESOURCEDISPLAYTYPE_SERVER,
RESOURCEDISPLAYTYPE_SHARE,
RESOURCEDISPLAYTYPE_FILE,
RESOURCEDISPLAYTYPE_GROUP,
RESOURCEDISPLAYTYPE_NETWORK,
RESOURCEDISPLAYTYPE_ROOT,
RESOURCEDISPLAYTYPE_SHAREADMIN,
RESOURCEDISPLAYTYPE_DIRECTORY,
RESOURCEDISPLAYTYPE_TREE,
RESOURCEDISPLAYTYPE_NDSCONTAINER
};